diff --git a/.env.dusk b/.env.dusk deleted file mode 100644 index 5089e3c51..000000000 --- a/.env.dusk +++ /dev/null @@ -1,13 +0,0 @@ -APP_ENV=local -APP_KEY=base64:voZNJiKK27cvzO8JhiUxlIZMARmPt8M4/0zHRWc11ok= -APP_DEBUG=false -APP_LOG_LEVEL=info -APP_URL=http://localhost:8003 - -DB_CONNECTION=sqlite -DB_DATABASE=./database/database.sqlite - -BROADCAST_DRIVER=log -CACHE_DRIVER=file -SESSION_DRIVER=file -QUEUE_DRIVER=sync diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..f5598ad82 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,19 @@ +module.exports = { + env: { + node: true, + browser: true, + es6: true, + "jest/globals": true + }, + extends: ["eslint:recommended", "plugin:vue/essential"], + globals: { + Atomics: "readonly", + SharedArrayBuffer: "readonly" + }, + parserOptions: { + ecmaVersion: 2018, + sourceType: "module" + }, + plugins: ["jest", "vue"], + rules: {} +}; diff --git a/.gitignore b/.gitignore index e7598f72f..cceb39da6 100644 --- a/.gitignore +++ b/.gitignore @@ -10,9 +10,11 @@ /storage/*.key /resources/assets/js/*.generated.js /vendor +/coverage /docs /report /.idea .env .env.debug .phpunit.result.cache +.php_cs.cache diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..564228219 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "workbench.colorCustomizations": {} +} \ No newline at end of file diff --git a/app/Boss.php b/app/Boss.php index 67297634d..ae93b5ee7 100644 --- a/app/Boss.php +++ b/app/Boss.php @@ -1,6 +1,7 @@ -hasSword() || $items->has('Hammer') || $items->canShootArrows() - || $items->has('Boomerang') || $items->has('RedBoomerang') - || ($items->canExtendMagic(4) && ($items->has('FireRod') || $items->has('IceRod'))) - || ($items->canExtendMagic(2) && ($items->has('CaneOfByrna') || $items->has('CaneOfSomaria'))); - }), - new static("Lanmolas", "Lanmola", function($locations, $items) { - return $items->hasSword() || $items->has('Hammer') - || $items->canShootArrows() || $items->has('FireRod') || $items->has('IceRod') - || $items->has('CaneOfByrna') || $items->has('CaneOfSomaria'); - }), - new static("Moldorm", "Moldorm", function($locations, $items) { - return $items->hasSword() || $items->has('Hammer'); - }), - new static("Agahnim", "Agahnim", function($locations, $items) { - return $items->hasSword() || $items->has('Hammer') || $items->has('BugCatchingNet'); - }), - new static("Helmasaur King", "Helmasaur", function($locations, $items) { - return $items->hasSword() || $items->canShootArrows(); - }), - new static("Arrghus", "Arrghus", function($locations, $items) { - return $items->has('Hookshot') && ($items->has('Hammer') || $items->hasSword() - || (($items->canExtendMagic(2) || $items->canShootArrows()) && ($items->has('FireRod') || $items->has('IceRod')))); - }), - new static("Mothula", "Mothula", function($locations, $items) { - return $items->hasSword() || $items->has('Hammer') - || ($items->canExtendMagic(2) && ($items->has('FireRod') || $items->has('CaneOfSomaria') - || $items->has('CaneOfByrna'))) - || $items->canGetGoodBee(); - }), - new static("Blind", "Blind", function($locations, $items) { - return $items->hasSword() || $items->has('Hammer') - || $items->has('CaneOfSomaria') || $items->has('CaneOfByrna'); - }), - new static("Kholdstare", "Kholdstare", function($locations, $items) { - return $items->canMeltThings() && ($items->has('Hammer') || $items->hasSword() - || ($items->canExtendMagic(3) && $items->has('FireRod')) - || ($items->canExtendMagic(2) && $items->has('FireRod') && $items->has('Bombos'))); - }), - new static("Vitreous", "Vitreous", function($locations, $items) { - return $items->has('Hammer') || $items->hasSword() || $items->canShootArrows(); - }), - new static("Trinexx", "Trinexx", function($locations, $items) { - return $items->has('FireRod') && $items->has('IceRod') - && ($items->hasSword(3) || $items->has('Hammer') - || ($items->canExtendMagic(2) && $items->hasSword(2)) - || ($items->canExtendMagic(4) && $items->hasSword())); - }), - new static("Agahnim2", "Agahnim2", function($locations, $items) { - return $items->hasSword() || $items->has('Hammer') || $items->has('BugCatchingNet'); - }), + /** + * Get the all known Bosses + * + * @return \ALttP\Support\BossCollection + */ + public static function all(World $world): BossCollection + { + if (isset(static::$items[$world->id])) { + return static::$items[$world->id]; + } + static::$worlds[$world->id] = $world; - ]); + static::$items[$world->id] = new BossCollection([ + new static("Armos Knights", "Armos", function ($locations, $items) { + return $items->hasSword() || $items->has('Hammer') || $items->canShootArrows() + || $items->has('Boomerang') || $items->has('RedBoomerang') + || ($items->canExtendMagic(4) && ($items->has('FireRod') || $items->has('IceRod'))) + || ($items->canExtendMagic(2) && ($items->has('CaneOfByrna') || $items->has('CaneOfSomaria'))); + }), + new static("Lanmolas", "Lanmola", function ($locations, $items) { + return $items->hasSword() || $items->has('Hammer') + || $items->canShootArrows() || $items->has('FireRod') || $items->has('IceRod') + || $items->has('CaneOfByrna') || $items->has('CaneOfSomaria'); + }), + new static("Moldorm", "Moldorm", function ($locations, $items) { + return $items->hasSword() || $items->has('Hammer'); + }), + new static("Agahnim", "Agahnim", function ($locations, $items) { + return $items->hasSword() || $items->has('Hammer') || $items->has('BugCatchingNet'); + }), + new static("Helmasaur King", "Helmasaur", function ($locations, $items) { + return ($items->canBombThings() || $items->has('Hammer')) + && ($items->hasSword(2) || $items->canShootArrows()); + }), + new static("Arrghus", "Arrghus", function ($locations, $items) use ($world) { + return ($world->config('itemPlacement') !== 'basic' || $world->config('mode.weapons') === 'swordless' || $items->hasSword(2)) + && $items->has('Hookshot') && ($items->has('Hammer') || $items->hasSword() + || (($items->canExtendMagic(2) || $items->canShootArrows()) && ($items->has('FireRod') || $items->has('IceRod')))); + }), + new static("Mothula", "Mothula", function ($locations, $items) use ($world) { + return ($world->config('itemPlacement') !== 'basic' || $items->hasSword(2) || ($items->canExtendMagic(2) && $items->has('FireRod'))) + && ($items->hasSword() || $items->has('Hammer') + || ($items->canExtendMagic(2) && ($items->has('FireRod') || $items->has('CaneOfSomaria') + || $items->has('CaneOfByrna'))) + || $items->canGetGoodBee()); + }), + new static("Blind", "Blind", function ($locations, $items) use ($world) { + return ($world->config('itemPlacement') !== 'basic' || $world->config('mode.weapons') === 'swordless' || ($items->hasSword() && ($items->has('Cape') || $items->has('CaneOfByrna')))) + && ($items->hasSword() || $items->has('Hammer') + || $items->has('CaneOfSomaria') || $items->has('CaneOfByrna')); + }), + new static("Kholdstare", "Kholdstare", function ($locations, $items) use ($world) { + return ($world->config('itemPlacement') !== 'basic' || $items->hasSword(2) || ($items->canExtendMagic(3) && $items->has('FireRod')) + || ($items->has('Bombos') && ($world->config('mode.weapons') === 'swordless' || $items->hasSword()) && $items->canExtendMagic(2) && $items->has('FireRod'))) + && $items->canMeltThings($world) && ($items->has('Hammer') || $items->hasSword() + || ($items->canExtendMagic(3) && $items->has('FireRod')) + || ($items->canExtendMagic(2) && $items->has('FireRod') && $items->has('Bombos'))); + }), + new static("Vitreous", "Vitreous", function ($locations, $items) use ($world) { + return ($world->config('itemPlacement') !== 'basic' || $items->hasSword(2) || $items->canShootArrows()) + && ($items->has('Hammer') || $items->hasSword() || $items->canShootArrows()); + }), + new static("Trinexx", "Trinexx", function ($locations, $items) use ($world) { + return $items->has('FireRod') && $items->has('IceRod') + && ($world->config('itemPlacement') !== 'basic' || $world->config('mode.weapons') === 'swordless' || $items->hasSword(3) || ($items->canExtendMagic(2) && $items->hasSword(2))) + && ($items->hasSword(3) || $items->has('Hammer') + || ($items->canExtendMagic(2) && $items->hasSword(2)) + || ($items->canExtendMagic(4) && $items->hasSword())); + }), + new static("Agahnim2", "Agahnim2", function ($locations, $items) { + return $items->hasSword() || $items->has('Hammer') || $items->has('BugCatchingNet'); + }), + ]); - return static::all(); - } + return static::all($world); + } - /** - * Create a new Item - * - * @param string $name Unique name of Boss - * @param callable $can_beat Rules for beating the Boss - * - * @return void - */ - public function __construct(string $name, string $ename = null, callable $can_beat = null) { - $this->name = $name; - $this->enemizer_name = $ename ?? $name; - $this->can_beat = $can_beat; - } + /** + * Create a new Item. + * + * @param string $name Unique name of Boss + * @param callable|null $can_beat Rules for beating the Boss + * + * @return void + */ + public function __construct(string $name, string $ename = null, callable $can_beat = null) + { + $this->name = $name; + $this->enemizer_name = $ename ?? $name; + $this->can_beat = $can_beat; + } - /** - * Get the name of this Boss - * - * @return string - */ - public function getName() { - return $this->name; - } + /** + * Get the name of this Boss. + * + * @return string + */ + public function getName(): string + { + return $this->name; + } - /** - * Get the name of this Boss for Enemizer - * - * @return string - */ - public function getEName() { - return $this->enemizer_name; - } + /** + * Get the name of this Boss for Enemizer. + * + * @return string + */ + public function getEName(): string + { + return $this->enemizer_name; + } - /** - * Determine if Link can beat this Boss. - * - * @param ItemCollection $items Items Link can collect - * @param LocationCollection $locations - * - * @return bool - */ - public function canBeat($items, $locations = null) : bool { - if (!$this->can_beat || call_user_func($this->can_beat, $locations ?? new LocationCollection, $items)) { - return true; - } + /** + * Determine if Link can beat this Boss. + * + * @param \ALttP\Support\ItemCollection $items Items Link can collect + * @param \ALttP\Support\LocationCollection|null $locations + * + * @return bool + */ + public function canBeat(ItemCollection $items, ?LocationCollection $locations = null): bool + { + if ($this->can_beat === null || call_user_func($this->can_beat, $locations ?? new LocationCollection, $items)) { + return true; + } - return false; - } + return false; + } } diff --git a/app/Build.php b/app/Build.php index dc814a938..b6c407b9a 100644 --- a/app/Build.php +++ b/app/Build.php @@ -1,14 +1,17 @@ - '[]', - ]; + protected $attributes = [ + 'patch' => '[]', + ]; } diff --git a/app/Console/Commands/Distribution.php b/app/Console/Commands/Distribution.php index 74871be2d..2decb5caf 100644 --- a/app/Console/Commands/Distribution.php +++ b/app/Console/Commands/Distribution.php @@ -1,256 +1,378 @@ -option('tournament', false)) { - config([ - "tournament-mode" => true, - ]); - } - - $locations = []; - switch ($this->argument('type')) { - case 'item': - $function = [$this, 'item']; - if (!$this->argument('thing')) { - return $this->error("Need an Item Name"); - } - $thing = Item::get($this->argument('thing')); - break; - case 'location': - $function = [$this, 'location']; - if (!$this->argument('thing')) { - return $this->error("Need an Location Name"); - } - $thing = $this->argument('thing'); - break; - case 'location_ordered': - $function = [$this, 'location_ordered']; - if (!$this->argument('thing')) { - return $this->error("Need an Location Name"); - } - $thing = $this->argument('thing'); - break; - case 'region': - $function = [$this, 'region']; - if (!$this->argument('thing')) { - return $this->error("Need an Region Name"); - } - $thing = $this->argument('thing'); - break; - case 'required': - $function = [$this, 'required']; - $thing = $this->argument('thing'); - break; - case 'required_ordered': - $function = [$this, 'required_ordered']; - $thing = $this->argument('thing'); - break; - case 'full': - $function = [$this, 'full']; - $thing = $this->argument('thing'); - break; - case 'full_ordered': - $function = [$this, 'full_ordered']; - $thing = $this->argument('thing'); - break; - default: - return $this->error('Invalid distribution'); - } - - if ($this->option('verbose')) { - $bar = $this->output->createProgressBar($this->argument('itterations')); - } - - for ($i = 0; $i < $this->argument('itterations'); $i++) { - call_user_func_array($function, [$thing, &$locations]); - isset($bar) && $bar->advance(); - } - - isset($bar) && $bar->finish(); - - if ($this->option('csv')) { - $locations = static::_assureColumnsExist($locations); - ksortr($locations); - $out = fopen($this->option('csv'), 'w'); - fputcsv($out, array_merge(['location'], array_keys(reset($locations)))); - foreach ($locations as $name => $location) { - fputcsv($out, array_merge([$name], $location)); - } - fclose($out); - } else { - ksortr($locations); - $this->info(json_encode($locations, JSON_PRETTY_PRINT)); - } - } - - public static function _assureColumnsExist($array) : array { - $keys = []; - foreach ($array as $part) { - $keys = array_merge($keys, array_keys($part)); - } - $keys = array_unique($keys); - foreach ($array as $k => $part) { - foreach ($keys as $key) { - if (!isset($part[$key])) { - $array[$k][$key] = 0; - } - } - } - return $array; - } - - private function item(Item $item, &$locations) { - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed(); - - foreach ($rand->getWorld()->getLocationsWithItem($item) as $location) { - if (!isset($locations[$location->getName()])) { - $locations[$location->getName()] = 0; - } - $locations[$location->getName()]++; - } - } - - private function location($location_name, &$locations) { - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed(); - - $item_name = $rand->getWorld()->getLocation($location_name)->getItem()->getNiceName(); - - if (!isset($locations[$location_name][$item_name])) { - $locations[$location_name][$item_name] = 0; - } - $locations[$location_name][$item_name]++; - } - - private function location_ordered($location_name, &$locations) { - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed(); - - $item_name = $rand->getWorld()->getLocation($location_name)->getItem()->getNiceName(); - - $locations[$location_name][] = $item_name; - } - - private function region($region_name, &$locations) { - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed(); - - foreach ($rand->getWorld()->getRegion($region_name)->getLocations() as $location) { - $location_name = $location->getName(); - $item_name = $location->getItem()->getNiceName(); - if (!isset($locations[$location_name][$item_name])) { - $locations[$location_name][$item_name] = 0; - } - $locations[$location_name][$item_name]++; - } - } - - private function required($unused, &$locations) { - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed(); - - $required_locations = $rand->getWorld()->getPlayThrough(false); - foreach ($required_locations as $location) { - $location_name = $location->getName(); - $item = $location->getItem(); - if (!$item) { - continue; - } - - $item_name = $item->getNiceName(); - - if (!isset($locations[$location_name][$item_name])) { - $locations[$location_name][$item_name] = 0; - } - $locations[$location_name][$item_name]++; - } - } - - private function required_ordered($unused, &$locations) { - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed(); - - $required_locations = $rand->getWorld()->getPlayThrough(false); - $required_locations_names = array_map(function($location) { - return $location->getName(); - }, $required_locations); - - foreach ($rand->getWorld()->getCollectableLocations() as $location) { - $location_name = $location->getName(); - if (!in_array($location_name, $required_locations_names) || strpos($location->getItem()->getName(), 'Key') !== false) { - $locations[$location_name][] = ''; - continue; - } - - $locations[$location_name][] = $location->getItem()->getNiceName(); - } - } - - private function full($unused, &$locations) { - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed(); - - foreach ($rand->getWorld()->getLocations() as $location) { - $location_name = $location->getName(); - $item = $location->getItem(); - if (!$item) { - continue; - } - - $item_name = $item->getNiceName(); - - if (!isset($locations[$location_name][$item_name])) { - $locations[$location_name][$item_name] = 0; - } - $locations[$location_name][$item_name]++; - } - } - - private function full_ordered($unused, &$locations) { - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed(); - - foreach ($rand->getWorld()->getLocations() as $location) { - $location_name = $location->getName(); - $item = $location->getItem(); - if (!$item) { - continue; - } - - $locations[$location_name][] = $item->getNiceName(); - } - } +class Distribution extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'alttp:distribution {type} {thing} {iterations=1}' + . ' {--difficulty=normal : set difficulty}' + . ' {--logic=NoGlitches : set logic}' + . ' {--goal=ganon : set game goal}' + . ' {--variation=none : set game variation}' + . ' {--state=standard : set game state}' + . ' {--tournament : enable tournament mode}' + . ' {--csv= : file to write to}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'get pool distrobution of a thing over X random iterations.'; + + /** @var string */ + private $state; + /** @var string */ + private $difficulty; + /** @var string */ + private $logic; + /** @var string */ + private $goal; + /** @var string */ + private $variation; + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + if ( + !is_string($this->option('difficulty')) + || !is_string($this->option('logic')) + || !is_string($this->option('goal')) + || !is_string($this->option('state')) + || !is_string($this->option('variation')) + ) { + $this->error('option not string'); + + return 101; + } + + $this->difficulty = $this->option('difficulty'); + $this->logic = $this->option('logic'); + $this->goal = $this->option('goal'); + $this->variation = $this->option('variation'); + $this->state = $this->option('state'); + + $locations = []; + switch ($this->argument('type')) { + case 'item': + $function = [$this, 'item']; + if (!is_string($this->argument('thing'))) { + $this->error("Need an Item Name"); + return 1; + } + $thing = $this->argument('thing'); + break; + case 'location': + $function = [$this, 'location']; + if (!$this->argument('thing')) { + $this->error("Need an Location Name"); + return 2; + } + $thing = $this->argument('thing'); + break; + case 'location_ordered': + $function = [$this, 'location_ordered']; + if (!$this->argument('thing')) { + $this->error("Need an Location Name"); + return 2; + } + $thing = $this->argument('thing'); + break; + case 'region': + $function = [$this, 'region']; + if (!$this->argument('thing')) { + $this->error("Need an Region Name"); + return 3; + } + $thing = $this->argument('thing'); + break; + case 'required': + $function = [$this, 'required']; + $thing = $this->argument('thing'); + break; + case 'required_ordered': + $function = [$this, 'required_ordered']; + $thing = $this->argument('thing'); + break; + case 'full': + $function = [$this, 'full']; + $thing = $this->argument('thing'); + break; + case 'full_ordered': + $function = [$this, 'full_ordered']; + $thing = $this->argument('thing'); + break; + default: + $this->error('Invalid distribution'); + return 4; + } + + $iterations = $this->argument('iterations'); + + if ($this->option('verbose') && is_numeric($iterations)) { + $bar = $this->output->createProgressBar((int) $iterations); + } + + for ($i = 0; $i < $this->argument('iterations'); $i++) { + if (!is_callable($function)) { + continue; + } + call_user_func_array($function, [$thing, &$locations]); + if (isset($bar)) { + $bar->advance(); + } + } + + if (isset($bar)) { + $bar->finish(); + } + + if ($this->option('csv') && is_string($this->option('csv'))) { + $locations = static::_assureColumnsExist($locations); + ksortr($locations); + $out = fopen($this->option('csv'), 'w'); + if ($out === false) { + $this->error('Could not open csv file'); + + return 5; + } + fputcsv($out, array_merge(['location'], array_keys(reset($locations)))); + foreach ($locations as $name => $location) { + fputcsv($out, array_merge([$name], $location)); + } + fclose($out); + } else { + ksortr($locations); + $json = json_encode($locations, JSON_PRETTY_PRINT); + if ($json !== false) { + $this->info($json); + } + } + } + + public static function _assureColumnsExist($array): array + { + $keys = []; + foreach ($array as $part) { + $keys = array_merge($keys, array_keys($part)); + } + $keys = array_unique($keys); + foreach ($array as $k => $part) { + foreach ($keys as $key) { + if (!isset($part[$key])) { + $array[$k][$key] = 0; + } + } + } + return $array; + } + + private function item($item_name, &$locations) + { + $world = World::factory($this->state, [ + 'difficulty' => $this->difficulty, + 'logic' => $this->logic, + 'goal' => $this->goal, + 'variation' => $this->variation, + ]); + $rand = new Randomizer([$world]); + $rand->randomize(); + $item = Item::get($item_name, $world); + + foreach ($world->getLocationsWithItem($item) as $location) { + if (!isset($locations[$location->getName()])) { + $locations[$location->getName()] = 0; + } + $locations[$location->getName()]++; + } + } + + private function location($location_name, &$locations) + { + $world = World::factory($this->state, [ + 'difficulty' => $this->difficulty, + 'logic' => $this->logic, + 'goal' => $this->goal, + 'variation' => $this->variation, + ]); + $rand = new Randomizer([$world]); + $rand->randomize(); + + $item = $world->getLocation($location_name)->getItem(); + + if ($item === null) { + return; + } + + $item_name = $item->getNiceName(); + + if (!isset($locations[$location_name][$item_name])) { + $locations[$location_name][$item_name] = 0; + } + $locations[$location_name][$item_name]++; + } + + private function location_ordered($location_name, &$locations) + { + $world = World::factory($this->state, [ + 'difficulty' => $this->difficulty, + 'logic' => $this->logic, + 'goal' => $this->goal, + 'variation' => $this->variation, + ]); + $rand = new Randomizer([$world]); + $rand->randomize(); + + $item = $world->getLocation($location_name)->getItem(); + + if ($item === null) { + return; + } + + $item_name = $item->getNiceName(); + + $locations[$location_name][] = $item_name; + } + + private function region($region_name, &$locations) + { + $world = World::factory($this->state, [ + 'difficulty' => $this->difficulty, + 'logic' => $this->logic, + 'goal' => $this->goal, + 'variation' => $this->variation, + ]); + $rand = new Randomizer([$world]); + $rand->randomize(); + + $region = $world->getRegion($region_name); + + foreach ($region->getLocations() as $location) { + $location_name = $location->getName(); + $item_name = $location->getItem()->getNiceName(); + if (!isset($locations[$location_name][$item_name])) { + $locations[$location_name][$item_name] = 0; + } + $locations[$location_name][$item_name]++; + } + } + + private function required($unused, &$locations) + { + $world = World::factory($this->state, [ + 'difficulty' => $this->difficulty, + 'logic' => $this->logic, + 'goal' => $this->goal, + 'variation' => $this->variation, + ]); + $rand = new Randomizer([$world]); + $rand->randomize(); + + $required_locations = (new PlaythroughService)->getPlayThrough($world, false); + foreach ($required_locations as $location) { + $location_name = $location->getName(); + $item = $location->getItem(); + if (!$item) { + continue; + } + + $item_name = $item->getNiceName(); + + if (!isset($locations[$location_name][$item_name])) { + $locations[$location_name][$item_name] = 0; + } + $locations[$location_name][$item_name]++; + } + } + + private function required_ordered($unused, &$locations) + { + $world = World::factory($this->state, [ + 'difficulty' => $this->difficulty, + 'logic' => $this->logic, + 'goal' => $this->goal, + 'variation' => $this->variation, + ]); + $rand = new Randomizer([$world]); + $rand->randomize(); + + $required_locations = (new PlaythroughService)->getPlayThrough($world, false); + $required_locations_names = array_map(function ($location) { + return $location->getName(); + }, $required_locations); + + foreach ($world->getCollectableLocations() as $location) { + $location_name = $location->getName(); + if (!in_array($location_name, $required_locations_names) || strpos($location->getItem()->getName(), 'Key') !== false) { + $locations[$location_name][] = ''; + continue; + } + + $locations[$location_name][] = $location->getItem()->getNiceName(); + } + } + + private function full($unused, &$locations) + { + $world = World::factory($this->state, [ + 'difficulty' => $this->difficulty, + 'logic' => $this->logic, + 'goal' => $this->goal, + 'variation' => $this->variation, + ]); + $rand = new Randomizer([$world]); + $rand->randomize(); + + foreach ($world->getLocations() as $location) { + $location_name = $location->getName(); + $item = $location->getItem(); + if (!$item) { + continue; + } + + $item_name = $item->getNiceName(); + + if (!isset($locations[$location_name][$item_name])) { + $locations[$location_name][$item_name] = 0; + } + $locations[$location_name][$item_name]++; + } + } + + private function full_ordered($unused, &$locations) + { + $world = World::factory($this->state, [ + 'difficulty' => $this->difficulty, + 'logic' => $this->logic, + 'goal' => $this->goal, + 'variation' => $this->variation, + ]); + $rand = new Randomizer([$world]); + $rand->randomize(); + + foreach ($world->getLocations() as $location) { + $location_name = $location->getName(); + $item = $location->getItem(); + if (!$item) { + continue; + } + + $locations[$location_name][] = $item->getNiceName(); + } + } } diff --git a/app/Console/Commands/DuskCommand.php b/app/Console/Commands/DuskCommand.php deleted file mode 100644 index 2363302aa..000000000 --- a/app/Console/Commands/DuskCommand.php +++ /dev/null @@ -1,31 +0,0 @@ -withDuskEnvironment(function () { - $url = parse_url(env('APP_URL')); - - chdir(public_path()); - - $webserver = (new ProcessBuilder()) - ->setTimeout(null) - ->add('exec') - ->add(PHP_BINARY) - ->add('-S') - ->add(sprintf('%s:%s', $url['host'], $url['port'])) - ->add(base_path().'/server.php') - ->getProcess(); - - $webserver->start(); - - chdir(base_path()); - - return tap(parent::handle(), function () use ($webserver) { - $webserver->stop(0, 15); - }); - }); - } -} diff --git a/app/Console/Commands/GenerateStats.php b/app/Console/Commands/GenerateStats.php deleted file mode 100644 index 42cd698c7..000000000 --- a/app/Console/Commands/GenerateStats.php +++ /dev/null @@ -1,141 +0,0 @@ -argument('output_directory')) || !is_writable($this->argument('output_directory'))) { - return $this->error('Target Directory not writable'); - } - - $bulk = ($this->option('seed') == null) ? $this->option('bulk') : 100000; - - $seeds = []; - - if ($this->option('seed') !== null) { - $seeds = [$this->option('seed')]; - } - else { - // generate a seed value, and make sure it hasn't been used already for --bulk - for ($i = 0; $i < $bulk; $i++) { - $unique = false; - $count = 0; - - do { - $rng_seed = get_random_int(1, 999999999); - $count++; - - if (!in_array($rng_seed, $seeds)) { - array_push($seeds, $rng_seed); - $unique = true; - } - if ($count > 10000) { - // stop after 10000 just in case php's mt_rand is really bad - $unique = true; - } - } while ($unique === false); - } - - $bulk = count($seeds); - } - - foreach ($seeds as $seed) { - $rom = new Rom(null); - - config(['alttp.mode.state' => $this->option('state')]); - - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - - $rand->makeSeed($seed); - - $spheres_file = sprintf($this->argument('output_directory') . '/' . 'alttp - VT_%s_%s_%s_%s_%s.stats.txt', - $rand->getLogic(), $this->option('difficulty'), $this->option('state'), $this->option('variation'), $rand->getSeed()); - - file_put_contents($spheres_file, json_encode($this->getStats($rand), JSON_PRETTY_PRINT)); - - $this->info(sprintf('Stats Saved: %s', $spheres_file)); - } - } - - /** - * Get the stats for this seed - * - * @return array - */ - public function getStats($rand) { - $stats = []; - $stats['locationspheres'] = $this->getSpheres($rand); - $stats['playthrough'] = $rand->getWorld()->getPlayThrough(); - $stats['meta'] = [ - 'difficulty' => $this->option('difficulty'), - 'logic' => $rand->getLogic(), - 'logicNice' => $rand->getLogicNiceName(), - 'version' => Randomizer::LOGIC, - 'seed' => $rand->getSeed(), - 'goal' => $this->option('goal'), - 'variation' => $this->option('variation'), - 'build' => Rom::BUILD, - 'mode' => config('alttp.mode.state', 'standard'), - ]; - - return $stats; - } - - /** - * Get location spheres formatted for parsing into SQL Server - * - * @return array - */ - public function getSpheres($rand) { - $location_sphere = $rand->getWorld()->getLocationSpheres(); - $ret = []; - foreach($location_sphere as $sphere_level => $sphere) { - array_push($ret, (object)['sphereLevel' => $sphere_level, 'regions' => []]); - $sphereKey = array_search($sphere_level, array_column($ret, 'sphereLevel')); - foreach($sphere as $location) { - $regionName = $location->getRegion()->getName(); - $regionKey = array_search($regionName, array_column($ret[$sphereKey]->regions, 'regionName')); - if($regionKey === false) { - array_push($ret[$sphereKey]->regions, (object)['regionName' => $regionName, 'locations' => []]); - $regionKey = array_search($regionName, array_column($ret[$sphereKey]->regions, 'regionName')); - } - $locationName = $location->getName(); - $itemName = $location->getItem() ? $location->getItem()->getNiceName() : 'Nothing'; - array_push($ret[$sphereKey]->regions[$regionKey]->locations, (object)['location' => $locationName, 'item' => $itemName]); - } - } - return $ret; - } -} diff --git a/app/Console/Commands/JsonToCsv.php b/app/Console/Commands/JsonToCsv.php index e91bf2738..a5670f686 100644 --- a/app/Console/Commands/JsonToCsv.php +++ b/app/Console/Commands/JsonToCsv.php @@ -1,58 +1,83 @@ -argument('file'))) { - return $this->error("json not readable"); - } - - $locations = $this->_assureColumnsExist(json_decode(file_get_contents($this->argument('file')), true)); - ksortr($locations); - $out = fopen('php://output', 'w'); - fputcsv($out, array_merge(['location'], array_keys(reset($locations)))); - foreach ($locations as $name => $location) { - fputcsv($out, array_merge([$name], $location)); - } - fclose($out); - } - - private function _assureColumnsExist($array) : array { - $keys = []; - foreach ($array as $part) { - $keys = array_merge($keys, array_keys($part)); - } - $keys = array_unique($keys); - foreach ($array as $k => $part) { - foreach ($keys as $key) { - if (!isset($part[$key])) { - $array[$k][$key] = 0; - } - } - } - return $array; - } +/** + * This converts json files to csv. + */ +class JsonToCsv extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'alttp:jsontocsv {file}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'convert json file to csv.'; + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + if (!is_string($this->argument('file')) || !is_readable($this->argument('file'))) { + $this->error("json not readable"); + + return 1; + } + + $file_contents = file_get_contents($this->argument('file')); + + if ($file_contents === false) { + $this->error('could not read file'); + + return 3; + } + + $locations = $this->_assureColumnsExist(json_decode($file_contents, true)); + ksortr($locations); + $out = fopen('php://output', 'w'); + + if ($out === false) { + $this->error('could not open output'); + + return 2; + } + + fputcsv($out, array_merge(['location'], array_keys(reset($locations)))); + foreach ($locations as $name => $location) { + fputcsv($out, array_merge([$name], $location)); + } + fclose($out); + } + + private function _assureColumnsExist($array): array + { + $keys = []; + foreach ($array as $part) { + $keys = array_merge($keys, array_keys($part)); + } + $keys = array_unique($keys); + foreach ($array as $k => $part) { + foreach ($keys as $key) { + if (!isset($part[$key])) { + $array[$k][$key] = 0; + } + } + } + return $array; + } } diff --git a/app/Console/Commands/MakeTranslation.php b/app/Console/Commands/MakeTranslation.php index 563313bf4..735980c83 100644 --- a/app/Console/Commands/MakeTranslation.php +++ b/app/Console/Commands/MakeTranslation.php @@ -1,53 +1,72 @@ -option('input_file') && !is_readable($this->option('input_file'))) { - return $this->error('Source File not readable'); - } - - if ((file_exists($this->argument('output_file')) && !is_writable($this->argument('output_file'))) - || (!file_exists($this->argument('output_file')) && !is_writable(dirname($this->argument('output_file'))))) { - return $this->error('Target file not writable'); - } - - $i18n = new Text; - $i18n->removeUnwanted(); - - if ($this->option('input_file')) { - $rom = new Rom($this->option('input_file')); - $rom->write(0xE0000, pack('C*', ...$i18n->getByteArray(true))); - } else { - $rom = new Rom; - $rom->write(0x0, pack('C*', ...$i18n->getByteArray(true))); - } - - $rom->save($this->argument('output_file')); - $this->info("File written"); - } +class MakeTranslation extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'alttp:i18n' + . ' {output_file : where to write translated rom}' + . ' {--i|input_file= : rom to translate}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'generate i18n bin file for patching'; + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + if ( + $this->hasOption('input_file') + && trim($this->option('input_file')) !== '' + && (!is_string($this->option('input_file')) || !is_readable($this->option('input_file'))) + ) { + $this->error('Source File not readable: ' . $this->option('input_file')); + + return 1; + } + + if ( + !is_string($this->argument('output_file')) + || (file_exists($this->argument('output_file')) && !is_writable($this->argument('output_file'))) + || (!file_exists($this->argument('output_file')) && !is_writable(dirname($this->argument('output_file')))) + ) { + $this->error('Target file not writable'); + + return 2; + } + + $i18n = new Text; + $i18n->removeUnwanted(); + + if ( + $this->hasOption('input_file') + && trim($this->option('input_file')) !== '' + && is_string($this->option('input_file')) + ) { + $rom = new Rom($this->option('input_file')); + $rom->write(0xE0000, pack('C*', ...$i18n->getByteArray(true))); + } else { + $rom = new Rom; + $rom->write(0x0, pack('C*', ...$i18n->getByteArray(true))); + } + + $rom->save($this->argument('output_file')); + $this->info("File written"); + } } diff --git a/app/Console/Commands/PushOldPatchesToDisk.php b/app/Console/Commands/PushOldPatchesToDisk.php deleted file mode 100644 index d6197263f..000000000 --- a/app/Console/Commands/PushOldPatchesToDisk.php +++ /dev/null @@ -1,40 +0,0 @@ -chunk(100, function($patches) { - foreach ($patches as $patch) { - $seed = $patch->seeds()->first(); - if (!$seed) { - $patch->delete(); - continue; - } - SendPatchToDisk::dispatch($seed); - } - sleep(10); - }); - } -} diff --git a/app/Console/Commands/Randomize.php b/app/Console/Commands/Randomize.php index 913b62251..1e233770b 100644 --- a/app/Console/Commands/Randomize.php +++ b/app/Console/Commands/Randomize.php @@ -1,4 +1,6 @@ -argument('input_file'))) { - return $this->error('Source File not readable'); - } - - if (!is_dir($this->argument('output_directory')) || !is_writable($this->argument('output_directory'))) { - return $this->error('Target Directory not writable'); - } - - $bulk = ($this->option('seed') == null) ? $this->option('bulk') : 1; - - if ($this->option('tournament', false)) { - config([ - "tournament-mode" => true, - ]); - } - - for ($i = 0; $i < $bulk; $i++) { - $rom = new Rom($this->argument('input_file')); - $hash = $hasher->encode((int) (microtime(true) * 1000)); - - if (!$this->option('skip-md5') && !$rom->checkMD5()) { - $rom->resize(); - - $rom->applyPatch($this->resetPatch()); - } - - if (!$this->option('skip-md5') && !$rom->checkMD5()) { - return $this->error('MD5 check failed :('); - } - - $rom->setHeartBeepSpeed($this->option('heartbeep')); - - // break out for unrandomized/vanilla base game - if ($this->option('vanilla')) { - $rom->writeVanilla(); - $output_file = sprintf('%s/alttp-%s-vanilla.sfc', $this->argument('output_directory'), Rom::BUILD); - $rom->save($output_file); - return $this->info(sprintf('Rom Saved: %s', $output_file)); - } - if ($this->option('unrandomized')) { - $output_file = sprintf('%s/alttp-%s.sfc', $this->argument('output_directory'), Rom::BUILD); - $rom->save($output_file); - return $this->info(sprintf('Rom Saved: %s', $output_file)); - } - - config([ - 'alttp.mode.state' => $this->option('state'), - 'alttp.mode.weapons' => $this->option('weapons'), - ]); - - $rand = new Randomizer($this->option('difficulty'), $this->option('logic'), $this->option('goal'), $this->option('variation')); - $rand->makeSeed($this->option('seed')); - - $rand->writeToRom($rom); - $rom->muteMusic($this->option('no-music', false)); - $rom->setMenuSpeed($this->option('menu-speed', 'normal')); - - $output_file = sprintf($this->argument('output_directory') . '/' . 'ALttP - VT_%s_%s-%s%s-%s%s_%s.sfc', - $rand->getLogic(), $this->option('difficulty'), $this->option('state'), $this->option('weapons') ? '_' - . $this->option('weapons') : '', $this->option('goal'), $this->option('variation')=='none' ? '' : '_' - . $this->option('variation'), $hash); - - if (!$this->option('no-rom', false)) { - if ($this->option('sprite') && is_readable($this->option('sprite'))) { - $this->info("sprite"); - try { - $zspr = new Zspr($this->option('sprite')); - - $rom->write(0x80000, $zspr->getPixelData(), false); - $rom->write(0xDD308, substr($zspr->getPaletteData(), 0, 120), false); - $rom->write(0xDEDF5, substr($zspr->getPaletteData(), 120, 4), false); - } catch (\Exception $e) { - return $this->error("Sprite not in ZSPR format"); - } - } - if ($this->option('tournament', false)) { - $rom->setTournamentType('standard'); - $rom->rummageTable(); - } - $rom->updateChecksum(); - $rom->save($output_file); - $this->info(sprintf('Rom Saved: %s', $output_file)); - } - if ($this->option('spoiler')) { - $spoiler_file = sprintf($this->argument('output_directory') . '/' . 'ALttP - VT_%s_%s-%s%s-%s%s_%s.txt', - $rand->getLogic(), $this->option('difficulty'), $this->option('state'), $this->option('weapons') ? '_' - . $this->option('weapons') : '', $this->option('goal'), $this->option('variation')=='none' ? '' : '_' - . $this->option('variation'), $hash); - - file_put_contents($spoiler_file, json_encode($rand->getSpoiler(), JSON_PRETTY_PRINT)); - $this->info(sprintf('Spoiler Saved: %s', $spoiler_file)); - } - } - } - - protected function resetPatch() { - if ($this->reset_patch) { - return $this->reset_patch; - } - - if (is_readable(public_path('js/base2current.json'))) { - $patch_left = json_decode(file_get_contents(public_path('js/base2current.json')), true); - } - - $this->reset_patch = patch_merge_minify($patch_left); - - return $this->reset_patch; - } +/** + * Run randomizer as command. + */ +class Randomize extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'alttp:randomize {input_file : base rom to randomize}' + . ' {output_directory : where to place randomized rom}' + . ' {--unrandomized : do not apply randomization to the rom}' + . ' {--spoiler : generate a spoiler file}' + . ' {--heartbeep=half : set heart beep speed}' + . ' {--skip-md5 : do not validate md5 of base rom}' + . ' {--tournament : enable tournament mode}' + . ' {--bulk=1 : generate multiple roms}' + . ' {--sprite= : sprite file to change links graphics [zspr format]}' + . ' {--no-rom : no not generate output rom}' + . ' {--no-music : mute all music}' + . ' {--menu-speed=normal : menu speed}' + . ' {--goal=ganon : set game goal}' + . ' {--state=standard : set game state}' + . ' {--weapons=randomized : set weapons mode}' + . ' {--glitches=none : set glitches}' + . ' {--crystals_ganon=7 : set ganon crystal requirement}' + . ' {--crystals_tower=7 : set ganon tower crystal requirement}' + . ' {--item_placement=basic : set item placement rules}' + . ' {--dungeon_items=standard : set dungeon item placement}' + . ' {--accessibility=item : set item/location accessibility}' + . ' {--hints=on : set hints on or off}' + . ' {--item_pool=on : set item pool}' + . ' {--item_functionality=on : set item functionality}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Generate a randomized rom.'; + + /** @var array */ + protected $reset_patch; + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + ini_set('memory_limit', '512M'); + $hasher = new Hashids('local', 15); + + if ( + !is_string($this->option('glitches')) + || !is_string($this->option('goal')) + || !is_string($this->option('state')) + || !is_string($this->option('weapons')) + || !is_string($this->option('menu-speed')) + ) { + $this->error('option not string'); + + return 101; + } + + $filename = vsprintf('%s/alttpr_%s_%s_%s_%%s.%%s', [ + $this->argument('output_directory'), + $this->option('glitches'), + $this->option('state'), + $this->option('goal'), + ]); + + if (!is_string($this->argument('input_file')) || !is_readable($this->argument('input_file'))) { + $this->error('Source File not readable'); + return 1; + } + + if ( + !is_string($this->argument('output_directory')) + || !is_dir($this->argument('output_directory')) + || !is_writable($this->argument('output_directory')) + ) { + $this->error('Target Directory not writable'); + return 2; + } + + if (is_array($this->option('bulk'))) { + $this->error('`bulk` cannot be an array'); + + return 101; + } + + $bulk = (int) ($this->option('bulk') ?? 1); + + for ($i = 0; $i < $bulk; $i++) { + $rom = new Rom($this->argument('input_file')); + $hash = $hasher->encode((int) (microtime(true) * 1000)); + + if (!$this->option('skip-md5') && !$rom->checkMD5()) { + $rom->resize(); + + $rom->applyPatch($this->resetPatch()); + } + + if (!$this->option('skip-md5') && !$rom->checkMD5()) { + $this->error('MD5 check failed :('); + return 3; + } + + if (is_string($this->option('heartbeep'))) { + $rom->setHeartBeepSpeed($this->option('heartbeep')); + } + + // break out for unrandomized base game + if ($this->option('unrandomized')) { + $output_file = sprintf('%s/alttp-%s.sfc', $this->argument('output_directory'), Rom::BUILD); + $rom->save($output_file); + $this->info(sprintf('Rom Saved: %s', $output_file)); + + return 0; + } + + $crystals_ganon = $this->option('crystals_ganon'); + $crystals_ganon = $crystals_ganon === 'random' ? get_random_int(0, 7) : $crystals_ganon; + $crystals_tower = $this->option('crystals_tower'); + $crystals_tower = $crystals_tower === 'random' ? get_random_int(0, 7) : $crystals_tower; + $logic = [ + 'none' => 'NoGlitches', + 'overworld_glitches' => 'OverworldGlitches', + 'major_glitches' => 'MajorGlitches', + 'no_logic' => 'None', + ][$this->option('glitches')]; + + $world = World::factory($this->option('state'), [ + 'itemPlacement' => $this->option('item_placement'), + 'dungeonItems' => $this->option('dungeon_items'), + 'accessibility' => $this->option('accessibility'), + 'goal' => $this->option('goal'), + 'crystals.ganon' => $crystals_ganon, + 'crystals.tower' => $crystals_tower, + 'entrances' => 'none', + 'mode.weapons' => $this->option('weapons'), + 'tournament' => $this->option('tournament'), + 'spoil.Hints' => $this->option('hints'), + 'logic' => $logic, + 'item.pool' => $this->option('item_pool'), + 'item.functionality' => $this->option('item_functionality'), + 'enemizer.bossShuffle' => 'none', + 'enemizer.enemyShuffle' => 'none', + 'enemizer.enemyDamage' => 'default', + 'enemizer.enemyHealth' => 'default', + ]); + + $rand = new Randomizer([$world]); + $rand->randomize(); + + $world->writeToRom($rom); + $rom->muteMusic((bool) $this->option('no-music') ?? false); + $rom->setMenuSpeed($this->option('menu-speed')); + + $output_file = sprintf($filename, $hash, 'sfc'); + + if (!($this->option('no-rom') ?? false)) { + if ($this->option('sprite') && is_string($this->option('sprite')) && is_readable($this->option('sprite'))) { + $this->info("sprite"); + try { + $zspr = new Zspr($this->option('sprite')); + + $rom->write(0x80000, $zspr->getPixelData(), false); + $rom->write(0xDD308, substr($zspr->getPaletteData(), 0, 120), false); + $rom->write(0xDEDF5, substr($zspr->getPaletteData(), 120, 4), false); + } catch (\Exception $e) { + $this->error("Sprite not in ZSPR format"); + + return 4; + } + } + + if ($this->option('tournament') ?? false) { + $rom->setTournamentType('standard'); + $rom->rummageTable(); + } + + $rom->updateChecksum(); + $rom->save($output_file); + + $this->info(sprintf('Rom Saved: %s', $output_file)); + } + + if ($this->option('spoiler')) { + $spoiler_file = sprintf($filename, $hash, 'json'); + + file_put_contents($spoiler_file, json_encode($world->getSpoiler(), JSON_PRETTY_PRINT)); + $this->info(sprintf('Spoiler Saved: %s', $spoiler_file)); + } + } + } + + /** + * Apply base patch to rom file. + * + * @throws \Exception when base patch has no content. + * + * @return array + */ + protected function resetPatch() + { + if ($this->reset_patch) { + return $this->reset_patch; + } + + if (is_readable(public_path('js/base2current.json'))) { + $file_contents = file_get_contents(public_path('js/base2current.json')); + + if ($file_contents === false) { + throw new \Exception('base patch not readable'); + } + + $patch_left = json_decode($file_contents, true); + } + + $this->reset_patch = patch_merge_minify($patch_left ?? []); + + return $this->reset_patch; + } } diff --git a/app/Console/Commands/UpdateBaseJson.php b/app/Console/Commands/UpdateBaseJson.php index f8726cbaf..a8b0e9b36 100644 --- a/app/Console/Commands/UpdateBaseJson.php +++ b/app/Console/Commands/UpdateBaseJson.php @@ -1,72 +1,111 @@ -argument('updated_rom')) || !is_readable($this->argument('original_rom'))) { - return $this->error('Source Files not readable'); - } - - $tmp_file = tempnam(sys_get_temp_dir(), __CLASS__); - copy($this->argument('original_rom'), $tmp_file); - - $original_rom = fopen($tmp_file, "r+"); - ftruncate($original_rom, Rom::SIZE); - $updated_rom = fopen($this->argument('updated_rom'), "r"); - - - $i = 0; - $cont = $i; - $out = []; - while (!feof($original_rom)) { - $original_byte = fread($original_rom, 1); - $updated_byte = fread($updated_rom, 1); - if ($updated_byte !== $original_byte) { - $out[$i] = [unpack('C*', $updated_byte)[1]]; - } - $i++; - } - fclose($updated_rom); - fclose($original_rom); - unlink($tmp_file); - - $backwards = array_reverse($out, true); - foreach ($backwards as $off => $value) { - if (isset($backwards[$off - 1])) { - $backwards[$off - 1] = array_merge($backwards[$off - 1], $backwards[$off]); - unset($backwards[$off]); - } - } - $forwards = array_reverse($backwards, true); - - array_walk($forwards, function(&$write, $address) { - $write = [$address => $write]; - }); - - file_put_contents(public_path('js/base2current.json'), json_encode(array_values($forwards))); - //file_put_contents(public_path('patch/base2current.ips'), (new \ALttP\Support\Ips)->patchToIps(array_values($forwards))); - - $this->info(sprintf('file updated')); - } +/** + * Diff 2 binary files and create a json patch formatted file. + */ +class UpdateBaseJson extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'alttp:updatebase {original_rom} {updated_rom}' + . ' {output=js/base2current.json : output file}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'update the base2current.json file from roms'; + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + if ( + !is_string($this->argument('updated_rom')) + || !is_string($this->argument('original_rom')) + || !is_string($this->argument('output')) + ) { + $this->error('argument not string'); + + return 101; + } + + if (!is_readable($this->argument('updated_rom')) || !is_readable($this->argument('original_rom'))) { + $this->error('Source Files not readable'); + + return 1; + } + + $tmp_file = tempnam(sys_get_temp_dir(), __CLASS__); + + if ($tmp_file === false) { + $this->error('Could not create tmp file'); + + return 102; + } + + copy($this->argument('original_rom'), $tmp_file); + + $original_rom = fopen($tmp_file, "r+"); + + if ($original_rom === false) { + $this->error('Could not open tmp file'); + + return 103; + } + + ftruncate($original_rom, Rom::SIZE); + $updated_rom = fopen($this->argument('updated_rom'), "r"); + + if ($updated_rom === false) { + $this->error('Could not open updated rom'); + + return 104; + } + + $i = 0; + $cont = $i; + $out = []; + while (!feof($original_rom)) { + $original_byte = fread($original_rom, 1); + $updated_byte = fread($updated_rom, 1); + if ($updated_byte !== $original_byte && $updated_byte !== false) { + $out[$i] = [unpack('C*', $updated_byte)[1]]; + } + $i++; + } + fclose($updated_rom); + fclose($original_rom); + unlink($tmp_file); + + $backwards = array_reverse($out, true); + foreach ($backwards as $off => $value) { + if (isset($backwards[$off - 1])) { + $backwards[$off - 1] = array_merge($backwards[$off - 1], $backwards[$off]); + unset($backwards[$off]); + } + } + $forwards = array_reverse($backwards, true); + + array_walk($forwards, function (&$write, $address) { + $write = [$address => $write]; + }); + + $output = public_path($this->argument('output')); + file_put_contents($output, json_encode(array_values($forwards))); + + $this->info(sprintf('file updated')); + } } diff --git a/app/Console/Commands/UpdateBuildRecord.php b/app/Console/Commands/UpdateBuildRecord.php index 1ffe387f5..3c53d725b 100644 --- a/app/Console/Commands/UpdateBuildRecord.php +++ b/app/Console/Commands/UpdateBuildRecord.php @@ -1,37 +1,55 @@ -argument('file'))), true); - } - - Rom::saveBuild(patch_merge_minify($patch_left, $patch_right), $this->argument('build', null), $this->argument('hash', null)); - - $this->info(sprintf('record updated')); - } +class UpdateBuildRecord extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'alttp:updatebuildrecord {file=js/base2current.json} {build?} {hash?}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'update the rom build in DB'; + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + if (!is_string($this->argument('file'))) { + $this->error('argument not string'); + + return 101; + } + + $patch_left = $patch_right = []; + + if (is_readable(public_path('js/base2current.json'))) { + $file_contents = file_get_contents(public_path($this->argument('file'))); + + if ($file_contents === false) { + $this->error('could not read base2current.json'); + + return 1; + } + + $patch_left = json_decode($file_contents, true); + } + + Rom::saveBuild(patch_merge_minify($patch_left, $patch_right), $this->argument('build'), $this->argument('hash')); + + $this->info(sprintf('record updated')); + } } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 0b4d6e1ea..a91b948c0 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -1,21 +1,23 @@ -name = $name; - for ($i = 0; $i < $slots; $i++) { - $slot = new PrizePackSlot(); - array_push($this->drops, $slot); - } - } + /** + * Constructor for PrizePack class. + * + * @param string $name the name of the Prize Pack + * @param int $slots the number of slots the Prize Pack has + * + * @return void + */ + public function __construct(string $name, int $slots) + { + $this->name = $name; + for ($i = 0; $i < $slots; $i++) { + $this->drops[] = new PrizePackSlot(); + } + } - /** - * Gets the name of the Prize Pack - * - * @return string - */ - public function getName() : string { - return $this->name; - } + /** + * Gets the name of the Prize Pack. + * + * @return string + */ + public function getName(): string + { + return $this->name; + } - /** - * Gets the Prize Pack Slots within the prize pack - * - * @return array - */ - public function getDrops() : array { - return $this->drops; - } + /** + * Gets the Prize Pack Slots within the prize pack. + * + * @return array + */ + public function getDrops(): array + { + return $this->drops; + } - /** - * Gets the Prize Pack Slots within the prize pack that are not filled - * - * @return array - */ - public function getEmptyDrops() : array { - return array_filter($this->drops, function($slot) { - return !$slot->isFilled(); - }); - } + /** + * Gets the Prize Pack Slots within the prize pack that are not filled. + * + * @return array + */ + public function getEmptyDrops(): array + { + return array_filter($this->drops, function ($slot) { + return !$slot->isFilled(); + }) ?? []; + } } diff --git a/app/Drops/PrizePackSlot.php b/app/Drops/PrizePackSlot.php index 49389d7e9..1a9132976 100644 --- a/app/Drops/PrizePackSlot.php +++ b/app/Drops/PrizePackSlot.php @@ -1,51 +1,60 @@ -drop = $sprite; - } - - /** - * Gets the drop in the slot - * - * @return Droppable - */ - public function getDrop() : Droppable { - return $this->drop; - } - - /** - * Sets the drop in the slot - * - * @param Droppable $sprite the sprite to fill the slot with - * - * @return $this - */ - public function setDrop($sprite) : self { - $this->drop = $sprite; - - return $this; - } - - /** - * Gets whether the slot is filled with a drop - * - * @return bool - */ - public function isFilled() : bool { - return $this->drop !== null; - } +class PrizePackSlot +{ + protected $drop = null; + protected $filled = false; + + /** + * Constructor for PrizePackSlot class. + * + * @param Droppable $sprite the sprite to fill the slot with, if any + * + * @return void + */ + public function __construct(Droppable $sprite = null) + { + $this->drop = $sprite; + } + + /** + * Gets the drop in the slot + * + * @return Droppable + */ + public function getDrop(): Droppable + { + return $this->drop; + } + + /** + * Sets the drop in the slot + * + * @param Droppable $sprite the sprite to fill the slot with + * + * @return $this + */ + public function setDrop(Droppable $sprite): self + { + $this->drop = $sprite; + + return $this; + } + + /** + * Gets whether the slot is filled with a drop + * + * @return bool + */ + public function isFilled(): bool + { + return $this->drop !== null; + } } diff --git a/app/Enemizer.php b/app/Enemizer.php index c32e82e04..09c28fbfb 100644 --- a/app/Enemizer.php +++ b/app/Enemizer.php @@ -1,224 +1,282 @@ -randomizer = $randomizer; - - $this->settings = $settings; - $this->rom_patch = json_encode($rom_patch); - $this->randomizer_patch = tempnam(sys_get_temp_dir(), 'vt_en_'); - $this->options_file = tempnam(sys_get_temp_dir(), 'vt_en_'); - $this->patch_file = tempnam(sys_get_temp_dir(), 'vt_en_'); - } - - public function makeSeed(int $rng_seed = null) { - $rng_seed = $rng_seed ?: random_int(1, 999999999); // cryptographic pRNG for seeding - $this->rng_seed = $rng_seed % 1000000000; - - $this->writeOptionsFile(); - - file_put_contents($this->randomizer_patch, $this->rom_patch); - - $system = php_uname('s') == 'Darwin' ? 'osx' : 'linux'; - - $proc = new Process(base_path("bin/enemizer/$system/EnemizerCLI.Core") - . ' --rom ' . config('enemizer.base') - . ' --seed ' . $this->rng_seed - . ' --base ' . public_path('js/base2current.json') - . ' --randomizer ' . $this->randomizer_patch - . ' --enemizer ' . $this->options_file - . ' --output ' . $this->patch_file, base_path("bin/enemizer/$system")); - - logger()->debug($proc->getCommandLine()); - - $proc->run(function ($type, $buffer) { - logger()->debug((Process::ERR === $type) ? "ERR > $buffer" : "OUT > $buffer"); - }); - - if (!$proc->isSuccessful()) { - logger()->error($proc->getErrorOutput()); - throw new \Exception("Unable to generate"); - } - - $base_patch = json_decode(file_get_contents(base_path("bin/enemizer/$system/enemizerBasePatch.json"))); - $patch = json_decode(file_get_contents($this->patch_file)); - - $this->patch = []; - foreach ($base_patch as $write) { - $this->patch[] = [$write->address => $write->patchData]; - } - foreach ($patch as $write) { - $this->patch[] = [$write->address => $write->patchData]; - } - - file_put_contents($this->patch_file, json_encode($this->patch)); - - return $this; - } - - public function writeOptionsFile() { - $system = php_uname('s') == 'Darwin' ? 'osx' : 'linux'; - - $options = [ - "RandomizeEnemies" => (bool) ($this->settings['enemy'] ?? false), - "RandomizeEnemiesType" => 3, - "RandomizeBushEnemyChance" => true, - "RandomizeEnemyHealthRange" => (bool) ($this->settings['enemy_health'] ?? false), - "RandomizeEnemyHealthType" => (int) (($this->settings['enemy_health'] ?? 0) - 1), - "OHKO" => false, - "RandomizeEnemyDamage" => (bool) ($this->settings['enemy_damage'] != 'off'), - "AllowEnemyZeroDamage" => true, - "ShuffleEnemyDamageGroups" => in_array($this->settings['enemy_damage'], ['shuffle', 'chaos']), - "EnemyDamageChaosMode" => (bool) ($this->settings['enemy_damage'] == 'chaos'), - "EasyModeEscape" => false, - "EnemiesAbsorbable" => false, - "AbsorbableSpawnRate" => 10, - "AbsorbableTypes" => [ - "FullMagic" => true, - "SmallMagic" => true, - "Bomb_1" => true, - "BlueRupee" => true, - "Heart" => true, - "BigKey" => true, - "Key" => true, - "Fairy" => true, - "Arrow_10" => true, - "Arrow_5" => true, - "Bomb_8" => true, - "Bomb_4" => true, - "GreenRupee" => true, - "RedRupee" => true, - ], - "BossMadness" => false, - "RandomizeBosses" => $this->randomizer->config('boss_shuffle', 'off') !== 'off', - "RandomizeBossesType" => [ - 'off' => 0, - 'basic' => 0, - 'normal' => 1, - 'chaos' => 2, - ][$this->randomizer->config('boss_shuffle', 'off')], - "RandomizeBossHealth" => false, - "RandomizeBossHealthMinAmount" => 0, - "RandomizeBossHealthMaxAmount" => 300, - "RandomizeBossDamage" => false, - "RandomizeBossDamageMinAmount" => 0, - "RandomizeBossDamageMaxAmount" => 200, - "RandomizeBossBehavior" => false, - "RandomizeDungeonPalettes" => (bool) ($this->settings['palette_shuffle'] ?? false), - "SetBlackoutMode" => false, - "RandomizeOverworldPalettes" => (bool) ($this->settings['palette_shuffle'] ?? false), - "RandomizeSpritePalettes" => (bool) ($this->settings['palette_shuffle'] ?? false), - "SetAdvancedSpritePalettes" => false, - "PukeMode" => false, - "NegativeMode" => false, - "GrayscaleMode" => false, - "GenerateSpoilers" => false, - "RandomizeLinkSpritePalette" => false, - "RandomizePots" => (bool) ($this->settings['pot_shuffle'] ?? false), - "ShuffleMusic" => false, - "BootlegMagic" => true, - "CustomBosses" => false, - "AndyMode" => false, - "HeartBeepSpeed" => 2, - "AlternateGfx" => false, - "ShieldGraphics" => "shield_gfx/normal.gfx", - "SwordGraphics" => "sword_gfx/normal.gfx", - "BeeMizer" => false, - "BeesLevel" => 3, - "RandomizeTileTrapPattern" => true, - "RandomizeTileTrapFloorTile" => false, - "AllowKillableThief" => (bool) ($this->settings['enemy'] ?? false), - "RandomizeSpriteOnHit" => false, - "DebugMode" => false, - "DebugForceEnemy" => true, - "DebugForceEnemyId" => 196, - "DebugForceBoss" => false, - "DebugForceBossId" => 4, - "DebugOpenShutterDoors" => false, - "DebugForceEnemyDamageZero" => true, - "DebugShowRoomIdInRupeeCounter" => true, - "UseManualBosses" => $this->randomizer->config('boss_shuffle', 'off') !== 'off', - ]; - - if ($this->randomizer->config('boss_shuffle', 'off') !== 'off') { - $world = $this->randomizer->getWorld(); - - $options = array_merge($options, [ - "ManualBosses" => [ - "EasternPalace" => $world->getRegion('Eastern Palace')->getBoss()->getEName(), - "DesertPalace" => $world->getRegion('Desert Palace')->getBoss()->getEName(), - "TowerOfHera" => $world->getRegion('Tower of Hera')->getBoss()->getEName(), - "AgahnimsTower" => "Agahnim", - "PalaceOfDarkness" => $world->getRegion('Palace of Darkness')->getBoss()->getEName(), - "SwampPalace" => $world->getRegion('Swamp Palace')->getBoss()->getEName(), - "SkullWoods" => $world->getRegion('Skull Woods')->getBoss()->getEName(), - "ThievesTown" => $world->getRegion('Thieves Town')->getBoss()->getEName(), - "IcePalace" => $world->getRegion('Ice Palace')->getBoss()->getEName(), - "MiseryMire" => $world->getRegion('Misery Mire')->getBoss()->getEName(), - "TurtleRock" => $world->getRegion('Turtle Rock')->getBoss()->getEName(), - "GanonsTower1" => $world->getRegion('Ganons Tower')->getBoss('bottom')->getEName(), - "GanonsTower2" => $world->getRegion('Ganons Tower')->getBoss('middle')->getEName(), - "GanonsTower3" => $world->getRegion('Ganons Tower')->getBoss('top')->getEName(), - "GanonsTower4" => "Agahnim2", - "Ganon" => "Ganon" - ], - ]); - } - - file_put_contents($this->options_file, json_encode($options)); - } - - /** - * write the current generated data to the Rom - * - * @param Rom $rom Rom to write data to - * - * @return Rom - */ - public function writeToRom(Rom $rom) { - foreach ($this->patch as $writes) { - foreach ($writes as $address => $bytes) { - $rom->write($address, pack('C*', ...$bytes)); - } - } - - return $rom; - } - - /** - * Object destruction magic method - * - * @return void - */ - public function __destruct() { - unlink($this->randomizer_patch); - unlink($this->options_file); - unlink($this->patch_file); - } +class Enemizer +{ + /** @var string */ + const VERSION = '6.0.33'; + /** @var \ALttP\World */ + private $world; + /** @var string */ + private $randomizer_patch; + /** @var string */ + private $options_file; + /** @var string */ + private $patch_file; + /** @var string */ + private $rom_patch; + /** @var array */ + private $patch = []; + /** @var int */ + protected $rng_seed; + + /** + * Create a new Enemizer + * + * @param \ALttP\World $world world to enemize + * @param array $rom_patch the current rom patch + * + * @return void + */ + public function __construct(World $world, array $rom_patch) + { + $this->world = $world; + + $this->rom_patch = json_encode($rom_patch); + $this->randomizer_patch = tempnam(sys_get_temp_dir(), 'vt_en_'); + $this->options_file = tempnam(sys_get_temp_dir(), 'vt_en_'); + $this->patch_file = tempnam(sys_get_temp_dir(), 'vt_en_'); + } + + /** + * Apply the enemizer. + * + * @throws \Exception + * + * @param int $rng_seed seed for enemizer + * + * @return $this + */ + public function randomize(int $rng_seed = null) + { + $rng_seed = $rng_seed ?: random_int(1, 999999999); // cryptographic pRNG for seeding + $this->rng_seed = $rng_seed % 1000000000; + + $this->writeOptionsFile(); + + file_put_contents($this->randomizer_patch, $this->rom_patch); + + $system = php_uname('s') == 'Darwin' ? 'osx' : 'linux'; + + $proc = new Process([ + base_path("bin/enemizer/$system/EnemizerCLI.Core"), + '--rom', + config('enemizer.base'), + '--seed', + $this->rng_seed, + '--base', + public_path('js/base2current.json'), + '--randomizer', + $this->randomizer_patch, + '--enemizer', + $this->options_file, + '--output', + $this->patch_file, + ], base_path("bin/enemizer/$system")); + + Log::debug($proc->getCommandLine()); + + $proc->run(function ($type, $buffer) { + Log::debug((Process::ERR === $type) ? "ERR > $buffer" : "OUT > $buffer"); + }); + + if (!$proc->isSuccessful()) { + Log::error($proc->getErrorOutput()); + + throw new \Exception("Unable to generate"); + } + + $file_contents = file_get_contents(base_path("bin/enemizer/$system/enemizerBasePatch.json")); + + if ($file_contents === false) { + Log::error('enemizer base not readable'); + + throw new \Exception("Unable to generate"); + } + + $base_patch = json_decode($file_contents); + + $patch_contents = file_get_contents($this->patch_file); + + if ($patch_contents === false) { + Log::error('enemizer patch not readable'); + + throw new \Exception("Unable to generate"); + } + + $patch = json_decode($patch_contents); + + $this->patch = []; + foreach ($base_patch as $write) { + $this->patch[] = [$write->address => $write->patchData]; + } + foreach ($patch as $write) { + $this->patch[] = [$write->address => $write->patchData]; + } + + file_put_contents($this->patch_file, json_encode($this->patch)); + + return $this; + } + + /** + * Write an options json file to disk. + * + * @return void + */ + public function writeOptionsFile() + { + $options = [ + "RandomizeEnemies" => $this->world->config('enemizer.enemyShuffle') !== 'none', + "RandomizeEnemiesType" => 3, + "RandomizeBushEnemyChance" => $this->world->config('enemizer.enemyShuffle') === 'random', + "RandomizeEnemyHealthRange" => $this->world->config('enemizer.enemyHealth') !== 'default', + "RandomizeEnemyHealthType" => [ + 'easy' => 0, + 'default' => 1, + 'hard' => 2, + 'expert' => 3, + ][$this->world->config('enemizer.enemyHealth')], + "OHKO" => false, + "RandomizeEnemyDamage" => $this->world->config('enemizer.enemyDamage') !== 'default', + "AllowEnemyZeroDamage" => true, + "ShuffleEnemyDamageGroups" => in_array($this->world->config('enemizer.enemyDamage'), ['shuffled', 'random']), + "EnemyDamageChaosMode" => $this->world->config('enemizer.enemyDamage') === 'random', + "EasyModeEscape" => false, + "EnemiesAbsorbable" => false, + "AbsorbableSpawnRate" => 10, + "AbsorbableTypes" => [ + "FullMagic" => true, + "SmallMagic" => true, + "Bomb_1" => true, + "BlueRupee" => true, + "Heart" => true, + "BigKey" => true, + "Key" => true, + "Fairy" => true, + "Arrow_10" => true, + "Arrow_5" => true, + "Bomb_8" => true, + "Bomb_4" => true, + "GreenRupee" => true, + "RedRupee" => true, + ], + "BossMadness" => false, + "RandomizeBosses" => $this->world->config('enemizer.bossShuffle') !== 'none', + "RandomizeBossesType" => [ + 'none' => 0, + 'simple' => 0, + 'full' => 1, + 'random' => 2, + ][$this->world->config('enemizer.bossShuffle')], + "RandomizeBossHealth" => false, + "RandomizeBossHealthMinAmount" => 0, + "RandomizeBossHealthMaxAmount" => 300, + "RandomizeBossDamage" => false, + "RandomizeBossDamageMinAmount" => 0, + "RandomizeBossDamageMaxAmount" => 200, + "RandomizeBossBehavior" => false, + "RandomizeDungeonPalettes" => false, + "SetBlackoutMode" => false, + "RandomizeOverworldPalettes" => false, + "RandomizeSpritePalettes" => false, + "SetAdvancedSpritePalettes" => false, + "PukeMode" => false, + "NegativeMode" => false, + "GrayscaleMode" => false, + "GenerateSpoilers" => false, + "RandomizeLinkSpritePalette" => false, + "RandomizePots" => false, + "ShuffleMusic" => false, + "BootlegMagic" => true, + "CustomBosses" => false, + "AndyMode" => false, + "HeartBeepSpeed" => 2, + "AlternateGfx" => false, + "ShieldGraphics" => "shield_gfx/normal.gfx", + "SwordGraphics" => "sword_gfx/normal.gfx", + "BeeMizer" => false, + "BeesLevel" => 3, + "RandomizeTileTrapPattern" => $this->world->config('enemizer.enemyShuffle') === 'random', + "RandomizeTileTrapFloorTile" => false, + "AllowKillableThief" => $this->world->config('enemizer.enemyShuffle') === 'random' + ? (bool) get_random_int(0, 1) + : $this->world->config('enemizer.enemyShuffle') !== 'none', + "RandomizeSpriteOnHit" => false, + "DebugMode" => false, + "DebugForceEnemy" => true, + "DebugForceEnemyId" => 196, + "DebugForceBoss" => false, + "DebugForceBossId" => 4, + "DebugOpenShutterDoors" => false, + "DebugForceEnemyDamageZero" => true, + "DebugShowRoomIdInRupeeCounter" => true, + "UseManualBosses" => $this->world->config('enemizer.bossShuffle') !== 'none', + ]; + + if ($this->world->config('enemizer.bossShuffle') !== 'none') { + $world = $this->world; + + $options = array_merge($options, [ + "ManualBosses" => [ + "EasternPalace" => $world->getRegion('Eastern Palace')->getBoss('')->getEName(), + "DesertPalace" => $world->getRegion('Desert Palace')->getBoss('')->getEName(), + "TowerOfHera" => $world->getRegion('Tower of Hera')->getBoss('')->getEName(), + "AgahnimsTower" => "Agahnim", + "PalaceOfDarkness" => $world->getRegion('Palace of Darkness')->getBoss('')->getEName(), + "SwampPalace" => $world->getRegion('Swamp Palace')->getBoss('')->getEName(), + "SkullWoods" => $world->getRegion('Skull Woods')->getBoss('')->getEName(), + "ThievesTown" => $world->getRegion('Thieves Town')->getBoss('')->getEName(), + "IcePalace" => $world->getRegion('Ice Palace')->getBoss('')->getEName(), + "MiseryMire" => $world->getRegion('Misery Mire')->getBoss('')->getEName(), + "TurtleRock" => $world->getRegion('Turtle Rock')->getBoss('')->getEName(), + "GanonsTower1" => $world->getRegion('Ganons Tower')->getBoss('bottom')->getEName(), + "GanonsTower2" => $world->getRegion('Ganons Tower')->getBoss('middle')->getEName(), + "GanonsTower3" => $world->getRegion('Ganons Tower')->getBoss('top')->getEName(), + "GanonsTower4" => "Agahnim2", + "Ganon" => "Ganon" + ], + ]); + } + + file_put_contents($this->options_file, json_encode($options)); + } + + /** + * write the current generated data to the Rom + * + * @param Rom $rom Rom to write data to + * + * @return Rom + */ + public function writeToRom(Rom $rom) + { + foreach ($this->patch as $writes) { + foreach ($writes as $address => $bytes) { + $rom->write($address, pack('C*', ...$bytes)); + } + } + + return $rom; + } + + /** + * Object destruction magic method + * + * @return void + */ + public function __destruct() + { + unlink($this->randomizer_patch); + unlink($this->options_file); + unlink($this->patch_file); + } } diff --git a/app/EntranceRandomizer.php b/app/EntranceRandomizer.php index 22d71c73a..9d326d0d8 100644 --- a/app/EntranceRandomizer.php +++ b/app/EntranceRandomizer.php @@ -1,7 +1,8 @@ - 'basic', + 'full' => 'normal', + 'random' => 'chaos', + ]; + /** @var array */ + private $goal_lookup = [ + 'ganon' => 'ganon', + 'fast_ganon' => 'crystals', + 'dungeons' => 'dungeons', + 'pedestal' => 'pedestal', + 'triforce-hunt' => 'triforcehunt', + ]; + /** @var array */ + private $swords_lookup = [ + 'randomized' => 'random', + 'assured' => 'assured', + 'vanilla' => 'vanilla', + 'swordless' => 'swordless', + ]; /** - * Create a new EntranceRandomizer + * Create a new Entrance Randomizer. This currently only works with one + * world. So we use the first of the array passed in. * - * @param string $difficulty difficulty from config to apply to randomization - * @param string $logic Ruleset to use when deciding if Locations can be reached - * @param string $goal Goal of the game - * @param string $variation modifications to difficulty - * @param string $variation how the entrances are shuffled + * @param array $worlds worlds to randomize * * @return void */ - public function __construct($difficulty = 'normal', $logic = 'noglitches', $goal = 'ganon', $variation = 'none', $shuffle = 'none') { - switch ($difficulty) { - case 'easy': - case 'hard': - case 'expert': - case 'insane': - case 'normal': - $this->difficulty = $difficulty; - break; - default: - $this->difficulty = 'normal'; + public function __construct(array $worlds) + { + $this->world = reset($worlds); + + if (!$this->world instanceof World) { + throw new \OutOfBoundsException; } + } - switch ($goal) { - case 'ganon': - case 'crystals': - case 'dungeons': - case 'pedestal': - case 'triforcehunt': - $this->goal = $goal; - break; - default: - $this->goal = 'crystals'; + /** + * Fill all empty Locations with Items using logic from the World. This is achieved by first setting up base + * portions of the world. Then taking the remaining empty locations we order them, and try to fill them in + * order in a way that opens more locations. + * + * @return void + */ + public function randomize(): void + { + // cryptographic pRNG for seeding + $rng_seed = random_int(1, 999999999); + + $flags = []; + if ($this->world->config('dungeonItems') === 'full') { + $flags[] = '--keysanity'; } - switch ($shuffle) { - case 'simple': - case 'restricted': - case 'full': - case 'crossed': - case 'insanity': - $this->shuffle = $shuffle; - break; - default: - $this->shuffle = 'simple'; - } - - $this->variation = $variation; - - $this->logic = $logic; - $this->timer_mode = 'none'; - $this->seed = new Seed; - $this->keysanity = false; - $this->retro = false; - - switch ($this->variation) { - case 'timed-race': - $this->timer_mode = 'timed'; - break; - case 'timed-ohko': - $this->timer_mode = 'timed-ohko'; - break; - case 'ohko': - $this->timer_mode = 'ohko'; - break; - case 'triforce-hunt': - $this->goal = 'triforcehunt'; - break; - case 'key-sanity': - $this->keysanity = true; - break; - case 'retro': - $this->retro = true; - break; - default: - $this->variation = 'none'; + $mode = 'standard'; + if ($this->world instanceof World\Open) { + $mode = 'open'; + } elseif ($this->world instanceof World\Inverted) { + $mode = 'inverted'; + } + if ($this->world instanceof World\Retro) { + $mode = 'open'; + $flags[] = '--retro'; } - } - public function makeSeed(int $rng_seed = null) { - $rng_seed = $rng_seed ?: random_int(1, 999999999); // cryptographic pRNG for seeding - $this->rng_seed = $rng_seed % 1000000000; - mt_srand($rng_seed); + switch ($this->world->config('logic')) { + case 'no_logic': + $logic = 'nologic'; - $keysanity_flag = ''; - if ($this->keysanity) { - $keysanity_flag = ' --keysanity'; + break; + case 'none': + default: + $logic = 'noglitches'; } - $retro_flag = ''; - if ($this->retro) { - $retro_flag = ' --retro'; + + if ($this->world->config('enemizer.bossShuffle') !== 'none') { + $flags = array_merge($flags, [ + '--shufflebosses', + $this->boss_shuffle_lookup[$this->world->config('enemizer.bossShuffle')], + ]); } - $boss_flag = ''; - if ($this->config('boss_shuffle', 'off') !== 'off') { - $boss_flag = ' --shufflebosses ' . $this->config('boss_shuffle'); + + if ($this->world->config('spoil.Hints') === 'on') { + $flags[] = '--hint'; } - $proc = new Process('python3 ' - . base_path('vendor/z3/entrancerandomizer/EntranceRandomizer.py') - . ' --mode ' . $this->config('mode.state') - . ' --goal ' . $this->goal - . ' --difficulty ' . $this->difficulty - . ' --shuffle ' . $this->shuffle - . ' --timer ' . $this->timer_mode - . $keysanity_flag - . $retro_flag - . $boss_flag - . ' --hint ' - . ' --seed ' . $rng_seed - . ' --jsonout --loglevel error'); + $proc = new Process(array_merge( + [ + 'python3', + base_path('vendor/z3/entrancerandomizer/EntranceRandomizer.py'), + '--mode', + $mode, + '--logic', + $logic, + '--accessibility', + $this->world->config('accessibility'), + '--swords', + $this->swords_lookup[$this->world->config('mode.weapons')], + '--goal', + $this->goal_lookup[$this->world->config('goal')], + '--difficulty', + $this->world->config('item.pool'), + '--item_functionality', + $this->world->config('item.functionality'), + '--shuffle', + $this->world->config('entrances'), + '--crystals_ganon', + $this->world->config('crystals.ganon'), + '--crystals_gt', + $this->world->config('crystals.tower'), + '--seed', + $rng_seed, + '--jsonout', + '--loglevel', + 'error', + ], + $flags + )); Log::debug($proc->getCommandLine()); $proc->run(); @@ -142,114 +147,42 @@ public function makeSeed(int $rng_seed = null) { $er = json_decode($proc->getOutput()); $patch = $er->patch; - array_walk($patch, function(&$write, $address) { + array_walk($patch, function (&$write, $address) { $write = [$address => $write]; }); - $this->patch = array_values((array) $patch); + $this->world->setOverridePatch(array_values((array) $patch)); // possible temp fix - $this->spoiler = json_decode($er->spoiler, true); - $this->spoiler['meta']['build'] = Rom::BUILD; - $this->spoiler['meta']['logic'] = $this->getLogic(); - $this->spoiler['meta']['variation'] = $this->variation; - - if ($this->config('boss_shuffle', 'off') !== 'off') { - $this->world = World::factory(config('alttp.mode.state')); - - $this->world->getRegion('Eastern Palace')->setBoss(Boss::get($this->spoiler['Bosses']['Eastern Palace'])); - $this->world->getRegion('Desert Palace')->setBoss(Boss::get($this->spoiler['Bosses']['Desert Palace'])); - $this->world->getRegion('Tower of Hera')->setBoss(Boss::get($this->spoiler['Bosses']['Tower Of Hera'])); - $this->world->getRegion('Palace of Darkness')->setBoss(Boss::get($this->spoiler['Bosses']['Palace Of Darkness'])); - $this->world->getRegion('Swamp Palace')->setBoss(Boss::get($this->spoiler['Bosses']['Swamp Palace'])); - $this->world->getRegion('Skull Woods')->setBoss(Boss::get($this->spoiler['Bosses']['Skull Woods'])); - $this->world->getRegion('Thieves Town')->setBoss(Boss::get($this->spoiler['Bosses']['Thieves Town'])); - $this->world->getRegion('Ice Palace')->setBoss(Boss::get($this->spoiler['Bosses']['Ice Palace'])); - $this->world->getRegion('Misery Mire')->setBoss(Boss::get($this->spoiler['Bosses']['Misery Mire'])); - $this->world->getRegion('Turtle Rock')->setBoss(Boss::get($this->spoiler['Bosses']['Turtle Rock'])); - $this->world->getRegion('Ganons Tower')->setBoss(Boss::get($this->spoiler['Bosses']['Ganons Tower Basement']), 'bottom'); - $this->world->getRegion('Ganons Tower')->setBoss(Boss::get($this->spoiler['Bosses']['Ganons Tower Middle']), 'middle'); - $this->world->getRegion('Ganons Tower')->setBoss(Boss::get($this->spoiler['Bosses']['Ganons Tower Top']), 'top'); - } - - return $this; - } - - /** - * Get the current Logic identifier - * - * @return string - */ - public function getLogic() { - switch ($this->logic) { - case 'noglitches': return 'er-no-glitches-' . static::VERSION; - } - return 'er-unknown-' . static::LOGIC; - } - - /** - * write the current generated data to the Rom - * - * @param Rom $rom Rom to write data to - * - * @return Rom - */ - public function writeToRom(Rom $rom) { - foreach ($this->patch as $writes) { - foreach ($writes as $address => $bytes) { - $rom->write($address, pack('C*', ...$bytes)); - } + $spoiler = json_decode($er->spoiler, true); + $spoiler['meta']['build'] = Rom::BUILD; + $spoiler['meta']['logic'] = 'er-no-glitches-' . static::VERSION; + + $this->world->setSpoiler($spoiler); + + if ($this->world->config('enemizer.bossShuffle') !== 'none') { + $this->world->getRegion('Eastern Palace')->setBoss(Boss::get($spoiler['Bosses']['Eastern Palace'], $this->world)); + $this->world->getRegion('Desert Palace')->setBoss(Boss::get($spoiler['Bosses']['Desert Palace'], $this->world)); + $this->world->getRegion('Tower of Hera')->setBoss(Boss::get($spoiler['Bosses']['Tower Of Hera'], $this->world)); + $this->world->getRegion('Palace of Darkness')->setBoss(Boss::get($spoiler['Bosses']['Palace Of Darkness'], $this->world)); + $this->world->getRegion('Swamp Palace')->setBoss(Boss::get($spoiler['Bosses']['Swamp Palace'], $this->world)); + $this->world->getRegion('Skull Woods')->setBoss(Boss::get($spoiler['Bosses']['Skull Woods'], $this->world)); + $this->world->getRegion('Thieves Town')->setBoss(Boss::get($spoiler['Bosses']['Thieves Town'], $this->world)); + $this->world->getRegion('Ice Palace')->setBoss(Boss::get($spoiler['Bosses']['Ice Palace'], $this->world)); + $this->world->getRegion('Misery Mire')->setBoss(Boss::get($spoiler['Bosses']['Misery Mire'], $this->world)); + $this->world->getRegion('Turtle Rock')->setBoss(Boss::get($spoiler['Bosses']['Turtle Rock'], $this->world)); + $this->world->getRegion('Ganons Tower')->setBoss(Boss::get($spoiler['Bosses']['Ganons Tower Basement'], $this->world), 'bottom'); + $this->world->getRegion('Ganons Tower')->setBoss(Boss::get($spoiler['Bosses']['Ganons Tower Middle'], $this->world), 'middle'); + $this->world->getRegion('Ganons Tower')->setBoss(Boss::get($spoiler['Bosses']['Ganons Tower Top'], $this->world), 'top'); } - - return $rom; } /** - * Get config value based on the currently set rules - * - * @param string $key dot notation key of config - * @param mixed|null $default value to return if $key is not found - * - * @return mixed - */ - public function config(string $key, $default = null) { - if (!array_key_exists($key, $this->config)) { - $this->config[$key] = config("alttp.{$this->difficulty}.variations.{$this->variation}.$key", - config("alttp.{$this->difficulty}.$key", - config("alttp.goals.{$this->goal}.$key", - config("alttp.$key", null)))); - } - - return $this->config[$key] ?? $default; - } - - /** - * Get the current spoiler for this seed + * Get all the worlds being randomized. * * @return array */ - public function getSpoiler(array $meta = []) { - $spoiler = json_decode(json_encode($this->spoiler), true); - $spoiler['meta'] = array_merge($meta, $spoiler['meta']); - - $this->spoiler = $spoiler; - - return $spoiler; - } - - /** - * Save a seed record to DB - * - * @return string hash of record - */ - public function saveSeedRecord() { - $this->seed->spoiler = json_encode($this->spoiler); - $this->seed->patch = json_encode(array_values((array) $this->patch)); - $this->seed->build = Rom::BUILD; - $this->seed->logic = -1; - $this->seed->rules = $this->difficulty; - $this->seed->game_mode = $this->getLogic(); - $this->seed->save(); - - return $this->seed->hash; + public function getWorlds(): array + { + return [$this->world]; } } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 076e60833..6822c2dd6 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -1,61 +1,66 @@ -bound('sentry') && $this->shouldReport($exception)) { - app('sentry')->captureException($exception); - } +class Handler extends ExceptionHandler +{ + /** + * A list of the exception types that should not be reported. + */ + protected $dontReport = [ + \Illuminate\Auth\AuthenticationException::class, + \Illuminate\Auth\Access\AuthorizationException::class, + \Symfony\Component\HttpKernel\Exception\HttpException::class, + \Illuminate\Database\Eloquent\ModelNotFoundException::class, + \Illuminate\Session\TokenMismatchException::class, + \Illuminate\Validation\ValidationException::class, + ]; - parent::report($exception); - } + /** + * Report or log an exception. + * + * This is a great spot to send exceptions to Sentry, Bugsnag, etc. + * + * @param \Exception $exception + * + * @return void + */ + public function report(Exception $exception) + { + if (app()->bound('sentry') && $this->shouldReport($exception)) { + app('sentry')->captureException($exception); + } - /** - * Render an exception into an HTTP response. - * - * @param \Illuminate\Http\Request $request - * @param \Exception $exception - * @return \Illuminate\Http\Response - */ - public function render($request, Exception $exception) { - return parent::render($request, $exception); - } + parent::report($exception); + } - /** - * Convert an authentication exception into an unauthenticated response. - * - * @param \Illuminate\Http\Request $request - * @param \Illuminate\Auth\AuthenticationException $exception - * @return \Illuminate\Http\Response - */ - protected function unauthenticated($request, AuthenticationException $exception) { - if ($request->expectsJson()) { - return response()->json(['error' => 'Unauthenticated.'], 401); - } + /** + * Render an exception into an HTTP response. + * + * @param \Illuminate\Http\Request $request + * @param \Exception $exception + * + * @return \Symfony\Component\HttpFoundation\Response + */ + public function render($request, Exception $exception) + { + return parent::render($request, $exception); + } - return redirect()->guest('login'); - } + /** + * Convert an authentication exception into an unauthenticated response. + * + * @param \Illuminate\Http\Request $request + * @param \Illuminate\Auth\AuthenticationException $exception + * + * @return \Illuminate\Http\Response + */ + protected function unauthenticated($request, AuthenticationException $exception) + { + return response(['error' => 'Unauthenticated.'], 401); + } } diff --git a/app/FeaturedGame.php b/app/FeaturedGame.php index 5a3e06c57..9fb068d25 100644 --- a/app/FeaturedGame.php +++ b/app/FeaturedGame.php @@ -1,21 +1,26 @@ -toDateString())->first(); - } + public static function today() + { + return static::where('day', Carbon::today()->toDateString())->first(); + } - public function seed() { - return $this->belongsTo(Seed::class, 'seed_id'); - } + public function seed() + { + return $this->belongsTo(Seed::class, 'seed_id'); + } } diff --git a/app/Filler.php b/app/Filler.php index fcdcac544..d6e6056e2 100644 --- a/app/Filler.php +++ b/app/Filler.php @@ -1,77 +1,67 @@ -world = $world; - } + switch ($type) { + default: + case 'RandomAssumed': + return new Filler\RandomAssumed($worlds); + } + } - abstract public function fill(array $dungeon, array $required, array $nice, array $extra); + public function __construct(array $worlds) + { + $this->worlds = $worlds; + } - /** - * If the filler uses GT Junk fill, this would be what to do with it. - * - * @param int $min minimum junk items to be placed - * @param int $max maximum junk items to be placed - * - * @return $this - */ - public function setGanonJunkLimits(int $min, int $max) { - return $this; - } + abstract public function fill(array $dungeon, array $required, array $nice, array $extra); - protected function shuffleLocations(Locations $locations) { - return $locations->randomCollection($locations->count()); - } + protected function shuffleLocations(LocationCollection $locations) + { + return $locations->randomCollection($locations->count()); + } - protected function shuffleItems(array $items) { - return fy_shuffle($items); - } + protected function shuffleItems(array $items) + { + return fy_shuffle($items); + } - protected function fastFillItemsInLocations($fill_items, $locations) { - Log::debug(sprintf("Fast Filling %s items in %s locations", count($fill_items), $locations->count())); + protected function fastFillItemsInLocations($fill_items, $locations) + { + Log::debug(sprintf("Fast Filling %s items in %s locations", count($fill_items), $locations->count())); - foreach($locations as $location) { - if ($location->hasItem()) { - continue; - } - $item = array_pop($fill_items); - if (!$item) { - break; - } - Log::debug(sprintf('Placing: %s in %s', $item->getNiceName(), $location->getName())); - $location->setItem($item); - } - } + foreach ($locations as $location) { + if ($location->hasItem()) { + continue; + } + $item = array_pop($fill_items); + if (!$item) { + break; + } + Log::debug(sprintf('Placing: %s in %s', $item->getNiceName(), $location->getName())); + $location->setItem($item); + } + } } diff --git a/app/Filler/Distributed.php b/app/Filler/Distributed.php deleted file mode 100644 index 913419ce2..000000000 --- a/app/Filler/Distributed.php +++ /dev/null @@ -1,23 +0,0 @@ -getRegions()), 0); - - foreach ($locations->randomCollection($locations->count()) as $location) { - $region_name = get_class($location->getRegion()); - if ($regions[$region_name] <= min($regions)) { - array_unshift($new_locations, $location); - $regions[$region_name]++; - } else { - array_push($new_locations, $location); - } - } - return new Locations($new_locations); - } -} diff --git a/app/Filler/Random.php b/app/Filler/Random.php deleted file mode 100644 index 7e16996a4..000000000 --- a/app/Filler/Random.php +++ /dev/null @@ -1,124 +0,0 @@ -shuffleLocations($this->world->getEmptyLocations()); - $this->fillDungeonItemsInLocations($dungeon, $randomized_order_locations, $required); - - $randomized_order_locations = $this->shuffleLocations($this->world->getEmptyLocations()); - - $my_items = $this->world->collectItems(); - - $this->fillItemsInLocations($this->shuffleItems($required), $my_items, $randomized_order_locations, true); - - // at this point we assume all locations are accessable - $randomized_order_locations = $this->shuffleLocations($this->world->getEmptyLocations()); - $this->fastFillItemsInLocations($this->shuffleItems($nice), $randomized_order_locations); - - $this->fastFillItemsInLocations($this->shuffleItems($extra), $randomized_order_locations->getEmptyLocations()); - - $my_items = $this->world->collectItems(); - - // Inaccessible Locations - $this->world->getEmptyLocations()->filter(function($location) use ($my_items) { - return !$location->canAccess($my_items); - })->each(function($location) { - $location->setItem(new Item('ChocoboEgg', 'Chocobo Egg', [0x5A])); - }); - } - - protected function fillItemsInLocations($fill_items, $my_items, $locations, $check_for_new_locations = false) { - Log::debug(sprintf("Filling %s items in %s locations", count($fill_items), $locations->getEmptyLocations()->count())); - $total_items = count($fill_items); - reset($fill_items); - while (count($fill_items) && $locations->getEmptyLocations()->count()) { - $item = current($fill_items); - - $available_locations = $locations->getEmptyLocations()->filter(function($location) use ($my_items) { - return $location->canAccess($my_items); - }); - - $fillable_locations = $available_locations->filter(function($location) use ($item, $my_items) { - return $location->canFill($item, $my_items); - }); - - if ($fillable_locations->count() == 0) { - foreach ($locations->getEmptyLocations() as $log_loc) { - Log::error("SOFT LOCK LOCATION: " . $log_loc->getName()); - } - throw new \Exception(sprintf('No Available Locations: "%s"', $item->getNiceName())); - } - - Log::debug(sprintf("Item: %s [%s] Locations: %s of %s", - $item->getNiceName(), $item->getName(), $locations->getEmptyLocations()->count(), $available_locations->count())); - - if ($check_for_new_locations) { - $my_new_items = $my_items->tempAdd($item); - - $available_after_placement = $locations->getEmptyLocations()->filter(function($location) use ($my_new_items) { - return $location->canAccess($my_new_items); - }); - - Log::debug(sprintf("Before: %s After: %s", $available_locations->count(), $available_after_placement->count())); - if ($available_after_placement->count() <= $available_locations->count()) { - if (next($fill_items) !== false) { - Log::debug(sprintf("Skipping Item: %s [%s]", $item->getNiceName(), $item->getName())); - continue; - } else { - end($fill_items); - } - } - } - - $fill_location = (count($fill_items) / $total_items <= .33) - ? $fillable_locations->first() - : $fillable_locations->last(); - Log::debug(sprintf("Placing Item: %s in %s", $item->getNiceName(), $fill_location->getName())); - $fill_location->setItem($item); - - unset($fill_items[key($fill_items)]); - reset($fill_items); - - $my_items = $this->world->collectItems(); - } - - Log::debug(sprintf("Extra Items: %s", count($fill_items))); - } - - protected function fillDungeonItemsInLocations($fill_items, $locations, $base_assumed_items = []) { - $remaining_fill_items = new Items($fill_items); - - foreach ($fill_items as $key => $item) { - $assumed_items = $this->world->collectItems($remaining_fill_items->removeItem($item->getName())->merge($base_assumed_items)); - - $fillable_locations = $locations->filter(function($location) use ($item, $assumed_items) { - return !$location->hasItem() && $location->canFill($item, $assumed_items); - }); - - $fill_location = $fillable_locations->first(); - - Log::debug(sprintf("Placing Item: %s in %s", $item->getNiceName(), $fill_location->getName())); - - $fill_location->setItem($item); - } - } - -} diff --git a/app/Filler/RandomAssumed.php b/app/Filler/RandomAssumed.php index 01164fc3a..1532aa091 100644 --- a/app/Filler/RandomAssumed.php +++ b/app/Filler/RandomAssumed.php @@ -1,96 +1,131 @@ -shuffleLocations($this->world->getEmptyLocations()); - - $this->fillItemsInLocations($dungeon, $randomized_order_locations, array_merge($required, $nice)); - - // random junk fill - $gt_locations = $this->world->getRegion('Ganons Tower')->getEmptyLocations() - ->randomCollection(get_random_int($this->ganon_junk_lower, $this->ganon_junk_upper)); - $extra = $this->shuffleItems($extra); - $trash = array_splice($extra, 0, $gt_locations->count()); - $this->fastFillItemsInLocations($trash, $gt_locations); - - $randomized_order_locations = $randomized_order_locations->getEmptyLocations()->reverse(); - - $this->fillItemsInLocations($this->shuffleItems($required), $randomized_order_locations); - - $randomized_order_locations = $this->shuffleLocations($randomized_order_locations->getEmptyLocations()); - - $this->fastFillItemsInLocations($this->shuffleItems($nice), $randomized_order_locations); - - $this->fastFillItemsInLocations($this->shuffleItems($extra), $randomized_order_locations->getEmptyLocations()); - } - - /** - * This fill places items in the first available location that it can possibly be in, assuming that unplaced - * items will be reachable. Those items will then have a smaller set of places that they can be placed. - * - * @param int $min minimum junk items to be placed - * @param int $max maximum junk items to be placed - * - * @return $this - */ - public function setGanonJunkLimits(int $min, int $max) { - $this->ganon_junk_lower = $min; - $this->ganon_junk_upper = $max; - - return $this; - } - - protected function fillItemsInLocations($fill_items, $locations, $base_assumed_items = []) { - $remaining_fill_items = new Items($fill_items, $this->world); - Log::debug(sprintf("Filling %s items in %s locations", $remaining_fill_items->count(), - $locations->getEmptyLocations()->count())); - - $this->world->setCurrentlyFillingItems($remaining_fill_items); - - if ($remaining_fill_items->count() > $locations->getEmptyLocations()->count()) { - throw new \Exception("Trying to fill more items than available locations."); - } - - foreach ($fill_items as $key => $item) { - $assumed_items = $this->world->collectItems($remaining_fill_items->removeItem($item->getName())->merge($base_assumed_items)); - - $fillable_locations = $locations->filter(function($location) use ($item, $assumed_items) { - return !$location->hasItem() && $location->canFill($item, $assumed_items); - }); - - if ($fillable_locations->count() == 0) { - throw new \Exception(sprintf('No Available Locations: "%s" %s', $item->getNiceName(), - json_encode($remaining_fill_items->map(function($i){return $i->getName();})))); - } - - if ($item instanceof Item\Compass || $item instanceof Item\Map) { - $fill_location = $fillable_locations->random(); - } else { - $fill_location = $fillable_locations->first(); - } - - Log::debug(sprintf("Placing Item: %s in %s", $item->getNiceName(), $fill_location->getName())); - - $fill_location->setItem($item); - } - } +class RandomAssumed extends Filler +{ + /** + * This fill places items in the first available location that it can possibly be in, assuming that unplaced + * items will be reachable. Those items will then have a smaller set of places that they can be placed. + * + * @param array $dungeon items that must be placed + * @param array $required items that must be placed + * @param array $nice items that would be nice to have placed + * @param array $extra items that don't matter if they get placed + * + * @return null + */ + public function fill(array $dungeon, array $required, array $nice, array $extra) + { + $all_locations = new LocationCollection; + foreach ($this->worlds as $world) { + $all_locations = $all_locations->merge($world->getEmptyLocations()); + } + + $randomized_order_locations = $this->shuffleLocations($all_locations); + + $this->fillItemsInLocations($dungeon, $randomized_order_locations, array_merge($required, $nice)); + + // random junk fill + foreach ($this->worlds as $world) { + [$gt_lower_junk, $gt_upper_junk] = $world->getGanonsTowerJunkFillRange(); + + $gt_locations = $world->getRegion('Ganons Tower')->getEmptyLocations() + ->randomCollection(get_random_int($gt_lower_junk, $gt_upper_junk)); + + $extra = $this->shuffleItems($extra); + $trash = array_splice($extra, 0, $gt_locations->count()); + $this->fastFillItemsInLocations($trash, $gt_locations); + } + + $randomized_order_locations = $randomized_order_locations->getEmptyLocations()->reverse(); + + $this->fillItemsInLocations($this->shuffleItems($required), $randomized_order_locations); + + $randomized_order_locations = $this->shuffleLocations($randomized_order_locations->getEmptyLocations()); + + $this->fastFillItemsInLocations($this->shuffleItems($nice), $randomized_order_locations); + + $this->fastFillItemsInLocations($this->shuffleItems($extra), $randomized_order_locations->getEmptyLocations()); + } + + protected function fillItemsInLocations($fill_items, $locations, $base_assumed_items = []) + { + $remaining_fill_items = new ItemCollection($fill_items); + Log::debug(sprintf( + "Filling %s items in %s locations", + $remaining_fill_items->count(), + $locations->getEmptyLocations()->count() + )); + + if ($remaining_fill_items->count() > $locations->getEmptyLocations()->count()) { + throw new \Exception("Trying to fill more items than available locations."); + } + + $worlds = new WorldCollection($this->worlds); + + foreach ($fill_items as $key => $item) { + $starting_items = $remaining_fill_items->removeItem($item->getName())->merge($base_assumed_items); + foreach ($this->worlds as $world) { + $world->resetCollectedLocations(); + } + + $found_locations = 0; + $assumed_items = $starting_items->copy(); + do { + $current_locations = 0; + foreach ($this->worlds as $world) { + $assumed_items = $assumed_items->merge($world->collectOtherItems($assumed_items)); + $current_locations += $world->getCollectedLocationsCount(); + } + if ($found_locations == $current_locations) { + break; + } else { + $found_locations = $current_locations; + } + } while (true); + + $can_skip_access_checks = $item->getWorld()->config('accessibility') === 'none' + && (!$item instanceof Item\Key || $item->getWorld()->config('region.wildKeys', false)) + && (!$item instanceof Item\BigKey || $item->getWorld()->config('region.wildBigKeys', false)) + && (!$item instanceof Item\Map || $item->getWorld()->config('region.wildMaps', false)) + && (!$item instanceof Item\Compass || $item->getWorld()->config('region.wildCompasses', false)) + && $worlds->checkWinCondition($assumed_items); + + $fillable_locations = $locations->filter(function ($location) use ($item, $assumed_items, $can_skip_access_checks) { + return !$location->hasItem() && $location->canFill($item, $assumed_items, !$can_skip_access_checks); + }); + + if ($fillable_locations->count() == 0) { + throw new \Exception(vsprintf('No Available Locations: "%s %d" %s', [ + $item->getNiceName(), + $item->getWorld()->id, + json_encode($remaining_fill_items->map(function ($i) { + return $i->getName(); + })) + ])); + } + + if ($item instanceof Item\Compass || $item instanceof Item\Map) { + $fill_location = $fillable_locations->random(); + } else { + $fill_location = $fillable_locations->first(); + } + + Log::debug(vsprintf("Placing Item: %s in %s (%d)", [ + $item->getName(), + $fill_location->getName(), + $fillable_locations->count(), + ])); + + $fill_location->setItem($item); + } + } } diff --git a/app/Filler/RandomBeatable.php b/app/Filler/RandomBeatable.php deleted file mode 100644 index 9b29425f3..000000000 --- a/app/Filler/RandomBeatable.php +++ /dev/null @@ -1,102 +0,0 @@ -shuffleLocations($this->world->getEmptyLocations()); - $this->fillDungeonItemsInLocations($dungeon, $randomized_order_locations, $required); - - $randomized_order_locations = $this->shuffleLocations($this->world->getEmptyLocations()); - - $my_items = $this->world->collectItems(); - - // Random beatable might require the nice to haves (and even the trash later) - $items = $this->shuffleItems(array_merge($required, $nice)); - $this->fillItemsInLocations($items, $my_items, $randomized_order_locations, true); - - $randomized_order_locations = $this->shuffleLocations($this->world->getEmptyLocations()); - $this->fastFillItemsInLocations($this->shuffleItems($extra), $randomized_order_locations); - } - - protected function fillItemsInLocations($fill_items, $my_items, $locations, $check_for_new_locations = false) { - Log::debug(sprintf("Filling %s items in %s locations", count($fill_items), $locations->getEmptyLocations()->count())); - $total_items = count($fill_items); - reset($fill_items); - while (count($fill_items) && $locations->getEmptyLocations()->count()) { - $item = current($fill_items); - - $available_locations = $locations->getEmptyLocations()->filter(function($location) use ($my_items) { - return $location->canAccess($my_items); - }); - - $fillable_locations = $available_locations->filter(function($location) use ($item, $my_items) { - return $location->canFill($item, $my_items); - }); - - if ($fillable_locations->count() == 0) { - foreach ($locations->getEmptyLocations() as $log_loc) { - Log::error("SOFT LOCK LOCATION: " . $log_loc->getName()); - } - throw new \Exception(sprintf('No Available Locations: "%s"', $item->getNiceName())); - } - - Log::debug(sprintf("Item: %s [%s] Locations: %s of %s", - $item->getNiceName(), $item->getName(), $locations->getEmptyLocations()->count(), $available_locations->count())); - - if ($check_for_new_locations) { - $my_new_items = $my_items->tempAdd($item); - - $available_after_placement = $locations->getEmptyLocations()->filter(function($location) use ($my_new_items) { - return $location->canAccess($my_new_items); - }); - - Log::debug(sprintf("Before: %s After: %s", $available_locations->count(), $available_after_placement->count())); - if ($available_after_placement->count() <= $available_locations->count()) { - if (next($fill_items) !== false) { - Log::debug(sprintf("Skipping Item: %s [%s]", $item->getNiceName(), $item->getName())); - continue; - } else { - end($fill_items); - } - } - } - - $fill_location = (count($fill_items) / $total_items <= .25) - ? $fillable_locations->first() - : $fillable_locations->last(); - Log::debug(sprintf("Placing Item: %s in %s", $item->getNiceName(), $fill_location->getName())); - $fill_location->setItem($item); - - unset($fill_items[key($fill_items)]); - reset($fill_items); - - $my_items = $this->world->collectItems(); - if ($this->world->getWinCondition()($my_items)) { - Log::debug("Beatable!"); - break; - } - } - - foreach ($fill_items as $item) { - Log::debug(sprintf('Left over: %s', $item->getNiceName())); - } - - if (count($fill_items) && $locations->getEmptyLocations()->count()) { - $this->fastFillItemsInLocations($fill_items, $locations->getEmptyLocations()); - } - } -} diff --git a/app/Filler/RandomSwap.php b/app/Filler/RandomSwap.php deleted file mode 100644 index 3e1f373fd..000000000 --- a/app/Filler/RandomSwap.php +++ /dev/null @@ -1,170 +0,0 @@ -shuffleLocations($this->world->getEmptyLocations()); - $this->fillDungeonItemsInLocations($dungeon, $randomized_order_locations, $required); - - $randomized_order_locations = $this->shuffleLocations($this->world->getEmptyLocations()); - $requiredCollection = new Items($required); - // to make sure all bottles are accounted for - $bottles = Item::all()->filter(function($item) { - return is_a($item, Item\Bottle::class); - }); - foreach ($bottles as $bottle) { - $requiredCollection->addItem($bottle); - } - $my_items = $this->world->collectItems(); - - $this->fastFillItemsInLocations($this->shuffleItems(array_merge($required, $nice)), $randomized_order_locations); - - // so now we have items in locations, lets check if there are any inaccessables - $i = 0; - do { - $my_items = $this->world->collectItems(); - $cannot_reach = $this->world->getLocationsWithItem()->filter(function($location) use ($my_items) { - return !$location->canAccess($my_items); - }); - - $uncollectable_items = $this->shuffleItems($requiredCollection->intersect($cannot_reach->getItems())->values()); - - $randomized_order_locations = $this->shuffleLocations($randomized_order_locations); - - $this->swapItems($uncollectable_items, $randomized_order_locations, $requiredCollection); - if (++$i > 50) { - throw new \Exception("Max nesting reached looking for available locations"); - } - } while (count($uncollectable_items)); - - $my_items = $this->world->collectItems(); - - // at this point we assume all locations are accessable - $randomized_order_locations = $this->shuffleLocations($this->world->getEmptyLocations()); - - $this->fastFillItemsInLocations($this->shuffleItems($extra), $randomized_order_locations); - - $my_items = $this->world->collectItems(); - - // Inaccessible Locations - $this->world->getEmptyLocations()->filter(function($location) use ($my_items) { - return !$location->canAccess($my_items); - })->each(function($location) { - $location->setItem(new Item('ChocoboEgg', 'Chocobo Egg', [0x5A])); - }); - } - - /** - * move items that are stuck in the world, prefering items that open new locations - * If no items open a new location we might have a cycle lock. we then force one to move. - */ - protected function swapItems($uncollectable_items, $locations, $requiredCollection, $force = false) { - Log::debug(sprintf("Starting: %s items can't be reached (forced: %s)", count($uncollectable_items), $force ? 'yes' : 'no')); - $swapped = false; - $i = 0; - foreach ($uncollectable_items as $item) { - ++$i; - $check_locations = $locations->locationsWithItem($item); - if (!$check_locations->count()) { - throw new \Exception("No Locations found for " . $item->getNiceName()); - } - foreach ($locations->locationsWithItem($item) as $location) { - Log::debug(sprintf('[%s] Checking: %s in: %s', $i, $item->getNiceName(), $location->getName())); - - $my_items = $this->world->collectItems(); - if ($location->canAccess($my_items)) { - Log::debug(sprintf('[%s] Safe: %s in: %s', $i, $item->getNiceName(), $location->getName())); - continue; - } - - $my_new_items = $my_items->tempAdd($item); - $available_after_placement = $locations->filter(function($location) use ($my_new_items) { - return $location->canAccess($my_new_items); - }); - $available_locations = $locations->filter(function($location) use ($my_items) { - return $location->canAccess($my_items); - }); - - // only move item if it opens more locations - if (!$force && $available_after_placement->count() <= $available_locations->count()) { - Log::debug(sprintf('[%s] No Opens: %s in: %s before: %s after: %s', $i, $item->getNiceName(), - $location->getName(), $available_locations->count(), $available_after_placement->count())); - // jumping out 2 as any additional copies of this item would also not open new locations - continue 2; - } - - $new_location = $available_locations->getEmptyLocations()->first(); - - if ($new_location) { - $spheres = $this->world->getLocationSpheres(); - $new_location_sphere = null; - foreach ($spheres as $level => $sphere) { - if ($sphere->contains($new_location)) { - $new_location_sphere = $sphere; - } - } - $swipped = false; - foreach ($requiredCollection as $required) { - $move_move = $new_location_sphere->locationsWithItem($required)->filter(function($location) { - return $location->getName() != 'Uncle'; - //return $location->locked(); - }); - if ($move_move->count() && !is_a($required, Item\Sword::class)) { - $my_new_items = $my_items->tempAdd($item); - $my_items_after_swap = $my_new_items->copy()->removeItem($required->getName()); - $available_after_swap = $locations->filter(function($location) use ($my_items_after_swap) { - return $location->canAccess($my_items_after_swap); - }); - $available_locations = $locations->filter(function($location) use ($my_new_items) { - return $location->canAccess($my_new_items); - }); - if ($available_after_swap->count() < $available_locations->count()) { - continue; - } - $move_from = $move_move->first(); - $move_from->setItem(); - $location->setItem($required); - Log::debug(sprintf('[%s] Push Moving: %s from: %s to: %s', $i, $required->getNiceName(), $move_from->getName(), $location->getName())); - $swipped = true; - break; - } - } - - if (!$swipped) { - $location->setItem(); - } else { - $new_location = $move_from; - } - $new_location->setItem($item); - Log::debug(sprintf('[%s] Moving: %s from: %s to: %s', $i, $item->getNiceName(), $location->getName(), $new_location->getName())); - $swapped = $new_location->canAccess($my_items); - if ($force) { - return; - } - } else { - Log::debug(sprintf('[%s] No Location: %s from: %s', $i, $item->getNiceName(), $location->getName())); - } - } - } - if (!$swapped && count($uncollectable_items)) { - return $this->swapItems($uncollectable_items, $locations, $requiredCollection, true); - } - } -} diff --git a/app/Filler/Troll.php b/app/Filler/Troll.php deleted file mode 100644 index 6989cc5f7..000000000 --- a/app/Filler/Troll.php +++ /dev/null @@ -1,124 +0,0 @@ -shuffleLocations($this->world->getEmptyLocations()); - $this->fillDungeonItemsInLocations($dungeon, $randomized_order_locations, $required); - - $randomized_order_locations = $this->shuffleLocations($this->world->getEmptyLocations()); - $requiredCollection = new Items($required); - $my_items = $this->world->collectItems(); - - $this->fastFillItemsInLocations($this->shuffleItems(array_merge($required, $nice)), $randomized_order_locations); - - // so now we have items in locations, lets check if there are any inaccessables - $i = 0; - do { - $my_items = $this->world->collectItems(); - $cannot_reach = $this->world->getLocationsWithItem()->filter(function($location) use ($my_items) { - return !$location->canAccess($my_items); - }); - - $uncollectable_items = $this->shuffleItems($requiredCollection->intersect($cannot_reach->getItems())->values()); - - $this->swapItems($uncollectable_items, $randomized_order_locations); - if (++$i > 500) { - throw new \Exception("Max nesting reached looking for available locations"); - } - } while (count($uncollectable_items)); - - $my_items = $this->world->collectItems(); - - // at this point we assume all locations are accessable - $randomized_order_locations = $this->shuffleLocations($this->world->getEmptyLocations()); - - $this->fastFillItemsInLocations($this->shuffleItems($extra), $randomized_order_locations); - - $my_items = $this->world->collectItems(); - - // Inaccessible Locations - $this->world->getEmptyLocations()->filter(function($location) use ($my_items) { - return !$location->canAccess($my_items); - })->each(function($location) { - $location->setItem(new Item('ChocoboEgg', 'Chocobo Egg', [0x5A])); - }); - } - - /** - * move items that are stuck in the world, prefering items that open new locations - * If no items open a new location we might have a cycle lock. we then force one to move. - */ - protected function swapItems($uncollectable_items, $locations, $force = false) { - Log::debug(sprintf("Starting: %s items can't be reached", count($uncollectable_items))); - $swapped = false; - $i = 0; - foreach ($uncollectable_items as $item) { - ++$i; - foreach ($locations->locationsWithItem($item) as $location) { - $my_items = $this->world->collectItems(); - - $my_new_items = $my_items->tempAdd($item); - $available_after_placement = $locations->filter(function($location) use ($my_new_items, $force) { - return $location->canAccess($my_new_items);// && ($force || !$location->canAccess(new Items)); // not free pool - }); - $available_locations = $locations->filter(function($location) use ($my_items, $force) { - return $location->canAccess($my_items);// && ($force || !$location->canAccess(new Items)); // not free pool - }); - - // only move item if it opens more locations - if (!$force && $available_after_placement->count() <= $available_locations->count()) { - Log::debug(sprintf('[%s]No Opens: %s in: %s before: %s after: %s', $i, $item->getNiceName(), - $location->getName(), $available_locations->count(), $available_after_placement->count())); - continue 2; - } - - if (!$location->canAccess($my_items)) { - $spheres = $this->world->getLocationSpheres(); - $optimal_sphere = $spheres[1]; - $low_items = $optimal_sphere->getItems()->count(); - foreach ($spheres as $sphere => $sphere_locations) { - Log::debug("CHECK Sphere: $sphere"); - $sphere_items = $sphere_locations->getItems(); - if ($sphere_locations->getEmptyLocations()->count() && $sphere_items->count() < $low_items) { - $optimal_sphere = $sphere_locations; - $low_items = $sphere_items->count(); - } - } - Log::debug("LOW: $low_items"); - - $new_location = $optimal_sphere->getEmptyLocations()->first(); - if ($new_location) { - $location->setItem(); - $new_location->setItem($item); - Log::debug(sprintf('[%s]Moving: %s from: %s to: %s', $i, $item->getNiceName(), $location->getName(), $new_location->getName())); - $swapped = true; - $force = false; - } - } else { - Log::debug(sprintf('[%s]Safe: %s in: %s', $i, $item->getNiceName(), $location->getName())); - } - } - } - if (!$swapped && count($uncollectable_items)) { - Log::debug("Forcing"); - return $this->swapItems($uncollectable_items, $locations, true); - } - } -} diff --git a/app/Helpers/array.php b/app/Helpers/array.php index cb7c5dc46..bf0975605 100644 --- a/app/Helpers/array.php +++ b/app/Helpers/array.php @@ -1,4 +1,5 @@ = 0; --$i) { - $r = get_random_int(0, $i); - list($new_array[$i], $new_array[$r]) = [$new_array[$r], $new_array[$i]]; - } + for ($i = $count - 1; $i >= 0; --$i) { + $r = get_random_int(0, $i); + [$new_array[$i], $new_array[$r]] = [$new_array[$r], $new_array[$i]]; + } - return $new_array; + return $new_array; } /** @@ -43,45 +46,47 @@ function fy_shuffle(array $array) { * * @return array */ -function weighted_random_pick(array $array, array $weights, int $pick = 1) { - $picked = []; - $total_weight = array_sum($weights); - while(--$pick >= 0) { - $random_pick = get_random_int(1, $total_weight); - $current = 0; - foreach ($array as $key => $item) { - $current += $weights[$key]; - if ($random_pick <= $current) { - $picked[] = $item; - break; - } - } - } - return $picked; +function weighted_random_pick(array $array, array $weights, int $pick = 1) +{ + $picked = []; + $total_weight = (int) array_sum($weights); + while (--$pick >= 0) { + $random_pick = get_random_int(1, $total_weight); + $current = 0; + foreach ($array as $key => $item) { + $current += $weights[$key]; + if ($random_pick <= $current) { + $picked[] = $item; + break; + } + } + } + return $picked; } /** * Sort array by key recursively (this is basically an extension of ksort) * @see http://php.net/manual/en/function.ksort.php * - * @param array &$array array to sort + * @param array $array array to sort * @param int $sort_flags optional sort flags see PHP's sort() function for details * * @return bool */ -function ksortr(array &$array, int $sort_flags = SORT_REGULAR) { - if (!is_array($array)) { - return false; - } - ksort($array, $sort_flags); - - foreach ($array as &$sub_array) { - if (is_array($sub_array)) { - ksortr($sub_array, $sort_flags); - } - } - - return true; +function ksortr(array &$array, int $sort_flags = SORT_REGULAR) +{ + if (!is_array($array)) { + return false; + } + ksort($array, $sort_flags); + + foreach ($array as &$sub_array) { + if (is_array($sub_array)) { + ksortr($sub_array, $sort_flags); + } + } + + return true; } /** @@ -95,58 +100,60 @@ function ksortr(array &$array, int $sort_flags = SORT_REGULAR) { * * @return array */ -function sabsi(array $array, $index, string $order = 'asc', bool $natsort = false, bool $case_sensitive = false) { - if (!count($array)) { - return $array; - } - - $temp = []; - $sorted = []; - - foreach(array_keys($array) as $key) { - $temp[$key] = $array[$key][$index]; - } - - if ($natsort) { - if ($case_sensitive) { - natsort($temp); - } else { - natcasesort($temp); - } - if ($order != 'asc') { - $temp = array_reverse($temp, true); - } - } else { - if ($order == 'asc') { - asort($temp); - } else { - arsort($temp); - } - } - foreach(array_keys($temp) as $key) { - if (is_numeric($key)) { - $sorted[] = $array[$key]; - } else { - $sorted[$key] = $array[$key]; - } - } - return $sorted; +function sabsi(array $array, $index, string $order = 'asc', bool $natsort = false, bool $case_sensitive = false) +{ + if (!count($array)) { + return $array; + } + + $temp = []; + $sorted = []; + + foreach (array_keys($array) as $key) { + $temp[$key] = $array[$key][$index]; + } + + if ($natsort) { + if ($case_sensitive) { + natsort($temp); + } else { + natcasesort($temp); + } + if ($order != 'asc') { + $temp = array_reverse($temp, true); + } + } else { + if ($order == 'asc') { + asort($temp); + } else { + arsort($temp); + } + } + foreach (array_keys($temp) as $key) { + if (is_numeric($key)) { + $sorted[] = $array[$key]; + } else { + $sorted[$key] = $array[$key]; + } + } + return $sorted; } -function hash_array($id) { - $ret = 0; - $id = ($id * 99371) % 33554431; - for ($i = 0; $i < 25; ++$i) { - $ret += (($id >> $i) & 1) << ((($i % 5) + 1) * 5 - floor($i / 5)); - } - - return [ - ($ret >> 20) & 0x1F, - ($ret >> 15) & 0x1F, - ($ret >> 10) & 0x1F, - ($ret >> 5) & 0x1F, - $ret & 0x1F, - ]; +function hash_array($id) +{ + $ret = 0; + $id = ($id * 99371) % 33554431; + for ($i = 0; $i < 25; ++$i) { + $ret += (($id >> $i) & 1) << ((($i % 5) + 1) * 5 - floor($i / 5)); + } + + return [ + ($ret >> 20) & 0x1F, + ($ret >> 15) & 0x1F, + ($ret >> 10) & 0x1F, + ($ret >> 5) & 0x1F, + $ret & 0x1F, + ]; } /** @@ -157,46 +164,47 @@ function hash_array($id) { * * @return array */ -function patch_merge_minify(array $patch_left, array $patch_right = []) { - $write_array = []; - // decompose left - foreach ($patch_left as $wri) { - foreach ($wri as $seek => $bytes) { - for ($i = 0; $i < count($bytes); $i++) { - $write_array[$seek + $i] = [$bytes[$i]]; - } - } - } - unset($patch_left); - // decompose right and overwrite - foreach ($patch_right as $wri) { - foreach ($wri as $seek => $bytes) { - for ($i = 0; $i < count($bytes); $i++) { - $write_array[$seek + $i] = [$bytes[$i]]; - } - } - } - unset($patch_right); - $out = $write_array; - unset($write_array); - ksort($out); - - $backwards = array_reverse($out, true); - - // merge down - foreach ($backwards as $off => $value) { - if (isset($backwards[$off - 1])) { - $backwards[$off - 1] = array_merge($backwards[$off - 1], $backwards[$off]); - unset($backwards[$off]); - } - } - - $forwards = array_reverse($backwards, true); - unset($backwards); - - array_walk($forwards, function(&$write, $address) { - $write = [$address => $write]; - }); - - return array_values($forwards); +function patch_merge_minify(array $patch_left, array $patch_right = []) +{ + $write_array = []; + // decompose left + foreach ($patch_left as $wri) { + foreach ($wri as $seek => $bytes) { + for ($i = 0; $i < count($bytes); $i++) { + $write_array[$seek + $i] = [$bytes[$i]]; + } + } + } + unset($patch_left); + // decompose right and overwrite + foreach ($patch_right as $wri) { + foreach ($wri as $seek => $bytes) { + for ($i = 0; $i < count($bytes); $i++) { + $write_array[$seek + $i] = [$bytes[$i]]; + } + } + } + unset($patch_right); + $out = $write_array; + unset($write_array); + ksort($out); + + $backwards = array_reverse($out, true); + + // merge down + foreach ($backwards as $off => $value) { + if (isset($backwards[$off - 1])) { + $backwards[$off - 1] = array_merge($backwards[$off - 1], $backwards[$off]); + unset($backwards[$off]); + } + } + + $forwards = array_reverse($backwards, true); + unset($backwards); + + array_walk($forwards, function (&$write, $address) { + $write = [$address => $write]; + }); + + return array_values($forwards); } diff --git a/app/Helpers/number.php b/app/Helpers/number.php index c3e4081e1..3b6a20d23 100644 --- a/app/Helpers/number.php +++ b/app/Helpers/number.php @@ -1,4 +1,5 @@ >1)|($address&0x7FFF); +function snes_to_pc(int $address) +{ + return (($address & 0x7F0000) >> 1) | ($address & 0x7FFF); } diff --git a/app/Helpers/str.php b/app/Helpers/str.php index 040806129..c5ee8b409 100644 --- a/app/Helpers/str.php +++ b/app/Helpers/str.php @@ -1,4 +1,5 @@ $width) { - $line .= mb_substr($actual, 0, $width).$break; + $line .= mb_substr($actual, 0, $width) . $break; $actual = mb_substr($actual, $width); } } diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php index 8f2863baf..41b239560 100644 --- a/app/Http/Controllers/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -1,17 +1,21 @@ -middleware('guest'); - } + /** + * Create a new controller instance. + * + * @return void + */ + public function __construct() + { + $this->middleware('guest'); + } } diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 98803f490..209c14370 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -1,19 +1,23 @@ -middleware('guest', ['except' => 'logout']); - } + /** + * Create a new controller instance. + * + * @return void + */ + public function __construct() + { + $this->middleware('guest', ['except' => 'logout']); + } } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index e748e71c4..e3fc1b2ac 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -1,49 +1,55 @@ -middleware('guest'); - } + /** + * Create a new controller instance. + * + * @return void + */ + public function __construct() + { + $this->middleware('guest'); + } - /** - * Get a validator for an incoming registration request. - * - * @param array $data - * @return \Illuminate\Contracts\Validation\Validator - */ - protected function validator(array $data) { - return Validator::make($data, [ - 'name' => 'required|max:255', - 'email' => 'required|email|max:255|unique:users', - 'password' => 'required|min:6|confirmed', - ]); - } + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'string', 'min:6', 'confirmed'], + ]); + } - /** - * Create a new user instance after a valid registration. - * - * @param array $data - * @return User - */ - protected function create(array $data) { - return User::create([ - 'name' => $data['name'], - 'email' => $data['email'], - 'password' => bcrypt($data['password']), - ]); - } + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => bcrypt($data['password']), + ]); + } } diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index 635318f91..4007f3019 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -1,19 +1,23 @@ -middleware('guest'); - } + /** + * Create a new controller instance. + * + * @return void + */ + public function __construct() + { + $this->middleware('guest'); + } } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 514b7419e..570c94d71 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -1,10 +1,13 @@ -has('lang')) { + app()->setLocale($request->input('lang')); + } + + try { + $payload = $this->prepSeed($request, true); + $payload['seed']->save(); + SendPatchToDisk::dispatch($payload['seed']); + + $return_payload = array_except($payload, [ + 'seed', + 'spoiler.meta.crystals_ganon', + 'spoiler.meta.crystals_tower', + ]); + + if ($payload['spoiler']['meta']['tournament'] ?? false) { + if ($payload['spoiler']['meta']['spoilers'] ?? false) { + $return_payload = array_except($return_payload, [ + 'spoiler.playthrough' + ]); + } elseif ($payload['spoiler']['meta']['spoilers_ongen'] ?? false) { + $return_payload = array_except($return_payload, [ + 'spoiler.playthrough', + ]); + } else { + $return_payload['spoiler'] = array_except(array_only($return_payload['spoiler'], [ + 'meta', + ]), ['meta.seed']); + } + } + + $cached_payload = $return_payload; + if ($payload['spoiler']['meta']['spoilers_ongen'] ?? false) { + // ensure that the cache doesn't have the spoiler, but the original return_payload still does + $cached_payload['spoiler'] = array_except(array_only($return_payload['spoiler'], [ + 'meta', + ]), ['meta.seed']); + } + $save_data = json_encode(array_except($cached_payload, [ + 'current_rom_hash', + ])); + cache(['hash.' . $payload['hash'] => $save_data], now()->addDays(7)); + + return json_encode($return_payload); + } catch (Exception $exception) { + if (app()->bound('sentry')) { + app('sentry')->captureException($exception); + } + + return response($exception->getMessage(), 409); + } + } + + public function testGenerateSeed(Request $request) + { + try { + return json_encode(array_except($this->prepSeed($request), ['patch', 'seed', 'hash'])); + } catch (Exception $exception) { + if (app()->bound('sentry')) { + app('sentry')->captureException($exception); + } + + return response($exception->getMessage(), 409); + } + } + + protected function prepSeed(Request $request, bool $save = false) + { + $crystals_ganon = $request->input('crystals.ganon', '7'); + $crystals_ganon = $crystals_ganon === 'random' ? get_random_int(0, 7) : $crystals_ganon; + $crystals_tower = $request->input('crystals.tower', '7'); + $crystals_tower = $crystals_tower === 'random' ? get_random_int(0, 7) : $crystals_tower; + $logic = [ + 'none' => 'NoGlitches', + 'overworld_glitches' => 'OverworldGlitches', + 'major_glitches' => 'MajorGlitches', + 'no_logic' => 'None', + ][$request->input('glitches', 'none')]; + $spoiler_meta = []; + + $custom_data = array_dot($request->input('custom')); + $placed_item_count = array_count_values($request->input('l', [])); + // some simple validation + // @TODO: move to validator type classes later + if ( + $request->input('goal', 'ganon') === 'triforce-hunt' + && ($custom_data['item.Goal.Required'] ?? 0) + > ($custom_data['item.count.TriforcePiece'] ?? 0) + ($placed_item_count['TriforcePiece'] ?? 0) + ) { + throw new Exception("Not enough Triforce Pieces for the hunt"); + } + + $purifier_settings = HTMLPurifier_Config::create(config("purifier.default")); + $purifier_settings->loadArray(config("purifier.default")); + $purifier = new HTMLPurifier($purifier_settings); + if ($request->filled('name')) { + $markdowned = Markdown::convertToHtml(substr($request->input('name'), 0, 100)); + $spoiler_meta['name'] = strip_tags($purifier->purify($markdowned)); + } + if ($request->filled('notes')) { + $markdowned = Markdown::convertToHtml(substr($request->input('notes'), 0, 300)); + $spoiler_meta['notes'] = $purifier->purify($markdowned); + } + + $custom_data['item.require.Lamp'] = $custom_data['item.require.Lamp'] ? 0 : 1; + if ($custom_data['rom.freeItemMenu']) { + $custom_data['rom.freeItemMenu'] = 0x00 + | ($custom_data['region.wildMaps'] << 3) + | ($custom_data['region.wildCompasses'] << 2) + | ($custom_data['region.wildBigKeys'] << 1) + | $custom_data['region.wildKeys']; + } + + $world = World::factory($request->input('mode', 'standard'), array_merge([ + 'difficulty' => 'custom', + 'itemPlacement' => $request->input('item_placement', 'basic'), + 'dungeonItems' => $request->input('dungeon_items', 'standard'), + 'accessibility' => $request->input('accessibility', 'items'), + 'goal' => $request->input('goal', 'ganon'), + 'crystals.ganon' => $crystals_ganon, + 'crystals.tower' => $crystals_tower, + 'entrances' => $request->input('entrances', 'none'), + 'mode.weapons' => $request->input('weapons', 'randomized'), + 'tournament' => $request->input('tournament', false), + 'spoilers' => $request->input('spoilers', false), + 'spoilers_ongen' => $request->input('spoilers_ongen', false), + 'spoil.Hints' => $request->input('hints', 'on'), + 'logic' => $logic, + 'item.pool' => $request->input('item.pool', 'normal'), + 'item.functionality' => $request->input('item.functionality', 'normal'), + 'enemizer.bossShuffle' => $request->input('enemizer.boss_shuffle', 'none'), + 'enemizer.enemyShuffle' => $request->input('enemizer.enemy_shuffle', 'none'), + 'enemizer.enemyDamage' => $request->input('enemizer.enemy_damage', 'default'), + 'enemizer.enemyHealth' => $request->input('enemizer.enemy_health', 'default'), + 'customPrizePacks' => true, + ], $custom_data)); + + $locations = $world->getLocations(); + foreach ($request->input('l', []) as $location => $item) { + $decoded_location = base64_decode($location); + if (isset($locations[$decoded_location])) { + if ($item === 'BottleWithRandom') { + $place_item = $world->getBottle(); + } else { + $place_item = Item::get(preg_replace('/:\d+$/', '', $item), $world); + } + if ($world->config('mode.weapons') === 'swordless' && $place_item instanceof Item\Sword) { + $place_item = Item::get('TwentyRupees2', $world); + } + $locations[$decoded_location]->setItem($place_item); + } + } + // force starting bomb and quiver capacities + $world->setPreCollectedItems(new ItemCollection([ + Item::get('BombUpgrade10', $world), + Item::get('ArrowUpgrade10', $world), + Item::get('ArrowUpgrade10', $world), + Item::get('ArrowUpgrade10', $world), + ])); + foreach ($request->input('eq', []) as $item) { + try { + $place_item = Item::get($item, $world); + if ($world->config('mode.weapons') === 'swordless' && $place_item instanceof Item\Sword) { + $place_item = Item::get('TwentyRupees2', $world); + } + $world->addPreCollectedItem($place_item); + } catch (Exception $e) { + // continue regardless of error + } + } + + foreach ($request->input('drops', []) as $pack => $items) { + foreach ($items as $place => $item) { + if ($item == 'auto_fill') { + continue; + } + + $world->setDrop($pack, $place, Sprite::get($item)); + } + } + + $rom = new Rom(env('ENEMIZER_BASE', null)); + $rom->applyPatchFile(public_path('js/base2current.json')); + + $rand = new Randomizer([$world]); + + $rand->randomize(); + $world->writeToRom($rom, $save); + + $worlds = new WorldCollection($rand->getWorlds()); + + if (!$worlds->isWinnable()) { + throw new Exception('Game Unwinnable'); + } + + $spoiler = $world->getSpoiler(array_merge($spoiler_meta, [ + 'entry_crystals_ganon' => $request->input('crystals.ganon', '7'), + 'entry_crystals_tower' => $request->input('crystals.tower', '7'), + 'worlds' => 1, + 'difficulty' => 'custom', + ])); + + $patch = $rom->getWriteLog(); + $rom->setTournamentType('standard'); + $rom->rummageTable(); + + return [ + 'logic' => $world->config('logic'), + 'patch' => patch_merge_minify($patch), + 'spoiler' => $spoiler, + 'hash' => $world->getSeedRecord()->hash, + 'generated' => $world->getSeedRecord()->created_at ? $world->getSeedRecord()->created_at->toIso8601String() : now()->toIso8601String(), + 'seed' => $world->getSeedRecord(), + 'size' => $spoiler['meta']['size'] ?? 2, + 'current_rom_hash' => Rom::HASH, + ]; + } +} diff --git a/app/Http/Controllers/EntranceRandomizerController.php b/app/Http/Controllers/EntranceRandomizerController.php deleted file mode 100644 index e3b11ad28..000000000 --- a/app/Http/Controllers/EntranceRandomizerController.php +++ /dev/null @@ -1,116 +0,0 @@ -prepSeed($request, $seed_id, true); - $save_data = json_encode(array_except($payload, ['current_rom_hash', 'seed'])); - SendPatchToDisk::dispatch($payload['seed']); - cache(['hash.' . $payload['hash'] => $save_data], now()->addDays(7)); - return json_encode(array_except($payload, ['seed'])); - } - - public function generateSpoiler(Request $request, $seed_id) { - return json_encode($this->prepSeed($request, $seed_id)['spoiler']); - } - - public function testGenerateSeed(Request $request, $seed_id = null) { - return json_encode(array_except($this->prepSeed($request, $seed_id), ['patch'])); - } - - protected function prepSeed(Request $request, $seed_id = null, $save = false) { - $difficulty = $request->input('difficulty', 'normal') ?: 'normal'; - $variation = $request->input('variation', 'none') ?: 'none'; - $goal = $request->input('goal', 'ganon') ?: 'ganon'; - $shuffle = $request->input('shuffle', 'full') ?: 'full'; - $enemizer = $request->input('enemizer', false); - $spoilers = $request->input('spoilers', false); - $tournament = $request->filled('tournament') && $request->input('tournament') == 'true'; - $spoiler_meta = [ - '_meta' => [ - 'enemizer' => $enemizer, - 'size' => $enemizer ? 4 : 2, - 'spoilers' => $spoilers, - ], - 'tournament' => $tournament, - ]; - if ($enemizer && $enemizer['bosses']) { - config(['alttp.boss_shuffle' => $enemizer['bosses']]); - } - - switch ($request->input('mode', 'open')) { - case 'open': - case 'swordless': - config(['alttp.mode.state' => $request->input('mode', 'open')]); - break; - default: - config(['alttp.mode.state' => 'open']); - } - - - - $rom = new Rom(env('ENEMIZER_BASE', null)); - $rom->applyPatchFile(public_path('js/base2current.json')); - if ($request->filled('heart_speed')) { - $rom->setHeartBeepSpeed($request->input('heart_speed')); - } - if ($request->filled('menu_speed')) { - $rom->setMenuSpeed($request->input('menu_speed', 'normal')); - } - - $seed_id = is_numeric($seed_id) ? $seed_id : abs(crc32($seed_id)); - - try { - $rand = new EntranceRandomizer($difficulty, 'noglitches', $goal, $variation, $shuffle); - $rand->makeSeed($seed_id); - $rand->writeToRom($rom); - $patch = $rom->getWriteLog(); - $spoiler = $rand->getSpoiler($spoiler_meta); - $hash = ($save) ? $rand->saveSeedRecord() : $spoiler['meta']['seed']; - $rom->setSeedString(str_pad(sprintf("ER %s", $hash), 21, ' ')); - } catch (Exception $e) { - report($e); - return response('Failed', 409); - } - - if ($enemizer) { - $en = new Enemizer($rand, $patch, $enemizer); - $en->makeSeed(); - $en->writeToRom($rom); - $patch = $rom->getWriteLog(); - } - - if ($tournament) { - $rom->setSeedString(str_pad(sprintf("ER TOURNEY %s", $hash), 21, ' ')); - $patch = $rom->getWriteLog(); - if ($spoilers) { - $spoiler = array_except($spoiler, ['playthrough']); - } else { - $spoiler = array_except(array_only($spoiler, ['meta']), ['meta.seed']); - } - } - - if ($save) { - $rom->setStartScreenHash($rand->getSeedRecord()->hashArray()); - $patch = patch_merge_minify($rom->getWriteLog()); - $rand->updateSeedRecordPatch($patch); - } - - return [ - 'logic' => $rand->getLogic(), - 'difficulty' => $difficulty, - 'patch' => patch_merge_minify($patch), - 'spoiler' => array_except($spoiler, ['meta._meta']), - 'hash' => $hash, - 'size' => $enemizer ? 4 : 2, - 'generated' => $rand->getSeedRecord()->created_at ? $rand->getSeedRecord()->created_at->toIso8601String() : now()->toIso8601String(), - 'seed' => $rand->getSeedRecord(), - 'current_rom_hash' => Rom::HASH, - ]; - } -} diff --git a/app/Http/Controllers/ItemRandomizerController.php b/app/Http/Controllers/ItemRandomizerController.php deleted file mode 100644 index a22ccd2f2..000000000 --- a/app/Http/Controllers/ItemRandomizerController.php +++ /dev/null @@ -1,244 +0,0 @@ -has('lang')) { - app()->setLocale($request->input('lang')); - } - try { - $payload = $this->prepSeed($request, $seed_id, true); - $save_data = json_encode(array_except($payload, ['current_rom_hash', 'seed'])); - SendPatchToDisk::dispatch($payload['seed']); - cache(['hash.' . $payload['hash'] => $save_data], now()->addDays(7)); - - return json_encode(array_except($payload, ['seed'])); - } catch (Exception $e) { - return response($e->getMessage(), 409); - } - } - - public function generateSpoiler(Request $request, $seed_id) { - try { - return json_encode($this->prepSeed($request, $seed_id)['spoiler']); - } catch (Exception $e) { - return response($e->getMessage(), 409); - } - } - - public function testGenerateSeed(Request $request, $seed_id = null) { - try { - return json_encode(array_except($this->prepSeed($request, $seed_id), ['patch', 'seed', 'hash'])); - } catch (Exception $e) { - return response($e->getMessage(), 409); - } - } - - protected function prepSeed(Request $request, $seed_id = null, $save = false) { - $difficulty = $request->input('difficulty', 'normal') ?: 'normal'; - $variation = $request->input('variation', 'none') ?: 'none'; - $goal = $request->input('goal', 'ganon') ?: 'ganon'; - $logic = $request->input('logic', 'NoGlitches') ?: 'NoGlitches'; - $game_mode = $request->input('mode', 'standard'); - $weapons_mode = $request->input('weapons', 'randomized'); - $enemizer = ($difficulty != 'custom') ? $request->input('enemizer', false) : false; - $spoilers = $request->input('spoilers', false); - $tournament = $request->filled('tournament') && $request->input('tournament') == 'true'; - $spoiler_meta = [ - '_meta' => [ - 'enemizer' => $enemizer, - 'size' => $enemizer ? 4 : 2, - 'spoilers' => $spoilers, - ], - ]; - if ($enemizer) { - foreach ($enemizer as $key => $value) { - if ($game_mode == 'standard' && in_array($key, ['enemy_health', 'enemy'])) { - unset($enemizer[$key]); - continue; - } - $spoiler_meta["enemizer_$key"] = $value; - } - if ($enemizer['bosses']) { - config(['alttp.boss_shuffle' => $enemizer['bosses']]); - } - } - - if ($difficulty == 'custom') { - $custom_data = array_dot($request->input('data')); - $placed_item_count = array_count_values($request->input('l', [])); - // some simple validation - // @TODO: move to validator type classes later - if ($goal === 'triforce-hunt' - && ($custom_data['alttp.custom.item.Goal.Required'] ?? 0) - > ($custom_data['alttp.custom.item.count.TriforcePiece'] ?? 0) + ($placed_item_count['TriforcePiece'] ?? 0)) { - throw new Exception("Not enough Triforce Pieces for the hunt"); - } - - $purifier_settings = HTMLPurifier_Config::createDefault(config("purifier.default")); - $purifier_settings->loadArray(config("purifier.default")); - $purifier = new HTMLPurifier($purifier_settings); - if ($request->filled('name')) { - $markdowned = Markdown::convertToHtml(substr($request->input('name'), 0, 100)); - $spoiler_meta['name'] = strip_tags($purifier->purify($markdowned)); - } - if ($request->filled('notes')) { - $markdowned = Markdown::convertToHtml(substr($request->input('notes'), 0, 300)); - $spoiler_meta['notes'] = $purifier->purify($markdowned); - } - - $custom_data['alttp.custom.item.require.Lamp'] = $custom_data['alttp.custom.item.require.Lamp'] ? 0 : 1; - if ($custom_data['alttp.custom.rom.freeItemMenu']) { - $custom_data['alttp.custom.rom.freeItemMenu'] = 0x00 - | ($custom_data['alttp.custom.region.wildMaps'] << 3) - | ($custom_data['alttp.custom.region.wildCompasses'] << 2) - | ($custom_data['alttp.custom.region.wildBigKeys'] << 1) - | $custom_data['alttp.custom.region.wildKeys']; - } - config($custom_data); - - $world = World::factory($game_mode, $difficulty, $logic, $goal, $variation); - $locations = $world->getLocations(); - foreach ($request->input('l', []) as $location => $item) { - $decoded_location = base64_decode($location); - if (isset($locations[$decoded_location])) { - if ($item === 'BottleWithRandom') { - $place_item = (new Randomizer)->getBottle(); - } else { - $place_item = Item::get($item); - } - if ($weapons_mode == 'swordless' && $place_item instanceof Item\Sword) { - $place_item = Item::get('TwentyRupees2'); - } - $locations[$decoded_location]->setItem($place_item); - } - } - foreach ($request->input('eq', []) as $item) { - try { - $place_item = Item::get($item); - if ($weapons_mode == 'swordless' && $place_item instanceof Item\Sword) { - $place_item = Item::get('TwentyRupees2'); - } - $world->addPreCollectedItem($place_item); - } catch (Exception $e) {} - } - - foreach ($request->input('drops', []) as $pack => $items) { - foreach ($items as $place => $item) { - if ($item == 'auto_fill') { - continue; - } - - $world->setDrop($pack, $place, Sprite::get($item)); - } - } - } - - config([ - 'alttp.mode.state' => $game_mode, - 'alttp.mode.weapons' => $weapons_mode, - ]); - - $rom = new Rom(env('ENEMIZER_BASE', null)); - $rom->applyPatchFile(public_path('js/base2current.json')); - if ($request->filled('heart_speed')) { - $rom->setHeartBeepSpeed($request->input('heart_speed')); - } - - if ($tournament) { - config([ - "tournament-mode" => true, - ]); - $spoiler_meta['tournament'] = true; - } - - $rom->setTournamentType('none'); - - if (strtoupper($seed_id) == 'VANILLA') { - config([ - 'alttp.mode.state' => 'vanilla', - 'alttp.mode.weapons' => 'uncle', - ]); - $world = $rom->writeVanilla(); - $rand = new Randomizer('vanilla', 'NoGlitches', 'ganon', 'none'); - $rand->setWorld($world); - $rom->setRestrictFairyPonds(false); - return [ - 'logic' => $rand->getLogic(), - 'difficulty' => 'normal', - 'patch' => $rom->getWriteLog(), - 'spoiler' => $rand->getSpoiler(['name' => 'Vanilla']), - 'current_rom_hash' => Rom::HASH, - ]; - } - - $seed_id = is_numeric($seed_id) ? $seed_id : abs(crc32($seed_id)); - - $rand = new Randomizer($difficulty, $logic, $goal, $variation); - if (isset($world)) { - $rand->setWorld($world); - } - - $rand->makeSeed($seed_id); - - $rand->writeToRom($rom); - - if (!$rand->getWorld()->checkWinCondition()) { - throw new Exception('Game Unwinnable'); - } - - $patch = $rom->getWriteLog(); - $spoiler = $rand->getSpoiler($spoiler_meta); - - $hash = ($save) ? $rand->saveSeedRecord() : 'none'; - $rom->setSeedString(str_pad(sprintf("VT %s", $hash), 21, ' ')); - - if ($enemizer) { - $en = new Enemizer($rand, $patch, $enemizer); - $en->makeSeed(); - $en->writeToRom($rom); - $patch = $rom->getWriteLog(); - } - - if ($tournament) { - $rom->setTournamentType('standard'); - $rom->rummageTable(); - $patch = $rom->getWriteLog(); - if ($spoilers) { - $spoiler = array_except($spoiler, ['playthrough']); - } else { - $spoiler = array_except(array_only($spoiler, ['meta']), ['meta.seed']); - } - } - - if ($save) { - $rom->setStartScreenHash($rand->getSeedRecord()->hashArray()); - $patch = patch_merge_minify($rom->getWriteLog()); - $rand->updateSeedRecordPatch($patch); - } - - return [ - 'logic' => $rand->getLogic(), - 'difficulty' => $difficulty, - 'patch' => patch_merge_minify($patch), - 'spoiler' => array_except($spoiler, ['meta._meta']), - 'hash' => $hash, - 'size' => $enemizer ? 4 : 2, - 'generated' => $rand->getSeedRecord()->created_at ? $rand->getSeedRecord()->created_at->toIso8601String() : now()->toIso8601String(), - 'seed' => $rand->getSeedRecord(), - 'current_rom_hash' => Rom::HASH, - ]; - } -} diff --git a/app/Http/Controllers/RandomizerController.php b/app/Http/Controllers/RandomizerController.php new file mode 100644 index 000000000..5545b8eea --- /dev/null +++ b/app/Http/Controllers/RandomizerController.php @@ -0,0 +1,160 @@ +has('lang')) { + app()->setLocale($request->input('lang')); + } + + try { + $payload = $this->prepSeed($request); + $payload['seed']->save(); + SendPatchToDisk::dispatch($payload['seed']); + + $return_payload = array_except($payload, [ + 'seed', + 'spoiler.meta.crystals_ganon', + 'spoiler.meta.crystals_tower', + ]); + + if ($payload['spoiler']['meta']['tournament'] ?? false) { + if ($payload['spoiler']['meta']['spoilers'] ?? false) { + $return_payload = array_except($return_payload, [ + 'spoiler.playthrough' + ]); + } elseif ($payload['spoiler']['meta']['spoilers_ongen'] ?? false) { + $return_payload = array_except($return_payload, [ + 'spoiler.playthrough', + ]); + } else { + $return_payload['spoiler'] = array_except(array_only($return_payload['spoiler'], [ + 'meta', + ]), ['meta.seed']); + } + } + + $cached_payload = $return_payload; + if ($payload['spoiler']['meta']['spoilers_ongen'] ?? false) { + // ensure that the cache doesn't have the spoiler, but the original return_payload still does + $cached_payload['spoiler'] = array_except(array_only($return_payload['spoiler'], [ + 'meta', + ]), ['meta.seed']); + } + $save_data = json_encode(array_except($cached_payload, [ + 'current_rom_hash', + ])); + cache(['hash.' . $payload['hash'] => $save_data], now()->addDays(7)); + + return json_encode($return_payload); + } catch (Exception $exception) { + if (app()->bound('sentry')) { + app('sentry')->captureException($exception); + } + + return response($exception->getMessage(), 409); + } + } + + protected function prepSeed(CreateRandomizedGame $request) + { + $crystals_ganon = $request->input('crystals.ganon', '7'); + $crystals_ganon = $crystals_ganon === 'random' ? get_random_int(0, 7) : $crystals_ganon; + $crystals_tower = $request->input('crystals.tower', '7'); + $crystals_tower = $crystals_tower === 'random' ? get_random_int(0, 7) : $crystals_tower; + $logic = [ + 'none' => 'NoGlitches', + 'overworld_glitches' => 'OverworldGlitches', + 'major_glitches' => 'MajorGlitches', + 'no_logic' => 'None', + ][$request->input('glitches', 'none')]; + + $world = World::factory($request->input('mode', 'standard'), [ + 'itemPlacement' => $request->input('item_placement', 'basic'), + 'dungeonItems' => $request->input('dungeon_items', 'standard'), + 'accessibility' => $request->input('accessibility', 'items'), + 'goal' => $request->input('goal', 'ganon'), + 'crystals.ganon' => $crystals_ganon, + 'crystals.tower' => $crystals_tower, + 'entrances' => $request->input('entrances', 'none'), + 'mode.weapons' => $request->input('weapons', 'randomized'), + 'tournament' => $request->input('tournament', false), + 'spoilers' => $request->input('spoilers', false), + 'spoilers_ongen' => $request->input('spoilers_ongen', false), + 'spoil.Hints' => $request->input('hints', 'on'), + 'logic' => $logic, + 'item.pool' => $request->input('item.pool', 'normal'), + 'item.functionality' => $request->input('item.functionality', 'normal'), + 'enemizer.bossShuffle' => $request->input('enemizer.boss_shuffle', 'none'), + 'enemizer.enemyShuffle' => $request->input('enemizer.enemy_shuffle', 'none'), + 'enemizer.enemyDamage' => $request->input('enemizer.enemy_damage', 'default'), + 'enemizer.enemyHealth' => $request->input('enemizer.enemy_health', 'default'), + ]); + + $rom = new Rom(env('ENEMIZER_BASE', null)); + $rom->applyPatchFile(public_path('js/base2current.json')); + + if ($world->config('entrances') !== 'none') { + $rand = new EntranceRandomizer([$world]); + } else { + $rand = new Randomizer([$world]); + } + + $rand->randomize(); + $world->writeToRom($rom, true); + + // E.R. is responsible for verifying winnability of itself + if ($world->config('entrances') === 'none') { + $worlds = new WorldCollection($rand->getWorlds()); + + if (!$worlds->isWinnable()) { + throw new Exception('Game Unwinnable'); + } + } + + $spoiler = $world->getSpoiler([ + 'entry_crystals_ganon' => $request->input('crystals.ganon', '7'), + 'entry_crystals_tower' => $request->input('crystals.tower', '7'), + 'worlds' => 1, + ]); + + if ($world->isEnemized()) { + $patch = $rom->getWriteLog(); + $en = new Enemizer($world, $patch); + $en->randomize(); + $en->writeToRom($rom); + } + + $patch = $rom->getWriteLog(); + $rom->setTournamentType('standard'); + $rom->rummageTable(); + + if ($world->isEnemized()) { + $world->updateSeedRecordPatch($patch); + } + + return [ + 'logic' => $world->config('logic'), + 'patch' => patch_merge_minify($patch), + 'spoiler' => $spoiler, + 'hash' => $world->getSeedRecord()->hash, + 'generated' => $world->getSeedRecord()->created_at ? $world->getSeedRecord()->created_at->toIso8601String() : now()->toIso8601String(), + 'seed' => $world->getSeedRecord(), + 'size' => $spoiler['meta']['size'] ?? 2, + 'current_rom_hash' => Rom::HASH, + ]; + } +} diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 9301d103d..ddd45ac26 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -1,4 +1,6 @@ -drops = config('item.drop'); - $this->items = array_merge(...array_values(array_only(config('item'), ['advancement', 'nice', 'junk', 'dungeon']))); - $this->items['KeyD3']++; - } +class SettingsController extends Controller +{ + protected $items = []; + protected $drops = []; - public function item(Request $request) { - return config('alttp.randomizer.item'); - } + public function __construct() + { + $this->drops = config('item.drop'); + $this->items = []; + foreach (array_only(config('item'), ['advancement', 'nice', 'junk', 'dungeon']) as $group) { + foreach ($group as $item => $value) { + if (!($this->items[$item] ?? false)) { + $this->items[$item] = 0; + } + $this->items[$item] += $value; + } + } + } - public function entrance(Request $request) { - return config('alttp.randomizer.entrance'); - } + public function item(Request $request) + { + return config('alttp.randomizer.item'); + } - public function customizer(Request $request) { - return Cache::rememberForever('customizer_settings', function() { - $world = World::factory(); - $items = Item::all(); - $sprites = Sprite::all(); - return [ - 'locations' => array_values($world->getLocations()->filter(function($location) { - return !$location instanceof Location\Prize\Event - && !$location instanceof Location\Trade; - })->map(function($location) { - return [ - 'hash' => base64_encode($location->getName()), - 'name' => $location->getName(), - 'region' => $location->getRegion()->getName(), - 'class' => $location instanceof Location\Fountain ? 'bottles' - : ($location instanceof Location\Medallion ? 'medallions' - : ($location instanceof Location\Prize ? 'prizes' : 'items')), - ]; - })), - 'prizepacks' => array_values(array_map(function($pack) { - return [ - 'name' => $pack->getName(), - 'slots' => count($pack->getDrops()), - ]; - }, $world->getPrizePacks())), - 'items' => array_merge([ - ['value' => 'auto_fill', 'name' => 'Random', 'placed' => 0], - ['value' => 'BottleWithRandom', 'name' => 'Bottle (Random)', 'count' => 4, 'placed' => 0], - ], - $items->filter(function($item) { - return !$item instanceof Item\Pendant - && !$item instanceof Item\Crystal - && !$item instanceof Item\Event - && !$item instanceof Item\Programmable - && !$item instanceof Item\BottleContents - && !in_array($item->getName(), [ - 'BigKey', - 'Compass', - 'Key', - 'KeyGK', - 'L2Sword', - 'Map', - 'MapLW', - 'MapDW', - 'multiRNG', - 'PowerStar', - 'singleRNG', - 'TwentyRupees2', - 'HeartContainerNoAnimation', - 'UncleSword', - 'ShopKey', - 'ShopArrow', - ]) - || $item == Item::get('Triforce'); - })->map(function($item) { - return [ - 'value' => $item->getName(), - 'name' => $item->getNiceName(), - 'count' => $this->items[$item->getName()] ?? 0, - 'placed' => 0, - ]; - }) - ), - 'prizes' => array_merge([ - ['value' => 'auto_fill', 'name' => 'Random', 'placed' => 0], - ], - $items->filter(function($item) { - return $item instanceof Item\Pendant - || $item instanceof Item\Crystal; - })->map(function($item) { - return [ - 'value' => $item->getName(), - 'name' => $item->getNiceName(), - 'count' => 0, - 'placed' => 0, - ]; - }) - ), - 'medallions' => array_merge([ - ['value' => 'auto_fill', 'name' => 'Random', 'placed' => 0], - ], $items->filter(function($item) { - return $item instanceof Item\Medallion; - })->map(function($item) { - return [ - 'value' => $item->getName(), - 'name' => $item->getNiceName(), - 'count' => 0, - 'placed' => 0, - ]; - }) - ), - 'bottles' => array_merge([ - ['value' => 'auto_fill', 'name' => 'Random', 'placed' => 0], - ], $items->filter(function($item) { - return $item instanceof Item\Bottle; - })->map(function($item) { - return [ - 'value' => $item->getName(), - 'name' => $item->getNiceName(), - 'count' => 0, - 'placed' => 0, - ]; - }) - ), - 'droppables' => array_merge([ - ['value' => 'auto_fill', 'name' => 'Random', 'placed' => 0], - ], array_values($sprites->filter(function($sprite) { - return $sprite instanceof Sprite\Droppable; - })->map(function($item) { - return [ - 'value' => $item->getName(), - 'name' => $item->getNiceName(), - 'count' => $this->drops[$item->getName()] ?? 0, - 'placed' => 0, - ]; - }) - )), - ]; - }); - } + public function customizer(Request $request) + { + return Cache::rememberForever('customizer_settings', function () { + $world = World::factory(); + $items = Item::all($world); + $sprites = Sprite::all(); + return [ + 'locations' => array_values($world->getLocations()->filter(function ($location) { + return !$location instanceof Location\Prize\Event + && !$location instanceof Location\Trade; + })->map(function ($location) { + return [ + 'hash' => base64_encode($location->getName()), + 'name' => $location->getName(), + 'region' => $location->getRegion()->getName(), + 'class' => $location instanceof Location\Fountain ? 'bottles' + : ($location instanceof Location\Medallion ? 'medallions' + : ($location instanceof Location\Prize ? 'prizes' : 'items')), + ]; + })), + 'prizepacks' => array_values(array_map(function ($pack) { + return [ + 'name' => $pack->getName(), + 'slots' => count($pack->getDrops()), + ]; + }, $world->getPrizePacks())), + 'items' => array_merge( + [ + ['value' => 'auto_fill', 'name' => 'item.Random', 'placed' => 0], + ['value' => 'BottleWithRandom', 'name' => 'item.BottleWithRandom', 'count' => 4, 'placed' => 0], + ], + $items->filter(function ($item) use ($world) { + return !$item instanceof Item\Pendant + && !$item instanceof Item\Crystal + && !$item instanceof Item\Event + && !$item instanceof Item\Programmable + && !$item instanceof Item\BottleContents + && !in_array($item->getRawName(), [ + 'BigKey', + 'Compass', + 'Key', + 'KeyGK', + 'L2Sword', + 'Map', + 'MapLW', + 'MapDW', + 'multiRNG', + 'PowerStar', + 'singleRNG', + 'TwentyRupees2', + 'HeartContainerNoAnimation', + 'UncleSword', + 'ShopKey', + 'ShopArrow', + 'ProgressiveBowAlternate', + 'BombUpgrade50', + 'ArrowUpgrade70', + ]) + || $item == Item::get('Triforce', $world); + })->map(function ($item) { + return [ + 'value' => $item->getName(), + 'name' => $item->getI18nName(), + 'count' => $this->items[$item->getRawName()] ?? 0, + 'placed' => 0, + ]; + }) + ), + 'prizes' => array_merge( + [ + ['value' => 'auto_fill', 'name' => 'item.Random', 'placed' => 0], + ], + $items->filter(function ($item) { + return $item instanceof Item\Pendant + || $item instanceof Item\Crystal; + })->map(function ($item) { + return [ + 'value' => $item->getName(), + 'name' => $item->getI18nName(), + 'count' => 0, + 'placed' => 0, + ]; + }) + ), + 'medallions' => array_merge( + [ + ['value' => 'auto_fill', 'name' => 'item.Random', 'placed' => 0], + ], + $items->filter(function ($item) { + return $item instanceof Item\Medallion; + })->map(function ($item) { + return [ + 'value' => $item->getName(), + 'name' => $item->getI18nName(), + 'count' => 0, + 'placed' => 0, + ]; + }) + ), + 'bottles' => array_merge( + [ + ['value' => 'auto_fill', 'name' => 'item.Random', 'placed' => 0], + ], + $items->filter(function ($item) { + return $item instanceof Item\Bottle; + })->map(function ($item) { + return [ + 'value' => $item->getName(), + 'name' => $item->getI18nName(), + 'count' => 0, + 'placed' => 0, + ]; + }) + ), + 'droppables' => array_merge([ + ['value' => 'auto_fill', 'name' => 'item.Random', 'placed' => 0], + ], array_values( + $sprites->filter(function ($sprite) { + return $sprite instanceof Sprite\Droppable; + })->map(function ($item) { + return [ + 'value' => $item->getName(), + 'name' => $item->getI18nName(), + 'count' => $this->drops[$item->getName()] ?? 0, + 'placed' => 0, + ]; + }) + )), + ]; + }); + } - public function rom(Request $request) { - return [ - 'rom_hash' => Rom::HASH, - 'base_file' => mix('js/base2current.json')->toHtml(), - ]; - } + public function rom(Request $request) + { + $base = mix('js/base2current.json'); + return [ + 'rom_hash' => Rom::HASH, + 'base_file' => $base instanceof HtmlString ? $base->toHtml() : $base, + ]; + } - public function sprites(Request $request) { - $sprites = []; - foreach (config('sprites') as $file => $info) { - $sprites[] = [ - 'name' => $info['name'], - 'author' => $info['author'], - 'file' => 'https://s3.us-east-2.amazonaws.com/alttpr/' . $file, - ]; - } - return $sprites; - } + public function sprites(Request $request) + { + $sprites = []; + foreach (config('sprites') as $file => $info) { + $sprites[] = [ + 'name' => $info['name'], + 'author' => $info['author'], + 'file' => 'https://alttpr.s3.us-east-2.amazonaws.com/' . $file, + ]; + } + return $sprites; + } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 96f3b717a..ecd52d5f5 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -1,48 +1,51 @@ - [ - \ALttP\Http\Middleware\EncryptCookies::class, - \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, - \Illuminate\Session\Middleware\StartSession::class, - \Illuminate\View\Middleware\ShareErrorsFromSession::class, - \ALttP\Http\Middleware\VerifyCsrfToken::class, - \Illuminate\Routing\Middleware\SubstituteBindings::class, - ], + /** + * The application's route middleware groups. + */ + protected $middlewareGroups = [ + 'web' => [ + \ALttP\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \ALttP\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], - 'api' => [ - 'throttle:60,1', - 'bindings', - ], - ]; + 'api' => [ + 'throttle:60,1', + 'bindings', + ], + ]; - /** - * The application's route middleware. - * - * These middleware may be assigned to groups or used individually. - */ - protected $routeMiddleware = [ - 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, - 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, - 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, - 'locale' => \ALttP\Http\Middleware\Locale::class, - 'can' => \Illuminate\Auth\Middleware\Authorize::class, - 'guest' => \ALttP\Http\Middleware\RedirectIfAuthenticated::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - ]; + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + */ + protected $routeMiddleware = [ + 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, + 'locale' => \ALttP\Http\Middleware\Locale::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \ALttP\Http\Middleware\RedirectIfAuthenticated::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + ]; } diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php index 9df43451b..94535eb50 100644 --- a/app/Http/Middleware/EncryptCookies.php +++ b/app/Http/Middleware/EncryptCookies.php @@ -1,12 +1,13 @@ -segment(1); +class Locale +{ + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @return mixed + */ + public function handle($request, Closure $next) + { + $segment = $request->segment(1); - if (!in_array($segment, config('app.locales'))) { - $segment = config('app.locale'); - return redirect("/$segment" . $request->getRequestUri(), 301); - } + if (!in_array($segment, config('app.locales'))) { + $segment = config('app.locale'); + return redirect("/$segment" . $request->getRequestUri(), 301); + } - app()->setLocale($segment); + app()->setLocale($segment); - return $next($request); - } + return $next($request); + } } diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index 14dcb61d9..01179d208 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -1,22 +1,26 @@ -check()) { - return redirect('/home'); - } +class RedirectIfAuthenticated +{ + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string|null $guard + * @return mixed + */ + public function handle($request, Closure $next, $guard = null) + { + if (Auth::guard($guard)->check()) { + return redirect('/home'); + } - return $next($request); - } + return $next($request); + } } diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index c9d28a8f5..c34a55520 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -1,17 +1,29 @@ - [ + Rule::in($valid_settings['glitches_required']), + ], + 'item_placement' => [ + Rule::in($valid_settings['item_placement']), + ], + 'dungeon_items' => [ + Rule::in($valid_settings['dungeon_items']), + ], + 'accessibility' => [ + Rule::in($valid_settings['accessibility']), + ], + 'goal' => [ + Rule::in($valid_settings['goals']), + ], + 'crystals.tower' => [ + Rule::in($valid_settings['tower_open']), + ], + 'crystals.ganon' => [ + Rule::in($valid_settings['ganon_open']), + ], + 'mode' => [ + Rule::in($valid_settings['world_state']), + ], + 'entrances' => [ + Rule::in($valid_settings['entrance_shuffle']), + ], + 'enemizer.boss_shuffle' => [ + Rule::in($valid_settings['boss_shuffle']), + ], + 'enemizer.enemy_shuffle' => [ + Rule::in($valid_settings['enemy_shuffle']), + ], + 'hints' => [ + Rule::in($valid_settings['hints']), + ], + 'weapons' => [ + Rule::in($valid_settings['weapons']), + ], + 'item.pool' => [ + Rule::in($valid_settings['item_pool']), + ], + 'item.functionality' => [ + Rule::in($valid_settings['item_functionality']), + ], + 'enemizer.enemy_damage' => [ + Rule::in($valid_settings['enemy_damage']), + ], + 'enemizer.enemy_health' => [ + Rule::in($valid_settings['enemy_health']), + ], + ]; + } +} diff --git a/app/Item.php b/app/Item.php index 65ec6988f..4b421b7d5 100644 --- a/app/Item.php +++ b/app/Item.php @@ -1,392 +1,401 @@ -id; - /** - * Get the Item by name - * - * @param string $name Name of Item - * - * @throws Exception if the Item doesn't exist - * - * @return Item - */ - static public function get(string $name) { - $items = static::all(); - if (isset($items[$name])) { - return $items[$name]; - } + if (isset($items[$world_name])) { + return $items[$world_name]; + } - return static::getNice($name); - } + return static::getNice($name, $world); + } - /** - * Get the Item by nice name - * - * @param string $name Name of Item - * - * @throws Exception if the Item doesn't exist - * - * @return Item - */ - static public function getNice(string $name) { - $items = static::all(); + /** + * Get the Item by nice name + * + * @param string $name Name of Item + * @param \ALttP\World $world World item belongs to + * + * @throws \Exception if the Item doesn't exist + * + * @return Item + */ + public static function getNice(string $name, World $world) + { + $items = static::all($world); - foreach ($items as $item) { - if ($item->getNiceName() == $name) { - return $item; - } - } + foreach ($items as $item) { + if ($item->getNiceName() == $name) { + return $item; + } + } - throw new \Exception('Unknown Item: ' . $name); - } + throw new \Exception('Unknown Item: ' . $name); + } - /** - * Get the Item by byte - * - * @param int $byte byte of Item - * - * @throws Exception if the Item doesn't exist - * - * @return Item - */ - static public function getWithByte(int $byte) { - foreach (static::all() as $item) { - if ($item->bytes[0] == $byte) { - return $item; - } - } + /** + * Clears the internal cache so we don't leak memory in testing. + * + * @return void + */ + public static function clearCache(): void + { + static::$items = []; + static::$worlds = []; + } - throw new \Exception('Unknown Item with byte: ' . $byte); - } + /** + * Get the all known Items. + * + * @param \ALttP\World $world World items belongs to + * + * @return ItemCollection + */ + public static function all(World $world) + { + if (isset(static::$items[$world->id])) { + return static::$items[$world->id]; + } + static::$worlds[$world->id] = $world; - /** - * Get the Item by bytes - * - * @param array $bytes array of bytes of Item - * - * @throws Exception if the Item doesn't exist - * - * @return Item - */ - static public function getWithBytes(array $bytes) { - foreach (static::all() as $item) { - foreach ($bytes as $key => $byte) { - if (!isset($item->bytes[$key]) || $item->bytes[$key] != $byte) { - continue 2; - } - } - return $item; - } + static::$items[$world->id] = new ItemCollection([ + new Item('Nothing', [0x5A], $world), + new Item\Sword('L1Sword', [0x49], $world), + new Item\Sword('L1SwordAndShield', [0x00], $world), + new Item\Sword('L2Sword', [0x01], $world), + new Item\Sword('MasterSword', [0x50], $world), + new Item\Sword('L3Sword', [0x02], $world), + new Item\Sword('L4Sword', [0x03], $world), + new Item\Shield('BlueShield', [0x04], $world), + new Item\Shield('RedShield', [0x05], $world), + new Item\Shield('MirrorShield', [0x06], $world), + new Item('FireRod', [0x07], $world), + new Item('IceRod', [0x08], $world), + new Item('Hammer', [0x09], $world), + new Item('Hookshot', [0x0A], $world), + new Item\Bow('Bow', [0x0B], $world), + new Item('Boomerang', [0x0C], $world), + new Item('Powder', [0x0D], $world), + new Item\BottleContents('Bee', [0x0E], $world), + new Item\Medallion('Bombos', [0x0f, 0x00, 't0' => 0x31, 't1' => 0x90, 't2' => 0x00, 'm0' => 0x31, 'm1' => 0x80, 'm2' => 0x00], $world), + new Item\Medallion('Ether', [0x10, 0x01, 't0' => 0x31, 't1' => 0x98, 't2' => 0x00, 'm0' => 0x13, 'm1' => 0x9F, 'm2' => 0xF1], $world), + new Item\Medallion('Quake', [0x11, 0x02, 't0' => 0x14, 't1' => 0xEF, 't2' => 0xC4, 'm0' => 0x31, 'm1' => 0x88, 'm2' => 0x00], $world), + new Item('Lamp', [0x12], $world), + new Item('Shovel', [0x13], $world), + new Item('OcarinaInactive', [0x14], $world), + new Item('CaneOfSomaria', [0x15], $world), + new Item\Bottle('Bottle', [0x16], $world), + new Item\Upgrade\Health('PieceOfHeart', [0x17], $world, .25), + new Item('CaneOfByrna', [0x18], $world), + new Item('Cape', [0x19], $world), + new Item('MagicMirror', [0x1A], $world), + new Item('PowerGlove', [0x1B], $world), + new Item('TitansMitt', [0x1C], $world), + new Item('BookOfMudora', [0x1D], $world), + new Item('Flippers', [0x1E], $world), + new Item('MoonPearl', [0x1F], $world), + new Item('BugCatchingNet', [0x21], $world), + new Item('BlueMail', [0x22], $world), + new Item('RedMail', [0x23], $world), + new Item\Key('Key', [0x24], $world), + new Item\Compass('Compass', [0x25], $world), + new Item\Upgrade\Health('HeartContainerNoAnimation', [0x26], $world, 1), + new Item('Bomb', [0x27], $world), + new Item('ThreeBombs', [0x28], $world), + new Item('Mushroom', [0x29], $world), + new Item('RedBoomerang', [0x2A], $world), + new Item\Bottle('BottleWithRedPotion', [0x2B], $world), + new Item\Bottle('BottleWithGreenPotion', [0x2C], $world), + new Item\Bottle('BottleWithBluePotion', [0x2D], $world), + new Item\BottleContents('RedPotion', [0x2E], $world), + new Item\BottleContents('GreenPotion', [0x2F], $world), + new Item\BottleContents('BluePotion', [0x30], $world), + new Item('TenBombs', [0x31], $world), + new Item\BigKey('BigKey', [0x32], $world), + new Item\Map('Map', [0x33], $world), + new Item('OneRupee', [0x34], $world), + new Item('FiveRupees', [0x35], $world), + new Item('TwentyRupees', [0x36], $world), + new Item\Pendant('PendantOfCourage', [0x37, 0x04, 0x38, 0x62, 0x00, 0x69, 0x01], $world), + new Item\Pendant('PendantOfWisdom', [0x38, 0x01, 0x32, 0x60, 0x00, 0x69, 0x03], $world), + new Item\Pendant('PendantOfPower', [0x39, 0x02, 0x34, 0x60, 0x00, 0x69, 0x02], $world), + new Item\Bow('BowAndArrows', [0x3A], $world), + new Item\Bow('BowAndSilverArrows', [0x3B], $world), + new Item\Bottle('BottleWithBee', [0x3C], $world), + new Item\Bottle('BottleWithFairy', [0x3D], $world), + new Item\Upgrade\Health('BossHeartContainer', [0x3E], $world, 1), + new Item\Upgrade\Health('HeartContainer', [0x3F], $world, 1), + new Item('OneHundredRupees', [0x40], $world), + new Item('FiftyRupees', [0x41], $world), + new Item('Heart', [0x42], $world), + new Item\Arrow('Arrow', [0x43], $world), + new Item\Arrow('TenArrows', [0x44], $world), + new Item('SmallMagic', [0x45], $world), + new Item('ThreeHundredRupees', [0x46], $world), + new Item('TwentyRupees2', [0x47], $world), + new Item\Bottle('BottleWithGoldBee', [0x48], $world), + new Item('OcarinaActive', [0x4A], $world), + new Item('PegasusBoots', [0x4B], $world), + new Item\Upgrade\Bomb('BombUpgrade5', [0x51], $world), + new Item\Upgrade\Bomb('BombUpgrade10', [0x52], $world), + new Item\Upgrade\Bomb('BombUpgrade50', [0x4C], $world), + new Item\Upgrade\Arrow('ArrowUpgrade5', [0x53], $world), + new Item\Upgrade\Arrow('ArrowUpgrade10', [0x54], $world), + new Item\Upgrade\Arrow('ArrowUpgrade70', [0x4D], $world), + new Item\Upgrade\Magic('HalfMagic', [0x4E], $world), + new Item\Upgrade\Magic('QuarterMagic', [0x4F], $world), + new Item\Programmable('Programmable1', [0x55], $world), + new Item\Programmable('Programmable2', [0x56], $world), + new Item\Programmable('Programmable3', [0x57], $world), + new Item('SilverArrowUpgrade', [0x58], $world), + new Item('Rupoor', [0x59], $world), + new Item('RedClock', [0x5B], $world), + new Item('BlueClock', [0x5C], $world), + new Item('GreenClock', [0x5D], $world), + new Item\Sword('ProgressiveSword', [0x5E], $world), + new Item\Shield('ProgressiveShield', [0x5F], $world), + new Item('ProgressiveArmor', [0x60], $world), + new Item('ProgressiveGlove', [0x61], $world), + new Item('singleRNG', [0x62], $world), + new Item('multiRNG', [0x63], $world), + new Item\Bow('ProgressiveBow', [0x64], $world), + new Item\Bow('ProgressiveBowAlternate', [0x65], $world), + new Item\Event('Triforce', [0x6A], $world), + new Item('PowerStar', [0x6B], $world), + new Item('TriforcePiece', [0x6C], $world), + new Item\Map('MapLW', [0x70], $world), + new Item\Map('MapDW', [0x71], $world), + new Item\Map('MapA2', [0x72], $world), + new Item\Map('MapD7', [0x73], $world), + new Item\Map('MapD4', [0x74], $world), + new Item\Map('MapP3', [0x75], $world), + new Item\Map('MapD5', [0x76], $world), + new Item\Map('MapD3', [0x77], $world), + new Item\Map('MapD6', [0x78], $world), + new Item\Map('MapD1', [0x79], $world), + new Item\Map('MapD2', [0x7A], $world), + new Item\Map('MapA1', [0x7B], $world), + new Item\Map('MapP2', [0x7C], $world), + new Item\Map('MapP1', [0x7D], $world), + new Item\Map('MapH1', [0x7E], $world), + new Item\Map('MapH2', [0x7F], $world), + new Item\Compass('CompassA2', [0x82], $world), + new Item\Compass('CompassD7', [0x83], $world), + new Item\Compass('CompassD4', [0x84], $world), + new Item\Compass('CompassP3', [0x85], $world), + new Item\Compass('CompassD5', [0x86], $world), + new Item\Compass('CompassD3', [0x87], $world), + new Item\Compass('CompassD6', [0x88], $world), + new Item\Compass('CompassD1', [0x89], $world), + new Item\Compass('CompassD2', [0x8A], $world), + new Item\Compass('CompassA1', [0x8B], $world), + new Item\Compass('CompassP2', [0x8C], $world), + new Item\Compass('CompassP1', [0x8D], $world), + new Item\Compass('CompassH1', [0x8E], $world), + new Item\Compass('CompassH2', [0x8F], $world), + new Item\BigKey('BigKeyA2', [0x92], $world), + new Item\BigKey('BigKeyD7', [0x93], $world), + new Item\BigKey('BigKeyD4', [0x94], $world), + new Item\BigKey('BigKeyP3', [0x95], $world), + new Item\BigKey('BigKeyD5', [0x96], $world), + new Item\BigKey('BigKeyD3', [0x97], $world), + new Item\BigKey('BigKeyD6', [0x98], $world), + new Item\BigKey('BigKeyD1', [0x99], $world), + new Item\BigKey('BigKeyD2', [0x9A], $world), + new Item\BigKey('BigKeyA1', [0x9B], $world), + new Item\BigKey('BigKeyP2', [0x9C], $world), + new Item\BigKey('BigKeyP1', [0x9D], $world), + new Item\BigKey('BigKeyH1', [0x9E], $world), + new Item\BigKey('BigKeyH2', [0x9F], $world), + new Item\Key('KeyH2', [0xA0], $world), + new Item\Key('KeyH1', [0xA1], $world), + new Item\Key('KeyP1', [0xA2], $world), + new Item\Key('KeyP2', [0xA3], $world), + new Item\Key('KeyA1', [0xA4], $world), + new Item\Key('KeyD2', [0xA5], $world), + new Item\Key('KeyD1', [0xA6], $world), + new Item\Key('KeyD6', [0xA7], $world), + new Item\Key('KeyD3', [0xA8], $world), + new Item\Key('KeyD5', [0xA9], $world), + new Item\Key('KeyP3', [0xAA], $world), + new Item\Key('KeyD4', [0xAB], $world), + new Item\Key('KeyD7', [0xAC], $world), + new Item\Key('KeyA2', [0xAD], $world), + new Item\Key('KeyGK', [0xAF], $world), + new Item\Crystal('Crystal1', [null, 0x02, 0x34, 0x64, 0x40, 0x7F, 0x06], $world), + new Item\Crystal('Crystal2', [null, 0x10, 0x34, 0x64, 0x40, 0x79, 0x06], $world), + new Item\Crystal('Crystal3', [null, 0x40, 0x34, 0x64, 0x40, 0x6C, 0x06], $world), + new Item\Crystal('Crystal4', [null, 0x20, 0x34, 0x64, 0x40, 0x6D, 0x06], $world), + new Item\Crystal('Crystal5', [null, 0x04, 0x32, 0x64, 0x40, 0x6E, 0x06], $world), + new Item\Crystal('Crystal6', [null, 0x01, 0x32, 0x64, 0x40, 0x6F, 0x06], $world), + new Item\Crystal('Crystal7', [null, 0x08, 0x34, 0x64, 0x40, 0x7C, 0x06], $world), + new Item\Event('RescueZelda', [null], $world), + new Item\Event('DefeatAgahnim', [null], $world), + new Item\Event('BigRedBomb', [null], $world), + new Item\Event('DefeatAgahnim2', [null], $world), + new Item\Event('DefeatGanon', [null], $world), + ]); - throw new \Exception('Unknown Item with bytes: ' . json_encode($bytes)); - } + // Logical aliases + static::$items[$world->id]->addItem(new ItemAlias('UncleSword', 'ProgressiveSword', $world)); + static::$items[$world->id]->addItem(new ItemAlias('ShopKey', 'KeyGK', $world)); + static::$items[$world->id]->addItem(new ItemAlias('ShopArrow', 'Arrow', $world)); - /** - * Get the all known Items - * - * @return ItemCollection - */ - static public function all() { - if (static::$items) { - return static::$items; - } + static::$items[$world->id]->setChecksForWorld($world->id); - static::$items = new ItemCollection([ - new Item('Nothing', __('item.Nothing'), [0x5A]), - new Item\Sword('L1Sword', __('item.L1Sword'), [0x49]), // Uncle must be dead - new Item\Sword('L1SwordAndShield', __('item.L1SwordAndShield'), [0x00]), // Uncle must be dead - new Item\Sword('L2Sword', __('item.L2Sword'), [0x01]), - new Item\Sword('MasterSword', __('item.MasterSword'), [0x50]), - new Item\Sword('L3Sword', __('item.L3Sword'), [0x02]), // Uncle must be dead - new Item\Sword('L4Sword', __('item.L4Sword'), [0x03]), // Uncle must be dead - new Item\Shield('BlueShield', __('item.BlueShield'), [0x04]), // Uncle must be dead - new Item\Shield('RedShield', __('item.RedShield'), [0x05]), // Uncle must be dead - new Item\Shield('MirrorShield', __('item.MirrorShield'), [0x06]), // Uncle must be dead - new Item('FireRod', __('item.FireRod'), [0x07]), - new Item('IceRod', __('item.IceRod'), [0x08]), - new Item('Hammer', __('item.Hammer'), [0x09]), - new Item('Hookshot', __('item.Hookshot'), [0x0A]), - new Item\Bow('Bow', __('item.Bow'), [0x0B]), - new Item('Boomerang', __('item.Boomerang'), [0x0C]), - new Item('Powder', __('item.Powder'), [0x0D]), - new Item\BottleContents('Bee', __('item.Bee'), [0x0E]), - new Item\Medallion('Bombos', __('item.Bombos'), [0x0f, 0x00, 't0' => 0x31, 't1' => 0x90, 't2' => 0x00, 'm0' => 0x31, 'm1' => 0x80, 'm2' => 0x00]), - new Item\Medallion('Ether', __('item.Ether'), [0x10, 0x01, 't0' => 0x31, 't1' => 0x98, 't2' => 0x00, 'm0' => 0x13, 'm1' => 0x9F, 'm2' => 0xF1]), - new Item\Medallion('Quake', __('item.Quake'), [0x11, 0x02, 't0' => 0x14, 't1' => 0xEF, 't2' => 0xC4, 'm0' => 0x31, 'm1' => 0x88, 'm2' => 0x00]), - new Item('Lamp', __('item.Lamp'), [0x12]), - new Item('Shovel', __('item.Shovel'), [0x13]), - new Item('OcarinaInactive', __('item.OcarinaInactive'), [0x14]), - new Item('CaneOfSomaria', __('item.CaneOfSomaria'), [0x15]), - new Item\Bottle('Bottle', __('item.Bottle'), [0x16]), - new Item\Upgrade\Health('PieceOfHeart', __('item.PieceOfHeart'), [0x17]), - new Item('CaneOfByrna', __('item.CaneOfByrna'), [0x18]), - new Item('Cape', __('item.Cape'), [0x19]), - new Item('MagicMirror', __('item.MagicMirror'), [0x1A]), - new Item('PowerGlove', __('item.PowerGlove'), [0x1B]), - new Item('TitansMitt', __('item.TitansMitt'), [0x1C]), - new Item('BookOfMudora', __('item.BookOfMudora'), [0x1D]), - new Item('Flippers', __('item.Flippers'), [0x1E]), - new Item('MoonPearl', __('item.MoonPearl'), [0x1F]), - new Item('BugCatchingNet', __('item.BugCatchingNet'), [0x21]), - new Item('BlueMail', __('item.BlueMail'), [0x22]), - new Item('RedMail', __('item.RedMail'), [0x23]), - new Item\Key('Key', __('item.Key'), [0x24]), - new Item\Compass('Compass', __('item.Compass'), [0x25]), - new Item\Upgrade\Health('HeartContainerNoAnimation', __('item.HeartContainerNoAnimation'), [0x26]), - new Item('Bomb', __('item.Bomb'), [0x27]), - new Item('ThreeBombs', __('item.ThreeBombs'), [0x28]), - new Item('Mushroom', __('item.Mushroom'), [0x29]), - new Item('RedBoomerang', __('item.RedBoomerang'), [0x2A]), - new Item\Bottle('BottleWithRedPotion', __('item.BottleWithRedPotion'), [0x2B]), - new Item\Bottle('BottleWithGreenPotion', __('item.BottleWithGreenPotion'), [0x2C]), - new Item\Bottle('BottleWithBluePotion', __('item.BottleWithBluePotion'), [0x2D]), - new Item\BottleContents('RedPotion', __('item.RedPotion'), [0x2E]), - new Item\BottleContents('GreenPotion', __('item.GreenPotion'), [0x2F]), - new Item\BottleContents('BluePotion', __('item.BluePotion'), [0x30]), - new Item('TenBombs', __('item.TenBombs'), [0x31]), - new Item\BigKey('BigKey', __('item.BigKey'), [0x32]), - new Item\Map('Map', __('item.Map'), [0x33]), - new Item('OneRupee', __('item.OneRupee'), [0x34]), - new Item('FiveRupees', __('item.FiveRupees'), [0x35]), - new Item('TwentyRupees', __('item.TwentyRupees'), [0x36]), - new Item\Pendant('PendantOfCourage', __('item.PendantOfCourage'), [0x37, 0x04, 0x38, 0x62, 0x00, 0x69, 0x01]), - new Item\Pendant('PendantOfWisdom', __('item.PendantOfWisdom'), [0x38, 0x01, 0x32, 0x60, 0x00, 0x69, 0x03]), - new Item\Pendant('PendantOfPower', __('item.PendantOfPower'), [0x39, 0x02, 0x34, 0x60, 0x00, 0x69, 0x02]), - new Item\Bow('BowAndArrows', __('item.BowAndArrows'), [0x3A]), - new Item\Bow('BowAndSilverArrows', __('item.BowAndSilverArrows'), [0x3B]), - new Item\Bottle('BottleWithBee', __('item.BottleWithBee'), [0x3C]), - new Item\Bottle('BottleWithFairy', __('item.BottleWithFairy'), [0x3D]), - new Item\Upgrade\Health('BossHeartContainer', __('item.BossHeartContainer'), [0x3E]), - new Item\Upgrade\Health('HeartContainer', __('item.HeartContainer'), [0x3F]), - new Item('OneHundredRupees', __('item.OneHundredRupees'), [0x40]), - new Item('FiftyRupees', __('item.FiftyRupees'), [0x41]), - new Item('Heart', __('item.Heart'), [0x42]), - new Item\Arrow('Arrow', __('item.Arrow'), [0x43]), - new Item\Arrow('TenArrows', __('item.TenArrows'), [0x44]), - new Item('SmallMagic', __('item.SmallMagic'), [0x45]), - new Item('ThreeHundredRupees', __('item.ThreeHundredRupees'), [0x46]), - new Item('TwentyRupees2', __('item.TwentyRupees2'), [0x47]), - new Item\Bottle('BottleWithGoldBee', __('item.BottleWithGoldBee'), [0x48]), - new Item('OcarinaActive', __('item.OcarinaActive'), [0x4A]), - new Item('PegasusBoots', __('item.PegasusBoots'), [0x4B]), - new Item\Upgrade\Bomb('BombUpgrade5', __('item.BombUpgrade5'), [0x51]), - new Item\Upgrade\Bomb('BombUpgrade10', __('item.BombUpgrade10'), [0x52]), - new Item\Upgrade\Bomb('BombUpgrade50', __('item.BombUpgrade50'), [0x4C]), - new Item\Upgrade\Arrow('ArrowUpgrade5', __('item.ArrowUpgrade5'), [0x53]), - new Item\Upgrade\Arrow('ArrowUpgrade10', __('item.ArrowUpgrade10'), [0x54]), - new Item\Upgrade\Arrow('ArrowUpgrade70', __('item.ArrowUpgrade70'), [0x4D]), - new Item\Upgrade\Magic('HalfMagic', __('item.HalfMagic'), [0x4E]), - new Item\Upgrade\Magic('QuarterMagic', __('item.QuarterMagic'), [0x4F]), - new Item\Programmable('Programmable1', __('item.Programmable1'), [0x55]), - new Item\Programmable('Programmable2', __('item.Programmable2'), [0x56]), - new Item\Programmable('Programmable3', __('item.Programmable3'), [0x57]), - new Item('SilverArrowUpgrade', __('item.SilverArrowUpgrade'), [0x58]), - new Item('Rupoor', __('item.Rupoor'), [0x59]), - new Item('RedClock', __('item.RedClock'), [0x5B]), - new Item('BlueClock', __('item.BlueClock'), [0x5C]), - new Item('GreenClock', __('item.GreenClock'), [0x5D]), - new Item\Sword('ProgressiveSword', __('item.ProgressiveSword'), [0x5E]), - new Item\Shield('ProgressiveShield', __('item.ProgressiveShield'), [0x5F]), - new Item('ProgressiveArmor', __('item.ProgressiveArmor'), [0x60]), - new Item('ProgressiveGlove', __('item.ProgressiveGlove'), [0x61]), - new Item('singleRNG', __('item.singleRNG'), [0x62]), - new Item('multiRNG', __('item.multiRNG'), [0x63]), - new Item\Event('Triforce', __('item.Triforce'), [0x6A]), - new Item('PowerStar', __('item.PowerStar'), [0x6B]), - new Item('TriforcePiece', __('item.TriforcePiece'), [0x6C]), - new Item\Map('MapLW', __('item.MapLW'), [0x70]), - new Item\Map('MapDW', __('item.MapDW'), [0x71]), - new Item\Map('MapA2', __('item.MapA2'), [0x72]), - new Item\Map('MapD7', __('item.MapD7'), [0x73]), - new Item\Map('MapD4', __('item.MapD4'), [0x74]), - new Item\Map('MapP3', __('item.MapP3'), [0x75]), - new Item\Map('MapD5', __('item.MapD5'), [0x76]), - new Item\Map('MapD3', __('item.MapD3'), [0x77]), - new Item\Map('MapD6', __('item.MapD6'), [0x78]), - new Item\Map('MapD1', __('item.MapD1'), [0x79]), - new Item\Map('MapD2', __('item.MapD2'), [0x7A]), - new Item\Map('MapA1', __('item.MapA1'), [0x7B]), - new Item\Map('MapP2', __('item.MapP2'), [0x7C]), - new Item\Map('MapP1', __('item.MapP1'), [0x7D]), - new Item\Map('MapH1', __('item.MapH1'), [0x7E]), - new Item\Map('MapH2', __('item.MapH2'), [0x7F]), - new Item\Compass('CompassA2', __('item.CompassA2'), [0x82]), - new Item\Compass('CompassD7', __('item.CompassD7'), [0x83]), - new Item\Compass('CompassD4', __('item.CompassD4'), [0x84]), - new Item\Compass('CompassP3', __('item.CompassP3'), [0x85]), - new Item\Compass('CompassD5', __('item.CompassD5'), [0x86]), - new Item\Compass('CompassD3', __('item.CompassD3'), [0x87]), - new Item\Compass('CompassD6', __('item.CompassD6'), [0x88]), - new Item\Compass('CompassD1', __('item.CompassD1'), [0x89]), - new Item\Compass('CompassD2', __('item.CompassD2'), [0x8A]), - new Item\Compass('CompassA1', __('item.CompassA1'), [0x8B]), - new Item\Compass('CompassP2', __('item.CompassP2'), [0x8C]), - new Item\Compass('CompassP1', __('item.CompassP1'), [0x8D]), - new Item\Compass('CompassH1', __('item.CompassH1'), [0x8E]), - new Item\Compass('CompassH2', __('item.CompassH2'), [0x8F]), - new Item\BigKey('BigKeyA2', __('item.BigKeyA2'), [0x92]), - new Item\BigKey('BigKeyD7', __('item.BigKeyD7'), [0x93]), - new Item\BigKey('BigKeyD4', __('item.BigKeyD4'), [0x94]), - new Item\BigKey('BigKeyP3', __('item.BigKeyP3'), [0x95]), - new Item\BigKey('BigKeyD5', __('item.BigKeyD5'), [0x96]), - new Item\BigKey('BigKeyD3', __('item.BigKeyD3'), [0x97]), - new Item\BigKey('BigKeyD6', __('item.BigKeyD6'), [0x98]), - new Item\BigKey('BigKeyD1', __('item.BigKeyD1'), [0x99]), - new Item\BigKey('BigKeyD2', __('item.BigKeyD2'), [0x9A]), - new Item\BigKey('BigKeyA1', __('item.BigKeyA1'), [0x9B]), - new Item\BigKey('BigKeyP2', __('item.BigKeyP2'), [0x9C]), - new Item\BigKey('BigKeyP1', __('item.BigKeyP1'), [0x9D]), - new Item\BigKey('BigKeyH1', __('item.BigKeyH1'), [0x9E]), - new Item\BigKey('BigKeyH2', __('item.BigKeyH2'), [0x9F]), - new Item\Key('KeyH2', __('item.KeyH2'), [0xA0]), - new Item\Key('KeyH1', __('item.KeyH1'), [0xA1]), - new Item\Key('KeyP1', __('item.KeyP1'), [0xA2]), - new Item\Key('KeyP2', __('item.KeyP2'), [0xA3]), - new Item\Key('KeyA1', __('item.KeyA1'), [0xA4]), - new Item\Key('KeyD2', __('item.KeyD2'), [0xA5]), - new Item\Key('KeyD1', __('item.KeyD1'), [0xA6]), - new Item\Key('KeyD6', __('item.KeyD6'), [0xA7]), - new Item\Key('KeyD3', __('item.KeyD3'), [0xA8]), - new Item\Key('KeyD5', __('item.KeyD5'), [0xA9]), - new Item\Key('KeyP3', __('item.KeyP3'), [0xAA]), - new Item\Key('KeyD4', __('item.KeyD4'), [0xAB]), - new Item\Key('KeyD7', __('item.KeyD7'), [0xAC]), - new Item\Key('KeyA2', __('item.KeyA2'), [0xAD]), - new Item\Key('KeyGK', __('item.KeyGK'), [0xAF]), - new Item\Crystal('Crystal1', __('item.Crystal1'), [null, 0x02, 0x34, 0x64, 0x40, 0x7F, 0x06]), - new Item\Crystal('Crystal2', __('item.Crystal2'), [null, 0x10, 0x34, 0x64, 0x40, 0x79, 0x06]), - new Item\Crystal('Crystal3', __('item.Crystal3'), [null, 0x40, 0x34, 0x64, 0x40, 0x6C, 0x06]), - new Item\Crystal('Crystal4', __('item.Crystal4'), [null, 0x20, 0x34, 0x64, 0x40, 0x6D, 0x06]), - new Item\Crystal('Crystal5', __('item.Crystal5'), [null, 0x04, 0x32, 0x64, 0x40, 0x6E, 0x06]), - new Item\Crystal('Crystal6', __('item.Crystal6'), [null, 0x01, 0x32, 0x64, 0x40, 0x6F, 0x06]), - new Item\Crystal('Crystal7', __('item.Crystal7'), [null, 0x08, 0x34, 0x64, 0x40, 0x7C, 0x06]), - new Item\Event('RescueZelda', __('item.RescueZelda'), [null]), - new Item\Event('DefeatAgahnim', __('item.DefeatAgahnim'), [null]), - new Item\Event('BigRedBomb', __('item.BigRedBomb'), [null]), - new Item\Event('DefeatAgahnim2', __('item.DefeatAgahnim2'), [null]), - new Item\Event('DefeatGanon', __('item.DefeatGanon'), [null]), - ]); + return static::all($world); + } - // Logical aliases - static::$items->addItem(new ItemAlias('UncleSword', 'ProgressiveSword')); - static::$items->addItem(new ItemAlias('ShopKey', 'KeyGK')); - static::$items->addItem(new ItemAlias('ShopArrow', 'Arrow')); + /** + * Create a new Item + * + * @param string $name Unique name of item + * @param array $bytes data to write to Location addresses + * @param \ALttP\World $world world for which the item belongs + * + * @return void + */ + public function __construct(string $name, array $bytes, World $world) + { + $this->name = $name; + $this->nice_name = 'item.' . $name; + $this->bytes = $bytes; + $this->world = $world; + } - return static::all(); - } + /** + * Get the target of this item, which happens to be this item. + * + * @return $this + */ + public function getTarget() + { + return $this; + } - /** - * Create a new Item - * - * @param string $name Unique name of item - * @param string $nice_name Well formatted name for item - * @param array $bytes data to write to Location addresses - * @param array|null $address Addresses in ROM to write back Location data if set - * - * @return void - */ - public function __construct($name, $nice_name, $bytes, $address = null) { - $this->name = $name; - $this->nice_name = $nice_name; - $this->bytes = (array) $bytes; - $this->address = (array) $address; - } + /** + * Get an ItemAlias version of this. + * + * DO NOT USE: completely untested. + * + * @return ItemAlias + */ + public function setTarget(Item $item) + { + return new ItemAlias($this->getName(), $item->getName(), $this->world); + } - /** - * Get the target of this item, which happens to be this item. - * - * @return $this - */ - public function getTarget() { - return $this; - } + /** + * Get the raw name of this Item + * + * @return string + */ + public function getRawName(): string + { + return $this->name; + } - /** - * Get an ItemAlias version of this. - * - * DO NOT USE: completely untested. - * - * @return ItemAlias - */ - public function setTarget(Item $item) { - return new ItemAlias($this->getName(), $item->getName()); - } + /** + * Get the name of this Item (with world ID) + * + * @return string + */ + public function getName(): string + { + return $this->name . ':' . $this->world->id; + } - /** - * Get the name of this Item - * - * @return string - */ - public function getName() { - return $this->name; - } + /** + * Get the nice name of this Item + * + * @return string + */ + public function getNiceName(): string + { + $formatted = __($this->nice_name); - /** - * Get the nice name of this Item - * - * @return string - */ - public function getNiceName() { - return $this->nice_name; - } + return is_string($formatted) ? $formatted : ''; + } - /** - * Get the bytes to write - * - * @return array - */ - public function getBytes() { - return $this->bytes; - } + /** + * Get the i18n string of this Item + * + * @return string + */ + public function getI18nName(): string + { + return $this->nice_name; + } - /** - * Get the addresses to write to - * - * @return array - */ - public function getAddress() { - return $this->address; - } + /** + * Get the bytes to write + * + * @return array + */ + public function getBytes() + { + return $this->bytes; + } - /** - * Link this item to a Region - * - * @return $this - */ - public function linkRegion(Region $region) { - $this->linked_region = $region; + /** + * Set the World the item belongs to. + * + * @param \ALttP\World $world world it can be used in + * + * @return $this + */ + public function setWorld(World $world) + { + $this->world = $world; - return $this; - } + return $this; + } - /** - * Get the region to which this item has been linked. - * - * @return Region - */ - public function getLinkedRegion() { - return $this->linked_region; - } + /** + * Get the world this item is usable in. + * + * @return \ALttP\World + */ + public function getWorld() + { + return $this->world; + } - /** - * serialized version of Item - * - * @return string - */ - public function __toString() { - return $this->name . serialize($this->bytes); - } + /** + * serialized version of Item + * + * @return string + */ + public function __toString() + { + return $this->name . serialize($this->bytes); + } } diff --git a/app/Item/Arrow.php b/app/Item/Arrow.php index f87ad5d90..fbe9bfa47 100644 --- a/app/Item/Arrow.php +++ b/app/Item/Arrow.php @@ -1,10 +1,11 @@ -power = $power; + } } diff --git a/app/Item/Upgrade/Magic.php b/app/Item/Upgrade/Magic.php index 37a65716f..5e455a394 100644 --- a/app/Item/Upgrade/Magic.php +++ b/app/Item/Upgrade/Magic.php @@ -1,10 +1,11 @@ -name = $name; - $this->target = Item::get($target); - } + /** + * Create a new Item + * + * @param string $name Unique name of alias + * @param string $target name of target to alias + * + * @return void + */ + public function __construct(string $name, string $target, World $world) + { + parent::__construct($name, [], $world); - public function getTarget() { - return $this->target; - } + $this->name = $name; + $this->target = Item::get($target, $world); + } - public function setTarget(Item $item) { - $this->target = $item; + public function getTarget() + { + return $this->target; + } - return $this; - } + public function setTarget(Item $item) + { + $this->target = $item; - /** - * Get the name of this Item - * - * @return string - */ - public function getName() { - return $this->name; - } + return $this; + } - /** - * Get the nice name of this Item - * - * @return string - */ - public function getNiceName() { - return $this->target->getNiceName(); - } + /** + * Get the name of this Item + * + * @return string + */ + public function getName(): string + { + return $this->name . ':' . $this->world->id; + } - /** - * Get the bytes to write - * - * @return array - */ - public function getBytes() { - return $this->target->getBytes(); - } + /** + * Get the nice name of this Item + * + * @return string + */ + public function getNiceName(): string + { + return $this->target->getNiceName(); + } - /** - * Get the addresses to write to - * - * @return array - */ - public function getAddress() { - return $this->target->getAddress(); - } + /** + * Get the bytes to write + * + * @return array + */ + public function getBytes() + { + return $this->target->getBytes(); + } - public function getLinkedRegion() { - return $this->target->getLinkedRegion(); - } + public function getLinkedRegion() + { + return $this->target->getLinkedRegion(); + } - /** - * serialized version of Item - * - * @return string - */ - public function __toString() { - return $this->name . serialize($this->target->getBytes()); - } + /** + * serialized version of Item + * + * @return string + */ + public function __toString() + { + return $this->name . serialize($this->target->getBytes()); + } } diff --git a/app/Jobs/SendPatchToDisk.php b/app/Jobs/SendPatchToDisk.php index a65e46731..6bddc94ca 100644 --- a/app/Jobs/SendPatchToDisk.php +++ b/app/Jobs/SendPatchToDisk.php @@ -1,4 +1,6 @@ -seed = $seed; - $this->clear_record = $clear_record; - } - - /** - * Execute the job. - * - * @return void - */ - public function handle() { - if (!$this->seed->patch) { - logger()->error('Trying to send an empty patch: ' . $this->seed->id); - return; - } - - $spoiler = json_decode($this->seed->spoiler, true); - - if ($spoiler['meta']['tournament'] ?? false) { - if ($spoiler['meta']['_meta']['spoilers'] ?? false) { - $return_spoiler = array_except($spoiler, ['playthrough']); - } else { - $return_spoiler = array_except(array_only($spoiler, ['meta']), ['meta.seed']); - } - } else { - $return_spoiler = $spoiler; - } - logger()->info("Sending file seed: {$this->seed->id}"); - - Storage::put("{$this->seed->hash}.json", gzencode(json_encode([ - 'logic' => $this->seed->logic, - 'difficulty' => $this->seed->rules, - 'patch' => json_decode($this->seed->patch), - 'spoiler' => array_except($return_spoiler, ['meta._meta']), - 'hash' => $this->seed->hash, - 'size' => $spoiler['meta']['_meta']['size'] ?? 2, - 'generated' => $this->seed->created_at ? $this->seed->created_at->toIso8601String() : now()->toIso8601String(), - ])), ['ContentEncoding' => 'gzip', 'ContentType' => 'application/json']); - - if ($this->clear_record) { - $this->seed->clearPatch(); - } - } +class SendPatchToDisk implements ShouldQueue +{ + use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + + protected $seed; + protected $clear_record; + + public function __construct(Seed $seed, bool $clear_record = true) + { + $this->seed = $seed; + $this->clear_record = $clear_record; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + if (!$this->seed->patch) { + Log::error('Trying to send an empty patch: ' . $this->seed->id); + + return; + } + + $spoiler = array_except(json_decode($this->seed->spoiler, true), [ + 'meta.crystals_ganon', + 'meta.crystals_tower', + ]); + + if ($spoiler['meta']['tournament'] ?? false) { + if ($spoiler['meta']['spoilers'] ?? false) { + $return_spoiler = array_except($spoiler, ['playthrough']); + } else { + $return_spoiler = array_except(array_only($spoiler, ['meta']), ['meta.seed']); + } + } else { + $return_spoiler = $spoiler; + } + Log::info("Sending file seed: {$this->seed->id}"); + + $json = json_encode([ + 'logic' => $this->seed->logic, + 'patch' => json_decode($this->seed->patch), + 'spoiler' => $return_spoiler, + 'hash' => $this->seed->hash, + 'size' => $spoiler['meta']['size'] ?? 2, + 'generated' => $this->seed->created_at ? $this->seed->created_at->toIso8601String() : now()->toIso8601String(), + ]); + + if ($json !== false) { + $zipped = gzencode($json); + + if ($zipped !== false) { + Storage::put("{$this->seed->hash}.json", $zipped, [ + 'ContentEncoding' => 'gzip', + 'ContentType' => 'application/json', + ]); + } + } + + if ($this->clear_record) { + $this->seed->patch = null; + $this->seed->save(); + } + } } diff --git a/app/Location.php b/app/Location.php index fc1042be5..08afd0111 100644 --- a/app/Location.php +++ b/app/Location.php @@ -1,143 +1,157 @@ -name = $name; - $this->address = (array) $address; - $this->bytes = (array) $bytes; - $this->region = $region; - $this->requirement_callback = $requirement_callback; - } - - /** - * Try to place the given Item in this Location. - * - * @param Item $item Item we are trying to place - * @param ItemCollection $items Items that can be collected - * - * @return bool - */ - public function fill(Item $item, $items) { - $old_item = $this->item; - $this->setItem($item); - if ($this->canFill($item, $items)) { - return true; - } - - $this->setItem($old_item); - - return false; - } - - /** - * Test if given Item can be placed in this location without soft locks. - * - * @param Item $item Item we are testing for placement - * @param ItemCollection $items Items that can be collected - * @param bool $check_access also test access - * - * @return bool - */ - public function canFill(Item $item, $items, $check_access = true) { - $old_item = $this->item; - $this->setItem($item); - $fillable = ($this->always_callback && call_user_func($this->always_callback, $item, $items)) - || ($this->region->canFill($item) - && (!$this->fill_callback - || call_user_func($this->fill_callback, $item, $this->region->getWorld()->getLocations(), $items)) - && (!$check_access || $this->canAccess($items))); - $this->setItem($old_item); - - return $fillable; - } - - /** - * Determine if Link can access this location given his Items collected. Starts by checking if access to the Region - * is granted, then checks the spcific location. - * - * @param ItemCollection $items Items Link can collect - * - * @return bool - */ - public function canAccess($items, $locations = null) { - $locations = $locations ?? $this->region->getWorld()->getLocations(); - - // @TODO: optimize this call, perhaps cache? - if (!$this->region->canEnter($locations, $items)) { - return false; - } - - if (!$this->requirement_callback || call_user_func($this->requirement_callback, $locations, $items)) { - return true; - } - - return false; - } - - /** - * Set the requirements callback for this Lcation, closure should take 2 arguments, $locations and $items and - * return boolean. - * - * @param Callable $callback function to be called when checking if Location can have Item - * - * @return $this - */ - public function setRequirements(Callable $callback) { - $this->requirement_callback = $callback; - - return $this; - } - - /** - * Set the rules for filling this location - * - * @param Callable $callback - * - * @return $this - */ - public function setFillRules(Callable $callback) { - $this->fill_callback = $callback; - - return $this; - } - - /** - * Set the rules for freely allowing items at this location - * - * @param Callable $callback - * - * @return $this - */ - public function setAlwaysAllow(Callable $callback) { - $this->always_callback = $callback; - - return $this; - } +class Location +{ + protected $name; + protected $address; + protected $bytes; + /** @var \ALttP\Region */ + protected $region; + protected $requirement_callback; + protected $fill_callback; + protected $always_callback; + protected $item = null; + + /** + * Create a new Location + * + * @param string $name Unique name of location + * @param array $address Addresses in ROM to write to + * @param array|null $bytes data to write back to Item addresses if set + * @param \ALttP\Region $region Region that this Location belongs to + * @param callable|null $requirement_callback callback function when determining if Location is accessable + * + * @return void + */ + public function __construct($name, array $address, $bytes, Region $region, callable $requirement_callback = null) + { + $this->name = $name; + $this->address = $address; + $this->bytes = (array) $bytes; + $this->region = $region; + $this->requirement_callback = $requirement_callback; + } + + /** + * Try to place the given Item in this Location. + * + * @param Item $item Item we are trying to place + * @param \ALttP\Support\ItemCollection $items Items that can be collected + * + * @return bool + */ + public function fill(Item $item, $items) + { + $old_item = $this->item; + $this->setItem($item); + if ($this->canFill($item, $items)) { + return true; + } + + $this->setItem($old_item); + + return false; + } + + /** + * Test if given Item can be placed in this location without soft locks. + * + * @param Item $item Item we are testing for placement + * @param \ALttP\Support\ItemCollection $items Items that can be collected + * @param bool $check_access also test access + * + * @return bool + */ + public function canFill(Item $item, $items, $check_access = true) + { + $items->setChecksForWorld($this->region->getWorld()->id); + $old_item = $this->item; + $this->setItem($item); + $fillable = ($this->always_callback && call_user_func($this->always_callback, $item, $items)) + || ($this->region->canFill($item) + && (!$this->fill_callback + || call_user_func($this->fill_callback, $item, $this->region->getWorld()->getLocations(), $items)) + && (!$check_access || $this->canAccess($items))); + $this->setItem($old_item); + + return $fillable; + } + + /** + * Determine if Link can access this location given his Items collected. Starts by checking if access to the Region + * is granted, then checks the spcific location. + * + * @param \ALttP\Support\ItemCollection $items Items Link can collect + * @param \ALttP\Support\LocationCollection $locations locations + * + * @return bool + */ + public function canAccess($items, $locations = null) + { + $locations = $locations ?? $this->region->getWorld()->getLocations(); + $items->setChecksForWorld($this->region->getWorld()->id); + + // @TODO: optimize this call, perhaps cache? + if (!$this->region->canEnter($locations, $items)) { + return false; + } + + if (!$this->requirement_callback || call_user_func($this->requirement_callback, $locations, $items)) { + return true; + } + + return false; + } + + /** + * Set the requirements callback for this Lcation, closure should take 2 arguments, $locations and $items and + * return boolean. + * + * @param callable $callback function to be called when checking if Location can have Item + * + * @return $this + */ + public function setRequirements(callable $callback) + { + $this->requirement_callback = $callback; + + return $this; + } + + /** + * Set the rules for filling this location + * + * @param callable $callback + * + * @return $this + */ + public function setFillRules(callable $callback) + { + $this->fill_callback = $callback; + + return $this; + } + + /** + * Set the rules for freely allowing items at this location + * + * @param callable $callback + * + * @return $this + */ + public function setAlwaysAllow(callable $callback) + { + $this->always_callback = $callback; + + return $this; + } /** * Sets the item for this location. @@ -146,156 +160,165 @@ public function setAlwaysAllow(Callable $callback) { * * @return $this */ - public function setItem(Item $item = null) { - $this->item = $item; - - return $this; - } - - /** - * Does this Location have (a particular) Item assigned - * - * @param Item|null $item item to search locations for - * - * @return bool - */ - public function hasItem(Item $item = null) { - return $item ? $this->item == $item : $this->item !== null; - } - - /** - * Get the Item assigned to this Location, null is nothing is assigned - * - * @return Item|null - */ - public function getItem() { - return $this->item; - } - - /** - * get the hint string for this location. - */ - public function getHint() { - if (!$this->item) { - return null; - } - - $item = ($this->region->getWorld()->config('rom.genericKeys', false) && $this->item instanceof Item\Key) - ? Item::get('KeyGK') - : $this->item; - - $item_name = __('hint.item.' . $item->getTarget()->getName()); - - if (is_array($item_name)) { - $item_name = array_first(fy_shuffle($item_name)); - } - - $location_name = __('hint.location.' . $this->name); - - if (is_array($location_name)) { - $location_name = array_first(fy_shuffle($location_name)); - } - - return "$item_name $location_name"; - } - - /** - * Write the Item to this Location in ROM. Will set Item if passed in, and only write if there is an Item set. - * @TODO: this is side-affecty - * - * @param Rom $rom ROM we are writing to - * @param Item|null $item item we are going to write - * - * @throws Exception if no item is set for location - * - * @return $this - */ - public function writeItem(Rom $rom, Item $item = null) { - if ($item) { - $this->setItem($item); - } - - if (!$this->item) { - throw new \Exception('No Item set to be written'); - } - - $item = $this->item; - - if ($item instanceof Item\Key && $this->region->isRegionItem($item) - && (!in_array($this->name, ["Secret Passage", "Link's Uncle"]) || $item != Item::get('KeyH2'))) { // special key-sanity case - $item = Item::get('Key'); - } - - if ($item instanceof Item\BigKey && $this->region->isRegionItem($item)) { - $item = Item::get('BigKey'); - } - - if ($this->region->getWorld()->config('rom.genericKeys', false) && $item instanceof Item\Key) { - $item = Item::get('KeyGK'); - } - - $item_bytes = $item->getBytes(); - - foreach ($this->address as $key => $address) { - if (!isset($item_bytes[$key]) || !isset($address)) continue; - $rom->write($address, pack('C', $item_bytes[$key])); - } - - foreach ($item->getAddress() as $key => $address) { - if (!isset($this->bytes[$key]) || !isset($address)) continue; - $rom->write($address, pack('C', $this->bytes[$key])); - } - - return $this; - } - - /** - * Get the name of this Location. - * - * @return string - */ - public function getName() { - return $this->name; - } - - /** - * Get the ROM addres of this Location. - * - * @return string - */ - public function getAddress() { - return $this->address; - } - - /** - * Set the Region of this Location. - * @TODO: determine if this has side affects that are extremely negitive. - * - * @param Region $region new region to assign location to. - * - * @return $this - */ - public function setRegion(Region $region) { - $this->region = $region; - - return $this; - } - - /** - * Get the Region of this Location. - * - * @return Region - */ - public function getRegion() { - return $this->region; - } - - /** - * Convert this to string representation - * - * @return string - */ - public function __toString() { - return $this->name; - } + public function setItem(Item $item = null) + { + $this->item = $item; + + return $this; + } + + /** + * Does this Location have (a particular) Item assigned + * + * @param Item|null $item item to search locations for + * + * @return bool + */ + public function hasItem(Item $item = null) + { + return $item ? $this->item == $item : $this->item !== null; + } + + /** + * Get the Item assigned to this Location, null is nothing is assigned + * + * @return Item|null + */ + public function getItem() + { + return $this->item; + } + + /** + * get the hint string for this location. + */ + public function getHint() + { + if (!$this->item) { + return null; + } + + $item = ($this->region->getWorld()->config('rom.genericKeys', false) && $this->item instanceof Item\Key) + ? Item::get('KeyGK', $this->region->getWorld()) + : $this->item; + + $item_name = __('hint.item.' . $item->getTarget()->getRawName()); + + if (is_array($item_name)) { + $item_name = array_first(fy_shuffle($item_name)); + } + + $location_name = __('hint.location.' . $this->name); + + if (is_array($location_name)) { + $location_name = array_first(fy_shuffle($location_name)); + } + + return "$item_name $location_name"; + } + + /** + * Write the Item to this Location in ROM. Will set Item if passed in, and only write if there is an Item set. + * @TODO: this is side-affecty + * + * @param Rom $rom ROM we are writing to + * @param Item|null $item item we are going to write + * + * @throws \Exception if no item is set for location + * + * @return $this + */ + public function writeItem(Rom $rom, Item $item = null) + { + if ($item) { + $this->setItem($item); + } + + if (!$this->item) { + throw new \Exception('No Item set to be written'); + } + + $item = $this->item; + + if ( + $item instanceof Item\Key && $this->region->isRegionItem($item) + && (!in_array($this->name, ["Secret Passage", "Link's Uncle"]) || $item != Item::get('KeyH2', $this->region->getWorld())) + ) { // special key-sanity case + $item = Item::get('Key', $this->region->getWorld()); + } + + if ($item instanceof Item\BigKey && $this->region->isRegionItem($item)) { + $item = Item::get('BigKey', $this->region->getWorld()); + } + + if ($this->region->getWorld()->config('rom.genericKeys', false) && $item instanceof Item\Key) { + $item = Item::get('KeyGK', $this->region->getWorld()); + } + + $item_bytes = $item->getBytes(); + + foreach ($this->address as $key => $address) { + if (!isset($item_bytes[$key]) || !isset($address)) { + continue; + } + $rom->write($address, pack('C', $item_bytes[$key])); + } + + return $this; + } + + /** + * Get the name of this Location. + * + * @return string + */ + public function getName() + { + return $this->name . ':' . $this->region->getWorld()->id; + } + + /** + * Get the ROM addres of this Location. + * + * @return string + */ + public function getAddress() + { + return $this->address; + } + + /** + * Set the Region of this Location. + * @TODO: determine if this has side affects that are extremely negitive. + * + * @param Region $region new region to assign location to. + * + * @return $this + */ + public function setRegion(Region $region) + { + $this->region = $region; + + return $this; + } + + /** + * Get the Region of this Location. + * + * @return Region + */ + public function getRegion() + { + return $this->region; + } + + /** + * Convert this to string representation + * + * @return string + */ + public function __toString() + { + return $this->name; + } } diff --git a/app/Location/BigChest.php b/app/Location/BigChest.php index 54a1f734a..c7c054d6f 100644 --- a/app/Location/BigChest.php +++ b/app/Location/BigChest.php @@ -1,10 +1,11 @@ -setFluteBoyCredits($this->getItemCreditsText()); + $rom->setCredit('grove', $this->getItemCreditsText()); - return $this; - } + return $this; + } - private function getItemCreditsText() { - switch (get_class($this->item->getTarget())) { - case Item\Key::class: - case Item\BigKey::class: - return "key boy picks locks again"; - case Item\Map::class: - return "map boy navigates again"; - case Item\Compass::class: - return "compass boy finds boss again"; - case Item\Egg::class: - return "egg boy paints again"; - } + private function getItemCreditsText() + { + switch (get_class($this->item->getTarget())) { + case Item\Key::class: + case Item\BigKey::class: + return "key boy picks locks again"; + case Item\Map::class: + return "map boy navigates again"; + case Item\Compass::class: + return "compass boy finds boss again"; + case Item\Egg::class: + return "egg boy paints again"; + } - switch ($this->item->getTarget()) { - case Item::get('ProgressiveSword'): - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - case Item::get('L2Sword'): - case Item::get('MasterSword'): - case Item::get('L3Sword'): - case Item::get('L4Sword'): - return "sword boy fights again"; - case Item::get('ProgressiveShield'): - case Item::get('BlueShield'): - case Item::get('RedShield'): - case Item::get('MirrorShield'): - return "shield boy defends again"; - case Item::get('FireRod'): - return "firestarter boy burns again"; - case Item::get('IceRod'): - return "ice-cube boy freezes again"; - case Item::get('Hammer'): - return "stop, hammer time"; - case Item::get('Hookshot'): - return "beam boy tickles again"; - case Item::get('Bow'): - return "archer boy shoots again"; - case Item::get('BowAndArrows'): - return "archer boy shoots again"; - case Item::get('BowAndSilverArrows'): - return "archer boy shoots again"; - case Item::get('Boomerang'): - return "throwing boy plays fetch again"; - case Item::get('RedBoomerang'): - return "magical boy plays fetch again"; - case Item::get('Powder'): - return "magic boy plays marbles again"; - case Item::get('Bombos'): - return "medallion boy melts room again"; - case Item::get('Ether'): - return "medallion boy sees floor again"; - case Item::get('Quake'): - return "medallion boy shakes dirt again"; - case Item::get('Lamp'): - return "illuminated boy can see again"; - case Item::get('Shovel'): - return "shovel boy digs again"; - case Item::get('CaneOfSomaria'): - return "cane boy makes blocks again"; - case Item::get('CaneOfByrna'): - return "cane boy encircles again"; - case Item::get('Cape'): - return "dapper boy hides again"; - case Item::get('MagicMirror'): - return "narcissistic boy is happy again"; - case Item::get('ProgressiveGlove'): - case Item::get('PowerGlove'): - return "body-building boy lifts again"; - case Item::get('TitansMitt'): - return "body-building boy has gold again"; - case Item::get('BookOfMudora'): - return "book-worm boy can read again"; - case Item::get('Flippers'): - return "swimming boy swims again"; - case Item::get('MoonPearl'): - return "moon boy plays ball again"; - case Item::get('BugCatchingNet'): - return "wrong boy catches bees again"; - case Item::get('BlueMail'): - return "tailor boy banana hatted again"; - case Item::get('RedMail'): - return "tailor boy fears nothing again"; - case Item::get('PieceOfHeart'): - return "life boy feels some love again"; - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "life boy feels love again"; - case Item::get('Bomb'): - return "'splosion boy explodes again"; - case Item::get('ThreeBombs'): - return "'splosion boy explodes again"; - case Item::get('TenBombs'): - return "'splosion boy explodes again"; - case Item::get('Mushroom'): - return "shroom boy sells drugs again"; - case Item::get('Bottle'): - return "bottle boy has terrarium again"; - case Item::get('BottleWithRedPotion'): - return "bottle boy has red goo again"; - case Item::get('BottleWithGreenPotion'): - return "bottle boy has green goo again"; - case Item::get('BottleWithBluePotion'): - return "bottle boy has blue goo again"; - case Item::get('BottleWithGoldBee'): - return "bottle boy has beetor again"; - case Item::get('BottleWithBee'): - return "bottle boy has mad bee again"; - case Item::get('BottleWithFairy'): - return "bottle boy has friend again"; - case Item::get('Heart'): - return "loving boy has affection again"; - case Item::get('Arrow'): - return "archer boy sews again"; - case Item::get('TenArrows'): - return "archer boy sews again"; - case Item::get('SmallMagic'): - return "magic boy summons again"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "destitute boy has lunch again"; - case Item::get('OneHundredRupees'): - return "affluent boy goes drinking again"; - case Item::get('ThreeHundredRupees'): - return "fat-cat boy is rich again"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "ocarina boy plays again"; - case Item::get('PegasusBoots'): - return "gotta-go-fast boy runs again"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "upgrade boy explodes more again"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "upgrade boy sews more again"; - case Item::get('SilverArrowUpgrade'): - return "archer boy shines again"; - case Item::get('HalfMagic'): - case Item::get('QuarterMagic'): - return "magic boy saves magic again"; - case Item::get('Rupoor'): - return "affluent boy steals rupees"; - case Item::get('RedClock'): - return "moment boy travels time again"; - case Item::get('BlueClock'): - return "moment boy time travels again"; - case Item::get('GreenClock'): - return "moment boy adjusts time again"; - case Item::get('ProgressiveArmor'): - return "tailor boy has threads again"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "unknown boy somethings again"; - case Item::get('Triforce'): - return "greedy boy wins game again"; - case Item::get('PowerStar'): - return "mario powers up again"; - case Item::get('TriforcePiece'): - return "wise boy has triangle again"; - case Item::get('Nothing'): - default: - return "empty boy does nothing again"; - } - } + switch ($this->item->getTarget()->getRawName()) { + case 'ProgressiveSword': + case 'L1Sword': + case 'L1SwordAndShield': + case 'L2Sword': + case 'MasterSword': + case 'L3Sword': + case 'L4Sword': + return "sword boy fights again"; + case 'ProgressiveShield': + case 'BlueShield': + case 'RedShield': + case 'MirrorShield': + return "shield boy defends again"; + case 'FireRod': + return "firestarter boy burns again"; + case 'IceRod': + return "ice-cube boy freezes again"; + case 'Hammer': + return "stop, hammer time"; + case 'Hookshot': + return "beam boy tickles again"; + case 'Bow': + case 'BowAndArrows': + case 'BowAndSilverArrows': + case 'ProgressiveBow': + return "archer boy shoots again"; + case 'Boomerang': + return "throwing boy plays fetch again"; + case 'RedBoomerang': + return "magical boy plays fetch again"; + case 'Powder': + return "magic boy plays marbles again"; + case 'Bombos': + return "medallion boy melts room again"; + case 'Ether': + return "medallion boy sees floor again"; + case 'Quake': + return "medallion boy shakes dirt again"; + case 'Lamp': + return "illuminated boy can see again"; + case 'Shovel': + return "shovel boy digs again"; + case 'CaneOfSomaria': + return "cane boy makes blocks again"; + case 'CaneOfByrna': + return "cane boy encircles again"; + case 'Cape': + return "dapper boy hides again"; + case 'MagicMirror': + return "narcissistic boy is happy again"; + case 'ProgressiveGlove': + case 'PowerGlove': + return "body-building boy lifts again"; + case 'TitansMitt': + return "body-building boy has gold again"; + case 'BookOfMudora': + return "book-worm boy can read again"; + case 'Flippers': + return "swimming boy swims again"; + case 'MoonPearl': + return "moon boy plays ball again"; + case 'BugCatchingNet': + return "wrong boy catches bees again"; + case 'BlueMail': + return "tailor boy banana hatted again"; + case 'RedMail': + return "tailor boy fears nothing again"; + case 'PieceOfHeart': + return "life boy feels some love again"; + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "life boy feels love again"; + case 'Bomb': + return "'splosion boy explodes again"; + case 'ThreeBombs': + return "'splosion boy explodes again"; + case 'TenBombs': + return "'splosion boy explodes again"; + case 'Mushroom': + return "shroom boy sells drugs again"; + case 'Bottle': + return "bottle boy has terrarium again"; + case 'BottleWithRedPotion': + return "bottle boy has red goo again"; + case 'BottleWithGreenPotion': + return "bottle boy has green goo again"; + case 'BottleWithBluePotion': + return "bottle boy has blue goo again"; + case 'BottleWithGoldBee': + return "bottle boy has beetor again"; + case 'BottleWithBee': + return "bottle boy has mad bee again"; + case 'BottleWithFairy': + return "bottle boy has friend again"; + case 'Heart': + return "loving boy has affection again"; + case 'Arrow': + return "archer boy sews again"; + case 'TenArrows': + return "archer boy sews again"; + case 'SmallMagic': + return "magic boy summons again"; + case 'OneRupee': + case 'FiveRupees': + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "destitute boy has lunch again"; + case 'OneHundredRupees': + return "affluent boy goes drinking again"; + case 'ThreeHundredRupees': + return "fat-cat boy is rich again"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "ocarina boy plays again"; + case 'PegasusBoots': + return "gotta-go-fast boy runs again"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "upgrade boy explodes more again"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "upgrade boy sews more again"; + case 'SilverArrowUpgrade': + return "archer boy shines again"; + case 'HalfMagic': + case 'QuarterMagic': + return "magic boy saves magic again"; + case 'Rupoor': + return "affluent boy steals rupees"; + case 'RedClock': + return "moment boy travels time again"; + case 'BlueClock': + return "moment boy time travels again"; + case 'GreenClock': + return "moment boy adjusts time again"; + case 'ProgressiveArmor': + return "tailor boy has threads again"; + case 'singleRNG': + case 'multiRNG': + return "unknown boy somethings again"; + case 'Triforce': + return "greedy boy wins game again"; + case 'PowerStar': + return "mario powers up again"; + case 'TriforcePiece': + return "wise boy has triangle again"; + case 'Nothing': + default: + return "empty boy does nothing again"; + } + } } diff --git a/app/Location/Drop.php b/app/Location/Drop.php index a28352ab5..0274aafda 100644 --- a/app/Location/Drop.php +++ b/app/Location/Drop.php @@ -1,10 +1,11 @@ -setBombosTextbox($this->getItemText()); + $rom->setText('tablet_bombos_book', $this->getItemText()); - return $this; - } + return $this; + } - private function getItemText() { - $item = ($this->region->getWorld()->config('rom.genericKeys', false) && $this->item instanceof Item\Key) - ? Item::get('KeyGK') - : $this->item; + private function getItemText() + { + $item = ($this->region->getWorld()->config('rom.genericKeys', false) && $this->item instanceof Item\Key) + ? Item::get('KeyGK', $this->region->getWorld()) + : $this->item; - switch ($item->getTarget()) { - case Item::get('BigKeyA2'): - return "The big key\nof evil's bane"; - case Item::get('BigKeyD7'): - return "The big key\nof terrapins"; - case Item::get('BigKeyD4'): - return "The big key\nof rogues"; - case Item::get('BigKeyP3'): - return "The big key\nto moldorm's\nheart"; - case Item::get('BigKeyD5'): - return "A frozen\nbig key\nrests here"; - case Item::get('BigKeyD3'): - return "The big key\nof the dark\nforest"; - case Item::get('BigKeyD6'): - return "The big key\nto Vitreous"; - case Item::get('BigKeyD1'): - return "Hammeryump\nwith this\nbig key"; - case Item::get('BigKeyD2'): - return "The big key\nto the swamp"; - case Item::get('BigKeyA1'): - return "Okay, this big\nkey doesn't\nreally exist"; - case Item::get('BigKeyP2'): - return "Sand spills\nout of this\nbig key"; - case Item::get('BigKeyP1'): - return "The big key\nof the east"; - case Item::get('BigKeyH1'): - case Item::get('BigKeyH2'): - return "You should\nhave got this\nfrom a guard"; - case Item::get('KeyA2'): - return "The small key\nof evil's bane"; - case Item::get('KeyD7'): - return "The small key\nof terrapins"; - case Item::get('KeyD4'): - return "The small key\nof rogues"; - case Item::get('KeyP3'): - return "The key\nto moldorm's\nbasement"; - case Item::get('KeyD5'): - return "A frozen\nsmall key\nrests here"; - case Item::get('KeyD3'): - return "The small key\nof the dark\nforest"; - case Item::get('KeyD6'): - return "The small key\nto Vitreous"; - case Item::get('KeyD1'): - return "A small key\nthat steals\nlight"; - case Item::get('KeyD2'): - return "Access to\nthe swamp\nis granted"; - case Item::get('KeyA1'): - return "Agahnim\nhalfway\nunlocked"; - case Item::get('KeyP2'): - return "Sand spills\nout of this\nsmall key"; - case Item::get('KeyP1'): - return "Okay, this\nkey doesn't\nreally exist"; - case Item::get('KeyH1'): - case Item::get('KeyH2'): - return "The key to\nthe castle"; - } + switch ($item->getTarget()->getRawName()) { + case 'BigKeyA2': + return "The big key\nof evil's bane"; + case 'BigKeyD7': + return "The big key\nof terrapins"; + case 'BigKeyD4': + return "The big key\nof rogues"; + case 'BigKeyP3': + return "The big key\nto moldorm's\nheart"; + case 'BigKeyD5': + return "A frozen\nbig key\nrests here"; + case 'BigKeyD3': + return "The big key\nof the dark\nforest"; + case 'BigKeyD6': + return "The big key\nto Vitreous"; + case 'BigKeyD1': + return "Hammeryump\nwith this\nbig key"; + case 'BigKeyD2': + return "The big key\nto the swamp"; + case 'BigKeyA1': + return "Okay, this big\nkey doesn't\nreally exist"; + case 'BigKeyP2': + return "Sand spills\nout of this\nbig key"; + case 'BigKeyP1': + return "The big key\nof the east"; + case 'BigKeyH1': + case 'BigKeyH2': + return "You should\nhave got this\nfrom a guard"; + case 'KeyA2': + return "The small key\nof evil's bane"; + case 'KeyD7': + return "The small key\nof terrapins"; + case 'KeyD4': + return "The small key\nof rogues"; + case 'KeyP3': + return "The key\nto moldorm's\nbasement"; + case 'KeyD5': + return "A frozen\nsmall key\nrests here"; + case 'KeyD3': + return "The small key\nof the dark\nforest"; + case 'KeyD6': + return "The small key\nto Vitreous"; + case 'KeyD1': + return "A small key\nthat steals\nlight"; + case 'KeyD2': + return "Access to\nthe swamp\nis granted"; + case 'KeyA1': + return "Agahnim\nhalfway\nunlocked"; + case 'KeyP2': + return "Sand spills\nout of this\nsmall key"; + case 'KeyP1': + return "Okay, this\nkey doesn't\nreally exist"; + case 'KeyH1': + case 'KeyH2': + return "The key to\nthe castle"; + } - switch (get_class($item->getTarget())) { - case Item\Key::class: - return "A small key\nto the Kingdom"; - case Item\BigKey::class: - return "A big key\nto the Kingdom"; - case Item\Map::class: - return "You can now\nfind your way\nhome!"; - case Item\Compass::class: - return "Now you know\nwhere the boss\nhides!"; - case Item\Egg::class: - return "Egg-cited\nfor this"; - } + switch (get_class($item->getTarget())) { + case Item\Key::class: + return "A small key\nto the Kingdom"; + case Item\BigKey::class: + return "A big key\nto the Kingdom"; + case Item\Map::class: + return "You can now\nfind your way\nhome!"; + case Item\Compass::class: + return "Now you know\nwhere the boss\nhides!"; + case Item\Egg::class: + return "Egg-cited\nfor this"; + } - switch ($item->getTarget()) { - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - return "A pathetic\nsword rests\nhere!"; - case Item::get('L2Sword'): - case Item::get('MasterSword'): - return "Look at me!\nI am the\npedestal!"; - case Item::get('L3Sword'): - return "I stole the\nblacksmith's\njob!"; - case Item::get('L4Sword'): - return "The butter\nsword rests\nhere!"; - case Item::get('BlueShield'): - return "Now you can\ndefend against\npebbles!"; - case Item::get('RedShield'): - return "Now you can\ndefend against\nfireballs!"; - case Item::get('MirrorShield'): - return "Now you can\ndefend against\nlasers!"; - case Item::get('FireRod'): - return "I'm the hot\nrod. I make\nthings burn!"; - case Item::get('IceRod'): - return "I'm the cold\nrod. I make\nthings freeze!"; - case Item::get('Hammer'): - return "stop\nhammer time!"; - case Item::get('Hookshot'): - return "BOING!!!\nBOING!!!\nBOING!!!"; - case Item::get('Bow'): - return "You have\nchosen the\narcher class."; - case Item::get('BowAndArrows'): - return "You are now an\naverage archer"; - case Item::get('BowAndSilverArrows'): - return "You are now a\nmaster archer!"; - case Item::get('Boomerang'): - return "No matter what\nyou do, blue\nreturns to you"; - case Item::get('RedBoomerang'): - return "No matter what\nyou do, red\nreturns to you"; - case Item::get('Powder'): - return "you can turn\nanti-faeries\ninto faeries"; - case Item::get('Bombos'): - return "Burn, baby,\nburn! Fear my\nring of fire!"; - case Item::get('Ether'): - return "This magic\ncoin freezes\neverything!"; - case Item::get('Quake'): - return "Maxing out the\nRichter scale\nis what I do!"; - case Item::get('Lamp'): - return "Baby, baby,\nbaby.\nLight my way!"; - case Item::get('Shovel'): - return "Can\n You\n Dig it?"; - case Item::get('CaneOfSomaria'): - return "I make blocks\nto hold down\nswitches!"; - case Item::get('CaneOfByrna'): - return "Use this to\nbecome\ninvincible!"; - case Item::get('Cape'): - return "Wear this to\nbecome\ninvisible!"; - case Item::get('MagicMirror'): - return "Isn't your\nreflection so\npretty?"; - case Item::get('PowerGlove'): - return "Now you can\nlift weak\nstuff!"; - case Item::get('TitansMitt'): - return "Now you can\nlift heavy\nstuff!"; - case Item::get('BookOfMudora'): - return "This is a\nparadox?!"; - case Item::get('Flippers'): - return "fancy a swim?"; - case Item::get('MoonPearl'): - return " Bunny Link\n be\n gone!"; - case Item::get('BugCatchingNet'): - return "Let's catch\nsome bees and\nfaeries!"; - case Item::get('BlueMail'): - return "Now you're a\nblue elf!"; - case Item::get('RedMail'): - return "Now you're a\nred elf!"; - case Item::get('PieceOfHeart'): - return "Just a little\npiece of love!"; - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "Maximum health\nincreased!\nYeah!"; - case Item::get('Bomb'): - return "I make things\ngo BOOM! But\njust once."; - case Item::get('ThreeBombs'): - return "I make things\ngo triple\nBOOM!!!"; - case Item::get('TenBombs'): - return "I make things\ngo BOOM!\nso many times!"; - case Item::get('Mushroom'): - return "I'm a fun guy!\n\nI'm a funghi!"; - case Item::get('Bottle'): - return "Now you can\nstore potions\nand stuff!"; - case Item::get('BottleWithRedPotion'): - return "You see red\ngoo in a\nbottle?"; - case Item::get('BottleWithGreenPotion'): - return "You see green\ngoo in a\nbottle?"; - case Item::get('BottleWithBluePotion'): - return "You see blue\ngoo in a\nbottle?"; - case Item::get('BottleWithGoldBee'): - case Item::get('BottleWithBee'): - return "Release me\nso I can go\nbzzzzz!"; - case Item::get('BottleWithFairy'): - return "If you die\nI will revive\nyou!"; - case Item::get('Heart'): - return "I'm a lonely\nheart."; - case Item::get('Arrow'): - return "a lonely arrow\nsits here."; - case Item::get('TenArrows'): - return "This will give\nyou ten shots\nwith your bow!"; - case Item::get('SmallMagic'): - return "A tiny magic\nrefill rests\nhere"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - return "Just pocket\nchange. Move\nright along."; - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "Just couch\ncash. Move\nright along."; - case Item::get('OneHundredRupees'): - return "A rupee stash!\nHell yeah!"; - case Item::get('ThreeHundredRupees'): - return "A rupee hoard!\nHell yeah!"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "Save the duck\nand fly to\nfreedom!"; - case Item::get('PegasusBoots'): - return "Gotta go fast!"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "increase bomb\nstorage, low\nlow price"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "increase arrow\nstorage, low\nlow price"; - case Item::get('SilverArrowUpgrade'): - return "Do you fancy\nsilver tipped\narrows?"; - case Item::get('HalfMagic'): - return "Your magic\npower has been\ndoubled!"; - case Item::get('QuarterMagic'): - return "Your magic\npower has been\nquadrupled!"; - case Item::get('PendantOfCourage'): - return "Courage for\nthose who\nalready had it"; - case Item::get('PendantOfWisdom'): - return "Wisdom for\nthose who\nalready had it"; - case Item::get('PendantOfPower'): - return "Power for\nthose who\nalready had it"; - case Item::get('Rupoor'): - return "This is not\nreally worth\nyour time"; - case Item::get('RedClock'): - return "like the sands\nthrough a red\nhourglass"; - case Item::get('BlueClock'): - return "sapphire sand\ntrickles down"; - case Item::get('GreenClock'): - return "tick tock\ntick tock"; - case Item::get('ProgressiveSword'): - return "a better copy\nof your sword\nfor your time"; - case Item::get('ProgressiveShield'): - return "have a better\ndefense in\nfront of you"; - case Item::get('ProgressiveArmor'): - return "time for a\nchange of\nclothes?"; - case Item::get('ProgressiveGlove'): - return "a way to lift\nheavier things"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "who knows? you\nprobably don't\nneed this."; - case Item::get('Triforce'): - return "\n YOU WIN!"; - case Item::get('PowerStar'): - return "Aim for the\nmoon. You may\nhit a 'star'"; - case Item::get('TriforcePiece'): - return "a yellow\ntriangle\nyou need this"; - case Item::get('Nothing'): - default: - return "Don't waste\nyour time!"; - } - } + switch ($item->getTarget()->getRawName()) { + case 'L1Sword': + case 'L1SwordAndShield': + return "A pathetic\nsword rests\nhere!"; + case 'L2Sword': + case 'MasterSword': + return "Look at me!\nI am the\npedestal!"; + case 'L3Sword': + return "I stole the\nblacksmith's\njob!"; + case 'L4Sword': + return "The butter\nsword rests\nhere!"; + case 'BlueShield': + return "Now you can\ndefend against\npebbles!"; + case 'RedShield': + return "Now you can\ndefend against\nfireballs!"; + case 'MirrorShield': + return "Now you can\ndefend against\nlasers!"; + case 'FireRod': + return "I'm the hot\nrod. I make\nthings burn!"; + case 'IceRod': + return "I'm the cold\nrod. I make\nthings freeze!"; + case 'Hammer': + return "stop\nhammer time!"; + case 'Hookshot': + return "BOING!!!\nBOING!!!\nBOING!!!"; + case 'Bow': + case 'ProgressiveBow': + return "You have\nchosen the\narcher class."; + case 'BowAndArrows': + return "You are now an\naverage archer"; + case 'BowAndSilverArrows': + return "You are now a\nmaster archer!"; + case 'Boomerang': + return "No matter what\nyou do, blue\nreturns to you"; + case 'RedBoomerang': + return "No matter what\nyou do, red\nreturns to you"; + case 'Powder': + return "you can turn\nanti-faeries\ninto faeries"; + case 'Bombos': + return "Burn, baby,\nburn! Fear my\nring of fire!"; + case 'Ether': + return "This magic\ncoin freezes\neverything!"; + case 'Quake': + return "Maxing out the\nRichter scale\nis what I do!"; + case 'Lamp': + return "Baby, baby,\nbaby.\nLight my way!"; + case 'Shovel': + return "Can\n You\n Dig it?"; + case 'CaneOfSomaria': + return "I make blocks\nto hold down\nswitches!"; + case 'CaneOfByrna': + return "Use this to\nbecome\ninvincible!"; + case 'Cape': + return "Wear this to\nbecome\ninvisible!"; + case 'MagicMirror': + return "Isn't your\nreflection so\npretty?"; + case 'PowerGlove': + return "Now you can\nlift weak\nstuff!"; + case 'TitansMitt': + return "Now you can\nlift heavy\nstuff!"; + case 'BookOfMudora': + return "This is a\nparadox?!"; + case 'Flippers': + return "fancy a swim?"; + case 'MoonPearl': + return " Bunny Link\n be\n gone!"; + case 'BugCatchingNet': + return "Let's catch\nsome bees and\nfaeries!"; + case 'BlueMail': + return "Now you're a\nblue elf!"; + case 'RedMail': + return "Now you're a\nred elf!"; + case 'PieceOfHeart': + return "Just a little\npiece of love!"; + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "Maximum health\nincreased!\nYeah!"; + case 'Bomb': + return "I make things\ngo BOOM! But\njust once."; + case 'ThreeBombs': + return "I make things\ngo triple\nBOOM!!!"; + case 'TenBombs': + return "I make things\ngo BOOM!\nso many times!"; + case 'Mushroom': + return "I'm a fun guy!\n\nI'm a funghi!"; + case 'Bottle': + return "Now you can\nstore potions\nand stuff!"; + case 'BottleWithRedPotion': + return "You see red\ngoo in a\nbottle?"; + case 'BottleWithGreenPotion': + return "You see green\ngoo in a\nbottle?"; + case 'BottleWithBluePotion': + return "You see blue\ngoo in a\nbottle?"; + case 'BottleWithGoldBee': + case 'BottleWithBee': + return "Release me\nso I can go\nbzzzzz!"; + case 'BottleWithFairy': + return "If you die\nI will revive\nyou!"; + case 'Heart': + return "I'm a lonely\nheart."; + case 'Arrow': + return "a lonely arrow\nsits here."; + case 'TenArrows': + return "This will give\nyou ten shots\nwith your bow!"; + case 'SmallMagic': + return "A tiny magic\nrefill rests\nhere"; + case 'OneRupee': + case 'FiveRupees': + return "Just pocket\nchange. Move\nright along."; + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "Just couch\ncash. Move\nright along."; + case 'OneHundredRupees': + return "A rupee stash!\nHell yeah!"; + case 'ThreeHundredRupees': + return "A rupee hoard!\nHell yeah!"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "Save the duck\nand fly to\nfreedom!"; + case 'PegasusBoots': + return "Gotta go fast!"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "increase bomb\nstorage, low\nlow price"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "increase arrow\nstorage, low\nlow price"; + case 'SilverArrowUpgrade': + return "Do you fancy\nsilver tipped\narrows?"; + case 'HalfMagic': + return "Your magic\npower has been\ndoubled!"; + case 'QuarterMagic': + return "Your magic\npower has been\nquadrupled!"; + case 'PendantOfCourage': + return "Courage for\nthose who\nalready had it"; + case 'PendantOfWisdom': + return "Wisdom for\nthose who\nalready had it"; + case 'PendantOfPower': + return "Power for\nthose who\nalready had it"; + case 'Rupoor': + return "This is not\nreally worth\nyour time"; + case 'RedClock': + return "like the sands\nthrough a red\nhourglass"; + case 'BlueClock': + return "sapphire sand\ntrickles down"; + case 'GreenClock': + return "tick tock\ntick tock"; + case 'ProgressiveSword': + return "a better copy\nof your sword\nfor your time"; + case 'ProgressiveShield': + return "have a better\ndefense in\nfront of you"; + case 'ProgressiveArmor': + return "time for a\nchange of\nclothes?"; + case 'ProgressiveGlove': + return "a way to lift\nheavier things"; + case 'singleRNG': + case 'multiRNG': + return "who knows? you\nprobably don't\nneed this."; + case 'Triforce': + return "\n YOU WIN!"; + case 'PowerStar': + return "Aim for the\nmoon. You may\nhit a 'star'"; + case 'TriforcePiece': + return "a yellow\ntriangle\nyou need this"; + case 'Nothing': + default: + return "Don't waste\nyour time!"; + } + } } diff --git a/app/Location/Drop/Ether.php b/app/Location/Drop/Ether.php index d83230c25..b96833786 100644 --- a/app/Location/Drop/Ether.php +++ b/app/Location/Drop/Ether.php @@ -1,4 +1,6 @@ -setEtherTextbox($this->getItemText()); + $rom->setText('tablet_ether_book', $this->getItemText()); - return $this; - } + return $this; + } - private function getItemText() { - $item = ($this->region->getWorld()->config('rom.genericKeys', false) && $this->item instanceof Item\Key) - ? Item::get('KeyGK') - : $this->item; + private function getItemText() + { + $item = ($this->region->getWorld()->config('rom.genericKeys', false) && $this->item instanceof Item\Key) + ? Item::get('KeyGK', $this->region->getWorld()) + : $this->item; - switch ($item->getTarget()) { - case Item::get('BigKeyA2'): - return "The big key\nof evil's bane"; - case Item::get('BigKeyD7'): - return "The big key\nof terrapins"; - case Item::get('BigKeyD4'): - return "The big key\nof rogues"; - case Item::get('BigKeyP3'): - return "The big key\nto moldorm's\nheart"; - case Item::get('BigKeyD5'): - return "A frozen\nbig key\nrests here"; - case Item::get('BigKeyD3'): - return "The big key\nof the dark\nforest"; - case Item::get('BigKeyD6'): - return "The big key\nto Vitreous"; - case Item::get('BigKeyD1'): - return "Hammeryump\nwith this\nbig key"; - case Item::get('BigKeyD2'): - return "The big key\nto the swamp"; - case Item::get('BigKeyA1'): - return "Okay, this big\nkey doesn't\nreally exist"; - case Item::get('BigKeyP2'): - return "Sand spills\nout of this\nbig key"; - case Item::get('BigKeyP1'): - return "The big key\nof the east"; - case Item::get('BigKeyH1'): - case Item::get('BigKeyH2'): - return "You should\nhave got this\nfrom a guard"; - case Item::get('KeyA2'): - return "The small key\nof evil's bane"; - case Item::get('KeyD7'): - return "The small key\nof terrapins"; - case Item::get('KeyD4'): - return "The small key\nof rogues"; - case Item::get('KeyP3'): - return "The key\nto moldorm's\nbasement"; - case Item::get('KeyD5'): - return "A frozen\nsmall key\nrests here"; - case Item::get('KeyD3'): - return "The small key\nof the dark\nforest"; - case Item::get('KeyD6'): - return "The small key\nto Vitreous"; - case Item::get('KeyD1'): - return "A small key\nthat steals\nlight"; - case Item::get('KeyD2'): - return "Access to\nthe swamp\nis granted"; - case Item::get('KeyA1'): - return "Agahnim\nhalfway\nunlocked"; - case Item::get('KeyP2'): - return "Sand spills\nout of this\nsmall key"; - case Item::get('KeyP1'): - return "Okay, this\nkey doesn't\nreally exist"; - case Item::get('KeyH1'): - case Item::get('KeyH2'): - return "The key to\nthe castle"; - } + switch ($item->getTarget()->getRawName()) { + case 'BigKeyA2': + return "The big key\nof evil's bane"; + case 'BigKeyD7': + return "The big key\nof terrapins"; + case 'BigKeyD4': + return "The big key\nof rogues"; + case 'BigKeyP3': + return "The big key\nto moldorm's\nheart"; + case 'BigKeyD5': + return "A frozen\nbig key\nrests here"; + case 'BigKeyD3': + return "The big key\nof the dark\nforest"; + case 'BigKeyD6': + return "The big key\nto Vitreous"; + case 'BigKeyD1': + return "Hammeryump\nwith this\nbig key"; + case 'BigKeyD2': + return "The big key\nto the swamp"; + case 'BigKeyA1': + return "Okay, this big\nkey doesn't\nreally exist"; + case 'BigKeyP2': + return "Sand spills\nout of this\nbig key"; + case 'BigKeyP1': + return "The big key\nof the east"; + case 'BigKeyH1': + case 'BigKeyH2': + return "You should\nhave got this\nfrom a guard"; + case 'KeyA2': + return "The small key\nof evil's bane"; + case 'KeyD7': + return "The small key\nof terrapins"; + case 'KeyD4': + return "The small key\nof rogues"; + case 'KeyP3': + return "The key\nto moldorm's\nbasement"; + case 'KeyD5': + return "A frozen\nsmall key\nrests here"; + case 'KeyD3': + return "The small key\nof the dark\nforest"; + case 'KeyD6': + return "The small key\nto Vitreous"; + case 'KeyD1': + return "A small key\nthat steals\nlight"; + case 'KeyD2': + return "Access to\nthe swamp\nis granted"; + case 'KeyA1': + return "Agahnim\nhalfway\nunlocked"; + case 'KeyP2': + return "Sand spills\nout of this\nsmall key"; + case 'KeyP1': + return "Okay, this\nkey doesn't\nreally exist"; + case 'KeyH1': + case 'KeyH2': + return "The key to\nthe castle"; + } - switch (get_class($item->getTarget())) { - case Item\Key::class: - return "A small key\nto the Kingdom"; - case Item\BigKey::class: - return "A big key\nto the Kingdom"; - case Item\Map::class: - return "You can now\nfind your way\nhome!"; - case Item\Compass::class: - return "Now you know\nwhere the boss\nhides!"; - case Item\Egg::class: - return "Egg-cited\nfor this"; - } + switch (get_class($item->getTarget())) { + case Item\Key::class: + return "A small key\nto the Kingdom"; + case Item\BigKey::class: + return "A big key\nto the Kingdom"; + case Item\Map::class: + return "You can now\nfind your way\nhome!"; + case Item\Compass::class: + return "Now you know\nwhere the boss\nhides!"; + case Item\Egg::class: + return "Egg-cited\nfor this"; + } - switch ($item->getTarget()) { - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - return "A pathetic\nsword rests\nhere!"; - case Item::get('L2Sword'): - case Item::get('MasterSword'): - return "Look at me!\nI am the\npedestal!"; - case Item::get('L3Sword'): - return "I stole the\nblacksmith's\njob!"; - case Item::get('L4Sword'): - return "The butter\nsword rests\nhere!"; - case Item::get('BlueShield'): - return "Now you can\ndefend against\npebbles!"; - case Item::get('RedShield'): - return "Now you can\ndefend against\nfireballs!"; - case Item::get('MirrorShield'): - return "Now you can\ndefend against\nlasers!"; - case Item::get('FireRod'): - return "I'm the hot\nrod. I make\nthings burn!"; - case Item::get('IceRod'): - return "I'm the cold\nrod. I make\nthings freeze!"; - case Item::get('Hammer'): - return "stop\nhammer time!"; - case Item::get('Hookshot'): - return "BOING!!!\nBOING!!!\nBOING!!!"; - case Item::get('Bow'): - return "You have\nchosen the\narcher class."; - case Item::get('BowAndArrows'): - return "You are now an\naverage archer"; - case Item::get('BowAndSilverArrows'): - return "You are now a\nmaster archer!"; - case Item::get('Boomerang'): - return "No matter what\nyou do, blue\nreturns to you"; - case Item::get('RedBoomerang'): - return "No matter what\nyou do, red\nreturns to you"; - case Item::get('Powder'): - return "you can turn\nanti-faeries\ninto faeries"; - case Item::get('Bombos'): - return "Burn, baby,\nburn! Fear my\nring of fire!"; - case Item::get('Ether'): - return "This magic\ncoin freezes\neverything!"; - case Item::get('Quake'): - return "Maxing out the\nRichter scale\nis what I do!"; - case Item::get('Lamp'): - return "Baby, baby,\nbaby.\nLight my way!"; - case Item::get('Shovel'): - return "Can\n You\n Dig it?"; - case Item::get('CaneOfSomaria'): - return "I make blocks\nto hold down\nswitches!"; - case Item::get('CaneOfByrna'): - return "Use this to\nbecome\ninvincible!"; - case Item::get('Cape'): - return "Wear this to\nbecome\ninvisible!"; - case Item::get('MagicMirror'): - return "Isn't your\nreflection so\npretty?"; - case Item::get('PowerGlove'): - return "Now you can\nlift weak\nstuff!"; - case Item::get('TitansMitt'): - return "Now you can\nlift heavy\nstuff!"; - case Item::get('BookOfMudora'): - return "This is a\nparadox?!"; - case Item::get('Flippers'): - return "fancy a swim?"; - case Item::get('MoonPearl'): - return " Bunny Link\n be\n gone!"; - case Item::get('BugCatchingNet'): - return "Let's catch\nsome bees and\nfaeries!"; - case Item::get('BlueMail'): - return "Now you're a\nblue elf!"; - case Item::get('RedMail'): - return "Now you're a\nred elf!"; - case Item::get('PieceOfHeart'): - return "Just a little\npiece of love!"; - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "Maximum health\nincreased!\nYeah!"; - case Item::get('Bomb'): - return "I make things\ngo BOOM! But\njust once."; - case Item::get('ThreeBombs'): - return "I make things\ngo triple\nBOOM!!!"; - case Item::get('TenBombs'): - return "I make things\ngo BOOM!\nso many times!"; - case Item::get('Mushroom'): - return "I'm a fun guy!\n\nI'm a funghi!"; - case Item::get('Bottle'): - return "Now you can\nstore potions\nand stuff!"; - case Item::get('BottleWithRedPotion'): - return "You see red\ngoo in a\nbottle?"; - case Item::get('BottleWithGreenPotion'): - return "You see green\ngoo in a\nbottle?"; - case Item::get('BottleWithBluePotion'): - return "You see blue\ngoo in a\nbottle?"; - case Item::get('BottleWithGoldBee'): - case Item::get('BottleWithBee'): - return "Release me\nso I can go\nbzzzzz!"; - case Item::get('BottleWithFairy'): - return "If you die\nI will revive\nyou!"; - case Item::get('Heart'): - return "I'm a lonely\nheart."; - case Item::get('Arrow'): - return "a lonely arrow\nsits here."; - case Item::get('TenArrows'): - return "This will give\nyou ten shots\nwith your bow!"; - case Item::get('SmallMagic'): - return "A tiny magic\nrefill rests\nhere"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - return "Just pocket\nchange. Move\nright along."; - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "Just couch\ncash. Move\nright along."; - case Item::get('OneHundredRupees'): - return "A rupee stash!\nHell yeah!"; - case Item::get('ThreeHundredRupees'): - return "A rupee hoard!\nHell yeah!"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "Save the duck\nand fly to\nfreedom!"; - case Item::get('PegasusBoots'): - return "Gotta go fast!"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "increase bomb\nstorage, low\nlow price"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "increase arrow\nstorage, low\nlow price"; - case Item::get('SilverArrowUpgrade'): - return "Do you fancy\nsilver tipped\narrows?"; - case Item::get('HalfMagic'): - return "Your magic\npower has been\ndoubled!"; - case Item::get('QuarterMagic'): - return "Your magic\npower has been\nquadrupled!"; - case Item::get('PendantOfCourage'): - return "Courage for\nthose who\nalready had it"; - case Item::get('PendantOfWisdom'): - return "Wisdom for\nthose who\nalready had it"; - case Item::get('PendantOfPower'): - return "Power for\nthose who\nalready had it"; - case Item::get('Rupoor'): - return "This is not\nreally worth\nyour time"; - case Item::get('RedClock'): - return "like the sands\nthrough a red\nhourglass"; - case Item::get('BlueClock'): - return "sapphire sand\ntrickles down"; - case Item::get('GreenClock'): - return "tick tock\ntick tock"; - case Item::get('ProgressiveSword'): - return "a better copy\nof your sword\nfor your time"; - case Item::get('ProgressiveShield'): - return "have a better\ndefense in\nfront of you"; - case Item::get('ProgressiveArmor'): - return "time for a\nchange of\nclothes?"; - case Item::get('ProgressiveGlove'): - return "a way to lift\nheavier things"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "who knows? you\nprobably don't\nneed this."; - case Item::get('Triforce'): - return "\n YOU WIN!"; - case Item::get('PowerStar'): - return "Aim for the\nmoon. You may\nhit a 'star'"; - case Item::get('TriforcePiece'): - return "a yellow\ntriangle\nyou need this"; - case Item::get('Nothing'): - default: - return "Don't waste\nyour time!"; - } - } + switch ($item->getTarget()->getRawName()) { + case 'L1Sword': + case 'L1SwordAndShield': + return "A pathetic\nsword rests\nhere!"; + case 'L2Sword': + case 'MasterSword': + return "Look at me!\nI am the\npedestal!"; + case 'L3Sword': + return "I stole the\nblacksmith's\njob!"; + case 'L4Sword': + return "The butter\nsword rests\nhere!"; + case 'BlueShield': + return "Now you can\ndefend against\npebbles!"; + case 'RedShield': + return "Now you can\ndefend against\nfireballs!"; + case 'MirrorShield': + return "Now you can\ndefend against\nlasers!"; + case 'FireRod': + return "I'm the hot\nrod. I make\nthings burn!"; + case 'IceRod': + return "I'm the cold\nrod. I make\nthings freeze!"; + case 'Hammer': + return "stop\nhammer time!"; + case 'Hookshot': + return "BOING!!!\nBOING!!!\nBOING!!!"; + case 'Bow': + case 'ProgressiveBow': + return "You have\nchosen the\narcher class."; + case 'BowAndArrows': + return "You are now an\naverage archer"; + case 'BowAndSilverArrows': + return "You are now a\nmaster archer!"; + case 'Boomerang': + return "No matter what\nyou do, blue\nreturns to you"; + case 'RedBoomerang': + return "No matter what\nyou do, red\nreturns to you"; + case 'Powder': + return "you can turn\nanti-faeries\ninto faeries"; + case 'Bombos': + return "Burn, baby,\nburn! Fear my\nring of fire!"; + case 'Ether': + return "This magic\ncoin freezes\neverything!"; + case 'Quake': + return "Maxing out the\nRichter scale\nis what I do!"; + case 'Lamp': + return "Baby, baby,\nbaby.\nLight my way!"; + case 'Shovel': + return "Can\n You\n Dig it?"; + case 'CaneOfSomaria': + return "I make blocks\nto hold down\nswitches!"; + case 'CaneOfByrna': + return "Use this to\nbecome\ninvincible!"; + case 'Cape': + return "Wear this to\nbecome\ninvisible!"; + case 'MagicMirror': + return "Isn't your\nreflection so\npretty?"; + case 'PowerGlove': + return "Now you can\nlift weak\nstuff!"; + case 'TitansMitt': + return "Now you can\nlift heavy\nstuff!"; + case 'BookOfMudora': + return "This is a\nparadox?!"; + case 'Flippers': + return "fancy a swim?"; + case 'MoonPearl': + return " Bunny Link\n be\n gone!"; + case 'BugCatchingNet': + return "Let's catch\nsome bees and\nfaeries!"; + case 'BlueMail': + return "Now you're a\nblue elf!"; + case 'RedMail': + return "Now you're a\nred elf!"; + case 'PieceOfHeart': + return "Just a little\npiece of love!"; + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "Maximum health\nincreased!\nYeah!"; + case 'Bomb': + return "I make things\ngo BOOM! But\njust once."; + case 'ThreeBombs': + return "I make things\ngo triple\nBOOM!!!"; + case 'TenBombs': + return "I make things\ngo BOOM!\nso many times!"; + case 'Mushroom': + return "I'm a fun guy!\n\nI'm a funghi!"; + case 'Bottle': + return "Now you can\nstore potions\nand stuff!"; + case 'BottleWithRedPotion': + return "You see red\ngoo in a\nbottle?"; + case 'BottleWithGreenPotion': + return "You see green\ngoo in a\nbottle?"; + case 'BottleWithBluePotion': + return "You see blue\ngoo in a\nbottle?"; + case 'BottleWithGoldBee': + case 'BottleWithBee': + return "Release me\nso I can go\nbzzzzz!"; + case 'BottleWithFairy': + return "If you die\nI will revive\nyou!"; + case 'Heart': + return "I'm a lonely\nheart."; + case 'Arrow': + return "a lonely arrow\nsits here."; + case 'TenArrows': + return "This will give\nyou ten shots\nwith your bow!"; + case 'SmallMagic': + return "A tiny magic\nrefill rests\nhere"; + case 'OneRupee': + case 'FiveRupees': + return "Just pocket\nchange. Move\nright along."; + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "Just couch\ncash. Move\nright along."; + case 'OneHundredRupees': + return "A rupee stash!\nHell yeah!"; + case 'ThreeHundredRupees': + return "A rupee hoard!\nHell yeah!"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "Save the duck\nand fly to\nfreedom!"; + case 'PegasusBoots': + return "Gotta go fast!"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "increase bomb\nstorage, low\nlow price"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "increase arrow\nstorage, low\nlow price"; + case 'SilverArrowUpgrade': + return "Do you fancy\nsilver tipped\narrows?"; + case 'HalfMagic': + return "Your magic\npower has been\ndoubled!"; + case 'QuarterMagic': + return "Your magic\npower has been\nquadrupled!"; + case 'PendantOfCourage': + return "Courage for\nthose who\nalready had it"; + case 'PendantOfWisdom': + return "Wisdom for\nthose who\nalready had it"; + case 'PendantOfPower': + return "Power for\nthose who\nalready had it"; + case 'Rupoor': + return "This is not\nreally worth\nyour time"; + case 'RedClock': + return "like the sands\nthrough a red\nhourglass"; + case 'BlueClock': + return "sapphire sand\ntrickles down"; + case 'GreenClock': + return "tick tock\ntick tock"; + case 'ProgressiveSword': + return "a better copy\nof your sword\nfor your time"; + case 'ProgressiveShield': + return "have a better\ndefense in\nfront of you"; + case 'ProgressiveArmor': + return "time for a\nchange of\nclothes?"; + case 'ProgressiveGlove': + return "a way to lift\nheavier things"; + case 'singleRNG': + case 'multiRNG': + return "who knows? you\nprobably don't\nneed this."; + case 'Triforce': + return "\n YOU WIN!"; + case 'PowerStar': + return "Aim for the\nmoon. You may\nhit a 'star'"; + case 'TriforcePiece': + return "a yellow\ntriangle\nyou need this"; + case 'Nothing': + default: + return "Don't waste\nyour time!"; + } + } } diff --git a/app/Location/Fountain.php b/app/Location/Fountain.php index 649f7df2b..d4ece5ce1 100644 --- a/app/Location/Fountain.php +++ b/app/Location/Fountain.php @@ -1,10 +1,11 @@ -item = $item; - return $this; - } + $this->item = $item; + return $this; + } } diff --git a/app/Location/Npc.php b/app/Location/Npc.php index dfe3c2a2f..73ec2230d 100644 --- a/app/Location/Npc.php +++ b/app/Location/Npc.php @@ -1,10 +1,11 @@ -setBugCatchingKidCredits($this->getItemCreditsText()); + $rom->setCredit('kakariko2', $this->getItemCreditsText()); - return $this; - } + return $this; + } - private function getItemCreditsText() { - switch (get_class($this->item->getTarget())) { - case Item\Key::class: - case Item\BigKey::class: - return "the key-holding kid"; - case Item\Map::class: - return "the cartographer kid"; - case Item\Compass::class: - return "the navigating kid"; - case Item\Egg::class: - return "the decorating kid"; - } + private function getItemCreditsText() + { + switch (get_class($this->item->getTarget())) { + case Item\Key::class: + case Item\BigKey::class: + return "the key-holding kid"; + case Item\Map::class: + return "the cartographer kid"; + case Item\Compass::class: + return "the navigating kid"; + case Item\Egg::class: + return "the decorating kid"; + } - switch ($this->item->getTarget()) { - case Item::get('ProgressiveSword'): - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - case Item::get('L2Sword'): - case Item::get('MasterSword'): - case Item::get('L3Sword'): - case Item::get('L4Sword'): - return "sword-wielding kid"; - case Item::get('ProgressiveShield'): - case Item::get('BlueShield'): - case Item::get('RedShield'): - case Item::get('MirrorShield'): - return "shield-wielding kid"; - case Item::get('FireRod'): - return "fire-starting kid"; - case Item::get('IceRod'): - return "the ice-bending kid"; - case Item::get('Hammer'): - return "hammer-smashing kid"; - case Item::get('Hookshot'): - return "tickle-monster kid"; - case Item::get('Bow'): - return "arrow-slinging kid"; - case Item::get('BowAndArrows'): - return "arrow-slinging kid"; - case Item::get('BowAndSilverArrows'): - return "arrow-slinging kid"; - case Item::get('Boomerang'): - return "the bat-throwing kid"; - case Item::get('RedBoomerang'): - return "the bat-throwing kid"; - case Item::get('Powder'): - return "the sack-holding kid"; - case Item::get('Bombos'): - return "coin-collecting kid"; - case Item::get('Ether'): - return "coin-collecting kid"; - case Item::get('Quake'): - return "coin-collecting kid"; - case Item::get('Lamp'): - return "light-shining kid"; - case Item::get('Shovel'): - return "archaeologist kid"; - case Item::get('CaneOfSomaria'): - return "the block-making kid"; - case Item::get('CaneOfByrna'): - return "the spark-making kid"; - case Item::get('Cape'): - return "red riding-hood kid"; - case Item::get('MagicMirror'): - return "the narcissistic kid"; - case Item::get('ProgressiveGlove'): - case Item::get('PowerGlove'): - case Item::get('TitansMitt'): - return "body-building kid"; - case Item::get('BookOfMudora'): - return "the scholarly kid"; - case Item::get('Flippers'): - return "the swimming kid"; - case Item::get('MoonPearl'): - return "fortune-telling kid"; - case Item::get('BugCatchingNet'): - return "the bug-catching kid"; - case Item::get('ProgressiveArmor'): - case Item::get('BlueMail'): - return "the protected kid"; - case Item::get('RedMail'): - return "well-protected kid"; - case Item::get('PieceOfHeart'): - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "the life-giving kid"; - case Item::get('Bomb'): - case Item::get('ThreeBombs'): - case Item::get('TenBombs'): - return "the bomb-holding kid"; - case Item::get('Mushroom'): - return "the drug-dealing kid"; - case Item::get('Bottle'): - return "the terrarium kid"; - case Item::get('BottleWithRedPotion'): - case Item::get('BottleWithGreenPotion'): - case Item::get('BottleWithBluePotion'): - return "potion-slinging kid"; - case Item::get('BottleWithGoldBee'): - case Item::get('BottleWithBee'): - return "the bug-caught kid"; - case Item::get('BottleWithFairy'): - return "fairy-catching kid"; - case Item::get('Heart'): - return "affection-giving kid"; - case Item::get('Arrow'): - case Item::get('TenArrows'): - return "stick-collecting kid"; - case Item::get('SmallMagic'): - return "magic-slinging kid"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - return "poverty-struck kid"; - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "the piggy-bank kid"; - case Item::get('OneHundredRupees'): - return "the kind-of-rich kid"; - case Item::get('ThreeHundredRupees'): - return "the really-rich kid"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "the duck-call kid"; - case Item::get('PegasusBoots'): - return "the running-man kid"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "boom-enlarging kid"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "quiver-enlarging kid"; - case Item::get('SilverArrowUpgrade'): - return "arrow-sharpening kid"; - case Item::get('HalfMagic'): - case Item::get('QuarterMagic'): - return "the magic-saving kid"; - case Item::get('Rupoor'): - return "the toll-booth kid"; - case Item::get('RedClock'): - return "the ruby-time kid"; - case Item::get('BlueClock'): - return "the indigo-time kid"; - case Item::get('GreenClock'): - return "the emerald-time kid"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "the something kid"; - case Item::get('Triforce'): - return "the game-winning kid"; - case Item::get('PowerStar'): - return "the starry-eyed kid"; - case Item::get('TriforcePiece'): - return "triforce-holding kid"; - case Item::get('Nothing'): - default: - return "nothing-having kid"; - } - } + switch ($this->item->getTarget()->getRawName()) { + case 'ProgressiveSword': + case 'L1Sword': + case 'L1SwordAndShield': + case 'L2Sword': + case 'MasterSword': + case 'L3Sword': + case 'L4Sword': + return "sword-wielding kid"; + case 'ProgressiveShield': + case 'BlueShield': + case 'RedShield': + case 'MirrorShield': + return "shield-wielding kid"; + case 'FireRod': + return "fire-starting kid"; + case 'IceRod': + return "the ice-bending kid"; + case 'Hammer': + return "hammer-smashing kid"; + case 'Hookshot': + return "tickle-monster kid"; + case 'Bow': + case 'BowAndArrows': + case 'BowAndSilverArrows': + case 'ProgressiveBow': + return "arrow-slinging kid"; + case 'Boomerang': + return "the bat-throwing kid"; + case 'RedBoomerang': + return "the bat-throwing kid"; + case 'Powder': + return "the sack-holding kid"; + case 'Bombos': + return "coin-collecting kid"; + case 'Ether': + return "coin-collecting kid"; + case 'Quake': + return "coin-collecting kid"; + case 'Lamp': + return "light-shining kid"; + case 'Shovel': + return "archaeologist kid"; + case 'CaneOfSomaria': + return "the block-making kid"; + case 'CaneOfByrna': + return "the spark-making kid"; + case 'Cape': + return "red riding-hood kid"; + case 'MagicMirror': + return "the narcissistic kid"; + case 'ProgressiveGlove': + case 'PowerGlove': + case 'TitansMitt': + return "body-building kid"; + case 'BookOfMudora': + return "the scholarly kid"; + case 'Flippers': + return "the swimming kid"; + case 'MoonPearl': + return "fortune-telling kid"; + case 'BugCatchingNet': + return "the bug-catching kid"; + case 'ProgressiveArmor': + case 'BlueMail': + return "the protected kid"; + case 'RedMail': + return "well-protected kid"; + case 'PieceOfHeart': + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "the life-giving kid"; + case 'Bomb': + case 'ThreeBombs': + case 'TenBombs': + return "the bomb-holding kid"; + case 'Mushroom': + return "the drug-dealing kid"; + case 'Bottle': + return "the terrarium kid"; + case 'BottleWithRedPotion': + case 'BottleWithGreenPotion': + case 'BottleWithBluePotion': + return "potion-slinging kid"; + case 'BottleWithGoldBee': + case 'BottleWithBee': + return "the bug-caught kid"; + case 'BottleWithFairy': + return "fairy-catching kid"; + case 'Heart': + return "affection-giving kid"; + case 'Arrow': + case 'TenArrows': + return "stick-collecting kid"; + case 'SmallMagic': + return "magic-slinging kid"; + case 'OneRupee': + case 'FiveRupees': + return "poverty-struck kid"; + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "the piggy-bank kid"; + case 'OneHundredRupees': + return "the kind-of-rich kid"; + case 'ThreeHundredRupees': + return "the really-rich kid"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "the duck-call kid"; + case 'PegasusBoots': + return "the running-man kid"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "boom-enlarging kid"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "quiver-enlarging kid"; + case 'SilverArrowUpgrade': + return "arrow-sharpening kid"; + case 'HalfMagic': + case 'QuarterMagic': + return "the magic-saving kid"; + case 'Rupoor': + return "the toll-booth kid"; + case 'RedClock': + return "the ruby-time kid"; + case 'BlueClock': + return "the indigo-time kid"; + case 'GreenClock': + return "the emerald-time kid"; + case 'singleRNG': + case 'multiRNG': + return "the something kid"; + case 'Triforce': + return "the game-winning kid"; + case 'PowerStar': + return "the starry-eyed kid"; + case 'TriforcePiece': + return "triforce-holding kid"; + case 'Nothing': + default: + return "nothing-having kid"; + } + } } diff --git a/app/Location/Npc/Uncle.php b/app/Location/Npc/Uncle.php index 8fbad3f03..a0a927933 100644 --- a/app/Location/Npc/Uncle.php +++ b/app/Location/Npc/Uncle.php @@ -1,4 +1,6 @@ -getItem(); +class Uncle extends Location +{ + /** + * Sets the item for this location. We need to check mode to determine fills/assit. + * + * @param \ALttP\Rom $rom rom to write to + * @param \ALttP\Item $item item to write + * + * @return \ALttP\Location + */ + public function writeItem(Rom $rom, Item $item = null) + { + parent::writeItem($rom, $item); + $item = $this->getItem(); - $world = $this->region->getWorld(); + $world = $this->region->getWorld(); - if ($world->config('mode.state') == 'standard') { - if ($item instanceof Item\Bow) { - $rom->setEscapeFills(0b00000001); - $rom->setUncleSpawnRefills(0, 0, 70); - $rom->setZeldaSpawnRefills(0, 0, 10); - $rom->setMantleSpawnRefills(0, 0, 10); - } elseif ($item == Item::get('TenBombs')) { - $rom->setEscapeFills(0b00000010); - $rom->setUncleSpawnRefills(0, 50, 0); - $rom->setZeldaSpawnRefills(0, 3, 0); - $rom->setMantleSpawnRefills(0, 3, 0); - } elseif ($item == Item::get('FireRod') - || $item == Item::get('CaneOfSomaria') - || $item == Item::get('CaneOfByrna')) { - $rom->setEscapeFills(0b00000100); - $rom->setUncleSpawnRefills(0x80, 0, 0); - $rom->setZeldaSpawnRefills(0x20, 0, 0); - $rom->setMantleSpawnRefills(0x20, 0, 0); - } else { - $rom->setEscapeFills(0b00000000); - $rom->setUncleSpawnRefills(0, 0, 0); - $rom->setZeldaSpawnRefills(0, 0, 0); - $rom->setMantleSpawnRefills(0, 0, 0); - } + if ($world->config('mode.state') == 'standard') { + if ($item instanceof Item\Bow) { + $rom->setEscapeFills(0b00000001); + $rom->setUncleSpawnRefills(0, 0, 70); + $rom->setZeldaSpawnRefills(0, 0, 10); + $rom->setMantleSpawnRefills(0, 0, 10); + } elseif ($item == Item::get('TenBombs', $world)) { + $rom->setEscapeFills(0b00000010); + $rom->setUncleSpawnRefills(0, 50, 0); + $rom->setZeldaSpawnRefills(0, 3, 0); + $rom->setMantleSpawnRefills(0, 3, 0); + } elseif ( + $item == Item::get('FireRod', $world) + || $item == Item::get('CaneOfSomaria', $world) + || $item == Item::get('CaneOfByrna', $world) + ) { + $rom->setEscapeFills(0b00000100); + $rom->setUncleSpawnRefills(0x80, 0, 0); + $rom->setZeldaSpawnRefills(0x20, 0, 0); + $rom->setMantleSpawnRefills(0x20, 0, 0); + } else { + $rom->setEscapeFills(0b00000000); + $rom->setUncleSpawnRefills(0, 0, 0); + $rom->setZeldaSpawnRefills(0, 0, 0); + $rom->setMantleSpawnRefills(0, 0, 0); + } - if ($world->config('rom.HardMode') == -1) { - if ($item instanceof Item\Bow) { - $rom->setEscapeAssist(0b00000001); - } elseif ($item == Item::get('TenBombs')) { - $rom->setEscapeAssist(0b00000010); - } elseif ($item == Item::get('FireRod') - || $item == Item::get('CaneOfSomaria') - || $item == Item::get('CaneOfByrna')) { - $rom->setEscapeAssist(0b00000100); - } else { - $rom->setEscapeAssist(0b00000000); - } - } else { - $rom->setEscapeAssist(0b00000000); - } - } else { - $rom->setEscapeFills(0b00000000); - $rom->setUncleSpawnRefills(0, 0, 0); - $rom->setZeldaSpawnRefills(0, 0, 0); - $rom->setMantleSpawnRefills(0, 0, 0); - $rom->setEscapeAssist(0b00000000); - } + if ($world->config('rom.HardMode') == -1) { + if ($item instanceof Item\Bow) { + $rom->setEscapeAssist(0b00000001); + } elseif ($item == Item::get('TenBombs', $world)) { + $rom->setEscapeAssist(0b00000010); + } elseif ( + $item == Item::get('FireRod', $world) + || $item == Item::get('CaneOfSomaria', $world) + || $item == Item::get('CaneOfByrna', $world) + ) { + $rom->setEscapeAssist(0b00000100); + } else { + $rom->setEscapeAssist(0b00000000); + } + } else { + $rom->setEscapeAssist(0b00000000); + } + } else { + $rom->setEscapeFills(0b00000000); + $rom->setUncleSpawnRefills(0, 0, 0); + $rom->setZeldaSpawnRefills(0, 0, 0); + $rom->setMantleSpawnRefills(0, 0, 0); + $rom->setEscapeAssist(0b00000000); + } - $rom->setLinksHouseCredits($this->getItemCreditsText()); + $rom->setCredit('house', $this->getItemCreditsText()); - return $this; - } + return $this; + } - private function getItemCreditsText() { - switch (get_class($this->item->getTarget())) { - case Item\Key::class: - case Item\BigKey::class: - return "your uncle picks locks"; - case Item\Map::class: - return "your uncle finds treasure"; - case Item\Compass::class: - return "your uncle navigates"; - case Item\Egg::class: - return "your uncle likes coloring"; - } + private function getItemCreditsText() + { + switch (get_class($this->item->getTarget())) { + case Item\Key::class: + case Item\BigKey::class: + return "your uncle picks locks"; + case Item\Map::class: + return "your uncle finds treasure"; + case Item\Compass::class: + return "your uncle navigates"; + case Item\Egg::class: + return "your uncle likes coloring"; + } - switch ($this->item->getTarget()) { - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - case Item::get('L2Sword'): - case Item::get('MasterSword'): - case Item::get('L3Sword'): - case Item::get('L4Sword'): - case Item::get('ProgressiveSword'): - return "your uncle recovers"; - case Item::get('BlueShield'): - case Item::get('RedShield'): - case Item::get('MirrorShield'): - case Item::get('ProgressiveShield'): - return "your uncle protects"; - case Item::get('FireRod'): - return "your uncle starts fires"; - case Item::get('IceRod'): - return "your uncle is cold as ice"; - case Item::get('Hammer'): - return "stop... hammer time"; - case Item::get('Hookshot'): - return "your uncle is BOING"; - case Item::get('Bow'): - case Item::get('BowAndArrows'): - case Item::get('BowAndSilverArrows'): - return "your uncle, robin hood"; - case Item::get('Boomerang'): - case Item::get('RedBoomerang'): - return "your uncle is stunning"; - case Item::get('Powder'): - return "your uncle and his sack"; - case Item::get('Bombos'): - case Item::get('Ether'): - case Item::get('Quake'): - return "your uncle collects coins"; - case Item::get('Lamp'): - return "your uncle has night vision"; - case Item::get('Shovel'): - return "your uncle digs it"; - case Item::get('CaneOfSomaria'): - return "your uncle makes blocks"; - case Item::get('CaneOfByrna'): - return "your uncle sparks"; - case Item::get('Cape'): - return "your uncle can hide"; - case Item::get('MagicMirror'): - return "your uncle is vain"; - case Item::get('PowerGlove'): - case Item::get('TitansMitt'): - case Item::get('ProgressiveGlove'): - return "your uncle goes back to the gym"; - case Item::get('BookOfMudora'): - return "your uncle can read"; - case Item::get('Flippers'): - return "your uncle swims"; - case Item::get('MoonPearl'): - return "your uncle shoots marbles"; - case Item::get('BugCatchingNet'): - return "your uncle catches bees"; - case Item::get('BlueMail'): - case Item::get('RedMail'): - case Item::get('ProgressiveArmor'): - return "your uncle tailors"; - case Item::get('PieceOfHeart'): - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "your uncle is healthly"; - case Item::get('Bomb'): - case Item::get('ThreeBombs'): - case Item::get('TenBombs'): - return "your uncle believes"; - case Item::get('Mushroom'): - return "your uncle deals drugs"; - case Item::get('Bottle'): - return "your uncle likes turtles"; - case Item::get('BottleWithRedPotion'): - case Item::get('BottleWithGreenPotion'): - case Item::get('BottleWithBluePotion'): - return "your uncle helps out"; - case Item::get('BottleWithGoldBee'): - return "your uncle has beetor"; - case Item::get('BottleWithBee'): - return "your uncle likes arthropods"; - case Item::get('BottleWithFairy'): - return "your uncle has a friend"; - case Item::get('Heart'): - return "your uncle is creepy"; - case Item::get('Arrow'): - return "your uncle believes in you"; - case Item::get('TenArrows'): - return "your uncle sews"; - case Item::get('SmallMagic'): - return "your uncle is magic"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - return "your uncle is cheap"; - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "your uncle likes cash"; - case Item::get('OneHundredRupees'): - case Item::get('ThreeHundredRupees'): - return "your uncle is rich"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "your uncle trains ducks"; - case Item::get('PegasusBoots'): - return "your uncle goes fast"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "your uncle has the bomb bag"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "your uncle has the quiver"; - case Item::get('SilverArrowUpgrade'): - return "your uncle shaves"; - case Item::get('HalfMagic'): - case Item::get('QuarterMagic'): - return "your uncle is magical"; - case Item::get('Rupoor'): - return "your uncle collects"; - case Item::get('RedClock'): - case Item::get('BlueClock'): - case Item::get('GreenClock'): - return "your uncle keeps time"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "your uncle recovers"; - case Item::get('Triforce'): - return "your uncle wins the game"; - case Item::get('PowerStar'): - case Item::get('TriforcePiece'): - return "your uncle is important"; - case Item::get('Nothing'): - default: - return "your uncle does nothing"; - } - } + switch ($this->item->getTarget()->getRawName()) { + case 'L1Sword': + case 'L1SwordAndShield': + case 'L2Sword': + case 'MasterSword': + case 'L3Sword': + case 'L4Sword': + case 'ProgressiveSword': + return "your uncle recovers"; + case 'BlueShield': + case 'RedShield': + case 'MirrorShield': + case 'ProgressiveShield': + return "your uncle protects"; + case 'FireRod': + return "your uncle starts fires"; + case 'IceRod': + return "your uncle is cold as ice"; + case 'Hammer': + return "stop... hammer time"; + case 'Hookshot': + return "your uncle is BOING"; + case 'Bow': + case 'BowAndArrows': + case 'BowAndSilverArrows': + return "your uncle, robin hood"; + case 'Boomerang': + case 'RedBoomerang': + return "your uncle is stunning"; + case 'Powder': + return "your uncle and his sack"; + case 'Bombos': + case 'Ether': + case 'Quake': + return "your uncle collects coins"; + case 'Lamp': + return "your uncle has night vision"; + case 'Shovel': + return "your uncle digs it"; + case 'CaneOfSomaria': + return "your uncle makes blocks"; + case 'CaneOfByrna': + return "your uncle sparks"; + case 'Cape': + return "your uncle can hide"; + case 'MagicMirror': + return "your uncle is vain"; + case 'PowerGlove': + case 'TitansMitt': + case 'ProgressiveGlove': + return "your uncle goes back to the gym"; + case 'BookOfMudora': + return "your uncle can read"; + case 'Flippers': + return "your uncle swims"; + case 'MoonPearl': + return "your uncle shoots marbles"; + case 'BugCatchingNet': + return "your uncle catches bees"; + case 'BlueMail': + case 'RedMail': + case 'ProgressiveArmor': + return "your uncle tailors"; + case 'PieceOfHeart': + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "your uncle is healthy"; + case 'Bomb': + case 'ThreeBombs': + case 'TenBombs': + return "your uncle believes"; + case 'Mushroom': + return "your uncle deals drugs"; + case 'Bottle': + return "your uncle likes turtles"; + case 'BottleWithRedPotion': + case 'BottleWithGreenPotion': + case 'BottleWithBluePotion': + return "your uncle helps out"; + case 'BottleWithGoldBee': + return "your uncle has beetor"; + case 'BottleWithBee': + return "your uncle likes arthropods"; + case 'BottleWithFairy': + return "your uncle has a friend"; + case 'Heart': + return "your uncle is creepy"; + case 'Arrow': + return "your uncle believes in you"; + case 'TenArrows': + return "your uncle sews"; + case 'SmallMagic': + return "your uncle is magic"; + case 'OneRupee': + case 'FiveRupees': + return "your uncle is cheap"; + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "your uncle likes cash"; + case 'OneHundredRupees': + case 'ThreeHundredRupees': + return "your uncle is rich"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "your uncle trains ducks"; + case 'PegasusBoots': + return "your uncle goes fast"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "your uncle has the bomb bag"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "your uncle has the quiver"; + case 'SilverArrowUpgrade': + return "your uncle shaves"; + case 'HalfMagic': + case 'QuarterMagic': + return "your uncle is magical"; + case 'Rupoor': + return "your uncle collects"; + case 'RedClock': + case 'BlueClock': + case 'GreenClock': + return "your uncle keeps time"; + case 'singleRNG': + case 'multiRNG': + return "your uncle recovers"; + case 'Triforce': + return "your uncle wins the game"; + case 'PowerStar': + case 'TriforcePiece': + return "your uncle is important"; + case 'Nothing': + default: + return "your uncle does nothing"; + } + } } diff --git a/app/Location/Npc/Witch.php b/app/Location/Npc/Witch.php index 47a10620e..ec66e2a59 100644 --- a/app/Location/Npc/Witch.php +++ b/app/Location/Npc/Witch.php @@ -1,4 +1,6 @@ -setMagicShopCredits($this->getItemCreditsText()); + $rom->setCredit('witch', $this->getItemCreditsText()); - return $this; - } + return $this; + } - private function getItemCreditsText() { - switch (get_class($this->item->getTarget())) { - case Item\Key::class: - case Item\BigKey::class: - return "keys, keys, keys"; - case Item\Map::class: - return "shrooms find secrets"; - case Item\Compass::class: - return "shrooms for navigation"; - case Item\Egg::class: - return "shrooms for eggs"; - } + private function getItemCreditsText() + { + switch (get_class($this->item->getTarget())) { + case Item\Key::class: + case Item\BigKey::class: + return "keys, keys, keys"; + case Item\Map::class: + return "shrooms find secrets"; + case Item\Compass::class: + return "shrooms for navigation"; + case Item\Egg::class: + return "shrooms for eggs"; + } - switch ($this->item->getTarget()) { - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - return "fungus for slasher"; - case Item::get('L2Sword'): - case Item::get('MasterSword'): - return "fungus for blue slasher"; - case Item::get('L3Sword'): - return "fungus for red slasher"; - case Item::get('L4Sword'): - return "cap churned to butter"; - case Item::get('BlueShield'): - return "fungus for shield"; - case Item::get('RedShield'): - return "fungus for fire shield"; - case Item::get('MirrorShield'): - return "fungus for shiny shield"; - case Item::get('FireRod'): - return "fungus for rage-rod"; - case Item::get('IceRod'): - return "fungus for ice-rod"; - case Item::get('Hammer'): - return "stop... hammer time"; - case Item::get('Hookshot'): - return "witch and tickle boy"; - case Item::get('Bow'): - return "witch and robin hood"; - case Item::get('BowAndArrows'): - return "witch and robin hood"; - case Item::get('BowAndSilverArrows'): - return "witch and robin hood"; - case Item::get('Boomerang'): - return "fungus for puma-stick"; - case Item::get('RedBoomerang'): - return "fungus for return-stick"; - case Item::get('Powder'): - return "the witch and assistant"; - case Item::get('Bombos'): - return "shrooms for swirly-coin"; - case Item::get('Ether'): - return "shrooms for bolt-coin"; - case Item::get('Quake'): - return "shrooms for wavy-coin"; - case Item::get('Lamp'): - return "fungus for illumination"; - case Item::get('Shovel'): - return "can you dig it"; - case Item::get('CaneOfSomaria'): - return "twizzle-stick for trade"; - case Item::get('CaneOfByrna'): - return "spark-stick for trade"; - case Item::get('Cape'): - return "hood from a hood"; - case Item::get('MagicMirror'): - return "trades looking-glass"; - case Item::get('PowerGlove'): - return "fungus for gloves"; - case Item::get('TitansMitt'): - return "fungus for bling-gloves"; - case Item::get('BookOfMudora'): - return "drugs for literacy"; - case Item::get('Flippers'): - return "shrooms let you swim"; - case Item::get('MoonPearl'): - return "shrooms for moon rock"; - case Item::get('BugCatchingNet'): - return "fungus for butterflies"; - case Item::get('BlueMail'): - return "the clothing store"; - case Item::get('RedMail'): - return "the nice clothing store"; - case Item::get('PieceOfHeart'): - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "fungus for life"; - case Item::get('Bomb'): - case Item::get('ThreeBombs'): - case Item::get('TenBombs'): - return "blend fungus into bombs"; - case Item::get('Mushroom'): - return "my name is error"; - case Item::get('Bottle'): - return "first taste is not free"; - case Item::get('BottleWithRedPotion'): - case Item::get('BottleWithGreenPotion'): - case Item::get('BottleWithBluePotion'): - return "free samples"; - case Item::get('BottleWithGoldBee'): - case Item::get('BottleWithBee'): - return "insects for trade"; - case Item::get('BottleWithFairy'): - return "shrooms for friends"; - case Item::get('Heart'): - return "trading for transplant"; - case Item::get('Arrow'): - return "fungus for arrow"; - case Item::get('TenArrows'): - return "fungus for arrows"; - case Item::get('SmallMagic'): - return "fungus for magic"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - return "buying cheap drugs"; - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "the witch buying drugs"; - case Item::get('OneHundredRupees'): - return "buying good drugs"; - case Item::get('ThreeHundredRupees'): - return "buying the best drugs"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "duck-calls for trade"; - case Item::get('PegasusBoots'): - return "shrooms for speed"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "the shroom goes boom"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "witch and more arrows"; - case Item::get('SilverArrowUpgrade'): - return "arrow-honing service"; - case Item::get('HalfMagic'): - case Item::get('QuarterMagic'): - return "mekalekahi mekahiney ho"; - case Item::get('Rupoor'): - return "witch stole your rupees"; - case Item::get('RedClock'): - return "shrooms for ruby time"; - case Item::get('BlueClock'): - return "fungus for blue time"; - case Item::get('GreenClock'): - return "shrooms for green time"; - case Item::get('ProgressiveSword'): - return "fungus for some slasher"; - case Item::get('ProgressiveShield'): - return "fungus for some shield"; - case Item::get('ProgressiveArmor'): - return "the clothing store"; - case Item::get('ProgressiveGlove'): - return "fungus for gloves"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "fungus for something"; - case Item::get('Triforce'): - return "mushrooms win the game"; - case Item::get('PowerStar'): - return "the powder or the stars"; - case Item::get('TriforcePiece'): - return "hoarding for ganon"; - case Item::get('Nothing'): - default: - return "mushrooms go poof"; - } - } + switch ($this->item->getTarget()->getRawName()) { + case 'L1Sword': + case 'L1SwordAndShield': + return "fungus for slasher"; + case 'L2Sword': + case 'MasterSword': + return "fungus for blue slasher"; + case 'L3Sword': + return "fungus for red slasher"; + case 'L4Sword': + return "cap churned to butter"; + case 'BlueShield': + return "fungus for shield"; + case 'RedShield': + return "fungus for fire shield"; + case 'MirrorShield': + return "fungus for shiny shield"; + case 'FireRod': + return "fungus for rage-rod"; + case 'IceRod': + return "fungus for ice-rod"; + case 'Hammer': + return "stop... hammer time"; + case 'Hookshot': + return "witch and tickle boy"; + case 'Bow': + case 'BowAndArrows': + case 'BowAndSilverArrows': + case 'ProgressiveBow': + return "witch and robin hood"; + case 'Boomerang': + return "fungus for puma-stick"; + case 'RedBoomerang': + return "fungus for return-stick"; + case 'Powder': + return "the witch and assistant"; + case 'Bombos': + return "shrooms for swirly-coin"; + case 'Ether': + return "shrooms for bolt-coin"; + case 'Quake': + return "shrooms for wavy-coin"; + case 'Lamp': + return "fungus for illumination"; + case 'Shovel': + return "can you dig it"; + case 'CaneOfSomaria': + return "twizzle-stick for trade"; + case 'CaneOfByrna': + return "spark-stick for trade"; + case 'Cape': + return "hood from a hood"; + case 'MagicMirror': + return "trades looking-glass"; + case 'PowerGlove': + return "fungus for gloves"; + case 'TitansMitt': + return "fungus for bling-gloves"; + case 'BookOfMudora': + return "drugs for literacy"; + case 'Flippers': + return "shrooms let you swim"; + case 'MoonPearl': + return "shrooms for moon rock"; + case 'BugCatchingNet': + return "fungus for butterflies"; + case 'BlueMail': + return "the clothing store"; + case 'RedMail': + return "the nice clothing store"; + case 'PieceOfHeart': + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "fungus for life"; + case 'Bomb': + case 'ThreeBombs': + case 'TenBombs': + return "blend fungus into bombs"; + case 'Mushroom': + return "my name is error"; + case 'Bottle': + return "first taste is not free"; + case 'BottleWithRedPotion': + case 'BottleWithGreenPotion': + case 'BottleWithBluePotion': + return "free samples"; + case 'BottleWithGoldBee': + case 'BottleWithBee': + return "insects for trade"; + case 'BottleWithFairy': + return "shrooms for friends"; + case 'Heart': + return "trading for transplant"; + case 'Arrow': + return "fungus for arrow"; + case 'TenArrows': + return "fungus for arrows"; + case 'SmallMagic': + return "fungus for magic"; + case 'OneRupee': + case 'FiveRupees': + return "buying cheap drugs"; + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "the witch buying drugs"; + case 'OneHundredRupees': + return "buying good drugs"; + case 'ThreeHundredRupees': + return "buying the best drugs"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "duck-calls for trade"; + case 'PegasusBoots': + return "shrooms for speed"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "the shroom goes boom"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "witch and more arrows"; + case 'SilverArrowUpgrade': + return "arrow-honing service"; + case 'HalfMagic': + case 'QuarterMagic': + return "mekalekahi mekahiney ho"; + case 'Rupoor': + return "witch stole your rupees"; + case 'RedClock': + return "shrooms for ruby time"; + case 'BlueClock': + return "fungus for blue time"; + case 'GreenClock': + return "shrooms for green time"; + case 'ProgressiveSword': + return "fungus for some slasher"; + case 'ProgressiveShield': + return "fungus for some shield"; + case 'ProgressiveArmor': + return "the clothing store"; + case 'ProgressiveGlove': + return "fungus for gloves"; + case 'singleRNG': + case 'multiRNG': + return "fungus for something"; + case 'Triforce': + return "mushrooms win the game"; + case 'PowerStar': + return "the powder or the stars"; + case 'TriforcePiece': + return "hoarding for ganon"; + case 'Nothing': + default: + return "mushrooms go poof"; + } + } } diff --git a/app/Location/Npc/Zora.php b/app/Location/Npc/Zora.php index 3772db87a..d77d449a2 100644 --- a/app/Location/Npc/Zora.php +++ b/app/Location/Npc/Zora.php @@ -1,4 +1,6 @@ -setZoraCredits($this->getItemCreditsText()); + $rom->setCredit('zora', $this->getItemCreditsText()); - return $this; - } + return $this; + } - private function getItemCreditsText() { - switch (get_class($this->item->getTarget())) { - case Item\Key::class: - case Item\BigKey::class: - return "advancement for sale"; - case Item\Map::class: - return "the world for sale"; - case Item\Compass::class: - return "bearings for sale"; - case Item\Egg::class: - return "Eggs for sale"; - } + private function getItemCreditsText() + { + switch (get_class($this->item->getTarget())) { + case Item\Key::class: + case Item\BigKey::class: + return "advancement for sale"; + case Item\Map::class: + return "the world for sale"; + case Item\Compass::class: + return "bearings for sale"; + case Item\Egg::class: + return "Eggs for sale"; + } - switch ($this->item->getTarget()) { - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - return "sword for sale"; - case Item::get('L2Sword'): - case Item::get('MasterSword'): - return "glow sword for sale"; - case Item::get('L3Sword'): - return "flame sword for sale"; - case Item::get('L4Sword'): - return "butter for sale"; - case Item::get('BlueShield'): - return "bad defense for sale"; - case Item::get('RedShield'): - return "red shield for sale"; - case Item::get('MirrorShield'): - return "face shield for sale"; - case Item::get('FireRod'): - return "rage rod for sale"; - case Item::get('IceRod'): - return "ice cream for sale"; - case Item::get('Hammer'): - return "m c hammer for sale"; - case Item::get('Hookshot'): - return "tickle beam for sale"; - case Item::get('Bow'): - return "arrow sling for sale"; - case Item::get('BowAndArrows'): - return "point stick for sale"; - case Item::get('BowAndSilverArrows'): - return "you got lucky"; - case Item::get('Boomerang'): - return "bent stick for sale"; - case Item::get('RedBoomerang'): - return "air foil for sale"; - case Item::get('Powder'): - return "sack for sale"; - case Item::get('Bombos'): - return "swirly coin for sale"; - case Item::get('Ether'): - return "bolt coin for sale"; - case Item::get('Quake'): - return "wavy coin for sale"; - case Item::get('Lamp'): - return "candle for sale"; - case Item::get('Shovel'): - return "dirt spade for sale"; - case Item::get('CaneOfSomaria'): - return "block stick for sale"; - case Item::get('CaneOfByrna'): - return "shiny stick for sale"; - case Item::get('Cape'): - return "red hood for sale"; - case Item::get('MagicMirror'): - return "your face for sale"; - case Item::get('PowerGlove'): - return "lift glove for sale"; - case Item::get('TitansMitt'): - return "carry glove for sale"; - case Item::get('BookOfMudora'): - return "moon runes for sale"; - case Item::get('Flippers'): - return "finger webs for sale"; - case Item::get('MoonPearl'): - return "lunar orb for sale"; - case Item::get('BugCatchingNet'): - return "stick web for sale"; - case Item::get('BlueMail'): - return "banana hat for sale"; - case Item::get('RedMail'): - return "purple hat for sale"; - case Item::get('PieceOfHeart'): - return "little love for sale"; - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "love for sale"; - case Item::get('Bomb'): - return "firecracker for sale"; - case Item::get('ThreeBombs'): - return "fireworks for sale"; - case Item::get('TenBombs'): - return "boom boom for sale"; - case Item::get('Mushroom'): - return "legal drugs for sale"; - case Item::get('Bottle'): - return "terrarium for sale"; - case Item::get('BottleWithRedPotion'): - return "red goo for sale"; - case Item::get('BottleWithGreenPotion'): - return "green goo for sale"; - case Item::get('BottleWithBluePotion'): - return "blue goo for sale"; - case Item::get('BottleWithGoldBee'): - return "beetor for sale"; - case Item::get('BottleWithBee'): - return "mad friend for sale"; - case Item::get('BottleWithFairy'): - return "friend for sale"; - case Item::get('Heart'): - return "affection for sale"; - case Item::get('Arrow'): - return "sewing needle for sale"; - case Item::get('TenArrows'): - return "sewing kit for sale"; - case Item::get('SmallMagic'): - return "alchemy for sale"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "life lesson for sale"; - case Item::get('OneHundredRupees'): - return "fair trade for sale"; - case Item::get('ThreeHundredRupees'): - return "good return for sale"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "duck call for sale"; - case Item::get('PegasusBoots'): - return "sprint shoe for sale"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "bomb boost for sale"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "arrow boost for sale"; - case Item::get('SilverArrowUpgrade'): - return "sharp arrow for sale"; - case Item::get('HalfMagic'): - case Item::get('QuarterMagic'): - return "wizardry for sale"; - case Item::get('Rupoor'): - return "double loss for sale"; - case Item::get('RedClock'): - return "ruby clock for sale"; - case Item::get('BlueClock'): - return "blue clock for sale"; - case Item::get('GreenClock'): - return "green clock for sale"; - case Item::get('ProgressiveSword'): - return "some sword for sale"; - case Item::get('ProgressiveShield'): - return "some shield for sale"; - case Item::get('ProgressiveArmor'): - return "unknown hat for sale"; - case Item::get('ProgressiveGlove'): - return "some glove for sale"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "some item for sale"; - case Item::get('Triforce'): - return "game win for sale"; - case Item::get('PowerStar'): - return "power star for sale"; - case Item::get('TriforcePiece'): - return "triangle for sale"; - case Item::get('Nothing'): - default: - return "Nothing, so stupid"; - } - } + switch ($this->item->getTarget()->getRawName()) { + case 'L1Sword': + case 'L1SwordAndShield': + return "sword for sale"; + case 'L2Sword': + case 'MasterSword': + return "glow sword for sale"; + case 'L3Sword': + return "flame sword for sale"; + case 'L4Sword': + return "butter for sale"; + case 'BlueShield': + return "bad defense for sale"; + case 'RedShield': + return "red shield for sale"; + case 'MirrorShield': + return "face shield for sale"; + case 'FireRod': + return "rage rod for sale"; + case 'IceRod': + return "ice cream for sale"; + case 'Hammer': + return "m c hammer for sale"; + case 'Hookshot': + return "tickle beam for sale"; + case 'Bow': + case 'ProgressiveBow': + return "arrow sling for sale"; + case 'BowAndArrows': + return "point stick for sale"; + case 'BowAndSilverArrows': + return "you got lucky"; + case 'Boomerang': + return "bent stick for sale"; + case 'RedBoomerang': + return "air foil for sale"; + case 'Powder': + return "sack for sale"; + case 'Bombos': + return "swirly coin for sale"; + case 'Ether': + return "bolt coin for sale"; + case 'Quake': + return "wavy coin for sale"; + case 'Lamp': + return "candle for sale"; + case 'Shovel': + return "dirt spade for sale"; + case 'CaneOfSomaria': + return "block stick for sale"; + case 'CaneOfByrna': + return "shiny stick for sale"; + case 'Cape': + return "red hood for sale"; + case 'MagicMirror': + return "your face for sale"; + case 'PowerGlove': + return "lift glove for sale"; + case 'TitansMitt': + return "carry glove for sale"; + case 'BookOfMudora': + return "moon runes for sale"; + case 'Flippers': + return "finger webs for sale"; + case 'MoonPearl': + return "lunar orb for sale"; + case 'BugCatchingNet': + return "stick web for sale"; + case 'BlueMail': + return "banana hat for sale"; + case 'RedMail': + return "purple hat for sale"; + case 'PieceOfHeart': + return "little love for sale"; + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "love for sale"; + case 'Bomb': + return "firecracker for sale"; + case 'ThreeBombs': + return "fireworks for sale"; + case 'TenBombs': + return "boom boom for sale"; + case 'Mushroom': + return "legal drugs for sale"; + case 'Bottle': + return "terrarium for sale"; + case 'BottleWithRedPotion': + return "red goo for sale"; + case 'BottleWithGreenPotion': + return "green goo for sale"; + case 'BottleWithBluePotion': + return "blue goo for sale"; + case 'BottleWithGoldBee': + return "beetor for sale"; + case 'BottleWithBee': + return "mad friend for sale"; + case 'BottleWithFairy': + return "friend for sale"; + case 'Heart': + return "affection for sale"; + case 'Arrow': + return "sewing needle for sale"; + case 'TenArrows': + return "sewing kit for sale"; + case 'SmallMagic': + return "alchemy for sale"; + case 'OneRupee': + case 'FiveRupees': + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "life lesson for sale"; + case 'OneHundredRupees': + return "fair trade for sale"; + case 'ThreeHundredRupees': + return "good return for sale"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "duck call for sale"; + case 'PegasusBoots': + return "sprint shoe for sale"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "bomb boost for sale"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "arrow boost for sale"; + case 'SilverArrowUpgrade': + return "sharp arrow for sale"; + case 'HalfMagic': + case 'QuarterMagic': + return "wizardry for sale"; + case 'Rupoor': + return "double loss for sale"; + case 'RedClock': + return "ruby clock for sale"; + case 'BlueClock': + return "blue clock for sale"; + case 'GreenClock': + return "green clock for sale"; + case 'ProgressiveSword': + return "some sword for sale"; + case 'ProgressiveShield': + return "some shield for sale"; + case 'ProgressiveArmor': + return "unknown hat for sale"; + case 'ProgressiveGlove': + return "some glove for sale"; + case 'singleRNG': + case 'multiRNG': + return "some item for sale"; + case 'Triforce': + return "game win for sale"; + case 'PowerStar': + return "power star for sale"; + case 'TriforcePiece': + return "triangle for sale"; + case 'Nothing': + default: + return "Nothing, so stupid"; + } + } } diff --git a/app/Location/Pedestal.php b/app/Location/Pedestal.php index fa8e69ca2..86c9995ca 100644 --- a/app/Location/Pedestal.php +++ b/app/Location/Pedestal.php @@ -1,4 +1,6 @@ -region->getWorld())) { + $item = Item::get('L2Sword', $this->region->getWorld()); + } - return parent::setItem($item); - } + return parent::setItem($item); + } - public function writeItem(Rom $rom, Item $item = null) { - parent::writeItem($rom, $item); + /** + * Write item to rom. + * + * @param \ALttP\Rom $rom rom to write to + * @param \ALttP\Item $item item to write + * + * @return \ALttP\Location + */ + public function writeItem(Rom $rom, Item $item = null) + { + parent::writeItem($rom, $item); - $rom->setPedestalCredits($this->getItemCreditsText()); - $rom->setPedestalTextbox($this->getItemPedestalText()); + $rom->setCredit('pedestal', $this->getItemCreditsText()); + $rom->setText('mastersword_pedestal_translated', $this->getItemPedestalText()); - return $this; - } + return $this; + } - private function getItemCreditsText() { - switch ($this->item->getTarget()) { - case Item::get('BigKeyA2'): - return "la key of evils bane"; - } + private function getItemCreditsText() + { + switch ($this->item->getTarget()->getRawName()) { + case 'BigKeyA2': + return "la key of evils bane"; + } - switch (get_class($this->item->getTarget())) { - case Item\Key::class: - case Item\BigKey::class: - return "and the key"; - case Item\Map::class: - return "and the map"; - case Item\Compass::class: - return "and the compass"; - case Item\Egg::class: - return "and the egg"; - } + switch (get_class($this->item->getTarget())) { + case Item\Key::class: + case Item\BigKey::class: + return "and the key"; + case Item\Map::class: + return "and the map"; + case Item\Compass::class: + return "and the compass"; + case Item\Egg::class: + return "and the egg"; + } - switch ($this->item->getTarget()) { - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - return "the plastic sword"; - case Item::get('L2Sword'): - case Item::get('MasterSword'): - return "and the master sword"; - case Item::get('L3Sword'): - return "the tempered sword"; - case Item::get('L4Sword'): - return "and the butter sword"; - case Item::get('BlueShield'): - return "the useless shield"; - case Item::get('RedShield'): - return "near useless shield"; - case Item::get('MirrorShield'): - return "and the ditto shield"; - case Item::get('FireRod'): - return "and the rage rod"; - case Item::get('IceRod'): - return "and the freeze ray"; - case Item::get('Hammer'): - return "and m c hammer"; - case Item::get('Hookshot'): - return "and the tickle beam"; - case Item::get('Bow'): - return "the stick and twine"; - case Item::get('BowAndArrows'): - return "the stick and twine"; - case Item::get('BowAndSilverArrows'): - return "the stick and shine"; - case Item::get('Boomerang'): - return "the backlash stick"; - case Item::get('RedBoomerang'): - return "and the rebound rod"; - case Item::get('Powder'): - return "and the magic sack"; - case Item::get('Bombos'): - return "and the swirly coin"; - case Item::get('Ether'): - return "and the bolt coin"; - case Item::get('Quake'): - return "and the wavy coin"; - case Item::get('Lamp'): - return "and the flashlight"; - case Item::get('Shovel'): - return "and the flute scoop"; - case Item::get('CaneOfSomaria'): - return "the walking stick"; - case Item::get('CaneOfByrna'): - return "and the blue bat"; - case Item::get('Cape'): - return "the camouflage cape"; - case Item::get('MagicMirror'): - return "the face reflector"; - case Item::get('PowerGlove'): - return "and the grey mittens"; - case Item::get('TitansMitt'): - return "and the golden glove"; - case Item::get('BookOfMudora'): - return "and the story book"; - case Item::get('Flippers'): - return "the water airfoil"; - case Item::get('MoonPearl'): - return "and the jaw breaker"; - case Item::get('BugCatchingNet'): - return "and the surprise net"; - case Item::get('BlueMail'): - return "and the banana hat"; - case Item::get('RedMail'): - return "and the eggplant hat"; - case Item::get('PieceOfHeart'): - return "and the broken heart"; - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "and the full heart"; - case Item::get('Bomb'): - return "and the explosion"; - case Item::get('ThreeBombs'): - return "the explosions"; - case Item::get('TenBombs'): - return "the many explosions"; - case Item::get('Mushroom'): - return "and the legal drugs"; - case Item::get('Bottle'): - return "and the terrarium"; - case Item::get('BottleWithRedPotion'): - return "and the red goo"; - case Item::get('BottleWithGreenPotion'): - return "and the green goo"; - case Item::get('BottleWithBluePotion'): - return "and the blue goo"; - case Item::get('BottleWithGoldBee'): - return "and the beetor"; - case Item::get('BottleWithBee'): - return "and the mad friend"; - case Item::get('BottleWithFairy'): - return "and the fairy friend"; - case Item::get('Heart'): - return "and the tiny heart"; - case Item::get('Arrow'): - return "the vampire skewer"; - case Item::get('TenArrows'): - return "the vampire skewers"; - case Item::get('SmallMagic'): - return "and the tiny pouch"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - return "the pocket change"; - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "and the couch cash"; - case Item::get('OneHundredRupees'): - return "and the rupee stash"; - case Item::get('ThreeHundredRupees'): - return "and the rupee hoard"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "and the duck call"; - case Item::get('PegasusBoots'): - return "and the sprint shoes"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "and the bomb booster"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "and the arrow boost"; - case Item::get('SilverArrowUpgrade'): - return "and the razer blade"; - case Item::get('HalfMagic'): - case Item::get('QuarterMagic'): - return "and the magic saver"; - case Item::get('Rupoor'): - return "and the toll-booth"; - case Item::get('RedClock'): - return "and the ruby clock"; - case Item::get('BlueClock'): - return "the sapphire clock"; - case Item::get('GreenClock'): - return "the emerald clock"; - case Item::get('ProgressiveSword'): - return "the unknown sword"; - case Item::get('ProgressiveShield'): - return "the unknown shield"; - case Item::get('ProgressiveArmor'): - return "the unknown hat"; - case Item::get('ProgressiveGlove'): - return "the magic hand cover"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "the whatever"; - case Item::get('Triforce'): - return "and the triforce"; - case Item::get('PowerStar'): - return "and the power star"; - case Item::get('TriforcePiece'): - return "the triforce piece"; - case Item::get('Nothing'): - default: - return "and nothing"; - } - } + switch ($this->item->getTarget()->getRawName()) { + case 'L1Sword': + case 'L1SwordAndShield': + return "the plastic sword"; + case 'L2Sword': + case 'MasterSword': + return "and the master sword"; + case 'L3Sword': + return "the tempered sword"; + case 'L4Sword': + return "and the butter sword"; + case 'BlueShield': + return "the useless shield"; + case 'RedShield': + return "near useless shield"; + case 'MirrorShield': + return "and the ditto shield"; + case 'FireRod': + return "and the rage rod"; + case 'IceRod': + return "and the freeze ray"; + case 'Hammer': + return "and m c hammer"; + case 'Hookshot': + return "and the tickle beam"; + case 'Bow': + case 'BowAndArrows': + case 'ProgressiveBow': + return "the stick and twine"; + case 'BowAndSilverArrows': + return "the stick and shine"; + case 'Boomerang': + return "the backlash stick"; + case 'RedBoomerang': + return "and the rebound rod"; + case 'Powder': + return "and the magic sack"; + case 'Bombos': + return "and the swirly coin"; + case 'Ether': + return "and the bolt coin"; + case 'Quake': + return "and the wavy coin"; + case 'Lamp': + return "and the flashlight"; + case 'Shovel': + return "and the flute scoop"; + case 'CaneOfSomaria': + return "the walking stick"; + case 'CaneOfByrna': + return "and the blue bat"; + case 'Cape': + return "the camouflage cape"; + case 'MagicMirror': + return "the face reflector"; + case 'PowerGlove': + return "and the grey mittens"; + case 'TitansMitt': + return "and the golden glove"; + case 'BookOfMudora': + return "and the story book"; + case 'Flippers': + return "the water airfoil"; + case 'MoonPearl': + return "and the jaw breaker"; + case 'BugCatchingNet': + return "and the surprise net"; + case 'BlueMail': + return "and the banana hat"; + case 'RedMail': + return "and the eggplant hat"; + case 'PieceOfHeart': + return "and the broken heart"; + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "and the full heart"; + case 'Bomb': + return "and the explosion"; + case 'ThreeBombs': + return "the explosions"; + case 'TenBombs': + return "the many explosions"; + case 'Mushroom': + return "and the legal drugs"; + case 'Bottle': + return "and the terrarium"; + case 'BottleWithRedPotion': + return "and the red goo"; + case 'BottleWithGreenPotion': + return "and the green goo"; + case 'BottleWithBluePotion': + return "and the blue goo"; + case 'BottleWithGoldBee': + return "and the beetor"; + case 'BottleWithBee': + return "and the mad friend"; + case 'BottleWithFairy': + return "and the fairy friend"; + case 'Heart': + return "and the tiny heart"; + case 'Arrow': + return "the vampire skewer"; + case 'TenArrows': + return "the vampire skewers"; + case 'SmallMagic': + return "and the tiny pouch"; + case 'OneRupee': + case 'FiveRupees': + return "the pocket change"; + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "and the couch cash"; + case 'OneHundredRupees': + return "and the rupee stash"; + case 'ThreeHundredRupees': + return "and the rupee hoard"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "and the duck call"; + case 'PegasusBoots': + return "and the sprint shoes"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "and the bomb booster"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "and the arrow boost"; + case 'SilverArrowUpgrade': + return "and the razer blade"; + case 'HalfMagic': + case 'QuarterMagic': + return "and the magic saver"; + case 'Rupoor': + return "and the toll-booth"; + case 'RedClock': + return "and the ruby clock"; + case 'BlueClock': + return "the sapphire clock"; + case 'GreenClock': + return "the emerald clock"; + case 'ProgressiveSword': + return "the unknown sword"; + case 'ProgressiveShield': + return "the unknown shield"; + case 'ProgressiveArmor': + return "the unknown hat"; + case 'ProgressiveGlove': + return "the magic hand cover"; + case 'singleRNG': + case 'multiRNG': + return "the whatever"; + case 'Triforce': + return "and the triforce"; + case 'PowerStar': + return "and the power star"; + case 'TriforcePiece': + return "the triforce piece"; + case 'Nothing': + default: + return "and nothing"; + } + } - private function getItemPedestalText() { - $item = ($this->region->getWorld()->config('rom.genericKeys', false) && $this->item instanceof Item\Key) - ? Item::get('KeyGK') - : $this->item; + private function getItemPedestalText() + { + $item = ($this->region->getWorld()->config('rom.genericKeys', false) && $this->item instanceof Item\Key) + ? Item::get('KeyGK', $this->region->getWorld()) + : $this->item; - switch ($item->getTarget()) { - case Item::get('BigKeyA2'): - return "The Big Key\nof evil's bane"; - case Item::get('BigKeyD7'): - return "The big key\nof terrapins"; - case Item::get('BigKeyD4'): - return "The Big Key\nof rogues"; - case Item::get('BigKeyP3'): - return "The big key\nto moldorm's\nheart"; - case Item::get('BigKeyD5'): - return "A frozen\nbig key\nrests here"; - case Item::get('BigKeyD3'): - return "The big key\nof the dark\nforest"; - case Item::get('BigKeyD6'): - return "The big key\nto Vitreous"; - case Item::get('BigKeyD1'): - return "Hammeryump\nwith this\nbig key"; - case Item::get('BigKeyD2'): - return "The Big key\nto the swamp"; - case Item::get('BigKeyA1'): - return "Okay, this big\nkey doesn't\nreally exist"; - case Item::get('BigKeyP2'): - return "Sand spills\nout of this\nbig key"; - case Item::get('BigKeyP1'): - return "The big key\nof the east"; - case Item::get('BigKeyH1'): - case Item::get('BigKeyH2'): - return "You should\nhave got this\nfrom a guard"; - case Item::get('KeyA2'): - return "The small key\nof evil's bane"; - case Item::get('KeyD7'): - return "The small key\nof terrapins"; - case Item::get('KeyD4'): - return "The small key\nof rogues"; - case Item::get('KeyP3'): - return "The key\nto moldorm's\nbasement"; - case Item::get('KeyD5'): - return "A frozen\nsmall key\nrests here"; - case Item::get('KeyD3'): - return "The small key\nof the dark\nforest"; - case Item::get('KeyD6'): - return "The small key\nto Vitreous"; - case Item::get('KeyD1'): - return "A small key\nthat steals\nlight"; - case Item::get('KeyD2'): - return "Access to\nthe swamp\nis granted"; - case Item::get('KeyA1'): - return "Agahnim\nhalfway\nunlocked"; - case Item::get('KeyP2'): - return "Sand spills\nout of this\nsmall key"; - case Item::get('KeyP1'): - return "Okay, this\nkey doesn't\nreally exist"; - case Item::get('KeyH1'): - case Item::get('KeyH2'): - return "The key to\nthe castle"; - } + switch ($item->getTarget()->getRawName()) { + case 'BigKeyA2': + return "The Big Key\nof evil's bane"; + case 'BigKeyD7': + return "The big key\nof terrapins"; + case 'BigKeyD4': + return "The Big Key\nof rogues"; + case 'BigKeyP3': + return "The big key\nto moldorm's\nheart"; + case 'BigKeyD5': + return "A frozen\nbig key\nrests here"; + case 'BigKeyD3': + return "The big key\nof the dark\nforest"; + case 'BigKeyD6': + return "The big key\nto Vitreous"; + case 'BigKeyD1': + return "Hammeryump\nwith this\nbig key"; + case 'BigKeyD2': + return "The Big key\nto the swamp"; + case 'BigKeyA1': + return "Okay, this big\nkey doesn't\nreally exist"; + case 'BigKeyP2': + return "Sand spills\nout of this\nbig key"; + case 'BigKeyP1': + return "The big key\nof the east"; + case 'BigKeyH1': + case 'BigKeyH2': + return "You should\nhave got this\nfrom a guard"; + case 'KeyA2': + return "The small key\nof evil's bane"; + case 'KeyD7': + return "The small key\nof terrapins"; + case 'KeyD4': + return "The small key\nof rogues"; + case 'KeyP3': + return "The key\nto moldorm's\nbasement"; + case 'KeyD5': + return "A frozen\nsmall key\nrests here"; + case 'KeyD3': + return "The small key\nof the dark\nforest"; + case 'KeyD6': + return "The small key\nto Vitreous"; + case 'KeyD1': + return "A small key\nthat steals\nlight"; + case 'KeyD2': + return "Access to\nthe swamp\nis granted"; + case 'KeyA1': + return "Agahnim\nhalfway\nunlocked"; + case 'KeyP2': + return "Sand spills\nout of this\nsmall key"; + case 'KeyP1': + return "Okay, this\nkey doesn't\nreally exist"; + case 'KeyH1': + case 'KeyH2': + return "The key to\nthe castle"; + } - switch (get_class($item->getTarget())) { - case Item\Key::class: - return "A small key\nto the Kingdom"; - case Item\BigKey::class: - return "A big key\nto the Kingdom"; - case Item\Map::class: - return "You can now\nfind your way\nhome!"; - case Item\Compass::class: - return "Now you know\nwhere the boss\nhides!"; - case Item\Egg::class: - return "Egg-cited\nfor this"; - } + switch (get_class($item->getTarget())) { + case Item\Key::class: + return "A small key\nto the Kingdom"; + case Item\BigKey::class: + return "A big key\nto the Kingdom"; + case Item\Map::class: + return "You can now\nfind your way\nhome!"; + case Item\Compass::class: + return "Now you know\nwhere the boss\nhides!"; + case Item\Egg::class: + return "Egg-cited\nfor this"; + } - switch ($item->getTarget()) { - case Item::get('L1Sword'): - case Item::get('L1SwordAndShield'): - return "A pathetic\nsword rests\nhere!"; - case Item::get('L2Sword'): - case Item::get('MasterSword'): - return "I thought this\nwas meant to\nbe randomized?"; - case Item::get('L3Sword'): - return "I stole the\nblacksmith's\njob!"; - case Item::get('L4Sword'): - return "The butter\nsword rests\nhere!"; - case Item::get('BlueShield'): - return "Now you can\ndefend against\npebbles!"; - case Item::get('RedShield'): - return "Now you can\ndefend against\nfireballs!"; - case Item::get('MirrorShield'): - return "Now you can\ndefend against\nlasers!"; - case Item::get('FireRod'): - return "I'm the hot\nrod. I make\nthings burn!"; - case Item::get('IceRod'): - return "I'm the cold\nrod. I make\nthings freeze!"; - case Item::get('Hammer'): - return "stop\nhammer time!"; - case Item::get('Hookshot'): - return "BOING!!!\nBOING!!!\nBOING!!!"; - case Item::get('Bow'): - return "You have\nchosen the\narcher class."; - case Item::get('BowAndArrows'): - return "You are now an\naverage archer"; - case Item::get('BowAndSilverArrows'): - return "You are now a\nmaster archer!"; - case Item::get('Boomerang'): - return "No matter what\nyou do, blue\nreturns to you"; - case Item::get('RedBoomerang'): - return "No matter what\nyou do, red\nreturns to you"; - case Item::get('Powder'): - return "you can turn\nanti-faeries\ninto faeries"; - case Item::get('Bombos'): - return "Burn, baby,\nburn! Fear my\nring of fire!"; - case Item::get('Ether'): - return "This magic\ncoin freezes\neverything!"; - case Item::get('Quake'): - return "Maxing out the\nRichter scale\nis what I do!"; - case Item::get('Lamp'): - return "Baby, baby,\nbaby.\nLight my way!"; - case Item::get('Shovel'): - return "Can\n You\n Dig it?"; - case Item::get('CaneOfSomaria'): - return "I make blocks\nto hold down\nswitches!"; - case Item::get('CaneOfByrna'): - return "Use this to\nbecome\ninvincible!"; - case Item::get('Cape'): - return "Wear this to\nbecome\ninvisible!"; - case Item::get('MagicMirror'): - return "Isn't your\nreflection so\npretty?"; - case Item::get('PowerGlove'): - return "Now you can\nlift weak\nstuff!"; - case Item::get('TitansMitt'): - return "Now you can\nlift heavy\nstuff!"; - case Item::get('BookOfMudora'): - return "This is a\nparadox?!"; - case Item::get('Flippers'): - return "fancy a swim?"; - case Item::get('MoonPearl'): - return " Bunny Link\n be\n gone!"; - case Item::get('BugCatchingNet'): - return "Let's catch\nsome bees and\nfaeries!"; - case Item::get('BlueMail'): - return "Now you're a\nblue elf!"; - case Item::get('RedMail'): - return "Now you're a\nred elf!"; - case Item::get('PieceOfHeart'): - return "Just a little\npiece of love!"; - case Item::get('BossHeartContainer'): - case Item::get('HeartContainer'): - case Item::get('HeartContainerNoAnimation'): - return "Maximum health\nincreased!\nYeah!"; - case Item::get('Bomb'): - return "I make things\ngo BOOM! But\njust once."; - case Item::get('ThreeBombs'): - return "I make things\ngo triple\nBOOM!!!"; - case Item::get('TenBombs'): - return "I make things\ngo BOOM!\nso many times!"; - case Item::get('Mushroom'): - return "I'm a fun guy!\n\nI'm a funghi!"; - case Item::get('Bottle'): - return "Now you can\nstore potions\nand stuff!"; - case Item::get('BottleWithRedPotion'): - return "You see red\ngoo in a\nbottle?"; - case Item::get('BottleWithGreenPotion'): - return "You see green\ngoo in a\nbottle?"; - case Item::get('BottleWithBluePotion'): - return "You see blue\ngoo in a\nbottle?"; - case Item::get('BottleWithGoldBee'): - case Item::get('BottleWithBee'): - return "Release me\nso I can go\nbzzzzz!"; - case Item::get('BottleWithFairy'): - return "If you die\nI will revive\nyou!"; - case Item::get('Heart'): - return "I'm a lonely\nheart."; - case Item::get('Arrow'): - return "a lonely arrow\nsits here."; - case Item::get('TenArrows'): - return "This will give\nyou ten shots\nwith your bow!"; - case Item::get('SmallMagic'): - return "A tiny magic\nrefill rests\nhere"; - case Item::get('OneRupee'): - case Item::get('FiveRupees'): - return "Just pocket\nchange. Move\nright along."; - case Item::get('TwentyRupees'): - case Item::get('TwentyRupees2'): - case Item::get('FiftyRupees'): - return "Just couch\ncash. Move\nright along."; - case Item::get('OneHundredRupees'): - return "A rupee stash!\nHell yeah!"; - case Item::get('ThreeHundredRupees'): - return "A rupee hoard!\nHell yeah!"; - case Item::get('OcarinaInactive'): - case Item::get('OcarinaActive'): - return "Save the duck\nand fly to\nfreedom!"; - case Item::get('PegasusBoots'): - return "Gotta go fast!"; - case Item::get('BombUpgrade5'): - case Item::get('BombUpgrade10'): - case Item::get('BombUpgrade50'): - return "increase bomb\nstorage, low\nlow price"; - case Item::get('ArrowUpgrade5'): - case Item::get('ArrowUpgrade10'): - case Item::get('ArrowUpgrade70'): - return "increase arrow\nstorage, low\nlow price"; - case Item::get('SilverArrowUpgrade'): - return "Do you fancy\nsilver tipped\narrows?"; - case Item::get('HalfMagic'): - return "Your magic\npower has been\ndoubled!"; - case Item::get('QuarterMagic'): - return "Your magic\npower has been\nquadrupled!"; - case Item::get('PendantOfCourage'): - return "Courage for\nthose who\nalready had it"; - case Item::get('PendantOfWisdom'): - return "Wisdom for\nthose who\nalready had it"; - case Item::get('PendantOfPower'): - return "Power for\nthose who\nalready had it"; - case Item::get('Rupoor'): - return "This is not\nreally worth\nyour time"; - case Item::get('RedClock'): - return "like the sands\nthrough a red\nhourglass"; - case Item::get('BlueClock'): - return "sapphire sand\ntrickles down"; - case Item::get('GreenClock'): - return "tick tock\ntick tock"; - case Item::get('ProgressiveSword'): - return "a better copy\nof your sword\nfor your time"; - case Item::get('ProgressiveShield'): - return "have a better\ndefense in\nfront of you"; - case Item::get('ProgressiveArmor'): - return "time for a\nchange of\nclothes?"; - case Item::get('ProgressiveGlove'): - return "a way to lift\nheavier things"; - case Item::get('singleRNG'): - case Item::get('multiRNG'): - return "who knows? you\nprobably don't\nneed this."; - case Item::get('Triforce'): - return "\n YOU WIN!"; - case Item::get('PowerStar'): - return "Aim for the\nmoon. You may\nhit a 'star'"; - case Item::get('TriforcePiece'): - return "a yellow\ntriangle\nyou need this"; - case Item::get('Nothing'): - default: - return "Don't waste\nyour time!"; - } - } + switch ($item->getTarget()->getRawName()) { + case 'L1Sword': + case 'L1SwordAndShield': + return "A pathetic\nsword rests\nhere!"; + case 'L2Sword': + case 'MasterSword': + return "I thought this\nwas meant to\nbe randomized?"; + case 'L3Sword': + return "I stole the\nblacksmith's\njob!"; + case 'L4Sword': + return "The butter\nsword rests\nhere!"; + case 'BlueShield': + return "Now you can\ndefend against\npebbles!"; + case 'RedShield': + return "Now you can\ndefend against\nfireballs!"; + case 'MirrorShield': + return "Now you can\ndefend against\nlasers!"; + case 'FireRod': + return "I'm the hot\nrod. I make\nthings burn!"; + case 'IceRod': + return "I'm the cold\nrod. I make\nthings freeze!"; + case 'Hammer': + return "stop\nhammer time!"; + case 'Hookshot': + return "BOING!!!\nBOING!!!\nBOING!!!"; + case 'Bow': + case 'ProgressiveBow': + return "You have\nchosen the\narcher class."; + case 'BowAndArrows': + return "You are now an\naverage archer"; + case 'BowAndSilverArrows': + return "You are now a\nmaster archer!"; + case 'Boomerang': + return "No matter what\nyou do, blue\nreturns to you"; + case 'RedBoomerang': + return "No matter what\nyou do, red\nreturns to you"; + case 'Powder': + return "you can turn\nanti-faeries\ninto faeries"; + case 'Bombos': + return "Burn, baby,\nburn! Fear my\nring of fire!"; + case 'Ether': + return "This magic\ncoin freezes\neverything!"; + case 'Quake': + return "Maxing out the\nRichter scale\nis what I do!"; + case 'Lamp': + return "Baby, baby,\nbaby.\nLight my way!"; + case 'Shovel': + return "Can\n You\n Dig it?"; + case 'CaneOfSomaria': + return "I make blocks\nto hold down\nswitches!"; + case 'CaneOfByrna': + return "Use this to\nbecome\ninvincible!"; + case 'Cape': + return "Wear this to\nbecome\ninvisible!"; + case 'MagicMirror': + return "Isn't your\nreflection so\npretty?"; + case 'PowerGlove': + return "Now you can\nlift weak\nstuff!"; + case 'TitansMitt': + return "Now you can\nlift heavy\nstuff!"; + case 'BookOfMudora': + return "This is a\nparadox?!"; + case 'Flippers': + return "fancy a swim?"; + case 'MoonPearl': + return " Bunny Link\n be\n gone!"; + case 'BugCatchingNet': + return "Let's catch\nsome bees and\nfaeries!"; + case 'BlueMail': + return "Now you're a\nblue elf!"; + case 'RedMail': + return "Now you're a\nred elf!"; + case 'PieceOfHeart': + return "Just a little\npiece of love!"; + case 'BossHeartContainer': + case 'HeartContainer': + case 'HeartContainerNoAnimation': + return "Maximum health\nincreased!\nYeah!"; + case 'Bomb': + return "I make things\ngo BOOM! But\njust once."; + case 'ThreeBombs': + return "I make things\ngo triple\nBOOM!!!"; + case 'TenBombs': + return "I make things\ngo BOOM!\nso many times!"; + case 'Mushroom': + return "I'm a fun guy!\n\nI'm a funghi!"; + case 'Bottle': + return "Now you can\nstore potions\nand stuff!"; + case 'BottleWithRedPotion': + return "You see red\ngoo in a\nbottle?"; + case 'BottleWithGreenPotion': + return "You see green\ngoo in a\nbottle?"; + case 'BottleWithBluePotion': + return "You see blue\ngoo in a\nbottle?"; + case 'BottleWithGoldBee': + case 'BottleWithBee': + return "Release me\nso I can go\nbzzzzz!"; + case 'BottleWithFairy': + return "If you die\nI will revive\nyou!"; + case 'Heart': + return "I'm a lonely\nheart."; + case 'Arrow': + return "a lonely arrow\nsits here."; + case 'TenArrows': + return "This will give\nyou ten shots\nwith your bow!"; + case 'SmallMagic': + return "A tiny magic\nrefill rests\nhere"; + case 'OneRupee': + case 'FiveRupees': + return "Just pocket\nchange. Move\nright along."; + case 'TwentyRupees': + case 'TwentyRupees2': + case 'FiftyRupees': + return "Just couch\ncash. Move\nright along."; + case 'OneHundredRupees': + return "A rupee stash!\nHell yeah!"; + case 'ThreeHundredRupees': + return "A rupee hoard!\nHell yeah!"; + case 'OcarinaInactive': + case 'OcarinaActive': + return "Save the duck\nand fly to\nfreedom!"; + case 'PegasusBoots': + return "Gotta go fast!"; + case 'BombUpgrade5': + case 'BombUpgrade10': + case 'BombUpgrade50': + return "increase bomb\nstorage, low\nlow price"; + case 'ArrowUpgrade5': + case 'ArrowUpgrade10': + case 'ArrowUpgrade70': + return "increase arrow\nstorage, low\nlow price"; + case 'SilverArrowUpgrade': + return "Do you fancy\nsilver tipped\narrows?"; + case 'HalfMagic': + return "Your magic\npower has been\ndoubled!"; + case 'QuarterMagic': + return "Your magic\npower has been\nquadrupled!"; + case 'PendantOfCourage': + return "Courage for\nthose who\nalready had it"; + case 'PendantOfWisdom': + return "Wisdom for\nthose who\nalready had it"; + case 'PendantOfPower': + return "Power for\nthose who\nalready had it"; + case 'Rupoor': + return "This is not\nreally worth\nyour time"; + case 'RedClock': + return "like the sands\nthrough a red\nhourglass"; + case 'BlueClock': + return "sapphire sand\ntrickles down"; + case 'GreenClock': + return "tick tock\ntick tock"; + case 'ProgressiveSword': + return "a better copy\nof your sword\nfor your time"; + case 'ProgressiveShield': + return "have a better\ndefense in\nfront of you"; + case 'ProgressiveArmor': + return "time for a\nchange of\nclothes?"; + case 'ProgressiveGlove': + return "a way to lift\nheavier things"; + case 'singleRNG': + case 'multiRNG': + return "who knows? you\nprobably don't\nneed this."; + case 'Triforce': + return "\n YOU WIN!"; + case 'PowerStar': + return "Aim for the\nmoon. You may\nhit a 'star'"; + case 'TriforcePiece': + return "a yellow\ntriangle\nyou need this"; + case 'Nothing': + default: + return "Don't waste\nyour time!"; + } + } } diff --git a/app/Location/Prize.php b/app/Location/Prize.php index 99a94b028..4793fbcdf 100644 --- a/app/Location/Prize.php +++ b/app/Location/Prize.php @@ -1,4 +1,6 @@ -item = $item; - return $this; - } - - /** - * When writing a prize we also change the music for the region - * - * @param Rom $rom ROM we are writing to - * @param Item $item item we are placing at this location - * - * @return $this - */ - public function writeItem(Rom $rom, Item $item = null) { - parent::writeItem($rom, $item); - - if (isset($this->region->music_addresses) && is_array($this->region->music_addresses)) { - if ($this->region->getWorld()->config('rom.mapOnPickup', false)) { - $music = array_first(fy_shuffle([0x11, 0x16])); - } else { - $item = $this->getItem(); - $music = is_a($item, Pendant::class) ? 0x11 : 0x16; - } - - foreach ($this->region->music_addresses as $address) { - $rom->write($address, pack('C*', $music)); - } - } - - return $this; - } +class Prize extends Location +{ + /** + * sets the item for this location. + * + * @param Item|null $item can only be items [Pendant|Crystal] that "complete" a dungeon. + * + * @return $this + */ + public function setItem(Item $item = null) + { + if (!$item instanceof Pendant && !$item instanceof Crystal && $item !== null) { + throw new \Exception('Trying to set non-Pendant/Crystal in a Prize Location: ' . $this->getName() . ' item ' . $item->getName()); + } + + $this->item = $item; + return $this; + } + + /** + * When writing a prize we also change the music for the region + * + * @param Rom $rom ROM we are writing to + * @param Item $item item we are placing at this location + * + * @return $this + */ + public function writeItem(Rom $rom, Item $item = null) + { + parent::writeItem($rom, $item); + + if (isset($this->region->music_addresses) && is_array($this->region->music_addresses)) { + if ($this->region->getWorld()->config('rom.mapOnPickup', false)) { + $music = array_first(fy_shuffle([0x11, 0x16])); + } else { + $item = $this->getItem(); + $music = $item instanceof Pendant ? 0x11 : 0x16; + } + + foreach ($this->region->music_addresses as $address) { + $rom->write($address, pack('C*', $music)); + } + } + + return $this; + } } diff --git a/app/Location/Prize/Crystal.php b/app/Location/Prize/Crystal.php index df1b6d5b5..72ad60de2 100644 --- a/app/Location/Prize/Crystal.php +++ b/app/Location/Prize/Crystal.php @@ -1,10 +1,11 @@ -item = $item; - return $this; - } +class Event extends Prize +{ + /** + * sets the item for this location. + * + * @param Item|null $item can only be items that are Logical Events. + * + * @return $this + */ + public function setItem(Item $item = null) + { + if (!$item instanceof ItemEvent && $item !== null) { + throw new \Exception('Trying to set non-Event in an Event Prize Location'); + } + $this->item = $item; + return $this; + } } diff --git a/app/Location/Prize/Pendant.php b/app/Location/Prize/Pendant.php index 1965c99cf..fd0af94ef 100644 --- a/app/Location/Prize/Pendant.php +++ b/app/Location/Prize/Pendant.php @@ -1,10 +1,11 @@ -write(0x4E3BB, pack('C', ($this->hasItem(Item::get('Key')) || $this->hasItem(Item::get('KeyP3'))) ? 0xE4 : 0xEB)); + // for quick key pick up or fanfare + $rom->write(0x4E3BB, pack('C', ($this->hasItem(Item::get('Key', $this->region->getWorld())) || $this->hasItem(Item::get('KeyP3', $this->region->getWorld()))) ? 0xE4 : 0xEB)); - return $this; - } + return $this; + } } diff --git a/app/Location/Trade.php b/app/Location/Trade.php index b48e55cc1..6ca4e6b81 100644 --- a/app/Location/Trade.php +++ b/app/Location/Trade.php @@ -1,10 +1,11 @@ -hasMany(Seed::class); - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 01d6b65e8..ddeacf4e8 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -1,27 +1,24 @@ -app->environment('local', 'testing')) { - $this->app->register(DuskServiceProvider::class); - $this->commands(\ALttP\Console\Commands\DuskCommand::class); - } - } + /** + * Register any application services. + * + * @return void + */ + public function register() + { } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 6894bee31..ec9a2854c 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -1,22 +1,26 @@ - 'ALttP\Policies\ModelPolicy', - ]; +class AuthServiceProvider extends ServiceProvider +{ + /** + * The policy mappings for the application. + */ + protected $policies = [ + 'ALttP\Model' => 'ALttP\Policies\ModelPolicy', + ]; - /** - * Register any authentication / authorization services. - * - * @return void - */ - public function boot() { - $this->registerPolicies(); - } + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + } } diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php index 5fa78ff5f..8acad047e 100644 --- a/app/Providers/BroadcastServiceProvider.php +++ b/app/Providers/BroadcastServiceProvider.php @@ -1,22 +1,26 @@ -id === (int) $userId; - }); - } + /* + * Authenticate the user's personal channel... + */ + Broadcast::channel('App.User.*', function ($user, $userId) { + return (int) $user->id === (int) $userId; + }); + } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 52d0e214d..13c498b92 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -1,24 +1,28 @@ - [ - 'ALttP\Listeners\EventListener', - ], - ]; +class EventServiceProvider extends ServiceProvider +{ + /** + * The event listener mappings for the application. + */ + protected $listen = [ + 'ALttP\Events\SomeEvent' => [ + 'ALttP\Listeners\EventListener', + ], + ]; - /** - * Register any events for your application. - * - * @return void - */ - public function boot() { - parent::boot(); - } + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + parent::boot(); + } } diff --git a/app/Providers/HelperServiceProvider.php b/app/Providers/HelperServiceProvider.php index 1c237756d..f7974a6a4 100644 --- a/app/Providers/HelperServiceProvider.php +++ b/app/Providers/HelperServiceProvider.php @@ -1,15 +1,24 @@ -mapApiRoutes(); + /** + * Define the routes for the application. + * + * @return void + */ + public function map() + { + $this->mapApiRoutes(); - $this->mapWebRoutes(); - } + $this->mapWebRoutes(); + } - /** - * Define the "web" routes for the application. - * - * These routes all receive session state, CSRF protection, etc. - * - * @return void - */ - protected function mapWebRoutes() { - Route::group([ - 'middleware' => 'web', - 'namespace' => $this->namespace, - ], function ($router) { - require base_path('routes/web.php'); - }); - } + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + * + * @return void + */ + protected function mapWebRoutes() + { + Route::group([ + 'middleware' => 'web', + 'namespace' => $this->namespace, + ], function ($router) { + require base_path('routes/web.php'); + }); + } - /** - * Define the "api" routes for the application. - * - * These routes are typically stateless. - * - * @return void - */ - protected function mapApiRoutes() { - Route::group([ - 'middleware' => 'api', - 'namespace' => $this->namespace, - 'prefix' => 'api', - ], function ($router) { - require base_path('routes/api.php'); - }); - } + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + * + * @return void + */ + protected function mapApiRoutes() + { + Route::group([ + 'middleware' => 'api', + 'namespace' => $this->namespace, + 'prefix' => 'api', + ], function ($router) { + require base_path('routes/api.php'); + }); + } } diff --git a/app/Randomizer.php b/app/Randomizer.php index a2e3c9b1f..91903be94 100644 --- a/app/Randomizer.php +++ b/app/Randomizer.php @@ -1,135 +1,154 @@ - false]); + public function __construct(array $worlds) + { + foreach ($worlds as $world) { + if (!$world instanceof World) { + throw new \OutOfBoundsException; + } + + if ($world->getPreCollectedItems()->count() === 0) { + $world->setPreCollectedItems(new ItemCollection([ + Item::get('BossHeartContainer', $world), + Item::get('BossHeartContainer', $world), + Item::get('BossHeartContainer', $world), + Item::get('BombUpgrade10', $world), + Item::get('ArrowUpgrade10', $world), + Item::get('ArrowUpgrade10', $world), + Item::get('ArrowUpgrade10', $world), + ])); + } } - $this->difficulty = $difficulty; - $this->variation = $variation; - $this->logic = $logic; - $this->goal = $goal; - $this->world = World::factory(config('alttp.mode.state'), $difficulty, $logic, $goal, $variation); - $this->seed = new Seed; - $this->starting_equipment = new ItemCollection([ - Item::get('BombUpgrade10'), - Item::get('ArrowUpgrade10'), - Item::get('ArrowUpgrade10'), - Item::get('ArrowUpgrade10'), - ], $this->world); - $this->world->setPreCollectedItems($this->starting_equipment); + $this->worlds = $worlds; } /** - * Get the current Logic identifier + * Fill all empty Locations with Items using logic from the World. This is + * achieved by first setting up base portions of the world. Then taking the + * remaining empty locations we order them, and try to fill them in order in + * a way that opens more locations. * - * @return string + * @return void */ - public function getLogic() { - switch ($this->logic) { - case 'None': return 'none-' . static::LOGIC; - case 'NoGlitches': return 'no-glitches-' . static::LOGIC; - case 'OverworldGlitches': return 'overworld-glitches-' . static::LOGIC; - case 'MajorGlitches': return 'major-glitches-' . static::LOGIC; + public function randomize(): void + { + Log::info("Randomizing"); + + $filler = Filler::factory('RandomAssumed', $this->worlds); + + foreach ($this->worlds as $world) { + $this->prepareWorld($world); } - return 'unknown-' . static::LOGIC; - } - /** - * Get the current Logic identifier's nice name - * - * @return string - */ - public function getLogicNiceName() { - switch ($this->logic) { - case 'None': return 'None'; - case 'NoGlitches': return 'No Glitches'; - case 'OverworldGlitches': return 'Overworld Glitches'; - case 'Glitched': return 'Major Glitches'; + $filler->fill($this->dungeon_items, $this->advancement_items, $this->nice_items, $this->trash_items); + + foreach ($this->worlds as $world) { + $this->setTexts($world); + $this->randomizeCredits($world); } - return 'Unknown'; + + (new HintService($this->worlds, $this->advancement_items))->applyHints(); } /** - * Fill all empty Locations with Items using logic from the World. This is achieved by first setting up base - * portions of the world. Then taking the remaining empty locations we order them, and try to fill them in - * order in a way that opens more locations. + * Setup world with base randomization. This modifies item pools for the + * filler. * - * @return $this + * @param \ALttP\World $world World to set up + * + * @return void */ - public function makeSeed() { - Log::info("Making Seed"); - - $regions = $this->world->getRegions(); - - switch ($this->goal) { + public function prepareWorld(World $world): void + { + switch ($world->config('goal')) { case 'pedestal': - $this->world->getLocation("Master Sword Pedestal")->setItem(Item::get('Triforce')); + $world->getLocation("Master Sword Pedestal")->setItem(Item::get('Triforce', $world)); break; case 'ganon': + case 'fast_ganon': case 'dungeons': - $this->world->getLocation("Ganon")->setItem(Item::get('Triforce')); + $world->getLocation("Ganon")->setItem(Item::get('Triforce', $world)); break; } - // Set up World before we fill dungeons - $this->setShops(); - $this->setMedallions($regions); - $this->placeBosses($this->world); - $this->fillPrizes($this->world); + $dungeon_items = $world->getDungeonPool(); + $advancement_items = $world->getAdvancementItems(); + $nice_items = $world->getNiceItems(); + $trash_items = $world->getItemPool(); - $regions['Fountains']->getLocations()->each(function($fountain) { - if ($fountain->hasItem()) { - return; + // @todo check a flag instead of logic here, as well as difficulty + if (in_array($world->config('logic'), ['MajorGlitches', 'OverworldGlitches', 'None']) && $world->config('difficulty') !== 'custom') { + $world->addPreCollectedItem(Item::get('PegasusBoots', $world)); + foreach ($advancement_items as $key => $item) { + if ($item == Item::get('PegasusBoots', $world)) { + unset($advancement_items[$key]); + array_push($trash_items, Item::get('TwentyRupees', $world)); + break; + } } - $fountain->setItem($this->getBottle(true)); - }); + } + + if ($world->config('mode.state') != 'standard') { + $world->addPreCollectedItem(Item::get('RescueZelda', $world)); + } - $locations = $this->world->getLocations()->filter(function($location) { + // Set up World before we fill dungeons + $this->setShops($world); + $this->setMedallions($world); + $this->placeBosses($world); + $this->fillPrizes($world); + $this->setFountains($world); + $this->shufflePrizePacks($world); + + $locations = $world->getLocations()->filter(function ($location) { return !is_a($location, Location\Prize::class) && !is_a($location, Location\Medallion::class); }); - $locations["Pyramid Fairy - Bow"]->setItem($this->config('region.pyramidBowUpgrade', false) - ? Item::get('BowAndSilverArrows') - : Item::get('BowAndArrows')); + $locations["Pyramid Fairy - Bow"]->setItem($world->config('region.pyramidBowUpgrade', false) + ? Item::get('BowAndSilverArrows', $world) + : Item::get('BowAndArrows', $world)); // fill boss hearts before anything else if we need to - if ($this->config('region.bossesHaveItem', false) || !$this->config('region.bossHeartsInPool', true)) { - $boss_item = !$this->config('region.bossHeartsInPool', true) - ? Item::get('BossHeartContainer') - : Item::get($this->config('region.bossesHaveItem')); + if ($world->config('region.bossesHaveItem', false) || !$world->config('region.bossHeartsInPool', true)) { + $boss_item = !$world->config('region.bossHeartsInPool', true) + ? Item::get('BossHeartContainer', $world) + : Item::get($world->config('region.bossesHaveItem'), $world); $locations["Desert Palace - Boss"]->setItem($boss_item); $locations["Eastern Palace - Boss"]->setItem($boss_item); $locations["Ice Palace - Boss"]->setItem($boss_item); @@ -142,44 +161,12 @@ public function makeSeed() { $locations["Tower of Hera - Boss"]->setItem($boss_item); } - $dungeon_items = $this->getDungeonPool(); - $advancement_items = $this->getAdvancementItems(); - $nice_items = $this->getNiceItems(); - $trash_items = ($this->config('rng_items')) - ? array_fill(0, count($this->getItemPool()), Item::get('singleRNG')) - : $this->getItemPool(); - - if (in_array($this->logic, ['MajorGlitches', 'OverworldGlitches', 'None']) && $this->difficulty !== 'custom') { - $this->starting_equipment->addItem(Item::get('PegasusBoots')); - foreach ($advancement_items as $key => $item) { - if ($item == Item::get('PegasusBoots')) { - unset($advancement_items[$key]); - array_push($trash_items, Item::get('TwentyRupees')); - break; - } - } - } - - if (!$this->config('region.forceSkullWoodsKey', true) && $this->difficulty !== 'custom') { - array_push($dungeon_items, Item::get('KeyD3')); - } - - // Easy starts with - if ($this->difficulty == 'easy') { - for ($i = 0; $i < 6; ++$i) { - $this->starting_equipment->addItem(Item::get('BossHeartContainer')); - } - } - - if ($this->config('mode.state') != 'standard') { - $this->starting_equipment->addItem(Item::get('RescueZelda')); - } - - // take out all the swords and silver arrows + // take out all the swords and silver arrows, and sometimes heart pieces $nice_items_swords = []; $nice_items_bottles = []; + $nice_items_health = []; foreach ($advancement_items as $key => $item) { - if ($item == Item::get('SilverArrowUpgrade')) { + if ($item == Item::get('SilverArrowUpgrade', $world)) { $nice_items[] = $item; unset($advancement_items[$key]); continue; @@ -195,31 +182,61 @@ public function makeSeed() { continue; } } - if ($this->config('mode.weapons') == 'swordless') { - // In swordless we need to catch all swords - foreach ($nice_items as $key => $item) { - if ($item instanceof Item\Sword) { - unset($nice_items[$key]); - $nice_items_swords[] = $item; - } + // and from the nice items as well + foreach ($nice_items as $key => $item) { + if ($item instanceof Item\Sword) { + unset($nice_items[$key]); + $nice_items_swords[] = $item; } - // In swordless mode silvers are 100% required - config(['alttp.region.requireBetterBow' => true]); - foreach ($nice_items_swords as $unneeded) { - $nice_items[] = Item::get('TwentyRupees2'); + if ($item instanceof Item\Upgrade\Health) { + unset($nice_items[$key]); + $nice_items_health[] = $item; + } + } + foreach ($trash_items as $key => $item) { + if ($item instanceof Item\Upgrade\Health) { + unset($trash_items[$key]); + $nice_items_health[] = $item; } - $world_items = $this->world->collectItems()->values(); - if (!in_array(Item::get('SilverArrowUpgrade'), $world_items) && !in_array(Item::get('BowAndSilverArrows'), $world_items)) { - if (array_search(Item::get('SilverArrowUpgrade'), $nice_items) === false && $this->difficulty !== 'custom') { - $advancement_items[] = Item::get('SilverArrowUpgrade'); + } + + if ($world->config('itemPlacement') === 'basic') { + $advancement_items = array_merge($advancement_items, $nice_items_health); + } else { + $nice_items = array_merge($nice_items, $nice_items_health); + } + + if ($world->config('mode.weapons') === 'swordless') { + foreach ($nice_items_swords as $unneeded) { + $nice_items[] = Item::get('TwentyRupees2', $world); + } + $world_items = $world->collectItems(); + // check for pregressive bows + if (!$world_items->merge($advancement_items)->has('ProgressiveBow', 2)) { + $world_items = $world_items->values(); + if ( + !in_array(Item::get('SilverArrowUpgrade', $world), $world_items) + && !in_array(Item::get('BowAndSilverArrows', $world), $world_items) + ) { + if (array_search(Item::get('SilverArrowUpgrade', $world), $nice_items) === false && $world->config('difficulty') !== 'custom') { + $advancement_items[] = Item::get('SilverArrowUpgrade', $world); + } } } + } elseif ($world->config('mode.weapons') === 'vanilla') { + $uncle_sword = Item::get('UncleSword', $world)->setTarget(array_pop($nice_items_swords)); + $world->getLocation("Link's Uncle")->setItem($uncle_sword); + + foreach (["Pyramid Fairy - Left", "Blacksmith", "Master Sword Pedestal"] as $location) { + $world->getLocation($location)->setItem(array_pop($nice_items_swords)); + } } else { // put uncle sword back if (count($nice_items_swords)) { - $uncle_sword = Item::get('UncleSword')->setTarget(array_pop($nice_items_swords)); - if ($this->config('mode.weapons') == 'uncle' && !$this->world->getLocation("Link's Uncle")->hasItem()) { - $this->world->getLocation("Link's Uncle")->setItem($uncle_sword); + $uncle_sword = Item::get('UncleSword', $world)->setTarget(array_pop($nice_items_swords)); + if ($world->config('mode.weapons') === 'assured') { + $world->addPreCollectedItem($uncle_sword); + array_push($trash_items, Item::get('FiftyRupees', $world)); } else { array_push($advancement_items, $uncle_sword); } @@ -230,17 +247,10 @@ public function makeSeed() { array_push($advancement_items, array_pop($nice_items_swords)); } - if ($this->config('mode.weapons') == 'uncle') { - $uncle_item = $this->world->getLocation("Link's Uncle")->getItem(); - if ($uncle_item !== null && !$uncle_item->getTarget() instanceof Item\Sword) { - throw new \Exception("Uncle must have a sword item when Uncle Assured is selected"); - } - } - if (count($nice_items_swords)) { - if ($this->config('region.takeAnys', false)) { + if ($world->config('region.takeAnys', false)) { array_pop($nice_items_swords); - array_push($trash_items, Item::get('TwentyRupees')); + array_push($trash_items, Item::get('TwentyRupees', $world)); } } @@ -252,18 +262,30 @@ public function makeSeed() { } $nice_items = array_merge($nice_items, $nice_items_bottles); - if ($this->config('rom.rupeeBow', false)) { + if ($world->config('rom.rupeeBow', false)) { $trash_items_replace = []; foreach ($trash_items as $key => $item) { if ($item instanceof Item\Arrow || $item instanceof Item\Upgrade\Arrow) { unset($trash_items[$key]); - $trash_items_replace[] = Item::get('FiveRupees'); + $trash_items_replace[] = Item::get('FiveRupees', $world); } } $trash_items = array_merge($trash_items, $trash_items_replace); } - if ($this->world->config('region.wildBigKeys', false)) { + // F this key + if ($world->config('region.forceSkullWoodsKey', false)) { + foreach ($dungeon_items as $key => $item) { + if ($item === Item::get('KeyD3', $world)) { + unset($dungeon_items[$key]); + $locations["Skull Woods - Pinball Room"]->setItem($item); + + break; + } + } + } + + if ($world->config('region.wildBigKeys', false)) { foreach ($dungeon_items as $key => $item) { if ($item instanceof Item\BigKey) { unset($dungeon_items[$key]); @@ -271,15 +293,15 @@ public function makeSeed() { } } } - if ($this->world->config('region.wildKeys', false)) { + if ($world->config('region.wildKeys', false)) { foreach ($dungeon_items as $key => $item) { - if ($item instanceof Item\Key && ($this->config('mode.state') != 'standard' || $item != Item::get('KeyH2'))) { + if ($item instanceof Item\Key && ($world->config('mode.state') != 'standard' || $item != Item::get('KeyH2', $world))) { unset($dungeon_items[$key]); $advancement_items[] = $item; } } } - if ($this->world->config('region.wildMaps', false)) { + if ($world->config('region.wildMaps', false)) { foreach ($dungeon_items as $key => $item) { if ($item instanceof Item\Map) { unset($dungeon_items[$key]); @@ -287,7 +309,7 @@ public function makeSeed() { } } } - if ($this->world->config('region.wildCompasses', false)) { + if ($world->config('region.wildCompasses', false)) { foreach ($dungeon_items as $key => $item) { if ($item instanceof Item\Compass) { unset($dungeon_items[$key]); @@ -296,21 +318,10 @@ public function makeSeed() { } } - $this->advancement_items = fy_shuffle($advancement_items); - - $filler = Filler::factory('RandomAssumed', $this->world); - - // mess with the junk fill - if ($this->goal == 'triforce-hunt' || $this->goal == 'pedestal') { - $filler->setGanonJunkLimits(15, 50); - } - if (in_array($this->logic, ['OverworldGlitches', 'MajorGlitches', 'None'])) { - $filler->setGanonJunkLimits(0, 0); - } - - $filler->fill($dungeon_items, $this->advancement_items, $nice_items, $trash_items); - - return $this; + $this->dungeon_items = array_merge($this->dungeon_items, $dungeon_items); + $this->advancement_items = fy_shuffle(array_merge($this->advancement_items, $advancement_items)); + $this->nice_items = fy_shuffle(array_merge($this->nice_items, $nice_items)); + $this->trash_items = fy_shuffle(array_merge($this->trash_items, $trash_items)); } /** @@ -320,31 +331,32 @@ public function makeSeed() { * * @return $this */ - public function placeBosses(World $world) : self { + public function placeBosses(World $world): self + { // most restrictive first $boss_locations = [ ['Ganons Tower', 'top'], ['Ganons Tower', 'middle'], - ['Tower of Hera', null], - ['Skull Woods', null], - ['Eastern Palace', null], - ['Desert Palace', null], - ['Palace of Darkness', null], - ['Swamp Palace', null], - ['Thieves Town', null], - ['Ice Palace', null], - ['Misery Mire', null], - ['Turtle Rock', null], + ['Tower of Hera', ''], + ['Skull Woods', ''], + ['Eastern Palace', ''], + ['Desert Palace', ''], + ['Palace of Darkness', ''], + ['Swamp Palace', ''], + ['Thieves Town', ''], + ['Ice Palace', ''], + ['Misery Mire', ''], + ['Turtle Rock', ''], ['Ganons Tower', 'bottom'], ]; - if ($this->world->config('mode.weapons') == 'swordless') { + if ($world->config('mode.weapons') == 'swordless') { array_splice($boss_locations, 8, 1); // remove Ice Palace - $this->world->getRegion('Ice Palace')->setBoss(Boss::get("Kholdstare")); + $world->getRegion('Ice Palace')->setBoss(Boss::get("Kholdstare", $world)); } - $placeable_bosses = Boss::all()->filter(function($boss) { - if ($this->world->config('mode.weapons') == 'swordless' && $boss->getName() == "Kholdstare") { + $placeable_bosses = Boss::all($world)->filter(function ($boss) use ($world) { + if ($world->config('mode.weapons') == 'swordless' && $boss->getName() == "Kholdstare") { return false; } return !in_array($boss->getName(), [ @@ -354,63 +366,63 @@ public function placeBosses(World $world) : self { ]); }); - switch ($this->config('boss_shuffle')) { - case 'chaos': + switch ($world->config('enemizer.bossShuffle')) { + case 'random': foreach ($boss_locations as $location) { do { - $boss = Boss::all()->random(); - } while (!$this->world->getRegion($location[0])->canPlaceBoss($boss, $location[1])); - logger()->debug(json_encode([$location[0], $location[1], $boss->getName()])); - $this->world->getRegion($location[0])->setBoss($boss, $location[1]); + $boss = Boss::all($world)->random(); + } while (!$world->getRegion($location[0])->canPlaceBoss($boss, $location[1])); + Log::debug((string) json_encode([$location[0], $location[1], $boss->getName()])); + $world->getRegion($location[0])->setBoss($boss, $location[1]); } break; - case 'normal': // 1 copy of each, +3 other copies + case 'full': // 1 copy of each, +3 other copies $bosses = fy_shuffle(array_merge($placeable_bosses->values(), $placeable_bosses->randomCollection(3)->values())); foreach ($boss_locations as $location) { $boss = array_shift($bosses); - while (!$this->world->getRegion($location[0])->canPlaceBoss($boss, $location[1])) { + while (!$world->getRegion($location[0])->canPlaceBoss($boss, $location[1])) { array_push($bosses, $boss); $boss = array_shift($bosses); } - logger()->debug(json_encode([$location[0], $location[1], $boss->getName()])); - $this->world->getRegion($location[0])->setBoss($boss, $location[1]); + Log::debug((string) json_encode([$location[0], $location[1], $boss->getName()])); + $world->getRegion($location[0])->setBoss($boss, $location[1]); } break; - case 'basic': // 1:1 + case 'simple': // 1:1 $bosses = fy_shuffle(array_merge($placeable_bosses->values(), [ - Boss::get("Armos Knights"), - Boss::get("Lanmolas"), - Boss::get("Moldorm"), + Boss::get("Armos Knights", $world), + Boss::get("Lanmolas", $world), + Boss::get("Moldorm", $world), ])); foreach ($boss_locations as $location) { $boss = array_shift($bosses); - while (!$this->world->getRegion($location[0])->canPlaceBoss($boss, $location[1])) { + while (!$world->getRegion($location[0])->canPlaceBoss($boss, $location[1])) { array_push($bosses, $boss); $boss = array_shift($bosses); } - logger()->debug(json_encode([$location[0], $location[1], $boss->getName()])); - $this->world->getRegion($location[0])->setBoss($boss, $location[1]); + Log::debug((string) json_encode([$location[0], $location[1], $boss->getName()])); + $world->getRegion($location[0])->setBoss($boss, $location[1]); } break; - case 'off': + case 'none': default: - $this->world->getRegion('Eastern Palace')->setBoss(Boss::get("Armos Knights")); - $this->world->getRegion('Desert Palace')->setBoss(Boss::get("Lanmolas")); - $this->world->getRegion('Tower of Hera')->setBoss(Boss::get("Moldorm")); - $this->world->getRegion('Palace of Darkness')->setBoss(Boss::get("Helmasaur King")); - $this->world->getRegion('Swamp Palace')->setBoss(Boss::get("Arrghus")); - $this->world->getRegion('Skull Woods')->setBoss(Boss::get("Mothula")); - $this->world->getRegion('Thieves Town')->setBoss(Boss::get("Blind")); - $this->world->getRegion('Ice Palace')->setBoss(Boss::get("Kholdstare")); - $this->world->getRegion('Misery Mire')->setBoss(Boss::get("Vitreous")); - $this->world->getRegion('Turtle Rock')->setBoss(Boss::get("Trinexx")); - $this->world->getRegion('Ganons Tower')->setBoss(Boss::get("Armos Knights"), 'bottom'); - $this->world->getRegion('Ganons Tower')->setBoss(Boss::get("Lanmolas"), 'middle'); - $this->world->getRegion('Ganons Tower')->setBoss(Boss::get("Moldorm"), 'top'); - } - - $this->world->getRegion('Hyrule Castle Tower')->setBoss(Boss::get("Agahnim")); - $this->world->getRegion('Ganons Tower')->setBoss(Boss::get("Agahnim2")); + $world->getRegion('Eastern Palace')->setBoss(Boss::get("Armos Knights", $world)); + $world->getRegion('Desert Palace')->setBoss(Boss::get("Lanmolas", $world)); + $world->getRegion('Tower of Hera')->setBoss(Boss::get("Moldorm", $world)); + $world->getRegion('Palace of Darkness')->setBoss(Boss::get("Helmasaur King", $world)); + $world->getRegion('Swamp Palace')->setBoss(Boss::get("Arrghus", $world)); + $world->getRegion('Skull Woods')->setBoss(Boss::get("Mothula", $world)); + $world->getRegion('Thieves Town')->setBoss(Boss::get("Blind", $world)); + $world->getRegion('Ice Palace')->setBoss(Boss::get("Kholdstare", $world)); + $world->getRegion('Misery Mire')->setBoss(Boss::get("Vitreous", $world)); + $world->getRegion('Turtle Rock')->setBoss(Boss::get("Trinexx", $world)); + $world->getRegion('Ganons Tower')->setBoss(Boss::get("Armos Knights", $world), 'bottom'); + $world->getRegion('Ganons Tower')->setBoss(Boss::get("Lanmolas", $world), 'middle'); + $world->getRegion('Ganons Tower')->setBoss(Boss::get("Moldorm", $world), 'top'); + } + + $world->getRegion('Hyrule Castle Tower')->setBoss(Boss::get("Agahnim", $world)); + $world->getRegion('Ganons Tower')->setBoss(Boss::get("Agahnim2", $world)); return $this; } @@ -422,53 +434,54 @@ public function placeBosses(World $world) : self { * * @return $this */ - public function fillPrizes(World $world, $attempts = 5) : self { - $prize_locations = $world->getLocations()->filter(function($location) { + public function fillPrizes(World $world, $attempts = 5): self + { + $prize_locations = $world->getLocations()->filter(function ($location) { return $location instanceof Location\Prize; })->randomCollection(15); - $crystal_locations = $prize_locations->filter(function($location) { + $crystal_locations = $prize_locations->filter(function ($location) { return $location instanceof Location\Prize\Crystal; }); - $pendant_locations = $prize_locations->filter(function($location) { + $pendant_locations = $prize_locations->filter(function ($location) { return $location instanceof Location\Prize\Pendant; }); - if (!$this->config('prize.shuffleCrystals', true)) { - $crystal_locations["Palace of Darkness - Prize"]->setItem(Item::get('Crystal1')); - $crystal_locations["Swamp Palace - Prize"]->setItem(Item::get('Crystal2')); - $crystal_locations["Skull Woods - Prize"]->setItem(Item::get('Crystal3')); - $crystal_locations["Thieves' Town - Prize"]->setItem(Item::get('Crystal4')); - $crystal_locations["Ice Palace - Prize"]->setItem(Item::get('Crystal5')); - $crystal_locations["Misery Mire - Prize"]->setItem(Item::get('Crystal6')); - $crystal_locations["Turtle Rock - Prize"]->setItem(Item::get('Crystal7')); + if (!$world->config('prize.shuffleCrystals', true)) { + $crystal_locations["Palace of Darkness - Prize"]->setItem(Item::get('Crystal1', $world)); + $crystal_locations["Swamp Palace - Prize"]->setItem(Item::get('Crystal2', $world)); + $crystal_locations["Skull Woods - Prize"]->setItem(Item::get('Crystal3', $world)); + $crystal_locations["Thieves' Town - Prize"]->setItem(Item::get('Crystal4', $world)); + $crystal_locations["Ice Palace - Prize"]->setItem(Item::get('Crystal5', $world)); + $crystal_locations["Misery Mire - Prize"]->setItem(Item::get('Crystal6', $world)); + $crystal_locations["Turtle Rock - Prize"]->setItem(Item::get('Crystal7', $world)); } - if (!$this->config('prize.shufflePendants', true)) { - $pendant_locations["Eastern Palace - Prize"]->setItem(Item::get('PendantOfCourage')); - $pendant_locations["Desert Palace - Prize"]->setItem(Item::get('PendantOfPower')); - $pendant_locations["Tower of Hera - Prize"]->setItem(Item::get('PendantOfWisdom')); + if (!$world->config('prize.shufflePendants', true)) { + $pendant_locations["Eastern Palace - Prize"]->setItem(Item::get('PendantOfCourage', $world)); + $pendant_locations["Desert Palace - Prize"]->setItem(Item::get('PendantOfPower', $world)); + $pendant_locations["Tower of Hera - Prize"]->setItem(Item::get('PendantOfWisdom', $world)); } $placed_prizes = $prize_locations->getItems(); $remaining_prizes = fy_shuffle(array_diff([ - Item::get('Crystal1'), - Item::get('Crystal2'), - Item::get('Crystal3'), - Item::get('Crystal4'), - Item::get('Crystal5'), - Item::get('Crystal6'), - Item::get('Crystal7'), - Item::get('PendantOfCourage'), - Item::get('PendantOfPower'), - Item::get('PendantOfWisdom'), + Item::get('Crystal1', $world), + Item::get('Crystal2', $world), + Item::get('Crystal3', $world), + Item::get('Crystal4', $world), + Item::get('Crystal5', $world), + Item::get('Crystal6', $world), + Item::get('Crystal7', $world), + Item::get('PendantOfCourage', $world), + Item::get('PendantOfPower', $world), + Item::get('PendantOfWisdom', $world), ], $placed_prizes->values())); - $place_prizes = ($this->config('prize.crossWorld', true)) + $place_prizes = ($world->config('prize.crossWorld', true)) ? $remaining_prizes - : array_filter($remaining_prizes, function($item) { + : array_filter($remaining_prizes, function ($item) { return $item instanceof Item\Crystal; }); @@ -477,10 +490,13 @@ public function fillPrizes(World $world, $attempts = 5) : self { $total_prizes = count($place_prizes); for ($i = 0; $i < $total_prizes; ++$i) { $place_prize = array_pop($place_prizes); + $world->resetCollectedLocations(); $assumed_items = $world->collectItems(new ItemCollection(array_merge( - $this->getDungeonPool(), - $this->getAdvancementItems(), - $place_prizes), $world)); + $world->getDungeonPool(), + $world->getAdvancementItems(), + $place_prizes + ))); + $assumed_items->setChecksForWorld($world->id); if ($location->canAccess($assumed_items)) { break; } @@ -490,34 +506,43 @@ public function fillPrizes(World $world, $attempts = 5) : self { continue; } + if (!isset($place_prize)) { + continue; + } + + if (!isset($assumed_items)) { + continue; + } + $location->setItem($place_prize); Log::debug(sprintf("Placing: %s in %s", $location->getItem()->getNiceName(), $location->getName())); if (!$world->checkWinCondition($assumed_items)) { if ($attempts > 0) { - $empty_crystal_locations->each(function($location) { + $empty_crystal_locations->each(function ($location) { $location->setItem(); }); - Log::debug(sprintf("Unwinnable Prize Placement (reset %s)", $attempts)); + Log::debug(sprintf("D: Unwinnable Prize Placement (reset %s)", $attempts)); return $this->fillPrizes($world, $attempts - 1); } throw new \Exception("Cannot Place Prize: " . $location->getName()); } } + if ($crystal_locations->getEmptyLocations()->count()) { if ($attempts > 0) { - $empty_crystal_locations->each(function($location) { + $empty_crystal_locations->each(function ($location) { $location->setItem(); }); - Log::debug(sprintf("Unwinnable Prize Placement (reset %s)", $attempts)); + Log::debug(sprintf("C: Unwinnable Prize Placement (reset %s)", $attempts)); return $this->fillPrizes($world, $attempts - 1); } throw new \Exception("Cannot Place Prize: " . $crystal_locations->getEmptyLocations()->first()->getName()); } - $place_prizes = ($this->config('prize.crossWorld', true)) + $place_prizes = ($world->config('prize.crossWorld', true)) ? $place_prizes - : array_filter($remaining_prizes, function($item) { + : array_filter($remaining_prizes, function ($item) { return $item instanceof Item\Pendant; }); @@ -526,10 +551,13 @@ public function fillPrizes(World $world, $attempts = 5) : self { $total_prizes = count($place_prizes); for ($i = 0; $i < $total_prizes; ++$i) { $place_prize = array_pop($place_prizes); + $world->resetCollectedLocations(); $assumed_items = $world->collectItems(new ItemCollection(array_merge( - $this->getDungeonPool(), - $this->getAdvancementItems(), - $place_prizes), $world)); + $world->getDungeonPool(), + $world->getAdvancementItems(), + $place_prizes + ))); + $assumed_items->setChecksForWorld($world->id); if ($location->canAccess($assumed_items)) { break; } @@ -539,15 +567,23 @@ public function fillPrizes(World $world, $attempts = 5) : self { continue; } + if (!isset($place_prize)) { + continue; + } + + if (!isset($assumed_items)) { + continue; + } + $location->setItem($place_prize); Log::debug(sprintf("Placing: %s in %s", $location->getItem()->getNiceName(), $location->getName())); if (!$world->checkWinCondition($assumed_items)) { if ($attempts > 0) { - $empty_pendant_locations->each(function($location) { + $empty_pendant_locations->each(function ($location) { $location->setItem(); }); - Log::debug(sprintf("Unwinnable Prize Placement (reset %s)", $attempts)); + Log::debug(sprintf("B: Unwinnable Prize Placement (reset %s)", $attempts)); return $this->fillPrizes($world, $attempts - 1); } throw new \Exception("Cannot Place Prize: " . $location->getName()); @@ -555,10 +591,10 @@ public function fillPrizes(World $world, $attempts = 5) : self { } if ($pendant_locations->getEmptyLocations()->count()) { if ($attempts > 0) { - $empty_pendant_locations->each(function($location) { + $empty_pendant_locations->each(function ($location) { $location->setItem(); }); - Log::debug(sprintf("Unwinnable Prize Placement (reset %s)", $attempts)); + Log::debug(sprintf("A: Unwinnable Prize Placement (reset %s)", $attempts)); return $this->fillPrizes($world, $attempts - 1); } throw new \Exception("Cannot Place Prize: " . $pendant_locations->getEmptyLocations()->first()->getName()); @@ -567,14 +603,22 @@ public function fillPrizes(World $world, $attempts = 5) : self { return $this; } - protected function setMedallions($regions) { + /** + * Randomize the Medallion requirements for a world. + * + * @param \ALttP\World $world world to adjust requirements in + * + * @return void + */ + protected function setMedallions(World $world): void + { $medallions = [ - Item::get('Ether'), - Item::get('Bombos'), - Item::get('Quake'), + Item::get('Ether', $world), + Item::get('Bombos', $world), + Item::get('Quake', $world), ]; - foreach ($regions['Medallions']->getLocations() as $medallion_location) { + foreach ($world->getRegion('Medallions')->getLocations() as $medallion_location) { if ($medallion_location->hasItem()) { continue; } @@ -584,471 +628,140 @@ protected function setMedallions($regions) { } } - protected function setShops() { - $shops = $this->world->getShops(); + /** + * Randomize the fountain bottles for a world. + * + * @param \ALttP\World $world world to adjust bottle fountains + * + * @return void + */ + protected function setFountains(World $world): void + { + foreach ($world->getRegion('Fountains')->getLocations() as $fountain) { + if ($fountain->hasItem()) { + continue; + } + + $fountain->setItem($world->getBottle(true)); + } + } + + /** + * setup the shops for a given world. + * + * @param \ALttP\World $world world to set shops for + * + * @return void + */ + protected function setShops(World $world): void + { + $shops = $world->getShops(); - $shops->filter(function($shop) { + $shops->filter(function ($shop) { return !$shop instanceof Shop\TakeAny; - })->each(function($shop) { + })->each(function ($shop) { $shop->setActive(true); }); // handle hardmode shops - switch ($this->config('rom.HardMode', 0)) { + switch ($world->config('rom.HardMode', 0)) { case 1: - $this->world->getShop("Capacity Upgrade")->clearInventory() - ->addInventory(0, Item::get('BombUpgrade5'), 200, 3) - ->addInventory(1, Item::get('ArrowUpgrade5'), 200, 3); - $this->world->getShop("Dark World Potion Shop")->addInventory(1, Item::get('Nothing'), 0); - $this->world->getShop("Dark World Forest Shop")->addInventory(0, Item::get('Nothing'), 0); - $this->world->getShop("Dark World Lumberjack Hut Shop")->addInventory(1, Item::get('Nothing'), 0); - $this->world->getShop("Dark World Outcasts Shop")->addInventory(1, Item::get('Nothing'), 0); - $this->world->getShop("Dark World Lake Hylia Shop")->addInventory(1, Item::get('Nothing'), 0); - break; case 2: case 3: - $this->world->getShop("Capacity Upgrade")->clearInventory(); - $this->world->getShop("Dark World Potion Shop")->addInventory(1, Item::get('Nothing'), 0); - $this->world->getShop("Dark World Forest Shop")->addInventory(0, Item::get('Nothing'), 0); - $this->world->getShop("Dark World Lumberjack Hut Shop")->addInventory(1, Item::get('Nothing'), 0); - $this->world->getShop("Dark World Outcasts Shop")->addInventory(1, Item::get('Nothing'), 0); - $this->world->getShop("Dark World Lake Hylia Shop")->addInventory(1, Item::get('Nothing'), 0); + $world->getShop("Capacity Upgrade")->clearInventory(); + $world->getShop("Dark World Potion Shop")->addInventory(1, Item::get('Nothing', $world), 0); + $world->getShop("Dark World Forest Shop")->addInventory(0, Item::get('Nothing', $world), 0); + $world->getShop("Dark World Lumberjack Hut Shop")->addInventory(1, Item::get('Nothing', $world), 0); + $world->getShop("Dark World Outcasts Shop")->addInventory(1, Item::get('Nothing', $world), 0); + $world->getShop("Dark World Lake Hylia Shop")->addInventory(1, Item::get('Nothing', $world), 0); + break; } - if (!$this->config('rom.genericKeys', false) - && !$this->config('rom.rupeeBow', false) - && !$this->config('region.takeAnys', false)) { + if ( + !$world->config('rom.genericKeys', false) + && !$world->config('rom.rupeeBow', false) + && !$world->config('region.takeAnys', false) + ) { return; } - if ($this->config('region.takeAnys', false)) { - $shops->filter(function($shop) { + if ($world->config('region.takeAnys', false)) { + $shops->filter(function ($shop) { return $shop instanceof Shop\TakeAny; - })->randomCollection(4)->each(function($shop) { + })->randomCollection(4)->each(function ($shop) use ($world) { $shop->setActive(true); $shop->setShopkeeper('old_man'); - $shop->addInventory(0, Item::get('BluePotion'), 0); - $shop->addInventory(1, Item::get('BossHeartContainer'), 0); + $shop->addInventory(0, Item::get('BluePotion', $world), 0); + $shop->addInventory(1, Item::get('BossHeartContainer', $world), 0); }); - $old_man = $shops->filter(function($shop) { + $old_man = $shops->filter(function ($shop) { return $shop instanceof Shop\TakeAny && !$shop->getActive(); })->random(); $old_man->setActive(true); $old_man->setShopkeeper('old_man'); - $old_man->addInventory(0, ($this->config('mode.weapons') == 'swordless') ? Item::get('ThreeHundredRupees') - : Item::get('ProgressiveSword'), 0); + $old_man->addInventory(0, ($world->config('mode.weapons') == 'swordless') ? Item::get('ThreeHundredRupees', $world) + : Item::get('ProgressiveSword', $world), 0); } - $shops->filter(function($shop) { + $shops->filter(function ($shop) use ($world) { return !$shop instanceof Shop\TakeAny && !$shop instanceof Shop\Upgrade - && (!$this->world instanceof ALttP\World\Inverted || $shop->getName() != "Dark World Lake Hylia Shop"); - })->randomCollection(5)->each(function($shop) { + && (!$world instanceof \ALttP\World\Inverted || $shop->getName() != "Dark World Lake Hylia Shop"); + })->randomCollection(5)->each(function ($shop) use ($world) { $shop->setActive(true); - if ($this->config('rom.rupeeBow', false)) { - $shop->addInventory(0, Item::get('ShopArrow'), 80); + if ($world->config('rom.rupeeBow', false)) { + $shop->addInventory(0, Item::get('ShopArrow', $world), 80); } - if ($this->config('rom.genericKeys', false)) { - $shop->addInventory(1, Item::get('ShopKey'), 100); + if ($world->config('rom.genericKeys', false)) { + $shop->addInventory(1, Item::get('ShopKey', $world), 100); } - $shop->addInventory(2, Item::get('TenBombs'), 50); + $shop->addInventory(2, Item::get('TenBombs', $world), 50); }); - if ($this->config('rom.rupeeBow', false)) { + if ($world->config('rom.rupeeBow', false)) { // One shop has arrows for sale, we need to set the price correct for - $dw_shop = $this->world->getShop("Dark World Forest Shop"); + $dw_shop = $world->getShop("Dark World Forest Shop"); $dw_shop->setActive(true); foreach ($dw_shop->getInventory() as $slot => $data) { if ($data['item'] instanceof Item\Arrow) { - $dw_shop->addInventory($slot, Item::get('ShopArrow'), 80); + $dw_shop->addInventory((int) $slot, Item::get('ShopArrow', $world), 80); } } - switch ($this->config('rom.HardMode', 0)) { + switch ($world->config('rom.HardMode', 0)) { case 1: - $this->world->getShop("Capacity Upgrade")->clearInventory() - ->addInventory(0, Item::get('BombUpgrade5'), 200, 3); - break; case 2: case 3: - $this->world->getShop("Capacity Upgrade")->clearInventory(); + $world->getShop("Capacity Upgrade")->clearInventory(); + break; default: - $this->world->getShop("Capacity Upgrade")->clearInventory() - ->addInventory(0, Item::get('BombUpgrade5'), 100, 7); - } - } - } - - /** - * Get the current spoiler for this seed - * - * @param array $meta passthrough data to add to meta - * - * @return array - */ - public function getSpoiler(array $meta = []) { - $spoiler = []; - - if (count($this->starting_equipment)) { - $i = 0; - foreach ($this->starting_equipment as $item) { - if ($item instanceof Item\Upgrade\Arrow - || $item instanceof Item\Upgrade\Bomb - || $item instanceof Item\Event) { - continue; - } - - $location = sprintf("Equipment Slot %s", ++$i); - $spoiler['Equipped'][$location] = $item->getName(); - } - } - - foreach ($this->world->getRegions() as $region) { - $name = $region->getName(); - if (!isset($spoiler[$name])) { - $spoiler[$name] = []; - } - $region->getLocations()->each(function($location) use (&$spoiler, $name) { - if ($location instanceof Location\Prize\Event - || $location instanceof Location\Trade) { - return; - } - if ($location->hasItem()) { - $item = $location->getItem(); - $spoiler[$name][$location->getName()] = $this->config('rom.genericKeys', false) && $item instanceof Item\Key - ? 'Key' - : $item->getTarget()->getName(); - } else { - $spoiler[$name][$location->getName()] = 'Nothing'; - } - }); - } - foreach ($this->world->getShops() as $shop) { - if ($shop->getActive()) { - $shop_data = [ - 'location' => $shop->getName(), - 'type' => $shop instanceof Shop\TakeAny ? 'Take Any' : 'Shop', - ]; - foreach ($shop->getInventory() as $slot => $item) { - $shop_data["item_$slot"] = [ - 'item' => $item['item']->getName(), - 'price' => $item['price'], - ]; - } - $spoiler['Shops'][] = $shop_data; + $world->getShop("Capacity Upgrade")->clearInventory() + ->addInventory(0, Item::get('BombUpgrade5', $world), 100, 7); } } - $spoiler['playthrough'] = $this->world->getPlayThrough(); - $spoiler['meta'] = array_merge($meta, [ - 'difficulty' => $this->difficulty, - 'variation' => $this->variation, - 'logic' => $this->getLogic(), - 'rom_mode' => $this->config('rom.logicMode', $this->logic), - 'goal' => $this->goal, - 'build' => Rom::BUILD, - 'mode' => $this->config('mode.state', 'standard'), - 'weapons' => $this->config('mode.weapons', 'randomized') - ]); - - $spoiler['Bosses'] = [ - "Eastern Palace" => $this->world->getRegion('Eastern Palace')->getBoss()->getName(), - "Desert Palace" => $this->world->getRegion('Desert Palace')->getBoss()->getName(), - "Tower Of Hera" => $this->world->getRegion('Tower of Hera')->getBoss()->getName(), - "Hyrule Castle" => "Agahnim", - "Palace Of Darkness" => $this->world->getRegion('Palace of Darkness')->getBoss()->getName(), - "Swamp Palace" => $this->world->getRegion('Swamp Palace')->getBoss()->getName(), - "Skull Woods" => $this->world->getRegion('Skull Woods')->getBoss()->getName(), - "Thieves Town" => $this->world->getRegion('Thieves Town')->getBoss()->getName(), - "Ice Palace" => $this->world->getRegion('Ice Palace')->getBoss()->getName(), - "Misery Mire" => $this->world->getRegion('Misery Mire')->getBoss()->getName(), - "Turtle Rock" => $this->world->getRegion('Turtle Rock')->getBoss()->getName(), - "Ganons Tower Basement" => $this->world->getRegion('Ganons Tower')->getBoss('bottom')->getName(), - "Ganons Tower Middle" => $this->world->getRegion('Ganons Tower')->getBoss('middle')->getName(), - "Ganons Tower Top" => $this->world->getRegion('Ganons Tower')->getBoss('top')->getName(), - "Ganons Tower" => "Agahnim 2", - "Ganon" => "Ganon" - ]; - - if ($this->config('rom.HardMode') !== null) { - $spoiler['meta']['difficulty_mode'] = $this->config('randomizer.item.difficulty_adjustments.' . $this->config('rom.HardMode', 0)); - } - - $this->seed->spoiler = json_encode($spoiler); - - return $spoiler; - } - - /** - * add something to the spoiler record if seed exists - * - * @param string $key - * @param mixed $value - * - * @return array - */ - public function addToSpoiler($key, $value) { - if (!$this->seed) { - return; - } - $spoiler = json_decode($this->seed->spoiler, true); - - array_set($spoiler, $key, $value); - - $this->seed->spoiler = json_encode($spoiler); - - return $spoiler; - } - - /** - * Get config value based on the currently set difficulty/variation - * - * @param string $key dot notation key of config - * @param mixed|null $default value to return if $key is not found - * - * @return mixed - */ - public function config(string $key, $default = null) { - return $this->world->config($key, $default); - } - - /** - * write the current generated data to the Rom - * - * @param Rom $rom Rom to write data to - * - * @return Rom - */ - public function writeToRom(Rom $rom) { - $this->setTexts($rom); - - foreach ($this->world->getRegions() as $name => $region) { - $region->getLocations()->getNonEmptyLocations()->each(function($location) use ($rom) { - $location->writeItem($rom); - }); - // Clear out remaining locations if the pool was smaller than number of locations - $region->getLocations()->getEmptyLocations()->each(function($location) use ($rom) { - $location->setItem(Item::get('Nothing')); - $location->writeItem($rom); - }); - } - - if ($this->config('rng_items')) { - $rom->setSingleRNGTable(new ItemCollection($this->getItemPool())); - } - - $rom->setGoalRequiredCount($this->config('item.Goal.Required', 0) ?: 0); - $rom->setGoalIcon($this->config('item.Goal.Icon', 'triforce')); - - $rom->setHardMode($this->config('rom.HardMode', 0)); - - $rom->setRupoorValue($this->config('item.value.Rupoor', 0) ?: 0); - - $rom->setGanonAgahnimRng($this->config('rom.GanonAgRNG', 'table')); - - // testing features - $rom->setGenericKeys($this->config('rom.genericKeys', false)); - $rom->setupCustomShops($this->world->getShops()); - $rom->setRupeeArrow($this->config('rom.rupeeBow', false)); - $rom->setLockAgahnimDoorInEscape(true); - $rom->setWishingWellChests(true); - $rom->setWishingWellUpgrade(false); - $rom->setHyliaFairyShop(true); - $rom->setRestrictFairyPonds(true); - $rom->setLimitProgressiveSword($this->config('item.overflow.count.Sword', 4), - Item::get($this->config('item.overflow.replacement.Sword', 'TwentyRupees2'))->getBytes()[0]); - $rom->setLimitProgressiveShield($this->config('item.overflow.count.Shield', 3), - Item::get($this->config('item.overflow.replacement.Shield', 'TwentyRupees2'))->getBytes()[0]); - $rom->setLimitProgressiveArmor($this->config('item.overflow.count.Armor', 2), - Item::get($this->config('item.overflow.replacement.Armor', 'TwentyRupees2'))->getBytes()[0]); - $rom->setLimitBottle($this->config('item.overflow.count.Bottle', 4), - Item::get($this->config('item.overflow.replacement.Bottle', 'TwentyRupees2'))->getBytes()[0]); - - switch ($this->difficulty) { - case 'easy': - $rom->setSilversEquip('both'); - $rom->setSubstitutions([ - 0x12, 0x01, 0x35, 0xFF, // lamp -> 5 rupees - 0x58, 0x01, $this->config('rom.rupeeBow', false) ? 0x36 : 0x43, 0xFF, // silver arrows -> 1 arrow - 0x3E, 0x07, 0x47, 0xFF, // 7 boss hearts -> 20 rupees - 0x51, 0x06, 0x52, 0xFF, // 6 +5 bomb upgrades -> +10 bomb upgrade - 0x53, 0x06, 0x54, 0xFF, // 6 +5 arrow upgrades -> +10 arrow upgrade - ]); - break; - default: - $rom->setSilversEquip('collection'); - $rom->setSubstitutions([ - 0x12, 0x01, 0x35, 0xFF, // lamp -> 5 rupees - 0x51, 0x06, 0x52, 0xFF, // 6 +5 bomb upgrades -> +10 bomb upgrade - 0x53, 0x06, 0x54, 0xFF, // 6 +5 arrow upgrades -> +10 arrow upgrade - ]); - } - - switch ($this->goal) { - case 'triforce-hunt': - case 'pedestal': - $rom->setGanonInvincible('yes'); - break; - case 'dungeons': - $rom->setGanonInvincible('dungeons'); - break; - default: - $rom->setGanonInvincible('crystals'); - } - - if ($this->config('rom.mapOnPickup', false)) { - $green_pendant_region = $this->world->getLocationsWithItem(Item::get('PendantOfCourage'))->first()->getRegion(); - - $rom->setMapRevealSahasrahla($green_pendant_region->getMapReveal()); - - $crystal5_region = $this->world->getLocationsWithItem(Item::get('Crystal5'))->first()->getRegion(); - $crystal6_region = $this->world->getLocationsWithItem(Item::get('Crystal6'))->first()->getRegion(); - - $rom->setMapRevealBombShop($crystal5_region->getMapReveal() | $crystal6_region->getMapReveal()); - } - - $rom->setMapMode($this->config('rom.mapOnPickup', false)); - $rom->setCompassMode($this->config('rom.compassOnPickup', 'off')); - $rom->setFreeItemTextMode($this->config('rom.freeItemText', false)); - $rom->setFreeItemMenu($this->config('rom.freeItemMenu', 0x00)); - $rom->setDiggingGameRng(get_random_int(1, 30)); - - $rom->writeRNGBlock(function() { - return get_random_int(0, 0x100); - }); - - $this->writePrizePacksToRom($rom); - - if ($this->config('sprite.shuffleOverworldBonkPrizes', false)) { - $this->writeOverworldBonkPrizeToRom($rom); - } - - $rom->setPyramidFairyChests($this->config('region.swordsInPool', true)); - $rom->setSmithyQuickItemGive($this->config('region.swordsInPool', true)); - - $rom->setGameState($this->config('mode.state')); - $rom->setSwordlessMode($this->config('mode.weapons') == 'swordless'); - - if (!$this->world->getLocation("Link's Uncle")->getItem() instanceof Item\Sword) { - $rom->removeUnclesSword(); - } - if (!$this->world->getLocation("Link's Uncle")->getItem() instanceof Item\Shield - || !$this->world->getLocation("Link's Uncle")->hasItem(Item::get('L1SwordAndShield'))) { - $rom->removeUnclesShield(); - } - - $this->randomizeCredits($rom); - - $rom->setStartingEquipment($this->starting_equipment); - $rom->setCapacityUpgradeFills([ - $this->config('item.value.BombUpgrade5', 50), - $this->config('item.value.BombUpgrade10', 50), - $this->config('item.value.ArrowUpgrade5', 70), - $this->config('item.value.ArrowUpgrade10', 70), - ]); - - // currently has to be after compass mode, as this will override compass mode. - $rom->setClockMode($this->config('rom.timerMode', 'off')); - - $rom->setBlueClock($this->config('item.value.BlueClock', 0) ?: 0); - $rom->setRedClock($this->config('item.value.RedClock', 0) ?: 0); - $rom->setGreenClock($this->config('item.value.GreenClock', 0) ?: 0); - $rom->setStartingTime($this->config('rom.timerStart', 0) ?: 0); - - switch ($this->config('rom.logicMode', $this->logic)) { - case 'MajorGlitches': - case 'None': - $type_flag = 'G'; - $rom->setSwampWaterLevel(false); - $rom->setPreAgahnimDarkWorldDeathInDungeon(false); - $rom->setSaveAndQuitFromBossRoom(true); - $rom->setWorldOnAgahnimDeath(false); - $rom->setRandomizerSeedType('MajorGlitches'); - $rom->setWarningFlags(bindec('01100000')); - $rom->setPODEGfix(false); - break; - case 'OverworldGlitches': - $type_flag = 'S'; - $rom->setPreAgahnimDarkWorldDeathInDungeon(false); - $rom->setSaveAndQuitFromBossRoom(true); - $rom->setWorldOnAgahnimDeath(true); - $rom->setRandomizerSeedType('OverworldGlitches'); - $rom->setWarningFlags(bindec('01000000')); - $rom->setPODEGfix(false); - break; - case 'NoGlitches': - default: - $type_flag = 'C'; - $rom->setSaveAndQuitFromBossRoom(true); - $rom->setWorldOnAgahnimDeath(true); - $rom->setPODEGfix(true); - break; - } - - $rom->setGameType('item'); - - if (static::class == self::class) { - $rom->writeCredits(); - $rom->writeText(); - } - - $this->seed->patch = json_encode($rom->getWriteLog()); - $this->seed->build = Rom::BUILD; - - return $rom; - } - - /** - * Save a seed record to DB - * - * @return string hash of record - */ - public function saveSeedRecord() { - $this->seed->logic = static::LOGIC; - $this->seed->rules = $this->difficulty; - $this->seed->game_mode = $this->logic; - $this->seed->save(); - - return $this->seed->hash; - } - - public function getSeedRecord() { - return $this->seed; - } - - /** - * Update patch of seed record to DB - * - * @param array $patch new patch that will be applies - * - * @return $this - */ - public function updateSeedRecordPatch($patch) { - $this->seed->patch = json_encode($patch); - $this->seed->save(); - - return $this; } /** * Randomize portions of the ending credits sequence * - * @param Rom $rom ROM to write to + * @param \ALttP\World $world world to randomize credits for * * @return $this */ - public function randomizeCredits(Rom $rom) { - $rom->setKingsReturnCredits(array_first(fy_shuffle([ + public function randomizeCredits(World $world) + { + $world->setCredit('castle', array_first(fy_shuffle([ "the return of the king", "fellowship of the ring", "the two towers", ]))); - $rom->setSanctuaryCredits(array_first(fy_shuffle([ + $world->setCredit('sanctuary', array_first(fy_shuffle([ "the loyal priest", "read a book", "sits in own pew", @@ -1064,9 +777,9 @@ public function randomizeCredits(Rom $rom) { "sharshalah", "shahabadoo", "sassafrass", "saddlebags", "sandalwood", "shagadelic", "sandcastle", "saltpeters", "shabbiness", "shlrshlrsh", "sassyralph", "sallyacorn", ])); - $rom->setKakarikoTownCredits("$name's homecoming"); + $world->setCredit('kakariko', "$name's homecoming"); - $rom->setWoodsmansHutCredits(array_first(fy_shuffle([ + $world->setCredit('lumberjacks', array_first(fy_shuffle([ "twin lumberjacks", "fresh flapjacks", "two woodchoppers", @@ -1078,23 +791,23 @@ public function randomizeCredits(Rom $rom) { switch (get_random_int(0, 1)) { case 1: - $rom->setSwordsmithsCredits("the dwarven breadsmiths"); + $world->setCredit('smithy', "the dwarven breadsmiths"); break; } - $rom->setDeathMountainCredits(array_first(fy_shuffle([ + $world->setCredit('bridge', array_first(fy_shuffle([ "the lost old man", "gary the old man", "Your ad here", ]))); - $rom->setLostWoodsCredits(array_first(fy_shuffle([ + $world->setCredit('woods', array_first(fy_shuffle([ "the forest thief", "dancing pickles", "flying vultures", ]))); - $rom->setWishingWellCredits(array_first(fy_shuffle([ + $world->setCredit('well', array_first(fy_shuffle([ "venus. queen of faeries", "Venus was her name", "I'm your Venus", @@ -1111,480 +824,187 @@ public function randomizeCredits(Rom $rom) { /** * Set all texts for this randomization * - * @param Rom $rom ROM to write to + * @param \ALttP\World $world world to randomize text for * * @return $this */ - public function setTexts(Rom $rom) { - $strings = cache()->rememberForever('strings', function() { + public function setTexts(World $world) + { + $strings = cache()->rememberForever('strings', function () { return [ - 'uncle' => array_filter(explode("\n-\n", preg_replace('/^-\n/', '', file_get_contents(base_path('strings/uncle.txt'))))), - 'tavern_man' => array_filter(explode("\n-\n", preg_replace('/^-\n/', '', file_get_contents(base_path('strings/tavern_man.txt'))))), - 'blind' => array_filter(explode("\n-\n", preg_replace('/^-\n/', '', file_get_contents(base_path('strings/blind.txt'))))), - 'ganon_1' => array_filter(explode("\n-\n", preg_replace('/^-\n/', '', file_get_contents(base_path('strings/ganon_1.txt'))))), - 'triforce' => array_filter(explode("\n-\n", preg_replace('/^-\n/', '', file_get_contents(base_path('strings/triforce.txt'))))), - 'hint' => array_filter(explode("\n-\n", preg_replace('/^-\n/', '', file_get_contents(base_path('strings/hint.txt'))))), + 'uncle' => array_filter(explode( + "\n-\n", + (string) preg_replace('/^-\n/', '', (string) file_get_contents(base_path('strings/uncle.txt'))) + )), + 'tavern_man' => array_filter(explode( + "\n-\n", + (string) preg_replace('/^-\n/', '', (string) file_get_contents(base_path('strings/tavern_man.txt'))) + )), + 'blind' => array_filter(explode( + "\n-\n", + (string) preg_replace('/^-\n/', '', (string) file_get_contents(base_path('strings/blind.txt'))) + )), + 'ganon_1' => array_filter(explode( + "\n-\n", + (string) preg_replace('/^-\n/', '', (string) file_get_contents(base_path('strings/ganon_1.txt'))) + )), + 'triforce' => array_filter(explode( + "\n-\n", + (string) preg_replace('/^-\n/', '', (string) file_get_contents(base_path('strings/triforce.txt'))) + )), ]; }); - $boots_location = $this->world->getLocationsWithItem(Item::get('PegasusBoots'))->first(); + $boots_location = $world->getLocationsWithItem(Item::get('PegasusBoots', $world))->first(); - if ($this->config('spoil.BootsLocation', false) && $boots_location) { + if ($world->config('spoil.BootsLocation', false) && $boots_location) { Log::info('Boots revealed'); switch ($boots_location->getName()) { case "Link's House": - $rom->setUncleTextString("Lonk!\nYou'll never\nfind the boots"); + $world->setText('uncle_leaving_text', "Lonk!\nYou'll never\nfind the boots"); break; case "Maze Race": - $rom->setUncleTextString("Boots at race?\nSeed confirmed\nimpossible."); + $world->setText('uncle_leaving_text', "Boots at race?\nSeed confirmed\nimpossible."); break; default: - $rom->setUncleTextString("Lonk! Boots\nare in the\n" . $boots_location->getRegion()->getName()); + $world->setText('uncle_leaving_text', "Lonk! Boots\nare in the\n" . $boots_location->getRegion()->getName()); } } else { - $rom->setUncleTextString(array_first(fy_shuffle($strings['uncle']))); + $world->setText('uncle_leaving_text', array_first(fy_shuffle($strings['uncle']))); } - $green_pendant_location = $this->world->getLocationsWithItem(Item::get('PendantOfCourage'))->first(); + $green_pendant_location = $world->getLocationsWithItem(Item::get('PendantOfCourage', $world))->first(); - $rom->setSahasrahla1TextString("Want something\nfor free? Go\nearn the green\npendant in\n" + $world->setText('sahasrahla_bring_courage', "Want something\nfor free? Go\nearn the green\npendant in\n" . $green_pendant_location->getRegion()->getName() . "\nand I'll give\nyou something."); - $crystal5_location = $this->world->getLocationsWithItem(Item::get('Crystal5'))->first(); - $crystal6_location = $this->world->getLocationsWithItem(Item::get('Crystal6'))->first(); + $crystal5_location = $world->getLocationsWithItem(Item::get('Crystal5', $world))->first(); + $crystal6_location = $world->getLocationsWithItem(Item::get('Crystal6', $world))->first(); - $rom->setBombShop1TextString("bring me the\ncrystals from\n" + $world->setText('bomb_shop', "bring me the\ncrystals from\n" . $crystal5_location->getRegion()->getName() . "\nand\n" . $crystal6_location->getRegion()->getName() . "\nso I can make\na big bomb!"); - $rom->setBlindTextString(array_first(fy_shuffle($strings['blind']))); - - $rom->setTavernManTextString(array_first(fy_shuffle($strings['tavern_man']))); + $world->setText('blind_by_the_light', array_first(fy_shuffle($strings['blind']))); - $rom->setGanon1TextString(array_first(fy_shuffle($strings['ganon_1']))); + $world->setText('kakariko_tavern_fisherman', array_first(fy_shuffle($strings['tavern_man']))); - switch ($this->goal) { - case 'pedestal': - $rom->setGanon1InvincibleTextString("You cannot\nkill me. You\nshould go for\nyour real goal\nIt's on the\npedestal.\n\nYou dingus!\n"); - break; - case 'triforce-hunt': - $rom->setGanon1InvincibleTextString("So you thought\nyou could come\nhere and beat\nme? I have\nhidden the\nTriforce\npieces well.\nWithout them,\nyou can't win!"); - break; - default: - $rom->setGanon1InvincibleTextString("You think you\nare ready to\nface me?\n\nI will not die\n\nunless you\ncomplete your\ngoals. Dingus!"); - } + $world->setText('ganon_fall_in', array_first(fy_shuffle($strings['ganon_1']))); - $rom->setGanon2InvincibleTextString("Got wax in\nyour ears?\nI cannot die!"); + $world->setText('ganon_phase_3_alt', "Got wax in\nyour ears?\nI cannot die!"); - $silver_arrows_location = $this->world->getLocationsWithItem(Item::get('SilverArrowUpgrade'))->first(); + $silver_arrows_location = $world->getLocationsWithItem(Item::get('SilverArrowUpgrade', $world))->first(); if (!$silver_arrows_location) { - $silver_arrows_location = $this->world->getLocationsWithItem(Item::get('BowAndSilverArrows'))->first(); + $silver_arrows_location = $world->getLocationsWithItem(Item::get('BowAndSilverArrows', $world))->first(); } if (!$silver_arrows_location) { - $rom->setGanon2TextString("Did you find\nthe arrows on\nPlanet Zebes?"); + $world->setText('ganon_phase_3_no_silvers', "Did you find\nthe arrows on\nPlanet Zebes?"); } else { switch ($silver_arrows_location->getRegion()->getName()) { case "Ganons Tower": - $rom->setGanon2TextString("Did you find\nthe arrows in\nMy tower?"); + $world->setText('ganon_phase_3_no_silvers', "Did you find\nthe arrows in\nMy tower?"); break; default: - $rom->setGanon2TextString("Did you find\nthe arrows in\n" . $silver_arrows_location->getRegion()->getName()); + $world->setText('ganon_phase_3_no_silvers', "Did you find\nthe arrows in\n" . $silver_arrows_location->getRegion()->getName()); } } - $rom->setTriforceTextString(array_first(fy_shuffle($strings['triforce']))); - - // Hints - $tiles = fy_shuffle([ - 'telepathic_tile_eastern_palace', - 'telepathic_tile_tower_of_hera_floor_4', - 'telepathic_tile_spectacle_rock', - 'telepathic_tile_swamp_entrance', - 'telepathic_tile_thieves_town_upstairs', - 'telepathic_tile_misery_mire', - 'telepathic_tile_palace_of_darkness', - 'telepathic_tile_desert_bonk_torch_room', - 'telepathic_tile_castle_tower', - 'telepathic_tile_ice_large_room', - 'telepathic_tile_turtle_rock', - 'telepathic_tile_ice_entrace', - 'telepathic_tile_ice_stalfos_knights_room', - 'telepathic_tile_tower_of_hera_entrance', - 'telepathic_tile_south_east_darkworld_cave', - ]); - $locations = fy_shuffle([ - "Sahasrahla", - "Mimic Cave", - "Catfish", - "Graveyard Ledge", - "Purple Chest", - "Tower of Hera - Big Key Chest", - "Swamp Palace - Big Chest", - ["Misery Mire - Big Key Chest", "Misery Mire - Compass Chest"], - ["Swamp Palace - Big Key Chest", "Swamp Palace - West Chest"], - ["Pyramid Fairy - Left", "Pyramid Fairy - Right"], - ]); - - if ($this->world->config('region.wildBigKeys', false)) { - $gtbk_location = $this->world->getLocationsWithItem(Item::get('BigKeyA2'))->first(); - - if ($gtbk_location) { - $tile = array_pop($tiles); - $gtbk_hint = $gtbk_location->getHint(); - - logger()->debug("$tile: $gtbk_hint"); - $rom->setText($tile, $gtbk_hint); - } - } - - if ($this->config('spoil.Hints', true)) { - // boots hint v30 testing - $boots_location = $this->world->getLocationsWithItem(Item::get('PegasusBoots'))->first(); - if ($boots_location) { - $tile = array_pop($tiles); - $boots_hint = $boots_location->getHint(); - - logger()->debug("$tile: $boots_hint"); - $rom->setText($tile, $boots_hint); - } - - $picks = range(0, count($locations) - 1); - for ($i = 0; $i < 5; ++$i) { - $picks = fy_shuffle($picks); - $pick = $locations[array_pop($picks)]; + // progressive bow hint and handling + // @todo this swap of item really shouldn't happen here, we don't know + // for sure that the items haven't already been written to the rom. + $progressive_bow_locations = $world->getLocationsWithItem(Item::get('ProgressiveBow', $world))->randomCollection(2); + if ($progressive_bow_locations->count() > 0) { + $first_location = $progressive_bow_locations->pop(); + $world->setText('ganon_phase_3_no_silvers', "Did you find\nthe arrows in\n" . $first_location->getRegion()->getName()); - if (is_array($pick)) { - $hint = $this->world->getLocations()->filter(function($location) use ($pick) { - return in_array($location->getName(), $pick); - })->getHint(); - } else { - $hint = $this->world->getLocation($pick)->getHint(); - } - - if (!$hint) { - continue; - } - $tile = array_pop($tiles); + if ($progressive_bow_locations->count() > 0) { + $second_location = $progressive_bow_locations->pop(); + $world->setText('ganon_phase_3_no_silvers_alt', "Did you find\nthe arrows in\n" . $second_location->getRegion()->getName()); - logger()->debug("$tile: $hint"); - $rom->setText($tile, $hint); - } - - $hintables = array_filter($this->advancement_items, function($item) { - return !$item instanceof Item\Shield - && !$item instanceof Item\Key - && !$item instanceof Item\Map - && !$item instanceof Item\Compass - && ($this->world->config('region.wildBigKeys', false) || !$item instanceof Item\BigKey) - && !$item instanceof Item\Bottle - && !$item instanceof Item\Sword - && !in_array($item->getName(), ['TenBombs', 'HalfMagic', 'BugCatchingNet', 'Powder', 'Mushroom']); - }); - - switch ($this->config('rom.HardMode', 0)) { - case -1: - $hints = array_slice(fy_shuffle($hintables), 0, count($tiles)); - break; - case 0: - $hints = array_slice(fy_shuffle($hintables), 0, min(4, count($tiles))); - break; - default: - $hints = []; - } - - $hints = array_map(function($item) { - return $this->world->getLocationsWithItem($item)->filter(function($location) { - return !$location instanceof Location\Medallion - && !$location instanceof Location\Fountain - && !$location instanceof Location\Prize - && !$location instanceof Location\Event - && !$location instanceof Location\Trade; - })->random(); - }, $hints); - - $locations_with_item = $this->world->getLocationsWithItem()->filter(function($location) { - $item = $location->getItem(); - return !$location instanceof Location\Medallion - && !$location instanceof Location\Fountain - && !$location instanceof Location\Prize - && !$location instanceof Location\Event - && !$location instanceof Location\Trade - && !$item instanceof Item\Key - && !$item instanceof Item\Map - && !$item instanceof Item\Compass - && ($this->world->config('region.wildBigKeys', false) || !$item instanceof Item\BigKey); - }); - - $hint_locations = $locations_with_item->randomCollection(get_random_int(floor((count($tiles) - count($hints)) / 2) - 1, count($tiles) - count($hints) - 1))->merge($hints); - - foreach ($tiles as $tile) { - $hint = $hint_locations->pop(); - $hint_text = ($hint ? $hint->getHint() : null) ?? "{C:GREEN}\n" . array_first(fy_shuffle($strings['hint'])); - - logger()->debug(str_replace("\n", " ", "$tile: $hint_text")); - $rom->setText($tile, $hint_text); + // Progressive Bow Alternate + $second_location->setItem(new Item\Bow('ProgressiveBow', [0x65], $world)); } } - return $this; - } - - /** - * Get a shuffled array of Item's necessary for giving access to more locations as well as completing the game. - * - * @return array - */ - public function getAdvancementItems() { - $items = []; - - $max_items = 216 - array_sum(config('item.advancement')); - foreach (config('item.advancement') as $item_name => $count) { - $loop = min($this->config('item.count.' . $item_name, $count), $max_items); - for ($i = 0; $i < $loop; ++$i) { - $items[] = $item_name == 'BottleWithRandom' ? $this->getBottle() : Item::get($item_name); - } + if ($world->config('crystals.tower') < 7) { + $tower_string = $world->config('crystals.tower') == 1 ? 'You need %d crystal to enter.' : 'You need %d crystals to enter.'; + $tower_require = sprintf($tower_string, $world->config('crystals.tower')); + $world->setText('sign_ganons_tower', $tower_require); } - - return $items; - } - - /** - * Get all the Items to insert into the Locations Available, should be randomly shuffled - * - * @return array - */ - public function getNiceItems() { - $items = []; - - foreach (config('item.nice') as $item_name => $count) { - $loop = min($this->config('item.count.' . $item_name, $count), 216); - for ($i = 0; $i < $loop; ++$i) { - $items[] = $item_name == 'BottleWithRandom' ? $this->getBottle() : Item::get($item_name); - } - } - - return $items; - } - - /** - * Get all the Items to insert into the Locations Available, should be randomly shuffled - * - * @return array - */ - public function getItemPool() { - $items = []; - - foreach (config('item.junk') as $item_name => $count) { - $loop = min($this->config('item.count.' . $item_name, $count), 216); - for ($i = 0; $i < $loop; ++$i) { - $items[] = $item_name == 'BottleWithRandom' ? $this->getBottle() : Item::get($item_name); - } - } - - return $items; - } - - public function getDungeonPool() { - $items = []; - - foreach (config('item.dungeon') as $item_name => $count) { - $loop = min($this->config('item.count.' . $item_name, $count), 216); - for ($i = 0; $i < $loop; ++$i) { - $items[] = $item_name == 'BottleWithRandom' ? $this->getBottle() : Item::get($item_name); - } - } - - return $items; - } - - /** - * Get all the drops to insert into the PrizePackSlots Available, should be randomly shuffled - * - * @return array - */ - public function getDropsPool() { - $drops = []; - - foreach (config('item.drop') as $sprite_name => $count) { - $loop = min($this->config('drop.count.' . $sprite_name, $count), 63); - for ($i = 0; $i < $loop; ++$i) { - $drops[] = Sprite::get($sprite_name); - } - } - - return $drops; - } - - /** - * This is a quick hack to get prizes shuffled, will adjust later when we model sprites. - * this now also handles prize pull trees. - * - * @TODO: move remaining writes to Rom class - */ - public function writePrizePacksToRom(Rom $rom) { - $emptyDrops = $this->world->getEmptyDropSlots(); - $dropsPool = fy_shuffle($this->getDropsPool()); - - for($i = 0; $i < count($emptyDrops); $i++) { - $curDrop = $dropsPool[$i]; - $emptyDrops[$i]->setDrop($curDrop); - } - - $drop_bytes = array_map(function($prize) { - return $prize->getDrop()->getBytes()[0]; - }, $this->world->getAllDrops()); - - // hard+ does not allow fairies/full magics - if ($this->config('rom.HardMode', 0) >= 2) { - $drop_bytes = str_replace([0xE0, 0xE3], [0xDF, 0xD8], $drop_bytes); + if ($world->config('crystals.ganon') < 7) { + $ganon_string = $world->config('crystals.ganon') == 1 ? 'You need %d crystal to beat Ganon.' : 'You need %d crystals to beat Ganon.'; + $ganon_require = sprintf($ganon_string, $world->config('crystals.ganon')); + $world->setText('sign_ganon', $ganon_require); } - if ($this->config('rom.rupeeBow', false)) { - $drop_bytes = str_replace([0xE1, 0xE2], [0xDA, 0xDB], $drop_bytes); - $rom->setOverworldDigPrizes([ - 0xB2, 0xD8, 0xD8, 0xD8, - 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, - 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, - 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, - 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, - 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, - 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, - 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, - 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, - 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, - 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, - 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, - ]); - } - - // write to prize packs - $rom->write(0x37A78, pack('C*', ...array_slice($drop_bytes, 0, 56))); - - // write to trees - $rom->setPullTreePrizes($drop_bytes[56], $drop_bytes[57], $drop_bytes[58]); - - // write to prize crab - $rom->setRupeeCrabPrizes($drop_bytes[59], $drop_bytes[60]); - - // write to stunned - $rom->setStunnedSpritePrize($drop_bytes[61]); - - // write to saved fish - $rom->setFishSavePrize($drop_bytes[62]); - - // Sprite prize pack - $idat = array_values(unpack('C*', base64_decode( - "g5aEgICAgIACAAKAoIOXgICUkQcAgACAkpaAoAAAAIAEgIIGBgAAgICAgICAgICAgICAgICAgICAgIAAAICAkICRkZGXkZWVk5c" . - "UkZKBgoKAhYCAgAQEgJGAgICAgICAgACAgIKKgICAgJKRgIKBgYCBgICAgICAgICAgJeAgICAwoAVFRcGAIAAwBNAAAIGEBQAAE" . - "AAAAAAE0YRgIAAAAAQAAAAFhYWgYeCAICAAAAAAICAAAAAAAAAAAAAAAAAAAAAgAAAABcAEgAAAAAAEBcAQAEAAAAAAAAAAAAAA" . - "AAAAABAAAAAAAAAAACAAAAAAAAA" - ))); - $offset = 0x6B632; - $bytes = $rom->read($offset, 243); - foreach ($bytes as $i => $v) { - $bytes[$i] = ($v == 0) ? $idat[$i] : $v; - } - for ($i = 0; $i < 243; $i++) { - // skip sprites that were not in prize packs before - if (!isset($bytes[$i]) || ($bytes[$i] & 0xF) == 0) { - continue; - } - $rom->write($offset + $i, pack('C*', ($bytes[$i] >> 4 << 4) + get_random_int(1, 7))); - } + switch ($world->config('goal')) { + case 'pedestal': + $world->setText('ganon_fall_in_alt', "You cannot\nkill me. You\nshould go for\nyour real goal\nIt's on the\npedestal.\n\nYou dingus!\n"); + $world->setText('sign_ganon', "You need to get to the pedestal... Dingus!"); - // Pack drop chance - switch ($this->config('rom.HardMode', 0)) { - case 3: - case 2: - list($low, $high) = [2, 2]; // 25% break; - case -1: - list($low, $high) = [0, 0]; // 100% + case 'triforce-hunt': + $world->setText('ganon_fall_in_alt', "So you thought\nyou could come\nhere and beat\nme? I have\nhidden the\nTriforce\npieces well.\nWithout them,\nyou can't win!"); + $world->setText('sign_ganon', "Go find the Triforce pieces... Dingus!"); + $world->setText('murahdahla', sprintf("Hello @. I\nam Murahdahla, brother of\nSahasrahla and Aginah. Behold the power of\ninvisibility.\n\n\n\n… … …\n\nWait! you can see me? I knew I should have\nhidden in a hollow tree. If you bring\n%d triforce pieces, I can reassemble it.", $world->config('item.Goal.Required'))); + break; - case 1: + case 'dungeons': + $world->setText('sign_ganon', "You need to defeat all of Ganon's bosses."); + + // no-break default: - list($low, $high) = [1, 1]; // 50% - } - $offset = 0x37A62; - for ($i = 0; $i < 7; $i++) { - $rom->write($offset + $i, pack('C*', pow(2, get_random_int($low, $high)) - 1)); + $world->setText('ganon_fall_in_alt', "You think you\nare ready to\nface me?\n\nI will not die\n\nunless you\ncomplete your\ngoals. Dingus!"); } - } - /** - * This is a quick hack to get prizes shuffled, will adjust later when we model sprites. - * this now also handles prize pull trees. - * - * @TODO: create sprite classes - * @TODO: create prize pack classes - * @TODO: move remaining writes to Rom class - */ - public function writeOverworldBonkPrizeToRom(Rom $rom) { - // over world bonk things - $prizes = [ - 0x79, 0xE3, 0x79, 0xAC, 0xAC, 0xE0, 0xDC, 0xAC, - 0xE3, 0xE3, 0xDA, 0xE3, 0xDA, 0xD8, 0xAC, 0xAC, - 0xE3, 0xD8, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, - 0xDC, 0xDB, 0xE3, 0xDA, 0x79, 0x79, 0xE3, 0xE3, - 0xDA, 0x79, 0xAC, 0xAC, 0x79, 0xE3, 0x79, 0xAC, - 0xAC, 0xE0, 0xDC, 0xE3, 0x79, 0xDE, 0xE3, 0xAC, - 0xDB, 0x79, 0xE3, 0xD8, 0xAC, 0x79, 0xE3, 0xDB, - 0xDB, 0xE3, 0xE3, 0x79, 0xD8, 0xDD - ]; - $shuffled = fy_shuffle($prizes); + $world->setText('end_triforce', "{NOBORDER}\n" . array_first(fy_shuffle($strings['triforce']))); - $rom->setOverworldBonkPrizes($shuffled); + return $this; } /** - * Get a random bottle item + * shuffle the prize pack drops. * - * @param boolean $filled return only a filled bottle + * @param \ALttP\World $world world to shuffle prizes in * - * @return Item + * @return void */ - public function getBottle($filled = false) { - $bottles = [ - Item::get('Bottle'), - Item::get('BottleWithRedPotion'), - Item::get('BottleWithGreenPotion'), - Item::get('BottleWithBluePotion'), - Item::get('BottleWithBee'), - Item::get('BottleWithGoldBee'), - Item::get('BottleWithFairy'), - ]; + public function shufflePrizePacks(World $world): void + { + if (!$world->config('customPrizePacks', false)) { + $random_vanilla_packs = fy_shuffle([ + ['Heart', 'Heart', 'Heart', 'Heart', 'RupeeGreen', 'Heart', 'Heart', 'RupeeGreen'], + ['RupeeBlue', 'RupeeGreen', 'RupeeBlue', 'RupeeRed', 'RupeeBlue', 'RupeeGreen', 'RupeeBlue', 'RupeeBlue'], + ['MagicRefillFull', 'MagicRefillSmall', 'MagicRefillSmall', 'RupeeBlue', 'MagicRefillFull', 'MagicRefillSmall', 'Heart', 'MagicRefillSmall'], + ['BombRefill1', 'BombRefill1', 'BombRefill1', 'BombRefill4', 'BombRefill1', 'BombRefill1', 'BombRefill8', 'BombRefill1'], + ['ArrowRefill5', 'Heart', 'ArrowRefill5', 'ArrowRefill10', 'ArrowRefill5', 'Heart', 'ArrowRefill5', 'ArrowRefill10'], + ['MagicRefillSmall', 'RupeeGreen', 'Heart', 'ArrowRefill5', 'MagicRefillSmall', 'BombRefill1', 'RupeeGreen', 'Heart'], + ['Heart', 'Fairy', 'MagicRefillFull', 'RupeeRed', 'BombRefill8', 'Heart', 'RupeeRed', 'ArrowRefill10'], + ]); - return $bottles[get_random_int($filled ? 1 : 0, count($bottles) - (($this->config('rom.HardMode', 0) > 0) ? 2 : 1))]; - } + foreach ($world->getPrizePacks() as $key => $pack) { + if (!in_array($key, ['0', '1', '2', '3', '4', '5', '6'])) { + continue; + } - /** - * Get the World associated with the Randomizer - * - * @return World - */ - public function getWorld() { - return $this->world; + for ($i = 0; $i < 8; $i++) { + $world->setDrop($key, $i, Sprite::get($random_vanilla_packs[$key][$i])); + } + } + } } /** - * Set the World associated with the Randomizer. Of note the world can be different rules that the Randomizer. - * Use this "feature" with caution. - * - * @param World $world World to assocate to Randomizer + * Get all the worlds being randomized. * - * @return $this + * @return array */ - public function setWorld(World $world) : self { - $this->world = $world; - - $this->starting_equipment = $this->starting_equipment->merge($world->getPreCollectedItems()); - $this->world->setPreCollectedItems($this->starting_equipment); - - return $this; + public function getWorlds(): array + { + return $this->worlds; } } diff --git a/app/Region.php b/app/Region.php index ba6d34b01..40bb2b32f 100644 --- a/app/Region.php +++ b/app/Region.php @@ -1,343 +1,327 @@ -world = $world; - $this->shops = new ShopCollection; - - // hydrate region items. - foreach ($this->region_items as $key => $item) { - $this->region_items[$key] = Item::get($item); - } - } - - /** - * Get the World associated with this Region. - * - * @return World - */ - public function getWorld() { - return $this->world; - } - - /** - * Get the name of this Region. - * - * @return string - */ - public function getName() { - return $this->name; - } - - /** - * Get the Boss of this Region. - * - * @return Boss - */ - public function getBoss() { - return $this->boss; - } - - /** - * Set the Boss of this Region. - * - * @param Boss $boss boss of the region - * - * @return $this - */ - public function setBoss(Boss $boss) : self { - $this->boss = $boss; - - return $this; - } - - /** - * Check if a Boss can be placed in this region. - * currently Agahnim or Ganon can't be moved. - * - * @param Boss $boss boss we are testing - * - * @return bool - */ - public function canPlaceBoss(Boss $boss) : bool { - if ($this->name != "Ice Palace" && $this->world->config('mode.weapons') == 'swordless' - && $boss->getName() == 'Kholdstare') { - return false; - } - - return !in_array($boss->getName(), [ - "Agahnim", - "Agahnim2", - "Ganon", - ]); - } - - /** - * Get the map reveal word for this region - * - * @return int - */ - public function getMapReveal() : int { - return $this->map_reveal; - } - - /** - * Set the Prize Location for completeing this Region and set it's rules for access to completing the region. - * - * @param Location\Prize $location location to put item that will be the prize - * - * @return $this - */ - public function setPrizeLocation(Location\Prize $location) { - $this->prize_location = $location; - - $this->prize_location->setRegion($this); - if ($this->can_complete) { - $this->prize_location->setRequirements($this->can_complete); - } - - return $this; - } - - /** - * Get the Prize Location for completeing this Region. - * - * @return Location\Prize|null - */ - public function getPrizeLocation() { - return $this->prize_location; - } - - /** - * Get the Prize for completeing this Region. - * - * @return Item|null - */ - public function getPrize() { - if (!isset($this->prize_location) || !$this->prize_location->hasItem()) { - return null; - } - - return $this->prize_location->getItem(); - } - - /** - * Determine if a (particular) Prize Item is set for the Region - * - * @param Item|null $item Item to check against - * - * @return bool - */ - public function hasPrize(Item $item = null) { - if (!isset($this->prize_location) || !$this->prize_location->hasItem()) { - return false; - } - - return $this->prize_location->hasItem($item); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - return $this; - } - - /** - * Initalize the logic for the Region - * - * @param string $type the ruleset to apply to Locations - * - * @return $this - */ - public function init(string $type = 'NoGlitches') { - return call_user_func([$this, 'init' . $type]); - } - - /** - * Initalize No logic for the Region - * - * @return $this - */ - public function initNone() { - return $this; - } - - /** - * Initalize the No Glitches logic for the Region - * - * @return $this - */ - public function initNoGlitches() { - return $this; - } - - /** - * Initalize the MajorGlitches logic for the Region - * - * @return $this - */ - public function initMajorGlitches() { - return $this->initOverworldGlitches(); - } - - /** - * Initalize the Overworld Glitches logic for the Region - * - * @return $this - */ - public function initOverworldGlitches() { - return $this->initNoGlitches(); - } - - - /** - * Determine if the Region is completable given the locations and items available - * - * @param Support\LocationCollection $locations current list of Locations - * @param ItemsCollection $items current list of Items collected - * - * @return bool - */ - public function canComplete($locations, $items) { - if ($this->can_complete) { - return call_user_func($this->can_complete, $locations, $items); - } - return true; - } - - /** - * Determine if the Region can be entered given the locations and items available - * - * @param Support\LocationCollection $locations current list of Locations - * @param ItemsCollection $items current list of Items collected - * - * @return bool - */ - public function canEnter($locations, $items) { - if ($this->can_enter) { - return call_user_func($this->can_enter, $locations, $items); - } - return true; - } - - /** - * Determine if the item being placed in this region can be placed here. - * - * @param Item $item item to test - * - * @return bool - */ - public function canFill(Item $item) : bool { - if (((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) - || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) - || ($item == Item::get('KeyH2') && $this->world->config('mode.state') == 'standard') // Sewers Key cannot leave - || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) - || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)) - && !in_array($item, $this->region_items)) { - return false; - } - - return true; - } - - /** - * Determine if the item belongs to this region. - * - * @param Item $item item to test - * - * @return bool - */ - public function isRegionItem(Item $item) : bool { - return in_array($item, $this->region_items); - } - - /** - * Get all the Locations in this Region - * - * @return Support\LocationCollection - */ - public function getLocations() { - return $this->locations; - } - - /** - * Get Location in this Region by name - * - * @param string $name name of the Location - * - * @return Location - */ - public function getLocation(string $name) { - return $this->locations[$name]; - } - - /** - * Get all the Locations in this Region that do not have an Item assigned - * - * @return Support\LocationCollection - */ - public function getEmptyLocations() { - return $this->locations->filter(function($location) { - return !$location->hasItem(); - }); - } - - /** - * Get all the Locations in this Region that have (a particular) Item assigned to them - * - * @param Item $item item to search locations for - * - * @return Support\LocationCollection - */ - public function locationsWithItem(Item $item = null) { - return $this->locations->locationsWithItem($item); - } - - /** - * Get all the Shops in this Region - * - * @return Support\ShopCollection - */ - public function getShops() { - return $this->shops; - } - - /** - * Get Shop in this Region by name - * - * @param string $name name of the Shop - * - * @return Shop - */ - public function getShop(string $name) { - return $this->shops[$name]; - } +class Region +{ + protected $locations; + protected $shops; + protected $can_enter; + protected $can_complete; + protected $name = 'Unknown'; + protected $prize_location; + protected $world; + protected $region_items = []; + protected $boss = null; + + protected $map_reveal = 0x0000; + + /** + * Create a new Region. + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + $this->world = $world; + $this->shops = new ShopCollection; + + // hydrate region items. + foreach ($this->region_items as $key => $item) { + $this->region_items[$key] = Item::get($item, $world); + } + } + + /** + * Get the World associated with this Region. + * + * @return World + */ + public function getWorld() + { + return $this->world; + } + + /** + * Get the name of this Region. + * + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * Get the Boss of this Region. + * + * @param string $level which boss + * + * @return Boss + */ + public function getBoss(string $level) + { + return $this->boss; + } + + /** + * Set the Boss of this Region. + * + * @param Boss $boss boss of the region + * + * @return $this + */ + public function setBoss(Boss $boss, string $level = null): self + { + $this->boss = $boss; + + return $this; + } + + /** + * Check if a Boss can be placed in this region. + * currently Agahnim or Ganon can't be moved. + * + * @param Boss $boss boss we are testing + * + * @return bool + */ + public function canPlaceBoss(Boss $boss, string $level = 'top'): bool + { + if ( + $this->name != "Ice Palace" && $this->world->config('mode.weapons') == 'swordless' + && $boss->getName() == 'Kholdstare' + ) { + return false; + } + + return !in_array($boss->getName(), [ + "Agahnim", + "Agahnim2", + "Ganon", + ]); + } + + /** + * Get the map reveal word for this region + * + * @return int + */ + public function getMapReveal(): int + { + return $this->map_reveal; + } + + /** + * Set the Prize Location for completeing this Region and set it's rules for access to completing the region. + * + * @param Location\Prize $location location to put item that will be the prize + * + * @return $this + */ + public function setPrizeLocation(Location\Prize $location) + { + $this->prize_location = $location; + + $this->prize_location->setRegion($this); + if ($this->can_complete) { + $this->prize_location->setRequirements($this->can_complete); + } + + return $this; + } + + /** + * Get the Prize Location for completeing this Region. + * + * @return Location\Prize|null + */ + public function getPrizeLocation() + { + return $this->prize_location; + } + + /** + * Get the Prize for completeing this Region. + * + * @return Item|null + */ + public function getPrize() + { + if (!isset($this->prize_location) || !$this->prize_location->hasItem()) { + return null; + } + + return $this->prize_location->getItem(); + } + + /** + * Determine if a (particular) Prize Item is set for the Region + * + * @param Item|null $item Item to check against + * + * @return bool + */ + public function hasPrize(Item $item = null) + { + if (!isset($this->prize_location) || !$this->prize_location->hasItem()) { + return false; + } + + return $this->prize_location->hasItem($item); + } + + /** + * Initalize No logic for the Region + * + * @return $this + */ + public function initalize() + { + return $this; + } + + /** + * Determine if the Region is completable given the locations and items available + * + * @param \ALttP\Support\LocationCollection $locations current list of Locations + * @param \ALttP\Support\ItemCollection $items current list of Items collected + * + * @return bool + */ + public function canComplete($locations, $items) + { + if ($this->can_complete) { + return call_user_func($this->can_complete, $locations, $items); + } + return true; + } + + /** + * Determine if the Region can be entered given the locations and items available + * + * @param \ALttP\Support\LocationCollection $locations current list of Locations + * @param \ALttP\Support\ItemCollection $items current list of Items collected + * + * @return bool + */ + public function canEnter($locations, $items) + { + if ($this->can_enter) { + return call_user_func($this->can_enter, $locations, $items); + } + return true; + } + + /** + * Determine if the item being placed in this region can be placed here. + * + * @param Item $item item to test + * + * @return bool + */ + public function canFill(Item $item): bool + { + $from_world = $item->getWorld(); + if (((!$from_world->config('region.wildKeys', false) && $item instanceof Item\Key) + || (!$from_world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) + || ($item == Item::get('KeyH2', $from_world) && $from_world->config('mode.state') == 'standard') // Sewers Key cannot leave + || (!$from_world->config('region.wildMaps', false) && $item instanceof Item\Map) + || (!$from_world->config('region.wildCompasses', false) && $item instanceof Item\Compass)) + && !in_array($item, $this->region_items) + ) { + return false; + } + + return true; + } + + /** + * Determine if the item belongs to this region. + * + * @param Item $item item to test + * + * @return bool + */ + public function isRegionItem(Item $item): bool + { + return in_array($item, $this->region_items); + } + + /** + * Get all the Locations in this Region + * + * @return Support\LocationCollection + */ + public function getLocations() + { + return $this->locations; + } + + /** + * Get Location in this Region by name + * + * @param string $name name of the Location + * + * @return Location + */ + public function getLocation(string $name) + { + return $this->locations[$name]; + } + + /** + * Get all the Locations in this Region that do not have an Item assigned + * + * @return Support\LocationCollection + */ + public function getEmptyLocations() + { + return $this->locations->filter(function ($location) { + return !$location->hasItem(); + }); + } + + /** + * Get all the Locations in this Region that have (a particular) Item assigned to them + * + * @param Item $item item to search locations for + * + * @return Support\LocationCollection + */ + public function locationsWithItem(Item $item = null) + { + return $this->locations->locationsWithItem($item); + } + + /** + * Get all the Shops in this Region + * + * @return Support\ShopCollection + */ + public function getShops() + { + return $this->shops; + } + + /** + * Get Shop in this Region by name + * + * @param string $name name of the Shop + * + * @return Shop + */ + public function getShop(string $name) + { + return $this->shops[$name]; + } } diff --git a/app/Region/Inverted/DarkWorld/DeathMountain/East.php b/app/Region/Inverted/DarkWorld/DeathMountain/East.php index 6f35047b1..40065491e 100644 --- a/app/Region/Inverted/DarkWorld/DeathMountain/East.php +++ b/app/Region/Inverted/DarkWorld/DeathMountain/East.php @@ -1,4 +1,6 @@ -locations["Hookshot Cave - Top Right"]->setRequirements(function($locations, $items) { - return $items->has('Hookshot') - && ($items->canLiftRocks() - || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }); - - $this->locations["Hookshot Cave - Top Left"]->setRequirements(function($locations, $items) { - return $items->has('Hookshot') - && ($items->canLiftRocks() - || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }); - - $this->locations["Hookshot Cave - Bottom Left"]->setRequirements(function($locations, $items) { - return $items->has('Hookshot') - && ($items->canLiftRocks() - || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }); - - $this->locations["Hookshot Cave - Bottom Right"]->setRequirements(function($locations, $items) { - return ($items->has('Hookshot') || $items->has('PegasusBoots')) - && ($items->canLiftRocks() - || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }); - - $this->can_enter = function($locations, $items) { - return ($this->world->getRegion('West Dark World Death Mountain')->canEnter($locations, $items) - && (!$this->world->config('region.cantTakeDamage', false) || $items->has('CaneOfByrna') || $items->has('Cape'))) - || ($this->world->getRegion('East Death Mountain')->canEnter($locations, $items) && $items->has('MagicMirror')); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["Hookshot Cave - Top Right"]->setRequirements(function($locations, $items) { - return $items->has('Hookshot') - && ($items->canLiftRocks() - || $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }); - - $this->locations["Hookshot Cave - Top Left"]->setRequirements(function($locations, $items) { - return $items->has('Hookshot') - && ($items->canLiftRocks() - || $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }); - - $this->locations["Hookshot Cave - Bottom Left"]->setRequirements(function($locations, $items) { - return $items->has('Hookshot') - && ($items->canLiftRocks() - || $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }); - - $this->locations["Hookshot Cave - Bottom Right"]->setRequirements(function($locations, $items) { - return ($items->has('Hookshot') || $items->has('PegasusBoots')) - && ($items->canLiftRocks() - || $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }); - - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('West Dark World Death Mountain')->canEnter($locations, $items) - && (!$this->world->config('region.cantTakeDamage', false) || $items->has('CaneOfByrna') || $items->has('Cape') || $items->has('PegasusBoots')); - }; - } +class East extends Region\Standard\DarkWorld\DeathMountain\East +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Hookshot Cave - Top Right"]->setRequirements(function ($locations, $items) { + return $items->has('Hookshot') + && ($items->canLiftRocks() + || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); + }); + + $this->locations["Hookshot Cave - Top Left"]->setRequirements(function ($locations, $items) { + return $items->has('Hookshot') + && ($items->canLiftRocks() + || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); + }); + + $this->locations["Hookshot Cave - Bottom Left"]->setRequirements(function ($locations, $items) { + return $items->has('Hookshot') + && ($items->canLiftRocks() + || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); + }); + + $this->locations["Hookshot Cave - Bottom Right"]->setRequirements(function ($locations, $items) { + return ($items->has('Hookshot') || $items->has('PegasusBoots')) + && ($items->canLiftRocks() + || ($items->has('MagicMirror') && $items->canBombThings() && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); + }); + + $this->can_enter = function ($locations, $items) { + return ($this->world->getRegion('West Dark World Death Mountain')->canEnter($locations, $items) + && (!$this->world->config('region.cantTakeDamage', false) || $items->has('CaneOfByrna') || $items->has('Cape'))) + || ($items->has('MagicMirror') && ($items->has('MoonPearl') && $items->has('Hookshot') + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); + }; + + return $this; + } } diff --git a/app/Region/Inverted/DarkWorld/DeathMountain/West.php b/app/Region/Inverted/DarkWorld/DeathMountain/West.php index 87eae09ff..4865baede 100644 --- a/app/Region/Inverted/DarkWorld/DeathMountain/West.php +++ b/app/Region/Inverted/DarkWorld/DeathMountain/West.php @@ -1,4 +1,6 @@ -shops->removeItem("Dark Death Mountain Fairy"); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Spike Cave"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->canLiftRocks() - && (($items->canExtendMagic() && $items->has('Cape')) - || ((!$this->world->config('region.cantTakeDamage', false) || $items->canExtendMagic()) && $items->has('CaneOfByrna'))); - }); - - $this->can_enter = function($locations, $items) { - return $items->canFly() - || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->canFly() - || $items->has('PegasusBoots') - || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))); - }; - - return $this; - } +class West extends Region\Standard\DarkWorld\DeathMountain\West +{ + /** + * Create a new Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->shops->removeItem("Dark Death Mountain Fairy"); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Spike Cave"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->canLiftRocks() + && (($items->canExtendMagic() && $items->has('Cape')) + || ((!$this->world->config('region.cantTakeDamage', false) || $items->canExtendMagic()) && $items->has('CaneOfByrna'))); + }); + + $this->can_enter = function ($locations, $items) { + return $items->canFly($this->world) + || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))); + }; + + return $this; + } } diff --git a/app/Region/Inverted/DarkWorld/Mire.php b/app/Region/Inverted/DarkWorld/Mire.php index c5c70cfed..7325d807a 100644 --- a/app/Region/Inverted/DarkWorld/Mire.php +++ b/app/Region/Inverted/DarkWorld/Mire.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return $items->canFly() - || ($items->has('MagicMirror') && $this->world->getRegion('South Light World')->canEnter($locations, $items)); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->canFly() - || ($items->has('MagicMirror') && $this->world->getRegion('South Light World')->canEnter($locations, $items)) - || $items->has('PegasusBoots'); - }; +class Mire extends Region\Standard\DarkWorld\Mire +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->can_enter = function ($locations, $items) { + return $items->canFly($this->world) + || ($items->has('MagicMirror') && $this->world->getRegion('South Light World')->canEnter($locations, $items)); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Inverted/DarkWorld/NorthEast.php b/app/Region/Inverted/DarkWorld/NorthEast.php index 49221e8d3..580cd4ff7 100644 --- a/app/Region/Inverted/DarkWorld/NorthEast.php +++ b/app/Region/Inverted/DarkWorld/NorthEast.php @@ -1,4 +1,6 @@ -locations->removeItem("Ganon"); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Dark World Potion Shop"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks() || $items->has('Hammer') || $items->has('Flippers'); - }); - - $this->locations["Catfish"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks(); - }); - - $this->locations["Pyramid Fairy - Sword"]->setRequirements(function($locations, $items) { - return $items->hasSword() && $items->has('BigRedBomb') && $items->has('MagicMirror'); - }); - - $this->locations["Pyramid Fairy - Bow"]->setRequirements(function($locations, $items) { - return $items->canShootArrows() && $items->has('BigRedBomb') && $items->has('MagicMirror'); - }); - - - if ($this->world->config('region.swordsInPool', true)) { - $this->locations["Pyramid Fairy - Left"]->setRequirements(function($locations, $items) { - return $items->has('BigRedBomb') && $items->has('MagicMirror'); - }); - - $this->locations["Pyramid Fairy - Right"]->setRequirements(function($locations, $items) { - return $items->has('BigRedBomb') && $items->has('MagicMirror'); - }); - } - - $this->can_enter = function($locations, $items) { - return $items->has('Hammer') - || $items->has('Flippers') - || ($items->has('MagicMirror') && $this->world->getRegion('North East Light World')->canEnter($locations, $items)); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->shops["Dark World Potion Shop"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || $items->canLiftRocks() - || $items->has('Hammer') - || $items->has('Flippers') - || $items->canFly() - || ($items->has('MoonPearl') && $items->has('MagicMirror') && $this->world->getRegion('North East Light World')->canEnter($locations, $items)); - }); - - $this->locations["Catfish"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || $items->canLiftRocks() - || ($this->world->getRegion('North East Light World')->canEnter($locations, $items) && $items->has('MoonPearl') && $items->has('MagicMirror')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('Hammer') - || $items->has('Flippers') - || $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $this->world->getRegion('North East Light World')->canEnter($locations, $items)); - }; - - return $this; - } +class NorthEast extends Region\Standard\DarkWorld\NorthEast +{ + /** + * Create a new North East Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations->removeItem("Ganon"); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Dark World Potion Shop"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks() || $items->has('Hammer') || $items->has('Flippers'); + }); + + $this->locations["Catfish"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks(); + }); + + $this->locations["Pyramid Fairy - Sword"]->setRequirements(function ($locations, $items) { + return $items->hasSword() && $items->has('BigRedBomb') && $items->has('MagicMirror'); + }); + + $this->locations["Pyramid Fairy - Bow"]->setRequirements(function ($locations, $items) { + return $items->canShootArrows() && $items->has('BigRedBomb') && $items->has('MagicMirror'); + }); + + + if ($this->world->config('region.swordsInPool', true)) { + $this->locations["Pyramid Fairy - Left"]->setRequirements(function ($locations, $items) { + return $items->has('BigRedBomb') && $items->has('MagicMirror'); + }); + + $this->locations["Pyramid Fairy - Right"]->setRequirements(function ($locations, $items) { + return $items->has('BigRedBomb') && $items->has('MagicMirror'); + }); + } + + $this->can_enter = function ($locations, $items) { + return $items->has('Hammer') + || $items->has('Flippers') + || ($items->has('MagicMirror') && $this->world->getRegion('North East Light World')->canEnter($locations, $items)); + }; + + return $this; + } } diff --git a/app/Region/Inverted/DarkWorld/NorthWest.php b/app/Region/Inverted/DarkWorld/NorthWest.php index cd6f478c1..d7d6f97f3 100644 --- a/app/Region/Inverted/DarkWorld/NorthWest.php +++ b/app/Region/Inverted/DarkWorld/NorthWest.php @@ -1,4 +1,6 @@ -shops["Dark World Outcasts Shop"]->setRequirements(function($locations, $items) { - return $items->has('Hammer'); - }); - - $this->locations["Brewery"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - $this->locations["Hammer Pegs"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') - && ($items->canLiftDarkRocks() - || ($items->has('MagicMirror') && $this->world->getRegion('North West Light World')->canEnter($locations, $items))); - }); - - $this->locations["Bumper Cave"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks() && $items->has('Cape') - && $items->has('MoonPearl') && $items->has('MagicMirror') - && $this->world->getRegion('North West Light World')->canEnter($locations, $items); - }); - - $this->locations["Blacksmith"]->setRequirements(function($locations, $items) { - return ($items->canLiftDarkRocks() || $items->has('MagicMirror')) - && $this->world->getRegion('North West Light World')->canEnter($locations, $items); - }); - - $this->locations["Purple Chest"]->setRequirements(function($locations, $items) { - return ($items->canLiftDarkRocks() || $items->has('MagicMirror')) - && $this->world->getRegion('North West Light World')->canEnter($locations, $items) - && $this->world->getRegion('South Light World')->canEnter($locations, $items); - }); - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->shops["Dark World Outcasts Shop"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') - || ($items->has('MoonPearl') && $items->has('MagicMirror') && $this->world->getRegion('North West Light World')->canEnter($locations, $items)); - }); - - $this->locations["Hammer Pegs"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') - && ($items->canLiftDarkRocks() || $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $this->world->getRegion('North West Light World')->canEnter($locations, $items))); - }); - - $this->locations["Bumper Cave"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || ($items->canLiftRocks() && $items->has('Cape') && $items->has('MoonPearl') && $items->has('MagicMirror') - && $this->world->getRegion('North West Light World')->canEnter($locations, $items)); - }); - - $this->locations["Purple Chest"]->setRequirements(function($locations, $items) { - return ($items->canLiftDarkRocks() || $items->has('MagicMirror') || $items->has('Boots')) - && $this->world->getRegion('North West Light World')->canEnter($locations, $items) - && $this->world->getRegion('South Light World')->canEnter($locations, $items); - }); - - return $this; - } +class NorthWest extends Region\Standard\DarkWorld\NorthWest +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Dark World Outcasts Shop"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer'); + }); + + $this->locations["Brewery"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->locations["Hammer Pegs"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') + && ($items->canLiftDarkRocks() + || ($items->has('MagicMirror') && $this->world->getRegion('North West Light World')->canEnter($locations, $items))); + }); + + $this->locations["Bumper Cave"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks() && $items->has('Cape') + && $items->has('MoonPearl') && $items->has('MagicMirror') + && $this->world->getRegion('North West Light World')->canEnter($locations, $items); + }); + + $this->locations["Blacksmith"]->setRequirements(function ($locations, $items) { + return ($items->canLiftDarkRocks() || $items->has('MagicMirror')) + && $this->world->getRegion('North West Light World')->canEnter($locations, $items); + }); + + $this->locations["Purple Chest"]->setRequirements(function ($locations, $items) { + return ($items->canLiftDarkRocks() || $items->has('MagicMirror')) + && $this->world->getRegion('North West Light World')->canEnter($locations, $items) + && $this->world->getRegion('South Light World')->canEnter($locations, $items); + }); + + return $this; + } } diff --git a/app/Region/Inverted/DarkWorld/South.php b/app/Region/Inverted/DarkWorld/South.php index 1e6ec6a7d..8344d6f09 100644 --- a/app/Region/Inverted/DarkWorld/South.php +++ b/app/Region/Inverted/DarkWorld/South.php @@ -1,4 +1,6 @@ -shops["Dark World Lake Hylia Shop"]->clearInventory() - ->addInventory(0, Item::get('BluePotion'), 160) - ->addInventory(1, Item::get('BlueShield'), 50) - ->addInventory(2, Item::get('TenBombs'), 50); - - $this->locations->addItem(new Location\Chest("Link's House", 0xE9BC, null, $this)); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Bonk Fairy (Dark)"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots'); - }); - - $this->shops["Dark Lake Hylia Ledge Fairy"]->setRequirements(function($locations, $items) { - return ($items->has('Flippers') || $items->canFly()) && $items->canBombThings(); - }); - - $this->shops["Dark Lake Hylia Ledge Hint"]->setRequirements(function($locations, $items) { - return ($items->has('Flippers') || $items->canFly()) && $items->canLiftRocks(); - }); - - $this->shops["Dark Lake Hylia Ledge Spike Cave"]->setRequirements(function($locations, $items) { - return ($items->has('Flippers') || $items->canFly()) && $items->canLiftRocks(); - }); - - $this->locations["Hype Cave - Top"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - $this->locations["Hype Cave - Middle Right"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - $this->locations["Hype Cave - Middle Left"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - $this->locations["Hype Cave - Bottom"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - $this->locations["Hype Cave - NPC"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->shops["Dark Lake Hylia Ledge Fairy"]->setRequirements(function($locations, $items) { - return (($items->has('Flippers') - || $items->canFly() - || $items->has('PegasusBoots')) - || ($this->world->getRegion('South Light World')->canEnter($locations, $items) && $items->has('MagicMirror'))) - && $items->canBombThings(); - }); - - $this->shops["Dark Lake Hylia Ledge Hint"]->setRequirements(function($locations, $items) { - return (($items->has('Flippers') - || $items->canFly() - || $items->has('PegasusBoots')) - || ($this->world->getRegion('South Light World')->canEnter($locations, $items) && $items->has('MagicMirror'))) - && $items->canLiftRocks(); - }); - - $this->shops["Dark Lake Hylia Ledge Spike Cave"]->setRequirements(function($locations, $items) { - return (($items->has('Flippers') - || $items->canFly() - || $items->has('PegasusBoots')) - || ($this->world->getRegion('South Light World')->canEnter($locations, $items) && $items->has('MagicMirror'))) - && $items->canLiftRocks(); - }); - - return $this; - } +class South extends Region\Standard\DarkWorld\South +{ + /** + * Create a new South Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->shops["Dark World Lake Hylia Shop"]->clearInventory() + ->addInventory(0, Item::get('BluePotion', $world), 160) + ->addInventory(1, Item::get('BlueShield', $world), 50) + ->addInventory(2, Item::get('TenBombs', $world), 50); + + $this->locations->addItem(new Location\Chest("Link's House", [0xE9BC], null, $this)); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Bonk Fairy (Dark)"]->setRequirements(function ($locations, $items) { + return $items->has('PegasusBoots'); + }); + + $this->shops["Dark Lake Hylia Ledge Fairy"]->setRequirements(function ($locations, $items) { + return ($items->has('Flippers') || $items->canFly($this->world)) && $items->canBombThings(); + }); + + $this->shops["Dark Lake Hylia Ledge Hint"]->setRequirements(function ($locations, $items) { + return ($items->has('Flippers') || $items->canFly($this->world)) && $items->canLiftRocks(); + }); + + $this->shops["Dark Lake Hylia Ledge Spike Cave"]->setRequirements(function ($locations, $items) { + return ($items->has('Flippers') || $items->canFly($this->world)) && $items->canLiftRocks(); + }); + + $this->locations["Hype Cave - Top"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->locations["Hype Cave - Middle Right"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->locations["Hype Cave - Middle Left"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->locations["Hype Cave - Bottom"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->locations["Hype Cave - NPC"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + return $this; + } } diff --git a/app/Region/Inverted/DesertPalace.php b/app/Region/Inverted/DesertPalace.php index 538d0d79b..cc0e42bcf 100644 --- a/app/Region/Inverted/DesertPalace.php +++ b/app/Region/Inverted/DesertPalace.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return ($this->world->config('canDungeonRevive', false) || $items->has('MoonPearl')) - && ($items->has('BookOfMudora') - && $this->world->getRegion('South Light World')->canEnter($locations, $items)); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["Desert Palace - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) && $items->canLightTorches() - && $items->has('BigKeyP2') && $items->has('KeyP2') - && $this->boss->canBeat($items, $locations) - && (($items->has('BookOfMudora') && $items->canLiftRocks()) - || ($items->has('PegasusBoots'))) - && $items->has('MoonPearl'); - }); - - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('South Light World')->canEnter($locations, $items) - && ($items->has('BookOfMudora') - || ($items->has('MoonPearl') && $items->has('PegasusBoots'))); - }; - - return $this; - } +class DesertPalace extends Region\Standard\DesertPalace +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); + + // Bunny can use Book! + $this->can_enter = function ($locations, $items) { + return ($this->world->config('canDungeonRevive', false) || $items->has('MoonPearl')) + && ($items->has('BookOfMudora') + && $this->world->getRegion('South Light World')->canEnter($locations, $items)); + }; + + return $this; + } } diff --git a/app/Region/Inverted/EasternPalace.php b/app/Region/Inverted/EasternPalace.php index 5583ea323..11febbf40 100644 --- a/app/Region/Inverted/EasternPalace.php +++ b/app/Region/Inverted/EasternPalace.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return ($this->world->config('canDungeonRevive', false) || $items->has('MoonPearl')) - && $this->world->getRegion('North East Light World')->canEnter($locations, $items); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); +class EasternPalace extends Region\Standard\EasternPalace +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('North East Light World')->canEnter($locations, $items); - }; + $this->can_enter = function ($locations, $items) { + return ($this->world->config('canDungeonRevive', false) || $items->has('MoonPearl')) + && $this->world->getRegion('North East Light World')->canEnter($locations, $items); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Inverted/GanonsTower.php b/app/Region/Inverted/GanonsTower.php index dd5b312c4..251e15616 100644 --- a/app/Region/Inverted/GanonsTower.php +++ b/app/Region/Inverted/GanonsTower.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return ($this->world->config('canDungeonRevive', false) || $items->has('MoonPearl')) - && $items->has('Crystal1') - && $items->has('Crystal2') - && $items->has('Crystal3') - && $items->has('Crystal4') - && $items->has('Crystal5') - && $items->has('Crystal6') - && $items->has('Crystal7') - && $this->world->getRegion('North East Light World')->canEnter($locations, $items); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); +class GanonsTower extends Region\Standard\GanonsTower +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - $this->can_enter = function($locations, $items) { - return $items->has('Crystal1') - && $items->has('Crystal2') - && $items->has('Crystal3') - && $items->has('Crystal4') - && $items->has('Crystal5') - && $items->has('Crystal6') - && $items->has('Crystal7') - && $this->world->getRegion('North East Light World')->canEnter($locations, $items); - }; + $this->can_enter = function ($locations, $items) { + return ($this->world->config('canDungeonRevive', false) || $items->has('MoonPearl')) + && $items->has('Crystal1') + && $items->has('Crystal2') + && $items->has('Crystal3') + && $items->has('Crystal4') + && $items->has('Crystal5') + && $items->has('Crystal6') + && $items->has('Crystal7') + && $this->world->getRegion('North East Light World')->canEnter($locations, $items); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Inverted/HyruleCastleEscape.php b/app/Region/Inverted/HyruleCastleEscape.php index 79e616c0d..cefc49f15 100644 --- a/app/Region/Inverted/HyruleCastleEscape.php +++ b/app/Region/Inverted/HyruleCastleEscape.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return ($this->world->config('canDungeonRevive', false) || $items->has('MoonPearl')) - && $this->world->getRegion('North East Light World')->canEnter($locations, $items); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('North East Light World')->canEnter($locations, $items); - }; - - $this->locations["Sanctuary"]->setRequirements(function($locations, $items) { - return ($items->canKillMostThings() && $items->has('KeyH2') && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) - || $items->has('MagicMirror') - || $items->has('MoonPearl'); - }); - - $this->locations["Sewers - Secret Room - Left"]->setRequirements(function($locations, $items) { - return ($items->canLiftRocks() && $items->has('MoonPearl')) || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); - }); - - $this->locations["Sewers - Secret Room - Middle"]->setRequirements(function($locations, $items) { - return ($items->canLiftRocks() && $items->has('MoonPearl')) || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); - }); - - $this->locations["Sewers - Secret Room - Right"]->setRequirements(function($locations, $items) { - return ($items->canLiftRocks() && $items->has('MoonPearl')) || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); - }); - - $this->locations["Secret Passage"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings() && $items->has('MoonPearl'); - }); - - $this->locations["Link's Uncle"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - return $this; - } - +class HyruleCastleEscape extends Region\Open\HyruleCastleEscape +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); + + $this->can_enter = function ($locations, $items) { + return ($this->world->config('canDungeonRevive', false) || $items->has('MoonPearl')) + && $this->world->getRegion('North East Light World')->canEnter($locations, $items); + }; + + return $this; + } } diff --git a/app/Region/Inverted/HyruleCastleTower.php b/app/Region/Inverted/HyruleCastleTower.php index 8c72ad24d..6bd6aeeb1 100644 --- a/app/Region/Inverted/HyruleCastleTower.php +++ b/app/Region/Inverted/HyruleCastleTower.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return $items->canKillMostThings(8) - && $this->world->getRegion('West Dark World Death Mountain')->canEnter($locations, $items); - }; +class HyruleCastleTower extends Region\Standard\HyruleCastleTower +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - return $this; - } + $this->can_enter = function ($locations, $items) { + return $items->canKillMostThings(8) + && $this->world->getRegion('West Dark World Death Mountain')->canEnter($locations, $items); + }; - public function initOverworldGlitches() { - return $this->initNoGlitches(); - } + return $this; + } } diff --git a/app/Region/Inverted/IcePalace.php b/app/Region/Inverted/IcePalace.php index 2493b2bc3..2dab7d355 100644 --- a/app/Region/Inverted/IcePalace.php +++ b/app/Region/Inverted/IcePalace.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return $items->canMeltThings() - && (($items->has('Flippers') || ($this->world->config('canWaterFairyRevive', false) && $items->has('BugCatchingNet') && $items->hasBottle()) - && $this->world->getRegion('South Dark World')->canEnter($locations, $items)) - || ($this->world->config('canFakeFlipper', false) && $items->canFly()) - || ((($this->world->config('canFakeFlipper', false) && ($items->has('Hammer') || $items->canLiftRocks())) - || ($this->world->config('canBombJump', false) && $items->canBombThings())) - && $this->world->getRegion('North East Dark World')->canEnter($locations, $items)) - || ($this->world->config('canFakeFlipper', false) && $items->has('MagicMirror') && $items->has('MoonPearl') - && $this->world->getRegion('South Light World')->canEnter($locations, $items)) - || ($this->world->config('canWaterWalk', false) && $items->has('PegasusBoots') - && $this->world->getRegion('North West Dark World')->canEnter($locations, $items))); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); +class IcePalace extends Region\Standard\IcePalace +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - $this->can_enter = function($locations, $items) { - return $items->canMeltThings() - && ($items->has('Flippers') - || $items->has('PegasusBoots') - || ($this->world->getRegion('South Light World')->canEnter($locations, $items) && $items->has('MagicMirror')) - || ($items->canFly()) - || ($this->world->getRegion('North East Dark World')->canEnter($locations, $items) && $items->has('Hammer')) - || ($this->world->getRegion('North East Dark World')->canEnter($locations, $items) && $items->canLiftRocks())); - }; + $this->can_enter = function ($locations, $items) { + return $items->canMeltThings($this->world) + && (($items->has('Flippers') || ($this->world->config('canWaterFairyRevive', false) && $items->has('BugCatchingNet') && $items->hasBottle()) + && $this->world->getRegion('South Dark World')->canEnter($locations, $items)) + || ($this->world->config('canFakeFlipper', false) && $items->canFly($this->world)) + || ((($this->world->config('canFakeFlipper', false) && ($items->has('Hammer') || $items->canLiftRocks())) + || ($this->world->config('canBombJump', false) && $items->canBombThings())) + && $this->world->getRegion('North East Dark World')->canEnter($locations, $items)) + || ($this->world->config('canFakeFlipper', false) && $items->has('MagicMirror') && $items->has('MoonPearl') + && $this->world->getRegion('South Light World')->canEnter($locations, $items)) + || ($this->world->config('canWaterWalk', false) && $items->has('PegasusBoots') + && $this->world->getRegion('North West Dark World')->canEnter($locations, $items))); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Inverted/LightWorld/DeathMountain/East.php b/app/Region/Inverted/LightWorld/DeathMountain/East.php index c861cc219..06ea402df 100644 --- a/app/Region/Inverted/LightWorld/DeathMountain/East.php +++ b/app/Region/Inverted/LightWorld/DeathMountain/East.php @@ -1,4 +1,6 @@ -locations->addItem(new Location\Drop\Ether("Ether Tablet", 0x180016, null, $this)); - $this->locations->addItem(new Location\Standing("Spectacle Rock", 0x180140, null, $this)); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Light World Death Mountain Shop"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - // Allow Super Bunny? - $this->locations["Spiral Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Mimic Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hammer'); - }); - - $this->locations["Paradox Cave Lower - Far Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Paradox Cave Lower - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Paradox Cave Lower - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Paradox Cave Lower - Far Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Paradox Cave Lower - Middle"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Paradox Cave Upper - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Paradox Cave Upper - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Ether Tablet"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('BookOfMudora') && $items->has('Hammer') - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword(2)); - }); - - $this->locations["Spectacle Rock"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hammer'); - }); - - $this->can_enter = function($locations, $items) { - return ($items->canLiftDarkRocks() && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items)) - || ($items->has('MoonPearl') && $items->has('Hookshot') - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["Spiral Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || ($items->has('MagicMirror') && $items->hasSword(1)); - }); - - $this->locations["Ether Tablet"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('BookOfMudora') - && (($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer')) - || ($this->world->config('mode.weapons') != 'swordless' && $items->hasSword(2) && ($items->has('Hammer') || $items->has('PegasusBoots')))); - }); - - $this->locations["Spectacle Rock"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && ($items->has('Hammer') || $items->has('Boots')); - }); - - - $this->can_enter = function($locations, $items) { - return ($items->canLiftDarkRocks() && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items)) - || ($items->has('MoonPearl') && ($items->has('Hookshot') || $items->has('PegasusBoots')) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); - }; - - return $this; - } +class East extends Region\Standard\LightWorld\DeathMountain\East +{ + /** + * Create a new Death Mountain Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations->addItem(new Location\Drop\Ether("Ether Tablet", [0x180016], null, $this)); + $this->locations->addItem(new Location\Standing("Spectacle Rock", [0x180140], null, $this)); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Light World Death Mountain Shop"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + // Allow Super Bunny? + $this->locations["Spiral Cave"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Mimic Cave"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Hammer'); + }); + + $this->locations["Paradox Cave Lower - Far Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Paradox Cave Lower - Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Paradox Cave Lower - Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Paradox Cave Lower - Far Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Paradox Cave Lower - Middle"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Paradox Cave Upper - Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Paradox Cave Upper - Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Ether Tablet"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('BookOfMudora') && $items->has('Hammer') + && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword(2)); + }); + + $this->locations["Spectacle Rock"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Hammer'); + }); + + $this->can_enter = function ($locations, $items) { + return ($items->canLiftDarkRocks() && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items)) + || ($items->has('MoonPearl') && $items->has('Hookshot') + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); + }; + + return $this; + } } diff --git a/app/Region/Inverted/LightWorld/DeathMountain/West.php b/app/Region/Inverted/LightWorld/DeathMountain/West.php index 115b5c6ef..479169589 100644 --- a/app/Region/Inverted/LightWorld/DeathMountain/West.php +++ b/app/Region/Inverted/LightWorld/DeathMountain/West.php @@ -1,4 +1,6 @@ -locations->removeItem("Ether Tablet"); - $this->locations->removeItem("Spectacle Rock"); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Old Man"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)); - }); - - $this->can_enter = function($locations, $items) { - return $items->canFly() - || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('West Dark World Death Mountain')->canEnter($locations, $items); - }; - - return $this; - } +class West extends Region\Standard\LightWorld\DeathMountain\West +{ + /** + * Create a new Death Mountain Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations->removeItem("Ether Tablet"); + $this->locations->removeItem("Spectacle Rock"); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Old Man"]->setRequirements(function ($locations, $items) { + return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->canFly($this->world) + || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))); + }; + + return $this; + } } diff --git a/app/Region/Inverted/LightWorld/NorthEast.php b/app/Region/Inverted/LightWorld/NorthEast.php index f5d1dbd60..1957075d3 100644 --- a/app/Region/Inverted/LightWorld/NorthEast.php +++ b/app/Region/Inverted/LightWorld/NorthEast.php @@ -1,4 +1,6 @@ -locations->addItem(new Location\Prize\Event("Ganon", null, null, $this)); - - $this->prize_location = $this->locations["Ganon"]; - $this->prize_location->setItem(Item::get('DefeatGanon')); - } - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Sahasrahla's Hut - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Sahasrahla's Hut - Middle"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Sahasrahla's Hut - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Sahasrahla"]->setRequirements(function($locations, $items) { - return $items->has('PendantOfCourage'); - }); - - $this->locations["King Zora"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && ($items->canLiftRocks() || $items->has('Flippers')); - }); - - $this->locations["Potion Shop"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Mushroom'); - }); - - $this->locations["Zora's Ledge"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Flippers'); - }); - - $this->locations["Waterfall Fairy - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Flippers'); - }); - - $this->locations["Waterfall Fairy - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Flippers'); - }); - - $this->prize_location->setRequirements(function($locations, $items) { - if ($this->world->getGoal() == 'dungeons' - && (!$items->has('PendantOfCourage') - || !$items->has('PendantOfWisdom') - || !$items->has('PendantOfPower') - || !$items->has('DefeatAgahnim') - || !$items->has('Crystal1') - || !$items->has('Crystal2') - || !$items->has('Crystal3') - || !$items->has('Crystal4') - || !$items->has('Crystal5') - || !$items->has('Crystal6') - || !$items->has('Crystal7') - || !$items->has('DefeatAgahnim2'))) { - return false; - } - - if ($this->world->getGoal() == 'ganon' - && (!$items->has('Crystal1') - || !$items->has('Crystal2') - || !$items->has('Crystal3') - || !$items->has('Crystal4') - || !$items->has('Crystal5') - || !$items->has('Crystal6') - || !$items->has('Crystal7'))) { - return false; - } - - return $items->has('MoonPearl') - && $items->has('DefeatAgahnim2') - && (!$this->world->config('region.requireBetterBow', false) || $items->canShootArrows(2)) - && ( - ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer')) - || (!$this->world->config('region.requireBetterSword', false) && - ($items->hasSword(2) && ($items->has('Lamp') || ($items->has('FireRod') && $items->canExtendMagic(3))))) - || ($items->hasSword(3) && ($items->has('Lamp') || ($items->has('FireRod') && $items->canExtendMagic(2)))) - ); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('DefeatAgahnim') - || ($items->has('MoonPearl') - && (($items->has('Hammer') && $items->canLiftRocks()) - || $items->canLiftDarkRocks())); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["Sahasrahla's Hut - Left"]->setRequirements(function($locations, $items) { - return ($items->has('MoonPearl') && $items->canBombThings()) - || ($items->has('PegasusBoots') && ($items->has('MagicMirror') || !$this->world->config('region.cantTakeDamage', false))); - }); - - $this->locations["Sahasrahla's Hut - Middle"]->setRequirements(function($locations, $items) { - return ($items->has('MoonPearl') && $items->canBombThings()) - || ($items->has('PegasusBoots') && ($items->has('MagicMirror') || !$this->world->config('region.cantTakeDamage', false))); - }); - - $this->locations["Sahasrahla's Hut - Right"]->setRequirements(function($locations, $items) { - return ($items->has('MoonPearl') && $items->canBombThings()) - || ($items->has('PegasusBoots') && ($items->has('MagicMirror') || !$this->world->config('region.cantTakeDamage', false))); - }); - - $this->locations["Waterfall Fairy - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Waterfall Fairy - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Zora's Ledge"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && ($items->has('Flippers') || $items->has('PegasusBoots')); - }); - - $this->locations["King Zora"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('DefeatAgahnim') - || ($items->has('MoonPearl') - && (($items->has('Hammer') && $items->canLiftRocks()) - || $items->canLiftDarkRocks())) - || ($items->has('MoonPearl') && $items->has('PegasusBoots')) - || ($items->has('PegasusBoots') && $items->has('MagicMirror')); - }; - - return $this; - } - +class NorthEast extends Region\Standard\LightWorld\NorthEast +{ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations->addItem(new Location\Prize\Event("Ganon", [], null, $this)); + + $this->prize_location = $this->locations["Ganon"]; + $this->prize_location->setItem(Item::get('DefeatGanon', $world)); + } + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Sahasrahla's Hut - Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Sahasrahla's Hut - Middle"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Sahasrahla's Hut - Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Sahasrahla"]->setRequirements(function ($locations, $items) { + return $items->has('PendantOfCourage'); + }); + + $this->locations["King Zora"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && ($items->canLiftRocks() || $items->has('Flippers')); + }); + + $this->locations["Potion Shop"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Mushroom'); + }); + + $this->locations["Zora's Ledge"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Flippers'); + }); + + $this->locations["Waterfall Fairy - Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Flippers'); + }); + + $this->locations["Waterfall Fairy - Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Flippers'); + }); + + $this->prize_location->setRequirements(function ($locations, $items) { + if ( + $this->world->config('goal') == 'dungeons' + && (!$items->has('PendantOfCourage') + || !$items->has('PendantOfWisdom') + || !$items->has('PendantOfPower') + || !$items->has('DefeatAgahnim') + || !$items->has('Crystal1') + || !$items->has('Crystal2') + || !$items->has('Crystal3') + || !$items->has('Crystal4') + || !$items->has('Crystal5') + || !$items->has('Crystal6') + || !$items->has('Crystal7') + || !$items->has('DefeatAgahnim2')) + ) { + return false; + } + + if ( + in_array($this->world->config('goal'), ['ganon', 'fast_ganon']) + && (($items->has('Crystal1') + + $items->has('Crystal2') + + $items->has('Crystal3') + + $items->has('Crystal4') + + $items->has('Crystal5') + + $items->has('Crystal6') + + $items->has('Crystal7')) < $this->world->config('crystals.ganon', 7)) + ) { + return false; + } + + return $items->has('MoonPearl') + && ($items->has('DefeatAgahnim2') || $this->world->config('goal') === 'fast_ganon') + && (!$this->world->config('region.requireBetterBow', false) || $items->canShootArrows(2)) + && ( + ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer')) + || (!$this->world->config('region.requireBetterSword', false) && ($items->hasSword(2) && ($items->has('Lamp') || ($items->has('FireRod') && $items->canExtendMagic(3))))) + || ($items->hasSword(3) && ($items->has('Lamp') || ($items->has('FireRod') && $items->canExtendMagic(2))))); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('DefeatAgahnim') + || ($items->has('MoonPearl') + && (($items->has('Hammer') && $items->canLiftRocks()) + || $items->canLiftDarkRocks())); + }; + + return $this; + } } diff --git a/app/Region/Inverted/LightWorld/NorthWest.php b/app/Region/Inverted/LightWorld/NorthWest.php index 5280167e6..c0bf6ffa3 100644 --- a/app/Region/Inverted/LightWorld/NorthWest.php +++ b/app/Region/Inverted/LightWorld/NorthWest.php @@ -1,4 +1,6 @@ -shops["Bush Covered House"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->shops["Bomb Hut"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - // Bunny can pull pedestal - $this->locations["Master Sword Pedestal"]->setRequirements(function($locations, $items) { - return $items->has('PendantOfPower') - && $items->has('PendantOfWisdom') - && $items->has('PendantOfCourage'); - }); - - $this->locations["King's Tomb"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canLiftDarkRocks() && $items->has('PegasusBoots'); - }); - - $this->locations["Kakariko Tavern"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Chicken House"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Kakariko Well - Top"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Kakariko Well - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Kakariko Well - Middle"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Kakariko Well - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Kakariko Well - Bottom"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Blind's Hideout - Top"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Blind's Hideout - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Blind's Hideout - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Blind's Hideout - Far Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Blind's Hideout - Far Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Pegasus Rocks"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('PegasusBoots'); - }); - - $this->locations["Magic Bat"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hammer') && $items->has('Powder'); - }); - - $this->locations["Sick Kid"]->setRequirements(function($locations, $items) { - return $items->hasBottle(); - }); - - $this->locations["Lumberjack Tree"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('DefeatAgahnim') && $items->has('PegasusBoots'); - }); - - $this->locations["Graveyard Ledge"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Mushroom"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Lost Woods Hideout"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('North East Light World')->canEnter($locations, $items); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["King's Tomb"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && ($items->canLiftDarkRocks() || $items->has('MagicMirror')) && $items->has('PegasusBoots'); - }); - - $this->locations["Kakariko Tavern"]->setRequirements(function($locations, $items) { - return !$this->world->config('region.cantTakeDamage', false) || $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Kakariko Well - Left"]->setRequirements(function($locations, $items) { - return true; - }); - $this->locations["Kakariko Well - Middle"]->setRequirements(function($locations, $items) { - return true; - }); - $this->locations["Kakariko Well - Right"]->setRequirements(function($locations, $items) { - return true; - }); - $this->locations["Kakariko Well - Bottom"]->setRequirements(function($locations, $items) { - return true; - }); - - $this->locations["Blind's Hideout - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Blind's Hideout - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Blind's Hideout - Far Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Blind's Hideout - Far Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Magic Bat"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && ($items->has('Hammer') || $items->has('PegasusBoots')) && $items->has('Powder'); - }); - - return $this; - } +class NorthWest extends Region\Standard\LightWorld\NorthWest +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Bush Covered House"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->shops["Bomb Hut"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + // Bunny can pull pedestal + $this->locations["Master Sword Pedestal"]->setRequirements(function ($locations, $items) { + return $items->has('PendantOfPower') + && $items->has('PendantOfWisdom') + && $items->has('PendantOfCourage'); + }); + + $this->locations["King's Tomb"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canLiftDarkRocks() && $items->has('PegasusBoots'); + }); + + $this->locations["Kakariko Tavern"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Chicken House"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Kakariko Well - Top"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Kakariko Well - Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Kakariko Well - Middle"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Kakariko Well - Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Kakariko Well - Bottom"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Blind's Hideout - Top"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Blind's Hideout - Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Blind's Hideout - Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Blind's Hideout - Far Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Blind's Hideout - Far Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Pegasus Rocks"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('PegasusBoots'); + }); + + $this->locations["Magic Bat"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Hammer') && $items->has('Powder'); + }); + + $this->locations["Sick Kid"]->setRequirements(function ($locations, $items) { + return $items->hasBottle(); + }); + + $this->locations["Lumberjack Tree"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('DefeatAgahnim') && $items->has('PegasusBoots'); + }); + + $this->locations["Graveyard Ledge"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Mushroom"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Lost Woods Hideout"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->can_enter = function ($locations, $items) { + return $this->world->getRegion('North East Light World')->canEnter($locations, $items); + }; + + return $this; + } } diff --git a/app/Region/Inverted/LightWorld/South.php b/app/Region/Inverted/LightWorld/South.php index 4a8b5463b..813c60bec 100644 --- a/app/Region/Inverted/LightWorld/South.php +++ b/app/Region/Inverted/LightWorld/South.php @@ -1,4 +1,6 @@ -locations->removeItem("Link's House"); - $this->locations->addItem(new Location\Prize\Event("Bomb Merchant", null, null, $this)); - - $this->locations["Bomb Merchant"]->setItem(Item::get('BigRedBomb')); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["20 Rupee Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canLiftRocks(); - }); - - $this->shops["50 Rupee Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canLiftRocks(); - }); - - $this->shops["Bonk Fairy (Light)"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('PegasusBoots'); - }); - - $this->shops["Light Hype Fairy"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->shops["Capacity Upgrade"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Flippers'); - }); - - $this->locations["Floodgate Chest"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Bomb Merchant"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Crystal5') - && $items->has('Crystal6'); - }); - - $this->locations["Aginah's Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Mini Moldorm Cave - Far Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Mini Moldorm Cave - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Mini Moldorm Cave - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Mini Moldorm Cave - Far Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Ice Rod Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Hobo"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Flippers'); - }); - - $this->locations["Bombos Tablet"]->setRequirements(function($locations, $items) { - return $items->has('BookOfMudora') && ($items->hasSword(2) - || ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer'))); - }); - - $this->locations["Cave 45"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Checkerboard Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canLiftRocks(); - }); - - $this->locations["Mini Moldorm Cave - NPC"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canBombThings(); - }); - - $this->locations["Library"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('PegasusBoots'); - }); - - $this->locations["Maze Race"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && ($items->has('PegasusBoots') || $items->canBombThings()); - }); - - $this->locations["Desert Ledge"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $this->world->getRegion('Desert Palace')->canEnter($locations, $items); - }); - - $this->locations["Lake Hylia Island"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Flippers'); - }); - - $this->locations["Sunken Treasure"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Flute Spot"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Shovel'); - }); - - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('North East Light World')->canEnter($locations, $items); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->shops["Capacity Upgrade"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Bomb Merchant"]->setRequirements(function($locations, $items) { - return $items->has('Crystal5') && $items->has('Crystal6'); - }); - - $this->locations["Ice Rod Cave"]->setRequirements(function($locations, $items) { - return ($items->has('MoonPearl') && $items->canBombThings()) || ($items->has('MagicMirror') && $items->has('BigRedBomb')); - }); - - $this->locations["Cave 45"]->setRequirements(function($locations, $items) { - return !$this->world->config('region.cantTakeDamage', false) || $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Library"]->setRequirements(function($locations, $items) { - return ($items->has('MoonPearl') || $items->has('MagicMirror')) && $items->has('PegasusBoots'); - }); - - $this->locations["Hobo"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Lake Hylia Island"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Floodgate Chest"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Sunken Treasure"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Desert Ledge"]->setRequirements(function($locations, $items) { - return ($items->has('MoonPearl') && $items->has('PegasusBoots')) || $this->world->getRegion('Desert Palace')->canEnter($locations, $items); - }); +class South extends Region\Standard\LightWorld\South +{ + /** + * Create a new Light World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations->removeItem("Link's House"); + $this->locations->addItem(new Location\Prize\Event("Bomb Merchant", [], null, $this)); + + $this->locations["Bomb Merchant"]->setItem(Item::get('BigRedBomb', $world)); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["20 Rupee Cave"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canLiftRocks(); + }); + + $this->shops["50 Rupee Cave"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canLiftRocks(); + }); + + $this->shops["Bonk Fairy (Light)"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('PegasusBoots'); + }); + + $this->shops["Light Hype Fairy"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->shops["Capacity Upgrade"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Flippers'); + }); + + $this->locations["Floodgate Chest"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Bomb Merchant"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Crystal5') + && $items->has('Crystal6'); + }); + + $this->locations["Aginah's Cave"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Mini Moldorm Cave - Far Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Mini Moldorm Cave - Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Mini Moldorm Cave - Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Mini Moldorm Cave - Far Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Ice Rod Cave"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Hobo"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Flippers'); + }); + + $this->locations["Bombos Tablet"]->setRequirements(function ($locations, $items) { + return $items->has('BookOfMudora') && ($items->hasSword(2) + || ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer'))); + }); + + $this->locations["Cave 45"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Checkerboard Cave"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canLiftRocks(); + }); + + $this->locations["Mini Moldorm Cave - NPC"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->canBombThings(); + }); + + $this->locations["Library"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('PegasusBoots'); + }); + + $this->locations["Maze Race"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && ($items->has('PegasusBoots') || $items->canBombThings()); + }); + + $this->locations["Desert Ledge"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $this->world->getRegion('Desert Palace')->canEnter($locations, $items); + }); + + $this->locations["Lake Hylia Island"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Flippers'); + }); + + $this->locations["Sunken Treasure"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Flute Spot"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Shovel'); + }); + + $this->can_enter = function ($locations, $items) { + return $this->world->getRegion('North East Light World')->canEnter($locations, $items); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Inverted/MiseryMire.php b/app/Region/Inverted/MiseryMire.php index 544eb936a..190b43223 100644 --- a/app/Region/Inverted/MiseryMire.php +++ b/app/Region/Inverted/MiseryMire.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return ((($locations["Misery Mire Medallion"]->hasItem(Item::get('Bombos')) && $items->has('Bombos')) - || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Ether')) && $items->has('Ether')) - || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Quake')) && $items->has('Quake'))) - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) - && ($items->has('PegasusBoots') || $items->has('Hookshot')) - && $items->canKillMostThings(8) - && $this->world->getRegion('Mire')->canEnter($locations, $items); - }; +class MiseryMire extends Region\Standard\MiseryMire +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - return $this; - } + $this->can_enter = function ($locations, $items) { + return ((($locations["Misery Mire Medallion"]->hasItem(Item::get('Bombos', $this->world)) && $items->has('Bombos')) + || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Ether', $this->world)) && $items->has('Ether')) + || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Quake', $this->world)) && $items->has('Quake'))) + && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) + && ($items->has('PegasusBoots') || $items->has('Hookshot')) + && $items->canKillMostThings(8) + && $this->world->getRegion('Mire')->canEnter($locations, $items); + }; - public function initOverworldGlitches() { - return $this->initNoGlitches(); - } + return $this; + } } diff --git a/app/Region/Inverted/PalaceOfDarkness.php b/app/Region/Inverted/PalaceOfDarkness.php index a8f2a766a..dd216d0c2 100644 --- a/app/Region/Inverted/PalaceOfDarkness.php +++ b/app/Region/Inverted/PalaceOfDarkness.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return $this->world->getRegion('North East Dark World')->canEnter($locations, $items); - }; - - return $this; - } +class PalaceOfDarkness extends Region\Standard\PalaceOfDarkness +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - public function initOverworldGlitches() { - return $this->initNoGlitches(); - } + $this->can_enter = function ($locations, $items) { + return $this->world->getRegion('North East Dark World')->canEnter($locations, $items); + }; + return $this; + } } diff --git a/app/Region/Inverted/SkullWoods.php b/app/Region/Inverted/SkullWoods.php index 27fa09e80..f93b59ef9 100644 --- a/app/Region/Inverted/SkullWoods.php +++ b/app/Region/Inverted/SkullWoods.php @@ -1,4 +1,6 @@ -locations["Skull Woods - Bridge Room"]->setRequirements(function($locations, $items) { - return $items->has('FireRod'); - }); +class SkullWoods extends Region\Standard\SkullWoods +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - $this->locations["Skull Woods - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->has('FireRod') - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword()) - && $items->has('KeyD3', 3) - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD3') || $this->locations["Skull Woods - Boss"]->hasItem(Item::get('CompassD3'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD3') || $this->locations["Skull Woods - Boss"]->hasItem(Item::get('MapD3'))); - }); + // @TODO: figure out a better way of the moon pearl requirement in Standard Region file. + $this->locations["Skull Woods - Bridge Room"]->setRequirements(function ($locations, $items) { + return $items->has('FireRod'); + }); - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('North West Dark World')->canEnter($locations, $items); - }; + $this->locations["Skull Woods - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && $items->has('FireRod') + && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword()) + && $items->has('KeyD3', 3) + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD3') || $this->locations["Skull Woods - Boss"]->hasItem(Item::get('CompassD3', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD3') || $this->locations["Skull Woods - Boss"]->hasItem(Item::get('MapD3', $this->world))); + }); - return $this; - } + $this->can_enter = function ($locations, $items) { + return $this->world->getRegion('North West Dark World')->canEnter($locations, $items); + }; - public function initOverworldGlitches() { - return $this->initNoGlitches(); - } + return $this; + } } diff --git a/app/Region/Inverted/SwampPalace.php b/app/Region/Inverted/SwampPalace.php index 541653777..fb3dad868 100644 --- a/app/Region/Inverted/SwampPalace.php +++ b/app/Region/Inverted/SwampPalace.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return $items->has('MoonPearl') && $items->has('MagicMirror') && $items->has('Flippers') - && $this->world->getRegion('South Light World')->canEnter($locations, $items); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); +class SwampPalace extends Region\Standard\SwampPalace +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - $this->can_enter = function($locations, $items) { - return $items->has('MagicMirror') && $items->has('Flippers') - && $this->world->getRegion('South Light World')->canEnter($locations, $items); - }; + $this->can_enter = function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('MagicMirror') && $items->has('Flippers') + && $this->world->getRegion('South Light World')->canEnter($locations, $items); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Inverted/ThievesTown.php b/app/Region/Inverted/ThievesTown.php index 5ea7d07f9..6a567599a 100644 --- a/app/Region/Inverted/ThievesTown.php +++ b/app/Region/Inverted/ThievesTown.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return $this->world->getRegion('North West Dark World')->canEnter($locations, $items); - }; +class ThievesTown extends Region\Standard\ThievesTown +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - return $this; - } + $this->can_enter = function ($locations, $items) { + return $this->world->getRegion('North West Dark World')->canEnter($locations, $items); + }; - public function initOverworldGlitches() { - return $this->initNoGlitches(); - } + return $this; + } } diff --git a/app/Region/Inverted/TowerOfHera.php b/app/Region/Inverted/TowerOfHera.php index e073d9619..95fc88116 100644 --- a/app/Region/Inverted/TowerOfHera.php +++ b/app/Region/Inverted/TowerOfHera.php @@ -1,4 +1,6 @@ -can_enter = function($locations, $items) { - return $items->has('MoonPearl') - && $items->has('Hammer') - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); - }; - - return $this; - } - - public function initOverworldGlitches() { - $this->initNoGlitches(); +class TowerOfHera extends Region\Standard\TowerOfHera +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + parent::initalize(); - $this->can_enter = function($locations, $items) { - return $items->has('MoonPearl') - && (($items->has('Hammer') && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items)) - || ($items->has('PegasusBoots') && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); - }; + $this->can_enter = function ($locations, $items) { + return $items->has('MoonPearl') + && $items->has('Hammer') + && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Inverted/TurtleRock.php b/app/Region/Inverted/TurtleRock.php index 154102ca8..45170dbc1 100644 --- a/app/Region/Inverted/TurtleRock.php +++ b/app/Region/Inverted/TurtleRock.php @@ -1,4 +1,6 @@ -hasItem(Item::get('Bombos')) && $items->has('Bombos')) - || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Ether')) && $items->has('Ether')) - || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Quake')) && $items->has('Quake'))) - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) - && $items->has('CaneOfSomaria') - && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items); - } - - protected function enterMiddleNoGlitches($locations, $items) { - return $items->has('MagicMirror') - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); - } - - protected function enterBottomNoGlitches($locations, $items) { - return $items->has('MagicMirror') - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); - } - - protected function enterTopOverworldGlitches($locations, $items) { - return $this->enterTopNoGlitches($locations, $items); - } - - protected function enterMiddleOverworldGlitches($locations, $items) { - return $this->enterMiddleNoGlitches($locations, $items) - || ($this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items) - && $items->has('PegasusBoots') - && ($items->has('Hookshot') || $items->hasSword(1))); - } - - protected function enterBottomOverworldGlitches($locations, $items) { - return $this->enterBottomNoGlitches($locations, $items); - } - - protected function enterTopMajorGlitches($locations, $items) { - return $this->enterTopOverworldGlitches($locations, $items); - } - - protected function enterMiddleMajorGlitches($locations, $items) { - return $this->enterMiddleOverworldGlitches($locations, $items); - } - - protected function enterBottomMajorGlitches($locations, $items) { - return $this->enterBottomOverworldGlitches($locations, $items); - } - - protected function enterTopNone($locations, $items) { - return true; - } - - protected function enterMiddleNone($locations, $items) { - return true; - } - - protected function enterBottomNone($locations, $items) { - return true; - } - - protected function enterTop($locations, $items) { - return call_user_func([$this, 'enterTop' . $this->world->getLogic()], $locations, $items); - } - - protected function enterMiddle($locations, $items) { - return call_user_func([$this, 'enterMiddle' . $this->world->getLogic()], $locations, $items); - } - - protected function enterBottom($locations, $items) { - return call_user_func([$this, 'enterBottom' . $this->world->getLogic()], $locations, $items); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Turtle Rock - Chain Chomps"]->setRequirements(function($locations, $items) { - return ($this->enterTop($locations, $items) && $items->has('KeyD7')) - || $this->enterMiddle($locations, $items) - || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria')); - }); - - $this->locations["Turtle Rock - Roller Room - Left"]->setRequirements(function($locations, $items) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && ($this->enterTop($locations, $items) - || ($this->enterMiddle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Right", - "Turtle Rock - Compass Chest", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4))) - || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); - }); - - $this->locations["Turtle Rock - Roller Room - Right"]->setRequirements(function($locations, $items) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && ($this->enterTop($locations, $items) - || ($this->enterMiddle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Left", - "Turtle Rock - Compass Chest", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4))) - || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); - }); - - $this->locations["Turtle Rock - Compass Chest"]->setRequirements(function($locations, $items) { - return $items->has('CaneOfSomaria') - && ($this->enterTop($locations, $items) - || ($this->enterMiddle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Left", - "Turtle Rock - Roller Room - Right", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4))) - || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); - }); - - $this->locations["Turtle Rock - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyD7') - && (($this->enterTop($locations, $items) && $items->has('KeyD7', 2)) - || ($this->enterMiddle($locations, $items) && ($items->has('Hookshot') || $items->has('CaneOfSomaria'))) - || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria'))); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyD7'); - }); - - $this->locations["Turtle Rock - Big Key Chest"]->setRequirements(function($locations, $items) { - return (($this->enterTop($locations, $items) || $this->enterMiddle($locations, $items)) && $items->has('KeyD7', 2)) - || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('KeyD7', 4)); - }); - - $this->locations["Turtle Rock - Crystaroller Room"]->setRequirements(function($locations, $items) { - return ($items->has('BigKeyD7') && (($this->enterTop($locations, $items) && $items->has('KeyD7', 2)) - || $this->enterMiddle($locations, $items)) - || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria'))); - }); - - $this->locations["Turtle Rock - Eye Bridge - Bottom Left"]->setRequirements(function($locations, $items) { - return ($this->enterBottom($locations, $items) - || (($this->enterTop($locations, $items) || $this->enterMiddle($locations, $items)) && - $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) - && ($items->has('Cape') || $items->has('CaneOfByrna') || $items->canBlockLasers()); - }); - - $this->locations["Turtle Rock - Eye Bridge - Bottom Right"]->setRequirements(function($locations, $items) { - return ($this->enterBottom($locations, $items) - || (($this->enterTop($locations, $items) || $this->enterMiddle($locations, $items)) && - $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) - && ($items->has('Cape') || $items->has('CaneOfByrna') || $items->canBlockLasers()); - }); - - $this->locations["Turtle Rock - Eye Bridge - Top Left"]->setRequirements(function($locations, $items) { - return ($this->enterBottom($locations, $items) - || (($this->enterTop($locations, $items) || $this->enterMiddle($locations, $items)) && - $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) - && ($items->has('Cape') || $items->has('CaneOfByrna') || $items->canBlockLasers()); - }); - - $this->locations["Turtle Rock - Eye Bridge - Top Right"]->setRequirements(function($locations, $items) { - return ($this->enterBottom($locations, $items) - || (($this->enterTop($locations, $items) || $this->enterMiddle($locations, $items)) && - $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) - && ($items->has('Cape') || $items->has('CaneOfByrna') || $items->canBlockLasers()); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Turtle Rock - Boss"]->canAccess($items); - }; - - $this->locations["Turtle Rock - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->has('KeyD7', 4) - && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) - && $items->has('BigKeyD7') && $items->has('CaneOfSomaria') - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD7') || $this->locations["Turtle Rock - Boss"]->hasItem(Item::get('CompassD7'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD7') || $this->locations["Turtle Rock - Boss"]->hasItem(Item::get('MapD7'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassD7') || $item == Item::get('MapD7')); - }); - - $this->can_enter = function($locations, $items) { - return $this->enterTop($locations, $items) - || $this->enterMiddle($locations, $items) - || $this->enterBottom($locations, $items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - public function initOverworldGlitches() { - return $this->initNoGlitches(); - } +class TurtleRock extends Region\Standard\TurtleRock +{ + protected function enterTopNoGlitches($locations, $items) + { + return ((($locations["Turtle Rock Medallion"]->hasItem(Item::get('Bombos', $this->world)) && $items->has('Bombos')) + || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Ether', $this->world)) && $items->has('Ether')) + || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Quake', $this->world)) && $items->has('Quake'))) + && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) + && $items->has('CaneOfSomaria') + && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items); + } + + protected function enterMiddleNoGlitches($locations, $items) + { + return $items->has('MagicMirror') + && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); + } + + protected function enterBottomNoGlitches($locations, $items) + { + return $items->has('MagicMirror') + && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); + } + + protected function canReachTop($locations, $items) + { + return $items->has('CaneOfSomaria') && ($this->enterTop($locations, $items) + || ($this->enterMiddle($locations, $items) && $items->has('KeyD7', 4)) // IF both top and bottom external access is provably impossible, and big key is in front, we can reduce this to 2 keys. + || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) + && $items->has('KeyD7', 4))); + } + + protected function canReachMiddle($locations, $items) + { + return $this->enterMiddle($locations, $items) + || ($this->enterTop($locations, $items) && $items->has('KeyD7', $this->accountForWastingKeyOnTrinexDoor(2, 3))) + || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) + && $items->has('CaneOfSomaria')); + } + + protected function canReachBottom($locations, $items) + { + return $this->enterBottom($locations, $items) || (($this->enterTop($locations, $items) || $this->enterMiddle($locations, $items)) && + $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') + && $items->has('BigKeyD7') && $items->has('KeyD7', 3)); + } + + // If it can be conclusively proven that bottom is not externally reachable + protected function accountForWastingKeyOnTrinexDoor($withoutWaste, $withWaste) + { + if ($this->world->config('turtlerock.wastekey', false)) { + return $withoutWaste; + } + return $withWaste; + } + + protected function enterTopOverworldGlitches($locations, $items) + { + return $this->enterTopNoGlitches($locations, $items); + } + + protected function enterMiddleOverworldGlitches($locations, $items) + { + return $this->enterMiddleNoGlitches($locations, $items) + || ($this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items) + && $items->has('PegasusBoots') + && ($items->has('Hookshot') || $items->hasSword(1))); + } + + protected function enterBottomOverworldGlitches($locations, $items) + { + return $this->enterBottomNoGlitches($locations, $items); + } + + protected function enterTopMajorGlitches($locations, $items) + { + return $this->enterTopOverworldGlitches($locations, $items); + } + + protected function enterMiddleMajorGlitches($locations, $items) + { + return $this->enterMiddleOverworldGlitches($locations, $items); + } + + protected function enterBottomMajorGlitches($locations, $items) + { + return $this->enterBottomOverworldGlitches($locations, $items); + } + + protected function enterTopNone($locations, $items) + { + return true; + } + + protected function enterMiddleNone($locations, $items) + { + return true; + } + + protected function enterBottomNone($locations, $items) + { + return true; + } + + protected function enterTop($locations, $items) + { + $function = 'enterTop' . $this->world->config('logic'); + + return $this->$function($locations, $items); + } + + protected function enterMiddle($locations, $items) + { + $function = 'enterMiddle' . $this->world->config('logic'); + + return $this->$function($locations, $items); + } + + protected function enterBottom($locations, $items) + { + $function = 'enterBottom' . $this->world->config('logic'); + + return $this->$function($locations, $items); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Turtle Rock - Chain Chomps"]->setRequirements(function ($locations, $items) { + return ($this->enterTop($locations, $items) && $items->has('CaneOfSomaria') + && $items->has('KeyD7', $this->accountForWastingKeyOnTrinexDoor(1, 2))) + || $this->enterMiddle($locations, $items); + }); + + $this->locations["Turtle Rock - Roller Room - Left"]->setRequirements(function ($locations, $items) { + return $items->has('FireRod') && $this->canReachTop($locations, $items); + }); + + $this->locations["Turtle Rock - Roller Room - Right"]->setRequirements(function ($locations, $items) { + return $items->has('FireRod') && $this->canReachTop($locations, $items); + }); + + $this->locations["Turtle Rock - Compass Chest"]->setRequirements(function ($locations, $items) { + return $this->canReachTop($locations, $items); + }); + + $this->locations["Turtle Rock - Big Chest"]->setRequirements(function ($locations, $items) { + return $items->has('BigKeyD7') && $this->canReachMiddle($locations, $items) + && ($items->has('Hookshot') || $items->has('CaneOfSomaria')); + })->setFillRules(function ($item, $locations, $items) { + return $item != Item::get('BigKeyD7', $this->world); + }); + + $this->locations["Turtle Rock - Big Key Chest"]->setRequirements(function ($locations, $items) { + // TODO: It only needs 2 keys if it has the big key and there is no possible external bottom access. + return $this->canReachMiddle($locations, $items) && ($items->has('KeyD7', 4) + || $this->locations["Turtle Rock - Big Key Chest"]->hasItem(Item::get('KeyD7', $this->world))); + })->setAlwaysAllow(function ($item, $items) { + return $item == Item::get('KeyD7', $this->world); + }); + + $this->locations["Turtle Rock - Crystaroller Room"]->setRequirements(function ($locations, $items) { + return ($items->has('BigKeyD7') && $this->canReachMiddle($locations, $items)) + || ($this->enterBottom($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria')); + }); + + $this->locations["Turtle Rock - Eye Bridge - Bottom Left"]->setRequirements(function ($locations, $items) { + return $this->canReachBottom($locations, $items) + && ($this->world->config('itemPlacement') !== 'basic' || $items->has('Cape') || $items->has('CaneOfByrna') + || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); + }); + + $this->locations["Turtle Rock - Eye Bridge - Bottom Right"]->setRequirements(function ($locations, $items) { + return $this->canReachBottom($locations, $items) + && ($this->world->config('itemPlacement') !== 'basic' || $items->has('Cape') || $items->has('CaneOfByrna') + || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); + }); + + $this->locations["Turtle Rock - Eye Bridge - Top Left"]->setRequirements(function ($locations, $items) { + return $this->canReachBottom($locations, $items) + && ($this->world->config('itemPlacement') !== 'basic' || $items->has('Cape') || $items->has('CaneOfByrna') + || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); + }); + + $this->locations["Turtle Rock - Eye Bridge - Top Right"]->setRequirements(function ($locations, $items) { + return $this->canReachBottom($locations, $items) + && ($this->world->config('itemPlacement') !== 'basic' || $items->has('Cape') || $items->has('CaneOfByrna') + || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Turtle Rock - Boss"]->canAccess($items); + }; + + $this->locations["Turtle Rock - Boss"]->setRequirements(function ($locations, $items) { + return $this->canReachBottom($locations, $items) + && $items->has('KeyD7', 4) + && $items->has('BigKeyD7') && $items->has('CaneOfSomaria') + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD7') || $this->locations["Turtle Rock - Boss"]->hasItem(Item::get('CompassD7', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD7') || $this->locations["Turtle Rock - Boss"]->hasItem(Item::get('MapD7', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassD7', $this->world) || $item == Item::get('MapD7', $this->world)); + }); + + $this->can_enter = function ($locations, $items) { + return $this->enterTop($locations, $items) + || $this->enterMiddle($locations, $items) + || $this->enterBottom($locations, $items); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Open/HyruleCastleEscape.php b/app/Region/Open/HyruleCastleEscape.php index 36adfd7a3..57c030ce4 100644 --- a/app/Region/Open/HyruleCastleEscape.php +++ b/app/Region/Open/HyruleCastleEscape.php @@ -1,4 +1,6 @@ -locations["Sewers - Secret Room - Left"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks() || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); - }); - - $this->locations["Sewers - Secret Room - Middle"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks() || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); - }); - - $this->locations["Sewers - Secret Room - Right"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks() || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); - }); - - $this->locations["Sewers - Dark Cross"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)); - }); - - $this->locations["Hyrule Castle - Boomerang Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyH2'); - }); - - $this->locations["Hyrule Castle - Zelda's Cell"]->setRequirements(function($locations, $items) { - return $items->has('KeyH2'); - }); - - $this->locations["Secret Passage"]->setFillRules(function($item, $locations, $items) { - return !((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) - || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) - || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) - || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)); - }); - - $this->locations["Link's Uncle"]->setFillRules(function($item, $locations, $items) { - return $this->locations["Sanctuary"]->canAccess($this->world->collectItems()) - && !((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) - || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) - || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) - || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)); - }); - - return $this; - } +class HyruleCastleEscape extends Region\Standard\HyruleCastleEscape +{ + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Sewers - Secret Room - Left"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks() || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); + }); + + $this->locations["Sewers - Secret Room - Middle"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks() || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); + }); + + $this->locations["Sewers - Secret Room - Right"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks() || ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyH2')); + }); + + $this->locations["Sewers - Dark Cross"]->setRequirements(function ($locations, $items) { + return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)); + }); + + $this->locations["Hyrule Castle - Boomerang Chest"]->setRequirements(function ($locations, $items) { + return $items->has('KeyH2'); + }); + + $this->locations["Hyrule Castle - Zelda's Cell"]->setRequirements(function ($locations, $items) { + return $items->has('KeyH2'); + }); + + $this->locations["Secret Passage"]->setFillRules(function ($item, $locations, $items) { + return !((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) + || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) + || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) + || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)); + }); + + $this->locations["Link's Uncle"]->setFillRules(function ($item, $locations, $items) { + return $this->locations["Sanctuary"]->canAccess($this->world->collectItems()) + && !((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) + || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) + || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) + || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)); + }); + + return $this; + } } diff --git a/app/Region/Standard/DarkWorld/DeathMountain/East.php b/app/Region/Standard/DarkWorld/DeathMountain/East.php index 402fe74cf..2c88a16d5 100644 --- a/app/Region/Standard/DarkWorld/DeathMountain/East.php +++ b/app/Region/Standard/DarkWorld/DeathMountain/East.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Superbunny Cave - Top", 0xEA7C, null, $this), - new Location\Chest("Superbunny Cave - Bottom", 0xEA7F, null, $this), - new Location\Chest("Hookshot Cave - Top Right", 0xEB51, null, $this), - new Location\Chest("Hookshot Cave - Top Left", 0xEB54, null, $this), - new Location\Chest("Hookshot Cave - Bottom Left", 0xEB57, null, $this), - new Location\Chest("Hookshot Cave - Bottom Right", 0xEB5A, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop("Dark World Death Mountain Shop", 0x03, 0xC1, 0x0112, 0x6E, $this), - ]); - - $this->shops["Dark World Death Mountain Shop"]->clearInventory() - ->addInventory(0, Item::get('RedPotion'), 150) - ->addInventory(1, Item::get('Heart'), 10) - ->addInventory(2, Item::get('TenBombs'), 50); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Superbunny Cave - Top"]->setItem(Item::get('ThreeBombs')); - $this->locations["Superbunny Cave - Bottom"]->setItem(Item::get('TwentyRupees')); - $this->locations["Hookshot Cave - Top Right"]->setItem(Item::get('FiftyRupees')); - $this->locations["Hookshot Cave - Top Left"]->setItem(Item::get('FiftyRupees')); - $this->locations["Hookshot Cave - Bottom Left"]->setItem(Item::get('FiftyRupees')); - $this->locations["Hookshot Cave - Bottom Right"]->setItem(Item::get('FiftyRupees')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Superbunny Cave - Top"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Superbunny Cave - Bottom"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Hookshot Cave - Top Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hookshot'); - }); - - $this->locations["Hookshot Cave - Top Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hookshot'); - }); - - $this->locations["Hookshot Cave - Bottom Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hookshot'); - }); - - $this->locations["Hookshot Cave - Bottom Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && ($items->has('Hookshot') || $items->has('PegasusBoots')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') && $items->canLiftDarkRocks() - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); - }; - - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - $this->can_enter = function($locations, $items) { - // @TODO: This should account for 2x YBA - return $items->has('RescueZelda') - && (($items->has('MoonPearl') || ($items->hasABottle() && $items->has('PegasusBoots'))) - || (($items->canLiftDarkRocks() || ($items->has('Hammer') && $items->has('PegasusBoots'))) - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items)) - || ($items->has('MagicMirror') && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->locations["Hookshot Cave - Top Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hookshot') && ($items->canLiftRocks() || $items->has('PegasusBoots')); - }); - - $this->locations["Hookshot Cave - Top Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hookshot') && ($items->canLiftRocks() || $items->has('PegasusBoots')); - }); - - $this->locations["Hookshot Cave - Bottom Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hookshot') && ($items->canLiftRocks() || $items->has('PegasusBoots')); - }); - - $this->locations["Hookshot Cave - Bottom Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && ($items->has('PegasusBoots') || ($items->canLiftRocks() && $items->has('Hookshot'))); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && (($items->has('PegasusBoots') && $items->has('MoonPearl')) - || ($items->has('MagicMirror') && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)) - || (($items->canLiftDarkRocks() || ($items->has('Hammer') && $items->has('PegasusBoots'))) - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items))); - }; - - return $this; - } - +class East extends Region +{ + protected $name = 'Dark World'; + + /** + * Create a new Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Chest("Superbunny Cave - Top", [0xEA7C], null, $this), + new Location\Chest("Superbunny Cave - Bottom", [0xEA7F], null, $this), + new Location\Chest("Hookshot Cave - Top Right", [0xEB51], null, $this), + new Location\Chest("Hookshot Cave - Top Left", [0xEB54], null, $this), + new Location\Chest("Hookshot Cave - Bottom Left", [0xEB57], null, $this), + new Location\Chest("Hookshot Cave - Bottom Right", [0xEB5A], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->shops = new ShopCollection([ + new Shop("Dark World Death Mountain Shop", 0x03, 0xC1, 0x0112, 0x6E, $this), + ]); + + $this->shops["Dark World Death Mountain Shop"]->clearInventory() + ->addInventory(0, Item::get('RedPotion', $world), 150) + ->addInventory(1, Item::get('Heart', $world), 10) + ->addInventory(2, Item::get('TenBombs', $world), 50); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Superbunny Cave - Top"]->setRequirements(function ($locations, $items) { + return $this->world->config('canSuperBunny', false) || $items->has('MoonPearl'); + }); + + $this->locations["Superbunny Cave - Bottom"]->setRequirements(function ($locations, $items) { + return $this->world->config('canSuperBunny', false) || $items->has('MoonPearl'); + }); + + $this->locations["Hookshot Cave - Top Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') + && $items->has('Hookshot') + && ($items->canLiftRocks() || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots'))); + }); + + $this->locations["Hookshot Cave - Top Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') + && $items->has('Hookshot') + && ($items->canLiftRocks() || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots'))); + }); + + $this->locations["Hookshot Cave - Bottom Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') + && $items->has('Hookshot') + && ($items->canLiftRocks() || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots'))); + }); + + $this->locations["Hookshot Cave - Bottom Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') + && ($items->has('Hookshot') || ($this->world->config('itemPlacement') !== 'basic' && $items->has('PegasusBoots'))) + && ($items->canLiftRocks() || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots'))); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && (($items->canLiftDarkRocks() + && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items)) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots') && $items->has('MoonPearl')) + || $this->world->config('canOneFrameClipOW', false)); + }; + + return $this; + } } diff --git a/app/Region/Standard/DarkWorld/DeathMountain/West.php b/app/Region/Standard/DarkWorld/DeathMountain/West.php index 7bfeb93e3..6850698d8 100644 --- a/app/Region/Standard/DarkWorld/DeathMountain/West.php +++ b/app/Region/Standard/DarkWorld/DeathMountain/West.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Spike Cave", 0xEA8B, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop\TakeAny("Dark Death Mountain Fairy", 0x83, 0xC1, 0x0112, 0x70, $this, [0xDBBE2 => [0x58]]), - ]); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Spike Cave"]->setItem(Item::get('CaneOfByrna')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Dark Death Mountain Fairy"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); - }); +class West extends Region +{ + protected $name = 'Dark World'; - $this->locations["Spike Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('Hammer') && $items->canLiftRocks() - && (($items->canExtendMagic() && $items->has('Cape')) - || ((!$this->world->config('region.cantTakeDamage', false) || $items->canExtendMagic()) && $items->has('CaneOfByrna'))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); - }); + /** + * Create a new Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda'); - }; + $this->locations = new LocationCollection([ + new Location\Chest("Spike Cave", [0xEA8B], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->shops = new ShopCollection([ + new Shop\TakeAny("Dark Death Mountain Fairy", 0x83, 0xC1, 0x0112, 0x70, $this, [0xDBBE2 => [0x58]]), + ]); + } - return $this; - } + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Dark Death Mountain Fairy"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); + }); - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - // @TODO: This should account for 2x YBA - $this->locations["Spike Cave"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->canLiftRocks() - && ($items->has('MoonPearl') || ($items->hasABottle() && $items->has('PegasusBoots'))) - && (($items->canExtendMagic() && $items->has('Cape')) - || ((!$this->world->config('region.cantTakeDamage', false) || $items->canExtendMagic()) && $items->has('CaneOfByrna'))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); - }); + $this->locations["Spike Cave"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('Hammer') && $items->canLiftRocks() + && (($items->canExtendMagic() && $items->has('Cape')) + || ((!$this->world->config('region.cantTakeDamage', false) || $items->canExtendMagic()) && $items->has('CaneOfByrna'))) + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); + }); - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda'); - }; + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda'); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Standard/DarkWorld/Mire.php b/app/Region/Standard/DarkWorld/Mire.php index 19cab732f..40d8279ed 100644 --- a/app/Region/Standard/DarkWorld/Mire.php +++ b/app/Region/Standard/DarkWorld/Mire.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Mire Shed - Left", 0xEA73, null, $this), - new Location\Chest("Mire Shed - Right", 0xEA76, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop\TakeAny("Dark Desert Fairy", 0x83, 0xC1, 0x0112, 0x56, $this, [0xDBBC8 => [0x58]]), - new Shop\TakeAny("Dark Desert Hint", 0x83, 0xC1, 0x0112, 0x62, $this, [0xDBBD4 => [0x58]]), - ]); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Mire Shed - Left"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Mire Shed - Right"]->setItem(Item::get('TwentyRupees')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - // @TODO: do we want to allow super bunny item shopping - $this->shops["Dark Desert Fairy"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->shops["Dark Desert Hint"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Mire Shed - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Mire Shed - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') && $items->canFly() && $items->canLiftDarkRocks(); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && (($items->hasABottle() && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)) - || ($items->canLiftDarkRocks() && ($items->canFly() || $items->hasABottle() || $items->has('PegasusBoots'))) - || ($items->glitchedLinkInDarkWorld() && $items->has('PegasusBoots') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items))); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->locations["Mire Shed - Left"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->locations["Mire Shed - Right"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') || $items->has('MagicMirror'); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && (($items->canLiftDarkRocks() && ($items->canFly() || $items->has('PegasusBoots'))) - || ($items->has('MoonPearl') && $items->has('PegasusBoots') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items))); - }; - - return $this; - } +class Mire extends Region +{ + protected $name = 'Dark World'; + + /** + * Create a new North East Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Chest("Mire Shed - Left", [0xEA73], null, $this), + new Location\Chest("Mire Shed - Right", [0xEA76], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->shops = new ShopCollection([ + new Shop\TakeAny("Dark Desert Fairy", 0x83, 0xC1, 0x0112, 0x56, $this, [0xDBBC8 => [0x58]]), + new Shop\TakeAny("Dark Desert Hint", 0x83, 0xC1, 0x0112, 0x62, $this, [0xDBBD4 => [0x58]]), + ]); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Dark Desert Fairy"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') || $this->world->config('canSuperBunny', false); + }); + + $this->shops["Dark Desert Hint"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') || $this->world->config('canSuperBunny', false); + }); + + $this->locations["Mire Shed - Left"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') || $this->world->config('canSuperBunny', false); + }); + + $this->locations["Mire Shed - Right"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') || $this->world->config('canSuperBunny', false); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && (($items->canLiftDarkRocks() && ($items->canFly($this->world) || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')))) + || ($items->has('MoonPearl') && ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + && $this->world->getRegion('South Dark World')->canEnter($locations, $items)) + || ($this->world->config('canOWYBA', false) && $items->hasABottle())); + }; + + return $this; + } } diff --git a/app/Region/Standard/DarkWorld/NorthEast.php b/app/Region/Standard/DarkWorld/NorthEast.php index 8a02e4756..8030721ef 100644 --- a/app/Region/Standard/DarkWorld/NorthEast.php +++ b/app/Region/Standard/DarkWorld/NorthEast.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Standing("Catfish", 0xEE185, null, $this), - new Location\Standing("Pyramid", 0x180147, null, $this), - new Location\Trade("Pyramid Fairy - Sword", 0x180028, null, $this), - new Location\Trade("Pyramid Fairy - Bow", 0x34914, null, $this), - new Location\Prize\Event("Ganon", null, null, $this), - ]); - - if ($this->world->config('region.swordsInPool', true)) { - $this->locations->addItem(new Location\Chest("Pyramid Fairy - Left", 0xE980, null, $this)); - $this->locations->addItem(new Location\Chest("Pyramid Fairy - Right", 0xE983, null, $this)); - } - - $this->shops = new ShopCollection([ - new Shop("Dark World Potion Shop", 0x03, 0xC1, 0x010F, 0x6F, $this), - // Single entrance caves with no items in them ;) - new Shop\TakeAny("Dark Lake Hylia Fairy", 0x83, 0xC1, 0x0112, 0x6D, $this, [0xDBBDF => [0x58]]), - new Shop\TakeAny("East Dark World Hint", 0x83, 0xC1, 0x0112, 0x69, $this, [0xDBBDB => [0x58]]), - new Shop\TakeAny("Palace of Darkness Hint", 0x83, 0xC1, 0x010F, 0x68, $this, [0xDBBDA => [0x60]]), - ]); - - $this->shops["Dark World Potion Shop"]->clearInventory() - ->addInventory(0, Item::get('RedPotion'), 150) - ->addInventory(1, Item::get('BlueShield'), 50) - ->addInventory(2, Item::get('TenBombs'), 50); - - // set these to not upgrade - $this->locations["Pyramid Fairy - Sword"]->setItem(Item::get('L1Sword')); - $this->locations["Pyramid Fairy - Bow"]->setItem(Item::get('Bow')); - - $this->prize_location = $this->locations["Ganon"]; - $this->prize_location->setItem(Item::get('DefeatGanon')); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Catfish"]->setItem(Item::get('Quake')); - $this->locations["Pyramid"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Pyramid Fairy - Sword"]->setItem(Item::get('L4Sword')); - $this->locations["Pyramid Fairy - Bow"]->setItem(Item::get('BowAndSilverArrows')); - - if ($this->world->config('region.swordsInPool', true)) { - $this->locations["Pyramid Fairy - Left"]->setItem(Item::get('L4Sword')); - $this->locations["Pyramid Fairy - Right"]->setItem(Item::get('SilverArrowUpgrade')); - } - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Dark World Potion Shop"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') - && ($items->canLiftRocks() || $items->has('Hammer') || $items->has('Flippers')); - }); - - // @TODO: do we want to allow super bunny item shopping - $this->shops["East Dark World Hint"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->shops["Palace of Darkness Hint"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Catfish"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canLiftRocks(); - }); - - $this->locations["Pyramid Fairy - Sword"]->setRequirements(function($locations, $items) { - return $items->hasSword() && $items->has('Crystal5') && $items->has('Crystal6') && $items->has('MoonPearl') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && ($items->has('Hammer') - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim'))); - }); - - $this->locations["Pyramid Fairy - Bow"]->setRequirements(function($locations, $items) { - return $items->canShootArrows() && $items->has('Crystal5') && $items->has('Crystal6') && $items->has('MoonPearl') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && ($items->has('Hammer') - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim'))); - }); - - - if ($this->world->config('region.swordsInPool', true)) { - $this->locations["Pyramid Fairy - Left"]->setRequirements(function($locations, $items) { - return $items->has('Crystal5') && $items->has('Crystal6') && $items->has('MoonPearl') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && ($items->has('Hammer') - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim'))); - }); - - $this->locations["Pyramid Fairy - Right"]->setRequirements(function($locations, $items) { - return $items->has('Crystal5') && $items->has('Crystal6') && $items->has('MoonPearl') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && ($items->has('Hammer') - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim'))); - }); - } - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('DefeatAgahnim') - || ($items->has('Hammer') && $items->canLiftRocks() && $items->has('MoonPearl')) - || ($items->canLiftDarkRocks() && $items->has('Flippers') && $items->has('MoonPearl'))); - }; - - $this->prize_location->setRequirements(function($locations, $items) { - if ($this->world->getGoal() == 'dungeons' - && (!$items->has('PendantOfCourage') - || !$items->has('PendantOfWisdom') - || !$items->has('PendantOfPower') - || !$items->has('DefeatAgahnim') - || !$items->has('Crystal1') - || !$items->has('Crystal2') - || !$items->has('Crystal3') - || !$items->has('Crystal4') - || !$items->has('Crystal5') - || !$items->has('Crystal6') - || !$items->has('Crystal7') - || !$items->has('DefeatAgahnim2'))) { - return false; - } - - if ($this->world->getGoal() == 'ganon' - && (!$items->has('Crystal1') - || !$items->has('Crystal2') - || !$items->has('Crystal3') - || !$items->has('Crystal4') - || !$items->has('Crystal5') - || !$items->has('Crystal6') - || !$items->has('Crystal7'))) { - return false; - } - - return $items->has('MoonPearl') - && $items->has('DefeatAgahnim2') - && (!$this->world->config('region.requireBetterBow', false) || $items->canShootArrows(2)) - && ( - ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer')) - || (!$this->world->config('region.requireBetterSword', false) && - ($items->hasSword(2) && ($items->has('Lamp') || ($items->has('FireRod') && $items->canExtendMagic(3))))) - || ($items->hasSword(3) && ($items->has('Lamp') || ($items->has('FireRod') && $items->canExtendMagic(2)))) - - ); - }); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - // @TODO: This should account for 2x YBA/1x YBA and S&Q from DM - $this->locations["Catfish"]->setRequirements(function($locations, $items) { - return $items->glitchedLinkInDarkWorld() - && ($items->canLiftRocks() || $items->has('PegasusBoots')); - }); - - $this->locations["Pyramid Fairy - Sword"]->setRequirements(function($locations, $items) { - return $items->hasSword() - && (($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('Crystal5') && $items->has('Crystal6') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && (($items->has('Hammer') && $items->glitchedLinkInDarkWorld()) - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim'))))); - }); - - $this->locations["Pyramid Fairy - Bow"]->setRequirements(function($locations, $items) { - return $items->canShootArrows() - && (($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('Crystal5') && $items->has('Crystal6') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && (($items->has('Hammer') && $items->glitchedLinkInDarkWorld()) - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim'))))); - }); - - - if ($this->world->config('region.swordsInPool', true)) { - $this->locations["Pyramid Fairy - Left"]->setRequirements(function($locations, $items) { - return ($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('Crystal5') && $items->has('Crystal6') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && (($items->has('Hammer') && $items->glitchedLinkInDarkWorld()) - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim')))); - }); - - $this->locations["Pyramid Fairy - Right"]->setRequirements(function($locations, $items) { - return ($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('Crystal5') && $items->has('Crystal6') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && (($items->has('Hammer') && $items->glitchedLinkInDarkWorld()) - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim')))); - }); - } - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('DefeatAgahnim') - || ($items->has('MoonPearl') - && (($items->canLiftDarkRocks() && ($items->has('PegasusBoots') || $items->has('Flippers'))) - || ($items->has('Hammer') && $items->canLiftRocks()))) - || (($items->hasABottle() - || ($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('MoonPearl') && ($items->has('MagicMirror') || $items->has('PegasusBoots')))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["Catfish"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') - && ($items->canLiftRocks() || $items->has('PegasusBoots')); - }); - - $this->locations["Pyramid Fairy - Sword"]->setRequirements(function($locations, $items) { - return $items->hasSword() - && (($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('Crystal5') && $items->has('Crystal6') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && (($items->has('Hammer') && $items->has('MoonPearl')) - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim'))))); - }); - - $this->locations["Pyramid Fairy - Bow"]->setRequirements(function($locations, $items) { - return $items->canShootArrows() - && (($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('Crystal5') && $items->has('Crystal6') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && (($items->has('Hammer') && $items->has('MoonPearl')) - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim'))))); - }); - - - if ($this->world->config('region.swordsInPool', true)) { - $this->locations["Pyramid Fairy - Left"]->setRequirements(function($locations, $items) { - return ($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('Crystal5') && $items->has('Crystal6') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && (($items->has('Hammer') && $items->has('MoonPearl')) - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim')))); - }); - - $this->locations["Pyramid Fairy - Right"]->setRequirements(function($locations, $items) { - return ($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('Crystal5') && $items->has('Crystal6') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items) - && (($items->has('Hammer') && $items->has('MoonPearl')) - || ($items->has('MagicMirror') && $items->has('DefeatAgahnim')))); - }); - } - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('DefeatAgahnim') - || ($items->has('MoonPearl') - && (($items->canLiftDarkRocks() && ($items->has('PegasusBoots') || $items->has('Flippers'))) - || ($items->has('Hammer') && $items->canLiftRocks()))) - || ((($items->has('MagicMirror') && $items->canSpinSpeed()) - || ($items->has('MoonPearl') && ($items->has('MagicMirror') || $items->has('PegasusBoots')))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); - }; - - return $this; - } +class NorthEast extends Region +{ + protected $name = 'Dark World'; + + /** + * Create a new North East Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Standing("Catfish", [0xEE185], null, $this), + new Location\Standing("Pyramid", [0x180147], null, $this), + new Location\Trade("Pyramid Fairy - Sword", [0x180028], null, $this), + new Location\Trade("Pyramid Fairy - Bow", [0x34914], null, $this), + new Location\Prize\Event("Ganon", [], null, $this), + ]); + + if ($this->world->config('region.swordsInPool', true)) { + $this->locations->addItem(new Location\Chest("Pyramid Fairy - Left", [0xE980], null, $this)); + $this->locations->addItem(new Location\Chest("Pyramid Fairy - Right", [0xE983], null, $this)); + } + + $this->shops = new ShopCollection([ + new Shop("Dark World Potion Shop", 0x03, 0xC1, 0x010F, 0x6F, $this), + // Single entrance caves with no items in them ;) + new Shop\TakeAny("Dark Lake Hylia Fairy", 0x83, 0xC1, 0x0112, 0x6D, $this, [0xDBBDF => [0x58]]), + new Shop\TakeAny("East Dark World Hint", 0x83, 0xC1, 0x0112, 0x69, $this, [0xDBBDB => [0x58]]), + new Shop\TakeAny("Palace of Darkness Hint", 0x83, 0xC1, 0x010F, 0x68, $this, [0xDBBDA => [0x60]]), + ]); + + $this->shops["Dark World Potion Shop"]->clearInventory() + ->addInventory(0, Item::get('RedPotion', $world), 150) + ->addInventory(1, Item::get('BlueShield', $world), 50) + ->addInventory(2, Item::get('TenBombs', $world), 50); + + $this->locations->setChecksForWorld($world->id); + // set these to not upgrade + $this->locations["Pyramid Fairy - Sword"]->setItem(Item::get('L1Sword', $world)); + $this->locations["Pyramid Fairy - Bow"]->setItem(Item::get('Bow', $world)); + + $this->prize_location = $this->locations["Ganon"]; + $this->prize_location->setItem(Item::get('DefeatGanon', $world)); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Dark World Potion Shop"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') + && ($items->canLiftRocks() || $items->has('Hammer') || $items->has('Flippers')); + }); + + // @TODO: do we want to allow super bunny item shopping + $this->shops["East Dark World Hint"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->shops["Palace of Darkness Hint"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl'); + }); + + $this->locations["Catfish"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && ($items->canLiftRocks() + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots'))); + }); + + $this->locations["Pyramid Fairy - Sword"]->setRequirements(function ($locations, $items) { + return $items->hasSword() + && (($items->has('Crystal5') && $items->has('Crystal6') && $items->has('MoonPearl') + && $this->world->getRegion('South Dark World')->canEnter($locations, $items) + && ($items->has('Hammer') + || ($items->has('MagicMirror') && $items->has('DefeatAgahnim')))) + || (($this->world->config('canSuperSpeed', false) && $this->world->config('canMirrorClip', false) + && $items->has('MagicMirror') && $items->canSpinSpeed()) + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); + }); + + $this->locations["Pyramid Fairy - Bow"]->setRequirements(function ($locations, $items) { + return $items->canShootArrows() + && (($items->has('Crystal5') && $items->has('Crystal6') && $items->has('MoonPearl') + && $this->world->getRegion('South Dark World')->canEnter($locations, $items) + && ($items->has('Hammer') + || ($items->has('MagicMirror') && $items->has('DefeatAgahnim')))) + || (($this->world->config('canSuperSpeed', false) && $this->world->config('canMirrorClip', false) + && $items->has('MagicMirror') && $items->canSpinSpeed()) + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); + }); + + + if ($this->world->config('region.swordsInPool', true)) { + $this->locations["Pyramid Fairy - Left"]->setRequirements(function ($locations, $items) { + return ($items->has('Crystal5') && $items->has('Crystal6') && $items->has('MoonPearl') + && $this->world->getRegion('South Dark World')->canEnter($locations, $items) + && ($items->has('Hammer') + || ($items->has('MagicMirror') && $items->has('DefeatAgahnim')))) + || (($this->world->config('canSuperSpeed', false) && $this->world->config('canMirrorClip', false) + && $items->has('MagicMirror') && $items->canSpinSpeed()) + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); + }); + + $this->locations["Pyramid Fairy - Right"]->setRequirements(function ($locations, $items) { + return ($items->has('Crystal5') && $items->has('Crystal6') && $items->has('MoonPearl') + && $this->world->getRegion('South Dark World')->canEnter($locations, $items) + && ($items->has('Hammer') + || ($items->has('MagicMirror') && $items->has('DefeatAgahnim')))) + || (($this->world->config('canSuperSpeed', false) && $this->world->config('canMirrorClip', false) + && $items->has('MagicMirror') && $items->canSpinSpeed()) + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); + }); + } + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($items->has('DefeatAgahnim') + || ($items->has('Hammer') && $items->canLiftRocks() && $items->has('MoonPearl')) + || ($items->canLiftDarkRocks() + && ($items->has('Flippers') || ( + (($this->world->config('canBootsClip', false) && $this->world->config('canFakeFlipper', false)) + || $this->world->config('canWaterWalk', false)) && $items->has('PegasusBoots'))) + && $items->has('MoonPearl')) + || (($this->world->config('canSuperSpeed', false) && $this->world->config('canMirrorClip', false) + && $items->has('MagicMirror') && $items->canSpinSpeed()) + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); + }; + + $this->prize_location->setRequirements(function ($locations, $items) { + if ( + $this->world->config('goal') == 'dungeons' + && (!$items->has('PendantOfCourage') + || !$items->has('PendantOfWisdom') + || !$items->has('PendantOfPower') + || !$items->has('DefeatAgahnim') + || !$items->has('Crystal1') + || !$items->has('Crystal2') + || !$items->has('Crystal3') + || !$items->has('Crystal4') + || !$items->has('Crystal5') + || !$items->has('Crystal6') + || !$items->has('Crystal7') + || !$items->has('DefeatAgahnim2')) + ) { + return false; + } + + if ( + in_array($this->world->config('goal'), ['ganon', 'fast_ganon']) + && (($items->has('Crystal1') + + $items->has('Crystal2') + + $items->has('Crystal3') + + $items->has('Crystal4') + + $items->has('Crystal5') + + $items->has('Crystal6') + + $items->has('Crystal7')) < $this->world->config('crystals.ganon', 7)) + ) { + return false; + } + + return $items->has('MoonPearl') + && ($items->has('DefeatAgahnim2') || $this->world->config('goal') === 'fast_ganon') + && (!$this->world->config('region.requireBetterBow', false) || $items->canShootArrows(2)) + && ( + ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer')) + || (!$this->world->config('region.requireBetterSword', false) && ($items->hasSword(2) && ($items->has('Lamp') || ($items->has('FireRod') && $items->canExtendMagic(3))))) + || ($items->hasSword(3) && ($items->has('Lamp') || ($items->has('FireRod') && $items->canExtendMagic(2))))); + }); + + return $this; + } } diff --git a/app/Region/Standard/DarkWorld/NorthWest.php b/app/Region/Standard/DarkWorld/NorthWest.php index 92e5f09df..3e352d736 100644 --- a/app/Region/Standard/DarkWorld/NorthWest.php +++ b/app/Region/Standard/DarkWorld/NorthWest.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Brewery", 0xE9EC, null, $this), - new Location\Chest("C-Shaped House", 0xE9EF, null, $this), - new Location\Chest("Chest Game", 0xEDA8, null, $this), - new Location\Standing("Hammer Pegs", 0x180006, null, $this), - new Location\Standing("Bumper Cave", 0x180146, null, $this), - new Location\Npc("Blacksmith", $world->config('region.swordsInPool', true) ? 0x18002A : 0x3355C, null, $this), - new Location\Npc("Purple Chest", 0x33D68, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop("Dark World Forest Shop", 0x03, 0xC1, 0x0110, 0x75, $this), - new Shop("Dark World Lumberjack Hut Shop", 0x03, 0xC1, 0x010F, 0x57, $this), - new Shop("Dark World Outcasts Shop", 0x03, 0xC1, 0x010F, 0x60, $this), - // Single entrance caves with no items in them ;) - new Shop\TakeAny("Dark Sanctuary Hint", 0x83, 0xC1, 0x0112, 0x5A, $this, [0xDBBCC => [0x58]]), - new Shop\TakeAny("Fortune Teller (Dark)", 0x83, 0xC1, 0x010F, 0x66, $this, [0xDBBD8 => [0x60]]), - ]); - - $this->shops["Dark World Forest Shop"]->clearInventory() - ->addInventory(0, Item::get('RedShield'), 500) - ->addInventory(1, Item::get('Bee'), 10) - ->addInventory(2, Item::get('TenArrows'), 30); - $this->shops["Dark World Lumberjack Hut Shop"]->clearInventory() - ->addInventory(0, Item::get('RedPotion'), 150) - ->addInventory(1, Item::get('BlueShield'), 50) - ->addInventory(2, Item::get('TenBombs'), 50); - $this->shops["Dark World Outcasts Shop"]->clearInventory() - ->addInventory(0, Item::get('RedPotion'), 150) - ->addInventory(1, Item::get('BlueShield'), 50) - ->addInventory(2, Item::get('TenBombs'), 50); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Brewery"]->setItem(Item::get('RedBoomerang')); - $this->locations["C-Shaped House"]->setItem(Item::get('ThreeHundredRupees')); - $this->locations["Chest Game"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Hammer Pegs"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Bumper Cave"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Blacksmith"]->setItem(Item::get('L3Sword')); - $this->locations["Purple Chest"]->setItem(Item::get('Bottle')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Dark World Outcasts Shop"]->setRequirements(function($locations, $items) { - return $items->has('Hammer'); - }); - - $this->locations["Hammer Pegs"]->setRequirements(function($locations, $items) { - return $items->canLiftDarkRocks() && $items->has('Hammer'); - }); - - $this->locations["Bumper Cave"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks() && $items->has('Cape'); - }); - - $this->locations["Blacksmith"]->setRequirements(function($locations, $items) { - return $items->canLiftDarkRocks(); - }); - - $this->locations["Purple Chest"]->setRequirements(function($locations, $items) { - return $items->canLiftDarkRocks(); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('MoonPearl') - && $items->has('RescueZelda') - && (($this->world->getRegion('North East Dark World')->canEnter($locations, $items) - && ($items->has('Hookshot') && ($items->has('Flippers') || $items->canLiftRocks() || $items->has('Hammer')))) - || ($items->has('Hammer') && $items->canLiftRocks()) - || $items->canLiftDarkRocks()); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - $this->locations["Brewery"]->setRequirements(function($locations, $items) { - return $items->glitchedLinkInDarkWorld(); - }); - - $this->locations["Hammer Pegs"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->glitchedLinkInDarkWorld(); - }); - - $this->locations["Bumper Cave"]->setRequirements(function($locations, $items) { - return $items->glitchedLinkInDarkWorld() - && ($items->has('PegasusBoots') - || ($items->canLiftRocks() && $items->has('Cape'))); - }); - - $this->locations["Blacksmith"]->setRequirements(function($locations, $items) { - return $items->glitchedLinkInDarkWorld() && $items->canLiftDarkRocks(); - }); - - $this->locations["Purple Chest"]->setRequirements(function($locations, $items) { - return $locations["Blacksmith"]->canAccess($items) - && ($items->has('MagicMirror') - || ($items->glitchedLinkInDarkWorld() && $items->canLiftDarkRocks()) - || ($items->has('PegasusBoots') && $items->glitchedLinkInDarkWorld() - && $this->world->getRegion('North East Dark World')->canEnter($locations, $items))); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && (($items->has('MoonPearl') - && ($items->canLiftDarkRocks() - || ($items->has('Hammer') && $items->canLiftRocks()) - || ($items->has('DefeatAgahnim') && $items->has('Hookshot') - && ($items->has('Hammer') || $items->canLiftRocks() || $items->has('Flippers'))))) - || $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->locations["Brewery"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - - $this->locations["Hammer Pegs"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('MoonPearl') - && ($items->canLiftDarkRocks() - || ($items->has('PegasusBoots') - && $this->world->getRegion('North East Dark World')->canEnter($locations, $items))); - }); - - $this->locations["Bumper Cave"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') - && ($items->has('PegasusBoots') - || ($items->canLiftRocks() && $items->has('Cape'))); - }); - - $this->locations["Blacksmith"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->canLiftDarkRocks(); - }); - - $this->locations["Purple Chest"]->setRequirements(function($locations, $items) { - return $locations["Blacksmith"]->canAccess($items) - && ($items->has("MoonPearl") - && ($items->canLiftDarkRocks() - || ($items->has('PegasusBoots') - && $this->world->getRegion('North East Dark World')->canEnter($locations, $items)))); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && (($items->has('MoonPearl') - && ($items->canLiftDarkRocks() - || ($items->has('Hammer') && $items->canLiftRocks()) - || ($items->has('DefeatAgahnim') && $items->has('Hookshot') - && ($items->has('Hammer') || $items->canLiftRocks() || $items->has('Flippers'))))) - || (($items->has('MagicMirror') || ($items->has('PegasusBoots') && $items->has('MoonPearl'))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); - }; - - return $this; - } +class NorthWest extends Region +{ + protected $name = 'Dark World'; + + /** + * Create a new North West Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Chest("Brewery", [0xE9EC], null, $this), + new Location\Chest("C-Shaped House", [0xE9EF], null, $this), + new Location\Chest("Chest Game", [0xEDA8], null, $this), + new Location\Standing("Hammer Pegs", [0x180006], null, $this), + new Location\Standing("Bumper Cave", [0x180146], null, $this), + new Location\Npc("Blacksmith", [$world->config('region.swordsInPool', true) ? 0x18002A : 0x3355C], null, $this), + new Location\Npc("Purple Chest", [0x33D68], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->shops = new ShopCollection([ + new Shop("Dark World Forest Shop", 0x03, 0xC1, 0x0110, 0x75, $this), + new Shop("Dark World Lumberjack Hut Shop", 0x03, 0xC1, 0x010F, 0x57, $this), + new Shop("Dark World Outcasts Shop", 0x03, 0xC1, 0x010F, 0x60, $this), + // Single entrance caves with no items in them ;) + new Shop\TakeAny("Dark Sanctuary Hint", 0x83, 0xC1, 0x0112, 0x5A, $this, [0xDBBCC => [0x58]]), + new Shop\TakeAny("Fortune Teller (Dark)", 0x83, 0xC1, 0x010F, 0x66, $this, [0xDBBD8 => [0x60]]), + ]); + + $this->shops["Dark World Forest Shop"]->clearInventory() + ->addInventory(0, Item::get('RedShield', $world), 500) + ->addInventory(1, Item::get('Bee', $world), 10) + ->addInventory(2, Item::get('TenArrows', $world), 30); + $this->shops["Dark World Lumberjack Hut Shop"]->clearInventory() + ->addInventory(0, Item::get('RedPotion', $world), 150) + ->addInventory(1, Item::get('BlueShield', $world), 50) + ->addInventory(2, Item::get('TenBombs', $world), 50); + $this->shops["Dark World Outcasts Shop"]->clearInventory() + ->addInventory(0, Item::get('RedPotion', $world), 150) + ->addInventory(1, Item::get('BlueShield', $world), 50) + ->addInventory(2, Item::get('TenBombs', $world), 50); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Dark World Outcasts Shop"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer'); + }); + + $this->locations["Brewery"]->setRequirements(function ($locations, $items) { + return $items->canBombThings() && ($items->has('MoonPearl') + || ($this->world->config('canOWYBA', false) && $items->hasABottle())); + }); + + $this->locations["Hammer Pegs"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') + && ($items->canLiftDarkRocks() + || $this->world->config('canFakeFlipper', false)); + }); + + $this->locations["Bumper Cave"]->setRequirements(function ($locations, $items) { + return (($this->world->config('itemPlacement') !== 'basic' || $items->has('Hookshot')) + && $items->canLiftRocks() && $items->has('Cape')) + || $this->world->config('canOneFrameClipOW', false) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')); + }); + + $this->locations["Blacksmith"]->setRequirements(function ($locations, $items) { + return ($this->world->config('itemPlacement') !== 'basic' || $items->has('MagicMirror')) + && $items->canLiftDarkRocks(); + }); + + $this->locations["Purple Chest"]->setRequirements(function ($locations, $items) { + return $locations["Blacksmith"]->canAccess($items) + && ($items->canLiftDarkRocks() + || $this->world->config('canFakeFlipper', false)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($this->world->config('canOneFrameClipOW', false) + || (($items->has('MoonPearl') + || ($this->world->config('canOWYBA', false) && $items->hasABottle())) + && (($this->world->getRegion('North East Dark World')->canEnter($locations, $items) + && ($items->has('Hookshot') && ($items->has('Flippers') || $items->canLiftRocks() || $items->has('Hammer')))) + || ($items->has('Hammer') && $items->canLiftRocks()) + || $items->canLiftDarkRocks()))); + }; + + return $this; + } } diff --git a/app/Region/Standard/DarkWorld/South.php b/app/Region/Standard/DarkWorld/South.php index 7e23ce49a..a089cd7d8 100644 --- a/app/Region/Standard/DarkWorld/South.php +++ b/app/Region/Standard/DarkWorld/South.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Hype Cave - Top", 0xEB1E, null, $this), - new Location\Chest("Hype Cave - Middle Right", 0xEB21, null, $this), - new Location\Chest("Hype Cave - Middle Left", 0xEB24, null, $this), - new Location\Chest("Hype Cave - Bottom", 0xEB27, null, $this), - new Location\Npc("Stumpy", 0x330C7, null, $this), - new Location\Npc("Hype Cave - NPC", 0x180011, null, $this), - new Location\Dig("Digging Game", 0x180148, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop("Dark World Lake Hylia Shop", 0x03, 0xC1, 0x010F, 0x74, $this), - // Single entrance caves with no items in them ;) - new Shop\TakeAny("Archery Game", 0x83, 0xC1, 0x010F, 0x59, $this, [0xDBBCB => [0x60]]), - new Shop\TakeAny("Bonk Fairy (Dark)", 0x83, 0xC1, 0x0112, 0x78, $this, [0xDBBEA => [0x58]]), - new Shop\TakeAny("Dark Lake Hylia Ledge Fairy", 0x83, 0xC1, 0x0112, 0x81, $this, [0xDBBF3 => [0x58]]), - new Shop\TakeAny("Dark Lake Hylia Ledge Hint", 0x83, 0xC1, 0x0112, 0x6A, $this, [0xDBBDC => [0x58]]), - new Shop\TakeAny("Dark Lake Hylia Ledge Spike Cave", 0x83, 0xC1, 0x0112, 0x7C, $this, [0xDBBEE => [0x58]]), - ]); - - $this->shops["Dark World Lake Hylia Shop"]->clearInventory() - ->addInventory(0, Item::get('RedPotion'), 150) - ->addInventory(1, Item::get('BlueShield'), 50) - ->addInventory(2, Item::get('TenBombs'), 50); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Hype Cave - Top"]->setItem(Item::get('TwentyRupees')); - $this->locations["Hype Cave - Middle Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Hype Cave - Middle Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Hype Cave - Bottom"]->setItem(Item::get('TwentyRupees')); - $this->locations["Stumpy"]->setItem(Item::get('Shovel')); - $this->locations["Hype Cave - NPC"]->setItem(Item::get('ThreeHundredRupees')); - $this->locations["Digging Game"]->setItem(Item::get('PieceOfHeart')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Bonk Fairy (Dark)"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots'); - }); - - $this->shops["Dark Lake Hylia Ledge Fairy"]->setRequirements(function($locations, $items) { - return $items->has('Flippers') && $items->canBombThings(); - }); - - $this->shops["Dark Lake Hylia Ledge Hint"]->setRequirements(function($locations, $items) { - return $items->has('Flippers'); - }); - - $this->shops["Dark Lake Hylia Ledge Spike Cave"]->setRequirements(function($locations, $items) { - return $items->has('Flippers') && $items->canLiftRocks(); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('MoonPearl') - && $items->has('RescueZelda') - && (($this->world->getRegion('North East Dark World')->canEnter($locations, $items) && ($items->has('Hammer') - || ($items->has('Hookshot') && ($items->has('Flippers') || $items->canLiftRocks())))) - || ($items->has('Hammer') && $items->canLiftRocks()) - || $items->canLiftDarkRocks()); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - foreach ($this->locations as $location) { - $location->setRequirements(function($locations, $items) { - return $items->glitchedLinkInDarkWorld(); - }); - } - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && (($items->has('MoonPearl') - && ($items->canLiftDarkRocks() - || ($items->has('Hammer') && $items->canLiftRocks()) - || ($items->has('DefeatAgahnim') && ($items->has('Hammer') - || ($items->has('Hookshot') && ($items->canLiftRocks() || $items->has('Flippers'))))))) - || $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - // I don't know why, but I guess everything in the region requires Moon Pearl, except for entry - foreach ($this->locations as $location) { - $location->setRequirements(function($locations, $items) { - return $items->has('MoonPearl'); - }); - } - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && (($items->has('MoonPearl') - && ($items->canLiftDarkRocks() - || ($items->has('Hammer') && $items->canLiftRocks()) - || ($items->has('DefeatAgahnim') && ($items->has('Hammer') - || ($items->has('Hookshot') && ($items->canLiftRocks() || $items->has('Flippers'))))))) - || (($items->has('MagicMirror') || ($items->has('PegasusBoots') && $items->has('MoonPearl'))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); - }; - - return $this; - } +class South extends Region +{ + protected $name = 'Dark World'; + + /** + * Create a new South Dark World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Chest("Hype Cave - Top", [0xEB1E], null, $this), + new Location\Chest("Hype Cave - Middle Right", [0xEB21], null, $this), + new Location\Chest("Hype Cave - Middle Left", [0xEB24], null, $this), + new Location\Chest("Hype Cave - Bottom", [0xEB27], null, $this), + new Location\Npc("Stumpy", [0x330C7], null, $this), + new Location\Npc("Hype Cave - NPC", [0x180011], null, $this), + new Location\Dig("Digging Game", [0x180148], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->shops = new ShopCollection([ + new Shop("Dark World Lake Hylia Shop", 0x03, 0xC1, 0x010F, 0x74, $this), + // Single entrance caves with no items in them ;) + new Shop\TakeAny("Archery Game", 0x83, 0xC1, 0x010F, 0x59, $this, [0xDBBCB => [0x60]]), + new Shop\TakeAny("Bonk Fairy (Dark)", 0x83, 0xC1, 0x0112, 0x78, $this, [0xDBBEA => [0x58]]), + new Shop\TakeAny("Dark Lake Hylia Ledge Fairy", 0x83, 0xC1, 0x0112, 0x81, $this, [0xDBBF3 => [0x58]]), + new Shop\TakeAny("Dark Lake Hylia Ledge Hint", 0x83, 0xC1, 0x0112, 0x6A, $this, [0xDBBDC => [0x58]]), + new Shop\TakeAny("Dark Lake Hylia Ledge Spike Cave", 0x83, 0xC1, 0x0112, 0x7C, $this, [0xDBBEE => [0x58]]), + ]); + + $this->shops["Dark World Lake Hylia Shop"]->clearInventory() + ->addInventory(0, Item::get('RedPotion', $world), 150) + ->addInventory(1, Item::get('BlueShield', $world), 50) + ->addInventory(2, Item::get('TenBombs', $world), 50); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Bonk Fairy (Dark)"]->setRequirements(function ($locations, $items) { + return $items->has('PegasusBoots'); + }); + + $this->shops["Dark Lake Hylia Ledge Fairy"]->setRequirements(function ($locations, $items) { + return $items->has('Flippers') && $items->canBombThings(); + }); + + $this->shops["Dark Lake Hylia Ledge Hint"]->setRequirements(function ($locations, $items) { + return $items->has('Flippers'); + }); + + $this->shops["Dark Lake Hylia Ledge Spike Cave"]->setRequirements(function ($locations, $items) { + return $items->has('Flippers') && $items->canLiftRocks(); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($items->has('MoonPearl') + || ($this->world->config('canOWYBA', false) && $items->hasABottle())) + && (($this->world->getRegion('North East Dark World')->canEnter($locations, $items) && ($items->has('Hammer') + || ($items->has('Hookshot') && ($items->has('Flippers') || $items->canLiftRocks())))) + || ($items->has('Hammer') && $items->canLiftRocks()) + || $items->canLiftDarkRocks()); + }; + + return $this; + } } diff --git a/app/Region/Standard/DesertPalace.php b/app/Region/Standard/DesertPalace.php index dcc570aca..45afb93ff 100644 --- a/app/Region/Standard/DesertPalace.php +++ b/app/Region/Standard/DesertPalace.php @@ -1,4 +1,6 @@ -boss = Boss::get("Lanmolas"); - - $this->locations = new LocationCollection([ - new Location\BigChest("Desert Palace - Big Chest", 0xE98F, null, $this), - new Location\Chest("Desert Palace - Map Chest", 0xE9B6, null, $this), - new Location\Dash("Desert Palace - Torch", 0x180160, null, $this), - new Location\Chest("Desert Palace - Big Key Chest", 0xE9C2, null, $this), - new Location\Chest("Desert Palace - Compass Chest", 0xE9CB, null, $this), - new Location\Drop("Desert Palace - Boss", 0x180151, null, $this), - - new Location\Prize\Pendant("Desert Palace - Prize", [null, 0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], null, $this), - ]); - - $this->prize_location = $this->locations["Desert Palace - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Desert Palace - Big Chest"]->setItem(Item::get('PowerGlove')); - $this->locations["Desert Palace - Map Chest"]->setItem(Item::get('MapP2')); - $this->locations["Desert Palace - Torch"]->setItem(Item::get('KeyP2')); - $this->locations["Desert Palace - Big Key Chest"]->setItem(Item::get('BigKeyP2')); - $this->locations["Desert Palace - Compass Chest"]->setItem(Item::get('CompassP2')); - $this->locations["Desert Palace - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Desert Palace - Prize"]->setItem(Item::get('PendantOfWisdom')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Desert Palace - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyP2'); - }); - - $this->locations["Desert Palace - Big Key Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyP2'); - }); - - $this->locations["Desert Palace - Compass Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyP2'); - }); - - $this->locations["Desert Palace - Torch"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots'); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Desert Palace - Boss"]->canAccess($items); - }; - - $this->locations["Desert Palace - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->canLiftRocks() && $items->canLightTorches() - && $items->has('BigKeyP2') && $items->has('KeyP2') - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassP2') || $this->locations["Desert Palace - Boss"]->hasItem(Item::get('CompassP2'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapP2') || $this->locations["Desert Palace - Boss"]->hasItem(Item::get('MapP2'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return !in_array($item, [Item::get('KeyP2'), Item::get('BigKeyP2')]); - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassP2') || $item == Item::get('MapP2')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('BookOfMudora') - || ($items->has('MagicMirror') && $items->canLiftDarkRocks() && $items->canFly())); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["Desert Palace - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) && $items->canLightTorches() - && $items->has('BigKeyP2') && $items->has('KeyP2') - && $this->boss->canBeat($items, $locations) - && (($items->has('BookOfMudora') && $items->canLiftRocks()) - || $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $this->world->getRegion('Mire')->canEnter($locations, $items))); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('BookOfMudora') - || $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $this->world->getRegion('Mire')->canEnter($locations, $items))); - }; - - return $this; - } +class DesertPalace extends Region +{ + protected $name = 'Desert Palace'; + public $music_addresses = [ + 0x1559B, + 0x1559C, + 0x1559D, + 0x1559E, + ]; + + protected $map_reveal = 0x1000; + + protected $region_items = [ + 'BigKey', + 'BigKeyP2', + 'Compass', + 'CompassP2', + 'Key', + 'KeyP2', + 'Map', + 'MapP2', + ]; + + /** + * Create a new Desert Palace Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + // set a default boss + $this->boss = Boss::get("Lanmolas", $world); + + $this->locations = new LocationCollection([ + new Location\BigChest("Desert Palace - Big Chest", [0xE98F], null, $this), + new Location\Chest("Desert Palace - Map Chest", [0xE9B6], null, $this), + new Location\Dash("Desert Palace - Torch", [0x180160], null, $this), + new Location\Chest("Desert Palace - Big Key Chest", [0xE9C2], null, $this), + new Location\Chest("Desert Palace - Compass Chest", [0xE9CB], null, $this), + new Location\Drop("Desert Palace - Boss", [0x180151], null, $this), + + new Location\Prize\Pendant("Desert Palace - Prize", [null, 0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Desert Palace - Prize"]; + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Desert Palace - Big Chest"]->setRequirements(function ($locations, $items) { + return $items->has('BigKeyP2'); + }); + + $this->locations["Desert Palace - Big Key Chest"]->setRequirements(function ($locations, $items) { + return $items->has('KeyP2'); + }); + + $this->locations["Desert Palace - Compass Chest"]->setRequirements(function ($locations, $items) { + return $items->has('KeyP2'); + }); + + $this->locations["Desert Palace - Torch"]->setRequirements(function ($locations, $items) { + return $items->has('PegasusBoots'); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Desert Palace - Boss"]->canAccess($items); + }; + + $this->locations["Desert Palace - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && ($items->canLiftRocks() + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots'))) + && $items->canLightTorches() + && $items->has('BigKeyP2') && $items->has('KeyP2') + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassP2') || $this->locations["Desert Palace - Boss"]->hasItem(Item::get('CompassP2', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapP2') || $this->locations["Desert Palace - Boss"]->hasItem(Item::get('MapP2', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return !in_array($item, [Item::get('KeyP2', $this->world), Item::get('BigKeyP2', $this->world)]); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassP2', $this->world) || $item == Item::get('MapP2', $this->world)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($items->has('BookOfMudora') + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('MagicMirror') && $items->canLiftDarkRocks() && $items->canFly($this->world))); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/EasternPalace.php b/app/Region/Standard/EasternPalace.php index fc4c6cc7c..abe756de3 100644 --- a/app/Region/Standard/EasternPalace.php +++ b/app/Region/Standard/EasternPalace.php @@ -1,4 +1,6 @@ -boss = Boss::get("Armos Knights"); - - $this->locations = new LocationCollection([ - new Location\Chest("Eastern Palace - Compass Chest", 0xE977, null, $this), - new Location\BigChest("Eastern Palace - Big Chest", 0xE97D, null, $this), - new Location\Chest("Eastern Palace - Cannonball Chest", 0xE9B3, null, $this), - new Location\Chest("Eastern Palace - Big Key Chest", 0xE9B9, null, $this), - new Location\Chest("Eastern Palace - Map Chest", 0xE9F5, null, $this), - new Location\Drop("Eastern Palace - Boss", 0x180150, null, $this), - - new Location\Prize\Pendant("Eastern Palace - Prize", [null, 0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], null, $this), - ]); - - $this->prize_location = $this->locations["Eastern Palace - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Eastern Palace - Compass Chest"]->setItem(Item::get('CompassP1')); - $this->locations["Eastern Palace - Big Chest"]->setItem(Item::get('Bow')); - $this->locations["Eastern Palace - Cannonball Chest"]->setItem(Item::get('OneHundredRupees')); - $this->locations["Eastern Palace - Big Key Chest"]->setItem(Item::get('BigKeyP1')); - $this->locations["Eastern Palace - Map Chest"]->setItem(Item::get('MapP1')); - $this->locations["Eastern Palace - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Eastern Palace - Prize"]->setItem(Item::get('PendantOfCourage')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Eastern Palace - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyP1'); - }); - - $this->locations["Eastern Palace - Big Key Chest"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Eastern Palace - Boss"]->canAccess($items); - }; - - $this->locations["Eastern Palace - Boss"]->setRequirements(function($locations, $items) { - return $items->canShootArrows() - && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('BigKeyP1') - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassP1') || $this->locations["Eastern Palace - Boss"]->hasItem(Item::get('CompassP1'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapP1') || $this->locations["Eastern Palace - Boss"]->hasItem(Item::get('MapP1'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassP1') || $item == Item::get('MapP1')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda'); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } +class EasternPalace extends Region +{ + protected $name = 'Eastern Palace'; + public $music_addresses = [ + 0x1559A, + ]; + + protected $map_reveal = 0x2000; + + protected $region_items = [ + 'BigKey', + 'BigKeyP1', + 'Compass', + 'CompassP1', + 'Key', + 'KeyP1', + 'Map', + 'MapP1', + ]; + + /** + * Create a new Eastern Palace Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + // set a default boss + $this->boss = Boss::get("Armos Knights", $world); + + $this->locations = new LocationCollection([ + new Location\Chest("Eastern Palace - Compass Chest", [0xE977], null, $this), + new Location\BigChest("Eastern Palace - Big Chest", [0xE97D], null, $this), + new Location\Chest("Eastern Palace - Cannonball Chest", [0xE9B3], null, $this), + new Location\Chest("Eastern Palace - Big Key Chest", [0xE9B9], null, $this), + new Location\Chest("Eastern Palace - Map Chest", [0xE9F5], null, $this), + new Location\Drop("Eastern Palace - Boss", [0x180150], null, $this), + + new Location\Prize\Pendant("Eastern Palace - Prize", [null, 0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Eastern Palace - Prize"]; + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Eastern Palace - Big Chest"]->setRequirements(function ($locations, $items) { + return $items->has('BigKeyP1'); + }); + + $this->locations["Eastern Palace - Big Key Chest"]->setRequirements(function ($locations, $items) { + return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Eastern Palace - Boss"]->canAccess($items); + }; + + $this->locations["Eastern Palace - Boss"]->setRequirements(function ($locations, $items) { + return $items->canShootArrows() + && ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) + || ($this->world->config('itemPlacement') === 'advanced' && $items->has('FireRod'))) + && $items->has('BigKeyP1') + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassP1') || $this->locations["Eastern Palace - Boss"]->hasItem(Item::get('CompassP1', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapP1') || $this->locations["Eastern Palace - Boss"]->hasItem(Item::get('MapP1', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassP1', $this->world) || $item == Item::get('MapP1', $this->world)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda'); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/Fountains.php b/app/Region/Standard/Fountains.php index 54b74065c..fecccf4ee 100644 --- a/app/Region/Standard/Fountains.php +++ b/app/Region/Standard/Fountains.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Fountain("Waterfall Bottle", 0x348FF, null, $this), - new Location\Fountain("Pyramid Bottle", 0x3493B, null, $this), - ]); - } +class Fountains extends Region +{ + protected $name = 'Special'; - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Waterfall Bottle"]->setItem(Item::get('BottleWithGreenPotion')); - $this->locations["Pyramid Bottle"]->setItem(Item::get('BottleWithGreenPotion')); + /** + * Create a new Fountains to hold fountain prizes + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); - return $this; - } + $this->locations = new LocationCollection([ + new Location\Fountain("Waterfall Bottle", [0x348FF], null, $this), + new Location\Fountain("Pyramid Bottle", [0x3493B], null, $this), + ]); + } } diff --git a/app/Region/Standard/GanonsTower.php b/app/Region/Standard/GanonsTower.php index 56001db88..31f92829b 100644 --- a/app/Region/Standard/GanonsTower.php +++ b/app/Region/Standard/GanonsTower.php @@ -1,4 +1,6 @@ -boss = Boss::get("Agahnim2"); - $this->boss_top = Boss::get("Moldorm"); - $this->boss_middle = Boss::get("Lanmolas"); - $this->boss_bottom = Boss::get("Armos Knights"); - - $this->locations = new LocationCollection([ - new Location\Dash("Ganon's Tower - Bob's Torch", 0x180161, null, $this), - new Location\Chest("Ganon's Tower - DMs Room - Top Left", 0xEAB8, null, $this), - new Location\Chest("Ganon's Tower - DMs Room - Top Right", 0xEABB, null, $this), - new Location\Chest("Ganon's Tower - DMs Room - Bottom Left", 0xEABE, null, $this), - new Location\Chest("Ganon's Tower - DMs Room - Bottom Right", 0xEAC1, null, $this), - new Location\Chest("Ganon's Tower - Randomizer Room - Top Left", 0xEAC4, null, $this), - new Location\Chest("Ganon's Tower - Randomizer Room - Top Right", 0xEAC7, null, $this), - new Location\Chest("Ganon's Tower - Randomizer Room - Bottom Left", 0xEACA, null, $this), - new Location\Chest("Ganon's Tower - Randomizer Room - Bottom Right", 0xEACD, null, $this), - new Location\Chest("Ganon's Tower - Firesnake Room", 0xEAD0, null, $this), - new Location\Chest("Ganon's Tower - Map Chest", 0xEAD3, null, $this), - new Location\BigChest("Ganon's Tower - Big Chest", 0xEAD6, null, $this), - new Location\Chest("Ganon's Tower - Hope Room - Left", 0xEAD9, null, $this), - new Location\Chest("Ganon's Tower - Hope Room - Right", 0xEADC, null, $this), - new Location\Chest("Ganon's Tower - Bob's Chest", 0xEADF, null, $this), - new Location\Chest("Ganon's Tower - Tile Room", 0xEAE2, null, $this), - new Location\Chest("Ganon's Tower - Compass Room - Top Left", 0xEAE5, null, $this), - new Location\Chest("Ganon's Tower - Compass Room - Top Right", 0xEAE8, null, $this), - new Location\Chest("Ganon's Tower - Compass Room - Bottom Left", 0xEAEB, null, $this), - new Location\Chest("Ganon's Tower - Compass Room - Bottom Right", 0xEAEE, null, $this), - new Location\Chest("Ganon's Tower - Big Key Chest", 0xEAF1, null, $this), - new Location\Chest("Ganon's Tower - Big Key Room - Left", 0xEAF4, null, $this), - new Location\Chest("Ganon's Tower - Big Key Room - Right", 0xEAF7, null, $this), - new Location\Chest("Ganon's Tower - Mini Helmasaur Room - Left", 0xEAFD, null, $this), - new Location\Chest("Ganon's Tower - Mini Helmasaur Room - Right", 0xEB00, null, $this), - new Location\Chest("Ganon's Tower - Pre-Moldorm Chest", 0xEB03, null, $this), - new Location\Chest("Ganon's Tower - Moldorm Chest", 0xEB06, null, $this), - new Location\Prize\Event("Agahnim 2", null, null, $this), - ]); - - $this->prize_location = $this->locations["Agahnim 2"]; - $this->prize_location->setItem(Item::get('DefeatAgahnim2')); - } - - /** - * Get the Boss of this Region. - * - * @param string $level which boss - * - * @return Boss - */ - public function getBoss(string $level = null) { - switch ($level) { - case null: - return $this->boss; - case 'top': - return $this->boss_top; - case 'middle': - return $this->boss_middle; - case 'bottom': - return $this->boss_bottom; - } - - throw new \Exception(sprintf('Unknown Boss Location %s', $level)); - } - - /** - * Set the Boss of this Region. - * - * @param Boss $boss boss of the region - * @param string $level which boss - * - * @return $this - */ - public function setBoss(Boss $boss, string $level = null) : Region { - switch ($level) { - case null: - $this->boss = $boss; - break; - case 'top': - $this->boss_top = $boss; - break; - case 'middle': - $this->boss_middle = $boss; - break; - case 'bottom': - $this->boss_bottom = $boss; - break; - default: - throw new \Exception(sprintf('Unknown Boss Location %s', $level)); - } - - return $this; - } - - /** - * Check if a Boss can be placed in this region. - * currently Agahnim or Ganon can't be moved. - * - * @param Boss $boss boss we are testing - * - * @return bool - */ - public function canPlaceBoss(Boss $boss, string $level = 'top') : bool { - if ($this->name != "Ice Palace" && $this->world->config('mode.weapons') == 'swordless' - && $boss->getName() == 'Kholdstare') { - return false; - } - - if ($level == 'top') { - return !in_array($boss->getName(), [ - "Agahnim", - "Agahnim2", - "Armos Knights", - "Arrghus", - "Blind", - "Ganon", - "Lanmolas", - "Trinexx", - ]); - } - - if ($level == 'middle') { - return !in_array($boss->getName(), [ - "Agahnim", - "Agahnim2", - "Blind", - "Ganon", - ]); - } - - return !in_array($boss->getName(), [ - "Agahnim", - "Agahnim2", - "Ganon", - ]); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Ganon's Tower - Bob's Torch"]->setItem(Item::get('KeyA2')); - $this->locations["Ganon's Tower - DMs Room - Top Left"]->setItem(Item::get('ThreeBombs')); - $this->locations["Ganon's Tower - DMs Room - Top Right"]->setItem(Item::get('TenArrows')); - $this->locations["Ganon's Tower - DMs Room - Bottom Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Ganon's Tower - DMs Room - Bottom Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Ganon's Tower - Randomizer Room - Top Left"]->setItem(Item::get('TenArrows')); - $this->locations["Ganon's Tower - Randomizer Room - Top Right"]->setItem(Item::get('TenArrows')); - $this->locations["Ganon's Tower - Randomizer Room - Bottom Left"]->setItem(Item::get('ThreeBombs')); - $this->locations["Ganon's Tower - Randomizer Room - Bottom Right"]->setItem(Item::get('ThreeBombs')); - $this->locations["Ganon's Tower - Firesnake Room"]->setItem(Item::get('KeyA2')); - $this->locations["Ganon's Tower - Map Chest"]->setItem(Item::get('MapA2')); - $this->locations["Ganon's Tower - Big Chest"]->setItem(Item::get('RedMail')); - $this->locations["Ganon's Tower - Hope Room - Left"]->setItem(Item::get('TenArrows')); - $this->locations["Ganon's Tower - Hope Room - Right"]->setItem(Item::get('ThreeBombs')); - $this->locations["Ganon's Tower - Bob's Chest"]->setItem(Item::get('TenArrows')); - $this->locations["Ganon's Tower - Tile Room"]->setItem(Item::get('KeyA2')); - $this->locations["Ganon's Tower - Compass Room - Top Left"]->setItem(Item::get('Compass')); - $this->locations["Ganon's Tower - Compass Room - Top Right"]->setItem(Item::get('OneRupee')); - $this->locations["Ganon's Tower - Compass Room - Bottom Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Ganon's Tower - Compass Room - Bottom Right"]->setItem(Item::get('TenArrows')); - $this->locations["Ganon's Tower - Big Key Chest"]->setItem(Item::get('BigKeyA2')); - $this->locations["Ganon's Tower - Big Key Room - Left"]->setItem(Item::get('TenArrows')); - $this->locations["Ganon's Tower - Big Key Room - Right"]->setItem(Item::get('ThreeBombs')); - $this->locations["Ganon's Tower - Mini Helmasaur Room - Left"]->setItem(Item::get('ThreeBombs')); - $this->locations["Ganon's Tower - Mini Helmasaur Room - Right"]->setItem(Item::get('ThreeBombs')); - $this->locations["Ganon's Tower - Pre-Moldorm Chest"]->setItem(Item::get('KeyA2')); - $this->locations["Ganon's Tower - Moldorm Chest"]->setItem(Item::get('TwentyRupees')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Ganon's Tower - Bob's Torch"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots'); - }); - - $this->locations["Ganon's Tower - DMs Room - Top Left"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot'); - }); - - $this->locations["Ganon's Tower - DMs Room - Top Right"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot'); - }); - - $this->locations["Ganon's Tower - DMs Room - Bottom Left"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot'); - }); - - $this->locations["Ganon's Tower - DMs Room - Bottom Right"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot'); - }); - - $this->locations["Ganon's Tower - Randomizer Room - Top Left"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot') - && (($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Randomizer Room - Top Right", - "Ganon's Tower - Randomizer Room - Bottom Left", - "Ganon's Tower - Randomizer Room - Bottom Right", - ]) && $items->has('KeyA2', 3)) - || $items->has('KeyA2', 4)); - }); - - $this->locations["Ganon's Tower - Randomizer Room - Top Right"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot') - && (($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Randomizer Room - Top Left", - "Ganon's Tower - Randomizer Room - Bottom Left", - "Ganon's Tower - Randomizer Room - Bottom Right", - ]) && $items->has('KeyA2', 3)) - || $items->has('KeyA2', 4)); - }); - - $this->locations["Ganon's Tower - Randomizer Room - Bottom Left"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot') - && (($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Randomizer Room - Top Right", - "Ganon's Tower - Randomizer Room - Top Left", - "Ganon's Tower - Randomizer Room - Bottom Right", - ]) && $items->has('KeyA2', 3)) - || $items->has('KeyA2', 4)); - }); - - $this->locations["Ganon's Tower - Randomizer Room - Bottom Right"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot') - && (($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Randomizer Room - Top Right", - "Ganon's Tower - Randomizer Room - Top Left", - "Ganon's Tower - Randomizer Room - Bottom Left", - ]) && $items->has('KeyA2', 3)) - || $items->has('KeyA2', 4)); - }); - - $this->locations["Ganon's Tower - Firesnake Room"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('Hookshot') - && ((($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Randomizer Room - Top Right", - "Ganon's Tower - Randomizer Room - Top Left", - "Ganon's Tower - Randomizer Room - Bottom Left", - "Ganon's Tower - Randomizer Room - Bottom Right", - ]) || $locations["Ganon's Tower - Firesnake Room"]->hasItem(Item::get('KeyA2'))) && $items->has('KeyA2', 2)) - || $items->has('KeyA2', 3)); - }); - - $this->locations["Ganon's Tower - Map Chest"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && ($items->has('PegasusBoots') || $items->has('Hookshot')) - && (in_array($locations["Ganon's Tower - Map Chest"]->getItem(), [Item::get('BigKeyA2'), Item::get('KeyA2')]) - ? $items->has('KeyA2', 3) : $items->has('KeyA2', 4)); - })->setAlwaysAllow(function($item, $items) { - return $item == Item::get('KeyA2') && $items->has('KeyA2', 3); - }); - - $this->locations["Ganon's Tower - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyA2') && $items->has('KeyA2', 3) - && (($items->has('Hammer') && $items->has('Hookshot')) || ($items->has('FireRod') && $items->has('CaneOfSomaria'))); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyA2'); - }); - - $this->locations["Ganon's Tower - Bob's Chest"]->setRequirements(function($locations, $items) { - return (($items->has('Hammer') && $items->has('Hookshot')) - || ($items->has('FireRod') && $items->has('CaneOfSomaria'))) - && $items->has('KeyA2', 3); - }); - - $this->locations["Ganon's Tower - Tile Room"]->setRequirements(function($locations, $items) { - return $items->has('CaneOfSomaria'); - }); - - $this->locations["Ganon's Tower - Compass Room - Top Left"]->setRequirements(function($locations, $items) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && (($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Compass Room - Top Right", - "Ganon's Tower - Compass Room - Bottom Left", - "Ganon's Tower - Compass Room - Bottom Right", - ]) && $items->has('KeyA2', 3)) - || $items->has('KeyA2', 4)); - }); - - $this->locations["Ganon's Tower - Compass Room - Top Right"]->setRequirements(function($locations, $items) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && (($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Compass Room - Top Left", - "Ganon's Tower - Compass Room - Bottom Left", - "Ganon's Tower - Compass Room - Bottom Right", - ]) && $items->has('KeyA2', 3)) - || $items->has('KeyA2', 4)); - }); - - $this->locations["Ganon's Tower - Compass Room - Bottom Left"]->setRequirements(function($locations, $items) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && (($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Compass Room - Top Right", - "Ganon's Tower - Compass Room - Top Left", - "Ganon's Tower - Compass Room - Bottom Right", - ]) && $items->has('KeyA2', 3)) - || $items->has('KeyA2', 4)); - }); - - $this->locations["Ganon's Tower - Compass Room - Bottom Right"]->setRequirements(function($locations, $items) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && (($locations->itemInLocations(Item::get('BigKeyA2'), [ - "Ganon's Tower - Compass Room - Top Right", - "Ganon's Tower - Compass Room - Top Left", - "Ganon's Tower - Compass Room - Bottom Left", - ]) && $items->has('KeyA2', 3)) - || $items->has('KeyA2', 4)); - }); - - $this->locations["Ganon's Tower - Big Key Chest"]->setRequirements(function($locations, $items) { - return (($items->has('Hammer') && $items->has('Hookshot')) - || ($items->has('FireRod') && $items->has('CaneOfSomaria'))) - && $items->has('KeyA2', 3) - && $this->boss_bottom->canBeat($items, $locations); - }); - - $this->locations["Ganon's Tower - Big Key Room - Left"]->setRequirements(function($locations, $items) { - return (($items->has('Hammer') && $items->has('Hookshot')) - ||($items->has('FireRod') && $items->has('CaneOfSomaria'))) - && $items->has('KeyA2', 3) - && $this->boss_bottom->canBeat($items, $locations); - }); - - $this->locations["Ganon's Tower - Big Key Room - Right"]->setRequirements(function($locations, $items) { - return (($items->has('Hammer') && $items->has('Hookshot')) - || ($items->has('FireRod') && $items->has('CaneOfSomaria'))) - && $items->has('KeyA2', 3) - && $this->boss_bottom->canBeat($items, $locations); - }); - - $this->locations["Ganon's Tower - Mini Helmasaur Room - Left"]->setRequirements(function($locations, $items) { - return $items->canShootArrows() && $items->canLightTorches() - && $items->has('BigKeyA2') && $items->has('KeyA2', 3) - && $this->boss_middle->canBeat($items, $locations); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyA2'); - }); - - $this->locations["Ganon's Tower - Mini Helmasaur Room - Right"]->setRequirements(function($locations, $items) { - return $items->canShootArrows() && $items->canLightTorches() - && $items->has('BigKeyA2') && $items->has('KeyA2', 3) - && $this->boss_middle->canBeat($items, $locations); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyA2'); - }); - - $this->locations["Ganon's Tower - Pre-Moldorm Chest"]->setRequirements(function($locations, $items) { - return $items->canShootArrows() && $items->canLightTorches() - && $items->has('BigKeyA2') && $items->has('KeyA2', 3) - && $this->boss_middle->canBeat($items, $locations); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyA2'); - }); - - $this->locations["Ganon's Tower - Moldorm Chest"]->setRequirements(function($locations, $items) { - return $items->has('Hookshot') - && $items->canShootArrows() && $items->canLightTorches() - && $items->has('BigKeyA2') && $items->has('KeyA2', 4) - && $this->boss_middle->canBeat($items, $locations) - && $this->boss_top->canBeat($items, $locations); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('KeyA2') && $item != Item::get('BigKeyA2'); - }); - - $this->can_complete = function($locations, $items) { - return $this->canEnter($locations, $items) - && $this->locations["Ganon's Tower - Moldorm Chest"]->canAccess($items) - && $this->boss->canBeat($items, $locations); - }; - - $this->prize_location->setRequirements($this->can_complete); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->has('MoonPearl') - && $items->has('Crystal1') - && $items->has('Crystal2') - && $items->has('Crystal3') - && $items->has('Crystal4') - && $items->has('Crystal5') - && $items->has('Crystal6') - && $items->has('Crystal7') - && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode. - * - * @return $this - */ - public function initMajorGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->has('PegasusBoots') && $items->has('MoonPearl'); - }; - - return $this; - } +class GanonsTower extends Region +{ + protected $name = 'Ganons Tower'; + protected $boss_bottom = null; + protected $boss_middle = null; + protected $boss_top = null; + public $music_addresses = [ + 0x155C9, + ]; + + protected $region_items = [ + 'BigKey', + 'BigKeyA2', + 'Compass', + 'CompassA2', + 'Key', + 'KeyA2', + 'Map', + 'MapA2', + ]; + + /** + * Create a new Ganons Tower Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->boss = Boss::get("Agahnim2", $world); + $this->boss_top = Boss::get("Moldorm", $world); + $this->boss_middle = Boss::get("Lanmolas", $world); + $this->boss_bottom = Boss::get("Armos Knights", $world); + + $this->locations = new LocationCollection([ + new Location\Dash("Ganon's Tower - Bob's Torch", [0x180161], null, $this), + new Location\Chest("Ganon's Tower - DMs Room - Top Left", [0xEAB8], null, $this), + new Location\Chest("Ganon's Tower - DMs Room - Top Right", [0xEABB], null, $this), + new Location\Chest("Ganon's Tower - DMs Room - Bottom Left", [0xEABE], null, $this), + new Location\Chest("Ganon's Tower - DMs Room - Bottom Right", [0xEAC1], null, $this), + new Location\Chest("Ganon's Tower - Randomizer Room - Top Left", [0xEAC4], null, $this), + new Location\Chest("Ganon's Tower - Randomizer Room - Top Right", [0xEAC7], null, $this), + new Location\Chest("Ganon's Tower - Randomizer Room - Bottom Left", [0xEACA], null, $this), + new Location\Chest("Ganon's Tower - Randomizer Room - Bottom Right", [0xEACD], null, $this), + new Location\Chest("Ganon's Tower - Firesnake Room", [0xEAD0], null, $this), + new Location\Chest("Ganon's Tower - Map Chest", [0xEAD3], null, $this), + new Location\BigChest("Ganon's Tower - Big Chest", [0xEAD6], null, $this), + new Location\Chest("Ganon's Tower - Hope Room - Left", [0xEAD9], null, $this), + new Location\Chest("Ganon's Tower - Hope Room - Right", [0xEADC], null, $this), + new Location\Chest("Ganon's Tower - Bob's Chest", [0xEADF], null, $this), + new Location\Chest("Ganon's Tower - Tile Room", [0xEAE2], null, $this), + new Location\Chest("Ganon's Tower - Compass Room - Top Left", [0xEAE5], null, $this), + new Location\Chest("Ganon's Tower - Compass Room - Top Right", [0xEAE8], null, $this), + new Location\Chest("Ganon's Tower - Compass Room - Bottom Left", [0xEAEB], null, $this), + new Location\Chest("Ganon's Tower - Compass Room - Bottom Right", [0xEAEE], null, $this), + new Location\Chest("Ganon's Tower - Big Key Chest", [0xEAF1], null, $this), + new Location\Chest("Ganon's Tower - Big Key Room - Left", [0xEAF4], null, $this), + new Location\Chest("Ganon's Tower - Big Key Room - Right", [0xEAF7], null, $this), + new Location\Chest("Ganon's Tower - Mini Helmasaur Room - Left", [0xEAFD], null, $this), + new Location\Chest("Ganon's Tower - Mini Helmasaur Room - Right", [0xEB00], null, $this), + new Location\Chest("Ganon's Tower - Pre-Moldorm Chest", [0xEB03], null, $this), + new Location\Chest("Ganon's Tower - Moldorm Chest", [0xEB06], null, $this), + new Location\Prize\Event("Agahnim 2", [], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Agahnim 2"]; + $this->prize_location->setItem(Item::get('DefeatAgahnim2', $world)); + } + + /** + * Get the Boss of this Region. + * + * @param string $level which boss + * + * @return Boss + */ + public function getBoss(string $level) + { + switch ($level) { + case '': + return $this->boss; + case 'top': + return $this->boss_top; + case 'middle': + return $this->boss_middle; + case 'bottom': + return $this->boss_bottom; + } + + throw new \Exception(sprintf('Unknown Boss Location %s', $level)); + } + + /** + * Set the Boss of this Region. + * + * @param Boss $boss boss of the region + * @param string $level which boss + * + * @return $this + */ + public function setBoss(Boss $boss, string $level = null): Region + { + switch ($level) { + case null: + $this->boss = $boss; + break; + case 'top': + $this->boss_top = $boss; + break; + case 'middle': + $this->boss_middle = $boss; + break; + case 'bottom': + $this->boss_bottom = $boss; + break; + default: + throw new \Exception(sprintf('Unknown Boss Location %s', $level)); + } + + return $this; + } + + /** + * Check if a Boss can be placed in this region. + * currently Agahnim or Ganon can't be moved. + * + * @param Boss $boss boss we are testing + * + * @return bool + */ + public function canPlaceBoss(Boss $boss, string $level = 'top'): bool + { + if ( + $this->name != "Ice Palace" && $this->world->config('mode.weapons') == 'swordless' + && $boss->getName() == 'Kholdstare' + ) { + return false; + } + + if ($level == 'top') { + return !in_array($boss->getName(), [ + "Agahnim", + "Agahnim2", + "Armos Knights", + "Arrghus", + "Blind", + "Ganon", + "Lanmolas", + "Trinexx", + ]); + } + + if ($level == 'middle') { + return !in_array($boss->getName(), [ + "Agahnim", + "Agahnim2", + "Blind", + "Ganon", + ]); + } + + return !in_array($boss->getName(), [ + "Agahnim", + "Agahnim2", + "Ganon", + ]); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Ganon's Tower - Bob's Torch"]->setRequirements(function ($locations, $items) { + return $items->has('PegasusBoots'); + }); + + $this->locations["Ganon's Tower - DMs Room - Top Left"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot'); + }); + + $this->locations["Ganon's Tower - DMs Room - Top Right"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot'); + }); + + $this->locations["Ganon's Tower - DMs Room - Bottom Left"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot'); + }); + + $this->locations["Ganon's Tower - DMs Room - Bottom Right"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot'); + }); + + $this->locations["Ganon's Tower - Randomizer Room - Top Left"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot') + && (($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Randomizer Room - Top Right", + "Ganon's Tower - Randomizer Room - Bottom Left", + "Ganon's Tower - Randomizer Room - Bottom Right", + ]) && $items->has('KeyA2', 3)) + || $items->has('KeyA2', 4)); + }); + + $this->locations["Ganon's Tower - Randomizer Room - Top Right"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot') + && (($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Randomizer Room - Top Left", + "Ganon's Tower - Randomizer Room - Bottom Left", + "Ganon's Tower - Randomizer Room - Bottom Right", + ]) && $items->has('KeyA2', 3)) + || $items->has('KeyA2', 4)); + }); + + $this->locations["Ganon's Tower - Randomizer Room - Bottom Left"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot') + && (($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Randomizer Room - Top Right", + "Ganon's Tower - Randomizer Room - Top Left", + "Ganon's Tower - Randomizer Room - Bottom Right", + ]) && $items->has('KeyA2', 3)) + || $items->has('KeyA2', 4)); + }); + + $this->locations["Ganon's Tower - Randomizer Room - Bottom Right"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot') + && (($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Randomizer Room - Top Right", + "Ganon's Tower - Randomizer Room - Top Left", + "Ganon's Tower - Randomizer Room - Bottom Left", + ]) && $items->has('KeyA2', 3)) + || $items->has('KeyA2', 4)); + }); + + $this->locations["Ganon's Tower - Firesnake Room"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->has('Hookshot') + && ((($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Randomizer Room - Top Right", + "Ganon's Tower - Randomizer Room - Top Left", + "Ganon's Tower - Randomizer Room - Bottom Left", + "Ganon's Tower - Randomizer Room - Bottom Right", + ]) || $locations["Ganon's Tower - Firesnake Room"]->hasItem(Item::get('KeyA2', $this->world))) && $items->has('KeyA2', 2)) + || $items->has('KeyA2', 3)); + }); + + $this->locations["Ganon's Tower - Map Chest"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && ($items->has('PegasusBoots') || $items->has('Hookshot')) + && (in_array($locations["Ganon's Tower - Map Chest"]->getItem(), [Item::get('BigKeyA2', $this->world), Item::get('KeyA2', $this->world)]) + ? $items->has('KeyA2', 3) : $items->has('KeyA2', 4)); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('accessibility') !== 'locations' && $item == Item::get('KeyA2', $this->world) && $items->has('KeyA2', 3); + })->setFillRules(function ($item, $locations, $items) { + return $this->world->config('accessibility') !== 'locations' || $item != Item::get('KeyA2', $this->world); + }); + + $this->locations["Ganon's Tower - Big Chest"]->setRequirements(function ($locations, $items) { + return $items->has('BigKeyA2') && $items->has('KeyA2', 3) + && (($items->has('Hammer') && $items->has('Hookshot')) || ($items->has('FireRod') && $items->has('CaneOfSomaria'))); + })->setFillRules(function ($item, $locations, $items) { + return $item != Item::get('BigKeyA2', $this->world); + }); + + $this->locations["Ganon's Tower - Bob's Chest"]->setRequirements(function ($locations, $items) { + return (($items->has('Hammer') && $items->has('Hookshot')) + || ($items->has('FireRod') && $items->has('CaneOfSomaria'))) + && $items->has('KeyA2', 3); + }); + + $this->locations["Ganon's Tower - Tile Room"]->setRequirements(function ($locations, $items) { + return $items->has('CaneOfSomaria'); + }); + + $this->locations["Ganon's Tower - Compass Room - Top Left"]->setRequirements(function ($locations, $items) { + return $items->has('FireRod') && $items->has('CaneOfSomaria') + && (($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Compass Room - Top Right", + "Ganon's Tower - Compass Room - Bottom Left", + "Ganon's Tower - Compass Room - Bottom Right", + ]) && $items->has('KeyA2', 3)) + || $items->has('KeyA2', 4)); + }); + + $this->locations["Ganon's Tower - Compass Room - Top Right"]->setRequirements(function ($locations, $items) { + return $items->has('FireRod') && $items->has('CaneOfSomaria') + && (($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Compass Room - Top Left", + "Ganon's Tower - Compass Room - Bottom Left", + "Ganon's Tower - Compass Room - Bottom Right", + ]) && $items->has('KeyA2', 3)) + || $items->has('KeyA2', 4)); + }); + + $this->locations["Ganon's Tower - Compass Room - Bottom Left"]->setRequirements(function ($locations, $items) { + return $items->has('FireRod') && $items->has('CaneOfSomaria') + && (($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Compass Room - Top Right", + "Ganon's Tower - Compass Room - Top Left", + "Ganon's Tower - Compass Room - Bottom Right", + ]) && $items->has('KeyA2', 3)) + || $items->has('KeyA2', 4)); + }); + + $this->locations["Ganon's Tower - Compass Room - Bottom Right"]->setRequirements(function ($locations, $items) { + return $items->has('FireRod') && $items->has('CaneOfSomaria') + && (($locations->itemInLocations(Item::get('BigKeyA2', $this->world), [ + "Ganon's Tower - Compass Room - Top Right", + "Ganon's Tower - Compass Room - Top Left", + "Ganon's Tower - Compass Room - Bottom Left", + ]) && $items->has('KeyA2', 3)) + || $items->has('KeyA2', 4)); + }); + + $this->locations["Ganon's Tower - Big Key Chest"]->setRequirements(function ($locations, $items) { + return (($items->has('Hammer') && $items->has('Hookshot')) + || ($items->has('FireRod') && $items->has('CaneOfSomaria'))) + && $items->has('KeyA2', 3) + && $this->boss_bottom->canBeat($items, $locations); + }); + + $this->locations["Ganon's Tower - Big Key Room - Left"]->setRequirements(function ($locations, $items) { + return (($items->has('Hammer') && $items->has('Hookshot')) + || ($items->has('FireRod') && $items->has('CaneOfSomaria'))) + && $items->has('KeyA2', 3) + && $this->boss_bottom->canBeat($items, $locations); + }); + + $this->locations["Ganon's Tower - Big Key Room - Right"]->setRequirements(function ($locations, $items) { + return (($items->has('Hammer') && $items->has('Hookshot')) + || ($items->has('FireRod') && $items->has('CaneOfSomaria'))) + && $items->has('KeyA2', 3) + && $this->boss_bottom->canBeat($items, $locations); + }); + + $this->locations["Ganon's Tower - Mini Helmasaur Room - Left"]->setRequirements(function ($locations, $items) { + return $items->canShootArrows() && $items->canLightTorches() + && $items->has('BigKeyA2') && $items->has('KeyA2', 3) + && $this->boss_middle->canBeat($items, $locations); + })->setFillRules(function ($item, $locations, $items) { + return $item != Item::get('BigKeyA2', $this->world); + }); + + $this->locations["Ganon's Tower - Mini Helmasaur Room - Right"]->setRequirements(function ($locations, $items) { + return $items->canShootArrows() && $items->canLightTorches() + && $items->has('BigKeyA2') && $items->has('KeyA2', 3) + && $this->boss_middle->canBeat($items, $locations); + })->setFillRules(function ($item, $locations, $items) { + return $item != Item::get('BigKeyA2', $this->world); + }); + + $this->locations["Ganon's Tower - Pre-Moldorm Chest"]->setRequirements(function ($locations, $items) { + return $items->canShootArrows() && $items->canLightTorches() + && $items->has('BigKeyA2') && $items->has('KeyA2', 3) + && $this->boss_middle->canBeat($items, $locations); + })->setFillRules(function ($item, $locations, $items) { + return $item != Item::get('BigKeyA2', $this->world); + }); + + $this->locations["Ganon's Tower - Moldorm Chest"]->setRequirements(function ($locations, $items) { + return $items->has('Hookshot') + && $items->canShootArrows() && $items->canLightTorches() + && $items->has('BigKeyA2') && $items->has('KeyA2', 4) + && $this->boss_middle->canBeat($items, $locations) + && $this->boss_top->canBeat($items, $locations); + })->setFillRules(function ($item, $locations, $items) { + return $item != Item::get('KeyA2', $this->world) && $item != Item::get('BigKeyA2', $this->world); + }); + + $this->can_complete = function ($locations, $items) { + return $this->canEnter($locations, $items) + && $this->locations["Ganon's Tower - Moldorm Chest"]->canAccess($items) + && $this->boss->canBeat($items, $locations); + }; + + $this->prize_location->setRequirements($this->can_complete); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($this->world->config('itemPlacement') !== 'basic' + || (($this->world->config('mode.weapons') === 'swordless' || $items->hasSword(2)) && $items->hasHealth(12) && ($items->hasBottle(2) || $items->hasArmor()))) + && (($items->has('MoonPearl') + && ((($items->has('Crystal1') + + $items->has('Crystal2') + + $items->has('Crystal3') + + $items->has('Crystal4') + + $items->has('Crystal5') + + $items->has('Crystal6') + + $items->has('Crystal7')) >= $this->world->config('crystals.tower', 7)) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')))) + || $this->world->config('canOneFrameClipOW', false)) + && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items); + }; + + return $this; + } } diff --git a/app/Region/Standard/HyruleCastleEscape.php b/app/Region/Standard/HyruleCastleEscape.php index eb5a5cc27..630940b28 100644 --- a/app/Region/Standard/HyruleCastleEscape.php +++ b/app/Region/Standard/HyruleCastleEscape.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Sanctuary", 0xEA79, null, $this), - new Location\Chest("Sewers - Secret Room - Left", 0xEB5D, null, $this), - new Location\Chest("Sewers - Secret Room - Middle", 0xEB60, null, $this), - new Location\Chest("Sewers - Secret Room - Right", 0xEB63, null, $this), - new Location\Chest("Sewers - Dark Cross", 0xE96E, null, $this), - new Location\Chest("Hyrule Castle - Boomerang Chest", 0xE974, null, $this), - new Location\Chest("Hyrule Castle - Map Chest", 0xEB0C, null, $this), - new Location\Chest("Hyrule Castle - Zelda's Cell", 0xEB09, null, $this), - new Location\Npc\Uncle("Link's Uncle", 0x2DF45, null, $this), - new Location\Chest("Secret Passage", 0xE971, null, $this), - new Location\Prize\Event("Zelda", null, null, $this), - ]); - - $this->prize_location = $this->locations["Zelda"]; - $this->prize_location->setItem(Item::get('RescueZelda')); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Sanctuary"]->setItem(Item::get('HeartContainer')); - $this->locations["Sewers - Secret Room - Left"]->setItem(Item::get('ThreeBombs')); - $this->locations["Sewers - Secret Room - Middle"]->setItem(Item::get('ThreeHundredRupees')); - $this->locations["Sewers - Secret Room - Right"]->setItem(Item::get('TenArrows')); - $this->locations["Sewers - Dark Cross"]->setItem(Item::get('KeyH2')); - $this->locations["Hyrule Castle - Boomerang Chest"]->setItem(Item::get('Boomerang')); - $this->locations["Hyrule Castle - Map Chest"]->setItem(Item::get('MapH2')); - $this->locations["Hyrule Castle - Zelda's Cell"]->setItem(Item::get('Lamp')); - $this->locations["Link's Uncle"]->setItem(Item::get('L1SwordAndShield')); - $this->locations["Secret Passage"]->setItem(Item::get('Lamp')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Sanctuary"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings() && $items->has('KeyH2'); - }); - - $this->locations["Sewers - Secret Room - Left"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings() && $items->has('KeyH2'); - }); - - $this->locations["Sewers - Secret Room - Middle"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings() && $items->has('KeyH2'); - }); - - $this->locations["Sewers - Secret Room - Right"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings() && $items->has('KeyH2'); - }); - - $this->locations["Sewers - Dark Cross"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings(); - }); - - $this->locations["Hyrule Castle - Boomerang Chest"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings(); - }); - - $this->locations["Hyrule Castle - Map Chest"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings(); - }); - - $this->locations["Hyrule Castle - Zelda's Cell"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings(); - }); - - $this->locations["Secret Passage"]->setRequirements(function($locations, $items) { - return $items->canKillMostThings(); - })->setFillRules(function($item, $locations, $items) { - return !((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) - || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) - || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) - || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)); - }); - - $this->locations["Link's Uncle"]->setFillRules(function($item, $locations, $items) { - return $this->locations["Sanctuary"]->canAccess($this->world->collectItems()) - && !((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) - || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) - || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) - || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Sanctuary"]->canAccess($items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } +class HyruleCastleEscape extends Region +{ + protected $name = 'Hyrule Castle'; + + protected $region_items = [ + 'BigKey', + 'BigKeyH2', + 'Compass', + 'CompassH2', + 'Key', + 'KeyH2', + 'Map', + 'MapH2', + ]; + + /** + * Create a new Hyrule Castle Escape Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Chest("Sanctuary", [0xEA79], null, $this), + new Location\Chest("Sewers - Secret Room - Left", [0xEB5D], null, $this), + new Location\Chest("Sewers - Secret Room - Middle", [0xEB60], null, $this), + new Location\Chest("Sewers - Secret Room - Right", [0xEB63], null, $this), + new Location\Chest("Sewers - Dark Cross", [0xE96E], null, $this), + new Location\Chest("Hyrule Castle - Boomerang Chest", [0xE974], null, $this), + new Location\Chest("Hyrule Castle - Map Chest", [0xEB0C], null, $this), + new Location\Chest("Hyrule Castle - Zelda's Cell", [0xEB09], null, $this), + new Location\Npc\Uncle("Link's Uncle", [0x2DF45], null, $this), + new Location\Chest("Secret Passage", [0xE971], null, $this), + new Location\Prize\Event("Zelda", [], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + + $this->prize_location = $this->locations["Zelda"]; + $this->prize_location->setItem(Item::get('RescueZelda', $world)); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Sanctuary"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings() && $items->has('KeyH2'); + }); + + $this->locations["Sewers - Secret Room - Left"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings() && $items->has('KeyH2'); + }); + + $this->locations["Sewers - Secret Room - Middle"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings() && $items->has('KeyH2'); + }); + + $this->locations["Sewers - Secret Room - Right"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings() && $items->has('KeyH2'); + }); + + $this->locations["Sewers - Dark Cross"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings(); + }); + + $this->locations["Hyrule Castle - Boomerang Chest"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings(); + }); + + $this->locations["Hyrule Castle - Map Chest"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings(); + }); + + $this->locations["Hyrule Castle - Zelda's Cell"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings(); + }); + + $this->locations["Secret Passage"]->setRequirements(function ($locations, $items) { + return $items->canKillEscapeThings(); + })->setFillRules(function ($item, $locations, $items) { + return !((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) + || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) + || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) + || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)); + }); + + $this->locations["Link's Uncle"]->setFillRules(function ($item, $locations, $items) { + return $this->locations["Sanctuary"]->canAccess($this->world->collectItems()) + && !((!$this->world->config('region.wildKeys', false) && $item instanceof Item\Key) + || (!$this->world->config('region.wildBigKeys', false) && $item instanceof Item\BigKey) + || (!$this->world->config('region.wildMaps', false) && $item instanceof Item\Map) + || (!$this->world->config('region.wildCompasses', false) && $item instanceof Item\Compass)); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Sanctuary"]->canAccess($items); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/HyruleCastleTower.php b/app/Region/Standard/HyruleCastleTower.php index ba051321f..4e71e211c 100644 --- a/app/Region/Standard/HyruleCastleTower.php +++ b/app/Region/Standard/HyruleCastleTower.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Castle Tower - Room 03", 0xEAB5, null, $this), - new Location\Chest("Castle Tower - Dark Maze", 0xEAB2, null, $this), - new Location\Prize\Event("Agahnim", null, null, $this), - ]); +class HyruleCastleTower extends Region +{ + protected $name = 'Castle Tower'; - $this->prize_location = $this->locations["Agahnim"]; - $this->prize_location->setItem(Item::get('DefeatAgahnim')); - } + protected $region_items = [ + 'BigKey', + 'BigKeyA1', + 'Compass', + 'CompassA1', + 'Key', + 'KeyA1', + 'Map', + 'MapA1', + ]; - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Castle Tower - Room 03"]->setItem(Item::get('KeyA1')); - $this->locations["Castle Tower - Dark Maze"]->setItem(Item::get('KeyA1')); + /** + * Create a new Hyrule Castle Tower Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); - return $this; - } + $this->locations = new LocationCollection([ + new Location\Chest("Castle Tower - Room 03", [0xEAB5], null, $this), + new Location\Chest("Castle Tower - Dark Maze", [0xEAB2], null, $this), + new Location\Prize\Event("Agahnim", [], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Agahnim"]; + $this->prize_location->setItem(Item::get('DefeatAgahnim', $world)); + } - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Castle Tower - Dark Maze"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyA1'); - }); + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Castle Tower - Dark Maze"]->setRequirements(function ($locations, $items) { + return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyA1'); + }); - $this->can_complete = function($locations, $items) { - return $this->canEnter($locations, $items) && $items->has('KeyA1', 2) - && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && ($items->hasSword() - || ($this->world->config('mode.weapons')== 'swordless' && ($items->has('Hammer') || $items->has('BugCatchingNet')))); - }; + $this->can_complete = function ($locations, $items) { + return $this->canEnter($locations, $items) && $items->has('KeyA1', 2) + && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && ($items->hasSword() + || ($this->world->config('mode.weapons') == 'swordless' && ($items->has('Hammer') || $items->has('BugCatchingNet')))); + }; - $this->prize_location->setRequirements($this->can_complete); + $this->prize_location->setRequirements($this->can_complete); - $this->can_enter = function($locations, $items) { - return $items->canKillMostThings(8) - && $items->has('RescueZelda') - && ($items->has('Cape') - || $items->hasSword(2) - || ($this->world->config('mode.weapons')== 'swordless' && $items->has('Hammer'))); - }; + $this->can_enter = function ($locations, $items) { + return $items->canKillMostThings(8) + && $items->has('RescueZelda') + && ($items->has('Cape') + || $items->hasSword(2) + || ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer'))); + }; - return $this; - } + return $this; + } } diff --git a/app/Region/Standard/IcePalace.php b/app/Region/Standard/IcePalace.php index ad1b08f1e..e913c0812 100644 --- a/app/Region/Standard/IcePalace.php +++ b/app/Region/Standard/IcePalace.php @@ -1,4 +1,6 @@ -boss = Boss::get("Kholdstare"); - - $this->locations = new LocationCollection([ - new Location\Chest("Ice Palace - Big Key Chest", 0xE9A4, null, $this), - new Location\Chest("Ice Palace - Compass Chest", 0xE9D4, null, $this), - new Location\Chest("Ice Palace - Map Chest", 0xE9DD, null, $this), - new Location\Chest("Ice Palace - Spike Room", 0xE9E0, null, $this), - new Location\Chest("Ice Palace - Freezor Chest", 0xE995, null, $this), - new Location\Chest("Ice Palace - Iced T Room", 0xE9E3, null, $this), - new Location\BigChest("Ice Palace - Big Chest", 0xE9AA, null, $this), - new Location\Drop("Ice Palace - Boss", 0x180157, null, $this), - - new Location\Prize\Crystal("Ice Palace - Prize", [null, 0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], null, $this), - ]); - - $this->prize_location = $this->locations["Ice Palace - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Ice Palace - Big Key Chest"]->setItem(Item::get('BigKeyD5')); - $this->locations["Ice Palace - Compass Chest"]->setItem(Item::get('CompassD5')); - $this->locations["Ice Palace - Map Chest"]->setItem(Item::get('MapD5')); - $this->locations["Ice Palace - Spike Room"]->setItem(Item::get('KeyD5')); - $this->locations["Ice Palace - Freezor Chest"]->setItem(Item::get('ThreeBombs')); - $this->locations["Ice Palace - Iced T Room"]->setItem(Item::get('KeyD5')); - $this->locations["Ice Palace - Big Chest"]->setItem(Item::get('BlueMail')); - $this->locations["Ice Palace - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Ice Palace - Prize"]->setItem(Item::get('Crystal5')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Ice Palace - Big Key Chest"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->canLiftRocks() - && (!$this->world->config('region.cantTakeDamage', false) - || $items->has('CaneOfByrna') || $items->has('Cape') || $items->has('Hookshot')) - && $this->locations["Ice Palace - Spike Room"]->canAccess($items, $locations); - }); - - $this->locations["Ice Palace - Map Chest"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->canLiftRocks() - && (!$this->world->config('region.cantTakeDamage', false) - || $items->has('CaneOfByrna') || $items->has('Cape') || $items->has('Hookshot')) - && $this->locations["Ice Palace - Spike Room"]->canAccess($items, $locations); - }); - - $this->locations["Ice Palace - Spike Room"]->setRequirements(function($locations, $items) { - return (!$this->world->config('region.cantTakeDamage', false) - || $items->has('CaneOfByrna') || $items->has('Cape') || $items->has('Hookshot')) - && ($items->has('Hookshot') || ($items->has('BigKeyD5') ? $items->has('Hookshot') : $items->has('KeyD5', 1))); - }); - - $this->locations["Ice Palace - Freezor Chest"]->setRequirements(function($locations, $items) { - return $items->canMeltThings(); - }); - - $this->locations["Ice Palace - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyD5'); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Ice Palace - Boss"]->canAccess($items); - }; - - $this->locations["Ice Palace - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->has('Hammer') && $items->canMeltThings() && $items->canLiftRocks() - && $this->boss->canBeat($items, $locations) - && $items->has('BigKeyD5') && ( - ($items->has('CaneOfSomaria') && $items->has('KeyD5')) - || $items->has('KeyD5', 2) - ) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD5') || $this->locations["Ice Palace - Boss"]->hasItem(Item::get('CompassD5'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD5') || $this->locations["Ice Palace - Boss"]->hasItem(Item::get('MapD5'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && (is_a($item, Item\Key::class) || is_a($item, Item\BigKey::class) - || is_a($item, Item\Map::class) || is_a($item, Item\Compass::class))) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassD5') || $item == Item::get('MapD5')); - }); - - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->has('MoonPearl') && $items->has('Flippers') - && $items->canLiftDarkRocks() && $items->canMeltThings(); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode. - * - * @return $this - */ - public function initMajorGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->canLiftDarkRocks() - || ($items->has('MagicMirror') && $items->glitchedLinkInDarkWorld() - && $this->world->getRegion('South Dark World')->canEnter($locations, $items))); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->canLiftDarkRocks() && $items->canMeltThings(); - }; - - return $this; - } +class IcePalace extends Region +{ + protected $name = 'Ice Palace'; + public $music_addresses = [ + 0x155BF, + ]; + + protected $map_reveal = 0x0040; + + protected $region_items = [ + 'BigKey', + 'BigKeyD5', + 'Compass', + 'CompassD5', + 'Key', + 'KeyD5', + 'Map', + 'MapD5', + ]; + + /** + * Create a new Ice Palace Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->boss = Boss::get("Kholdstare", $world); + + $this->locations = new LocationCollection([ + new Location\Chest("Ice Palace - Big Key Chest", [0xE9A4], null, $this), + new Location\Chest("Ice Palace - Compass Chest", [0xE9D4], null, $this), + new Location\Chest("Ice Palace - Map Chest", [0xE9DD], null, $this), + new Location\Chest("Ice Palace - Spike Room", [0xE9E0], null, $this), + new Location\Chest("Ice Palace - Freezor Chest", [0xE995], null, $this), + new Location\Chest("Ice Palace - Iced T Room", [0xE9E3], null, $this), + new Location\BigChest("Ice Palace - Big Chest", [0xE9AA], null, $this), + new Location\Drop("Ice Palace - Boss", [0x180157], null, $this), + + new Location\Prize\Crystal("Ice Palace - Prize", [null, 0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Ice Palace - Prize"]; + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Ice Palace - Big Key Chest"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->canLiftRocks() + && (!$this->world->config('region.cantTakeDamage', false) + || $items->has('CaneOfByrna') || $items->has('Cape') || $items->has('Hookshot')) + && $this->locations["Ice Palace - Spike Room"]->canAccess($items, $locations); + }); + + $this->locations["Ice Palace - Map Chest"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') && $items->canLiftRocks() + && (!$this->world->config('region.cantTakeDamage', false) + || $items->has('CaneOfByrna') || $items->has('Cape') || $items->has('Hookshot')) + && $this->locations["Ice Palace - Spike Room"]->canAccess($items, $locations); + }); + + $this->locations["Ice Palace - Spike Room"]->setRequirements(function ($locations, $items) { + return (!$this->world->config('region.cantTakeDamage', false) + || $items->has('CaneOfByrna') || $items->has('Cape') || $items->has('Hookshot')) + && ($items->has('Hookshot') || ($items->has('BigKeyD5') ? $items->has('Hookshot') : $items->has('KeyD5', 1))); + }); + + $this->locations["Ice Palace - Freezor Chest"]->setRequirements(function ($locations, $items) { + return $items->canMeltThings($this->world); + }); + + $this->locations["Ice Palace - Big Chest"]->setRequirements(function ($locations, $items) { + return $items->has('BigKeyD5'); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Ice Palace - Boss"]->canAccess($items); + }; + + $this->locations["Ice Palace - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && $items->has('Hammer') && $items->canMeltThings($this->world) && $items->canLiftRocks() + && $this->boss->canBeat($items, $locations) + && $items->has('BigKeyD5') && ( + ($this->world->config('itemPlacement') !== 'basic' && ($items->has('CaneOfSomaria') && $items->has('KeyD5') + || $items->has('KeyD5', 2))) + || ($this->world->config('itemPlacement') === 'basic' && $items->has('KeyD5', 2))) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD5') || $this->locations["Ice Palace - Boss"]->hasItem(Item::get('CompassD5', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD5') || $this->locations["Ice Palace - Boss"]->hasItem(Item::get('MapD5', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && (is_a($item, Item\Key::class) || is_a($item, Item\BigKey::class) + || is_a($item, Item\Map::class) || is_a($item, Item\Compass::class)) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassD5', $this->world) || $item == Item::get('MapD5', $this->world)); + }); + + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($this->world->config('itemPlacement') !== 'basic' + || (($this->world->config('mode.weapons') === 'swordless' || $items->hasSword(2)) && $items->hasHealth(12) && ($items->hasBottle(2) || $items->hasArmor()))) + && ($items->canMeltThings($this->world) || $this->world->config('canOneFrameClipUW', false)) + && ((($items->has('MoonPearl') || $this->world->config('canDungeonRevive', false)) + && ($items->has('Flippers') || $this->world->config('canFakeFlipper', false)) + && $items->canLiftDarkRocks()) + || ($items->has('MagicMirror') && $this->world->config('canMirrorWrap', false) + && ($items->has('MoonPearl') || ($this->world->config('canOWYBA', false) && $items->hasABottle())) + && $this->world->getRegion('South Dark World')->canEnter($locations, $items))); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/LightWorld/DeathMountain/East.php b/app/Region/Standard/LightWorld/DeathMountain/East.php index a3bd9a8cc..f954745c3 100644 --- a/app/Region/Standard/LightWorld/DeathMountain/East.php +++ b/app/Region/Standard/LightWorld/DeathMountain/East.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Spiral Cave", 0xE9BF, null, $this), - new Location\Chest("Mimic Cave", 0xE9C5, null, $this), - new Location\Chest("Paradox Cave Lower - Far Left", 0xEB2A, null, $this), - new Location\Chest("Paradox Cave Lower - Left", 0xEB2D, null, $this), - new Location\Chest("Paradox Cave Lower - Right", 0xEB30, null, $this), - new Location\Chest("Paradox Cave Lower - Far Right", 0xEB33, null, $this), - new Location\Chest("Paradox Cave Lower - Middle", 0xEB36, null, $this), - new Location\Chest("Paradox Cave Upper - Left", 0xEB39, null, $this), - new Location\Chest("Paradox Cave Upper - Right", 0xEB3C, null, $this), - new Location\Standing("Floating Island", 0x180141, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop("Light World Death Mountain Shop", 0x43, 0xA0, 0x00FF, 0x00, $this), - - new Shop\TakeAny("Hookshot Fairy", 0x83, 0xA0, 0x0112, 0x50, $this, [0xDBBC2 => [0x58]]), - ]); - - $this->shops["Light World Death Mountain Shop"]->clearInventory() - ->addInventory(0, Item::get('RedPotion'), 150) - ->addInventory(1, Item::get('Heart'), 10) - ->addInventory(2, Item::get('TenBombs'), 50); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Spiral Cave"]->setItem(Item::get('FiftyRupees')); - $this->locations["Mimic Cave"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Paradox Cave Lower - Far Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Paradox Cave Lower - Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Paradox Cave Lower - Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Paradox Cave Lower - Far Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Paradox Cave Lower - Middle"]->setItem(Item::get('TwentyRupees')); - $this->locations["Paradox Cave Upper - Left"]->setItem(Item::get('ThreeBombs')); - $this->locations["Paradox Cave Upper - Right"]->setItem(Item::get('TenArrows')); - $this->locations["Floating Island"]->setItem(Item::get('PieceOfHeart')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Light World Death Mountain Shop"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - $this->locations["Mimic Cave"]->setRequirements(function($locations, $items) { - return $items->has('MagicMirror') && $items->has('KeyD7', 2) - && $this->world->getRegion('Turtle Rock')->canEnter($locations, $items); - }); - - $this->locations["Floating Island"]->setRequirements(function($locations, $items) { - return $items->has('MagicMirror') && $items->has('MoonPearl') - && $items->canLiftDarkRocks(); - }); - - $this->can_enter = function($locations, $items) { - return $this->world->getRegion('West Death Mountain')->canEnter($locations, $items) - && $items->has('RescueZelda') - && (($items->has('Hammer') && $items->has('MagicMirror')) - || $items->has('Hookshot')); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - $this->locations["Floating Island"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $items->glitchedLinkInDarkWorld() - && $items->canLiftRocks() && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items)); - }); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->locations["Mimic Cave"]->setRequirements(function($locations, $items) { - return $items->has('Hammer') && $items->has('MagicMirror') - && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items); - }); - - $this->locations["Floating Island"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $items->has('MoonPearl') - && $items->canLiftRocks() && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items)); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('PegasusBoots') - || (($items->has('Hookshot') || $items->has('MagicMirror')) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); - }; - - return $this; - } +class East extends Region +{ + protected $name = 'Death Mountain'; + + /** + * Create a new East Death Mountain Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Chest("Spiral Cave", [0xE9BF], null, $this), + new Location\Chest("Mimic Cave", [0xE9C5], null, $this), + new Location\Chest("Paradox Cave Lower - Far Left", [0xEB2A], null, $this), + new Location\Chest("Paradox Cave Lower - Left", [0xEB2D], null, $this), + new Location\Chest("Paradox Cave Lower - Right", [0xEB30], null, $this), + new Location\Chest("Paradox Cave Lower - Far Right", [0xEB33], null, $this), + new Location\Chest("Paradox Cave Lower - Middle", [0xEB36], null, $this), + new Location\Chest("Paradox Cave Upper - Left", [0xEB39], null, $this), + new Location\Chest("Paradox Cave Upper - Right", [0xEB3C], null, $this), + new Location\Standing("Floating Island", [0x180141], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->shops = new ShopCollection([ + new Shop("Light World Death Mountain Shop", 0x43, 0xA0, 0x00FF, 0x00, $this), + + new Shop\TakeAny("Hookshot Fairy", 0x83, 0xA0, 0x0112, 0x50, $this, [0xDBBC2 => [0x58]]), + ]); + + $this->shops["Light World Death Mountain Shop"]->clearInventory() + ->addInventory(0, Item::get('RedPotion', $world), 150) + ->addInventory(1, Item::get('Heart', $world), 10) + ->addInventory(2, Item::get('TenBombs', $world), 50); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Light World Death Mountain Shop"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->locations["Mimic Cave"]->setRequirements(function ($locations, $items) { + return $items->has('Hammer') + && ((($this->world->config('canMirrorClip', false) && $items->has('MagicMirror')) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots') && $items->has('MoonPearl')) + && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items)) + || ($items->has('MagicMirror') && $items->has('KeyD7', 2) + && $this->world->getRegion('Turtle Rock')->canEnter($locations, $items))); + }); + + $this->locations["Floating Island"]->setRequirements(function ($locations, $items) { + return ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('MagicMirror') && $items->has('MoonPearl') + && $items->canBombThings() + && $items->canLiftRocks() + && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items) + && ($this->world->config('canOneFrameClipOW', false) + || ($this->world->config('canMirrorClip', false) && $items->has('MagicMirror')) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('Hammer') && $items->has('MagicMirror')) + || $items->has('Hookshot')); + }; + + return $this; + } } diff --git a/app/Region/Standard/LightWorld/DeathMountain/West.php b/app/Region/Standard/LightWorld/DeathMountain/West.php index 81a018596..1c3dc3e42 100644 --- a/app/Region/Standard/LightWorld/DeathMountain/West.php +++ b/app/Region/Standard/LightWorld/DeathMountain/West.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Npc("Old Man", 0xF69FA, null, $this), - new Location\Standing("Spectacle Rock Cave", 0x180002, null, $this), - new Location\Drop\Ether("Ether Tablet", 0x180016, null, $this), - new Location\Standing("Spectacle Rock", 0x180140, null, $this), - ]); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Old Man"]->setItem(Item::get('MagicMirror')); - $this->locations["Spectacle Rock Cave"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Ether Tablet"]->setItem(Item::get('Ether')); - $this->locations["Spectacle Rock"]->setItem(Item::get('PieceOfHeart')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Old Man"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)); - }); - - $this->locations["Ether Tablet"]->setRequirements(function($locations, $items) { - return $items->has('BookOfMudora') && ($items->hasSword(2) - || ($this->world->config('mode.weapons')== 'swordless' && $items->has('Hammer'))) - && ($items->has('MagicMirror') || ($items->has('Hammer') && $items->has('Hookshot'))); - }); - - $this->locations["Spectacle Rock"]->setRequirements(function($locations, $items) { - return $items->has('MagicMirror'); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->canFly() - || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)))); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('PegasusBoots') || $items->hasABottle() - || $items->canFly() || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)))); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["Ether Tablet"]->setRequirements(function($locations, $items) { - return $items->has('BookOfMudora') && ($items->hasSword(2) - || ($this->world->config('mode.weapons')== 'swordless' && $items->has('Hammer'))) - && $this->world->getRegion('Tower of Hera')->canEnter($locations, $items); - }); - - $this->locations["Spectacle Rock"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || $items->has('MagicMirror'); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('PegasusBoots') - || $items->canFly() || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)))); - }; - - return $this; - } +class West extends Region +{ + protected $name = 'Death Mountain'; + + /** + * Create a new Death Mountain Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Npc("Old Man", [0xF69FA], null, $this), + new Location\Standing("Spectacle Rock Cave", [0x180002], null, $this), + new Location\Drop\Ether("Ether Tablet", [0x180016], null, $this), + new Location\Standing("Spectacle Rock", [0x180140], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Old Man"]->setRequirements(function ($locations, $items) { + return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)); + }); + + $this->locations["Ether Tablet"]->setRequirements(function ($locations, $items) { + return $items->has('BookOfMudora') && ($items->hasSword(2) + || ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer'))) + && $this->world->getRegion('Tower of Hera')->canEnter($locations, $items); + }); + + $this->locations["Spectacle Rock"]->setRequirements(function ($locations, $items) { + return $items->has('MagicMirror') + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($items->canFly($this->world) + || $this->world->config('canOneFrameClipOW', false) + || ($this->world->config('canOWYBA', false) && $items->hasABottle()) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->canLiftRocks() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)))); + }; + + return $this; + } } diff --git a/app/Region/Standard/LightWorld/NorthEast.php b/app/Region/Standard/LightWorld/NorthEast.php index 674b5eb64..6f5356b4c 100644 --- a/app/Region/Standard/LightWorld/NorthEast.php +++ b/app/Region/Standard/LightWorld/NorthEast.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Sahasrahla's Hut - Left", 0xEA82, null, $this), - new Location\Chest("Sahasrahla's Hut - Middle", 0xEA85, null, $this), - new Location\Chest("Sahasrahla's Hut - Right", 0xEA88, null, $this), - new Location\Npc("Sahasrahla", 0x2F1FC, null, $this), - new Location\Npc\Zora("King Zora", 0xEE1C3, null, $this), - new Location\Npc\Witch("Potion Shop", 0x180014, null, $this), - new Location\Standing("Zora's Ledge", 0x180149, null, $this), - new Location\Chest("Waterfall Fairy - Left", 0xE9B0, null, $this), - new Location\Chest("Waterfall Fairy - Right", 0xE9D1, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop\TakeAny("Long Fairy Cave", 0x83, 0xA0, 0x0112, 0x55, $this, [0xDBBC7 => [0x58]]), - new Shop\TakeAny("Lake Hylia Fairy", 0x83, 0xA0, 0x0112, 0x5E, $this, [0xDBBD0 => [0x58]]), - ]); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Sahasrahla's Hut - Left"]->setItem(Item::get('FiftyRupees')); - $this->locations["Sahasrahla's Hut - Middle"]->setItem(Item::get('ThreeBombs')); - $this->locations["Sahasrahla's Hut - Right"]->setItem(Item::get('FiftyRupees')); - $this->locations["Sahasrahla"]->setItem(Item::get('PegasusBoots')); - $this->locations["King Zora"]->setItem(Item::get('Flippers')); - $this->locations["Potion Shop"]->setItem(Item::get('Powder')); - $this->locations["Zora's Ledge"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Waterfall Fairy - Left"]->setItem(Item::get('RedShield')); - $this->locations["Waterfall Fairy - Right"]->setItem(Item::get('RedBoomerang')); - - return $this; - } - - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Sahasrahla"]->setRequirements(function($locations, $items) { - return $items->has('PendantOfCourage'); - }); - - $this->locations["King Zora"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks() || $items->has('Flippers'); - }); - - $this->locations["Potion Shop"]->setRequirements(function($locations, $items) { - return $items->has('Mushroom'); - }); - - $this->locations["Zora's Ledge"]->setRequirements(function($locations, $items) { - return $items->has('Flippers'); - }); - - $this->locations["Waterfall Fairy - Left"]->setRequirements(function($locations, $items) { - return $items->has('Flippers'); - }); - - $this->locations["Waterfall Fairy - Right"]->setRequirements(function($locations, $items) { - return $items->has('Flippers'); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda'); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["King Zora"]->setRequirements(function($locations, $items) { - return true; - }); - - $this->locations["Zora's Ledge"]->setRequirements(function($locations, $items) { - return $items->has('Flippers') - || ($items->has('PegasusBoots') && $items->has('MoonPearl')); - }); - - $this->locations["Waterfall Fairy - Left"]->setRequirements(function($locations, $items) { - return $items->has('Flippers') || $items->has('MoonPearl'); - }); - - $this->locations["Waterfall Fairy - Right"]->setRequirements(function($locations, $items) { - return $items->has('Flippers') || $items->has('MoonPearl'); - }); - - return $this; - } +class NorthEast extends Region +{ + protected $name = 'Light World'; + + /** + * Create a new Light World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Chest("Sahasrahla's Hut - Left", [0xEA82], null, $this), + new Location\Chest("Sahasrahla's Hut - Middle", [0xEA85], null, $this), + new Location\Chest("Sahasrahla's Hut - Right", [0xEA88], null, $this), + new Location\Npc("Sahasrahla", [0x2F1FC], null, $this), + new Location\Npc\Zora("King Zora", [0xEE1C3], null, $this), + new Location\Npc\Witch("Potion Shop", [0x180014], null, $this), + new Location\Standing("Zora's Ledge", [0x180149], null, $this), + new Location\Chest("Waterfall Fairy - Left", [0xE9B0], null, $this), + new Location\Chest("Waterfall Fairy - Right", [0xE9D1], null, $this), + ]); + + $this->shops = new ShopCollection([ + new Shop\TakeAny("Long Fairy Cave", 0x83, 0xA0, 0x0112, 0x55, $this, [0xDBBC7 => [0x58]]), + new Shop\TakeAny("Lake Hylia Fairy", 0x83, 0xA0, 0x0112, 0x5E, $this, [0xDBBD0 => [0x58]]), + ]); + + $this->locations->setChecksForWorld($world->id); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Sahasrahla"]->setRequirements(function ($locations, $items) { + return $items->has('PendantOfCourage'); + }); + + $this->locations["King Zora"]->setRequirements(function ($locations, $items) { + return $this->world->config('canFakeFlipper', false) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || $items->canLiftRocks() || $items->has('Flippers'); + }); + + $this->locations["Potion Shop"]->setRequirements(function ($locations, $items) { + return $items->has('Mushroom'); + }); + + $this->locations["Zora's Ledge"]->setRequirements(function ($locations, $items) { + return (($this->world->config('canWaterWalk', false) || $this->world->config('canBootsClip', false)) + && $items->has('PegasusBoots')) + || $items->has('Flippers'); + }); + + $this->locations["Waterfall Fairy - Left"]->setRequirements(function ($locations, $items) { + return ($this->world->config('canFakeFlipper', false) && $items->has('MoonPearl')) + || ($this->world->config('canWaterWalk', false) && $items->has('PegasusBoots')) + || $items->has('Flippers'); + }); + + $this->locations["Waterfall Fairy - Right"]->setRequirements(function ($locations, $items) { + return ($this->world->config('canFakeFlipper', false) && $items->has('MoonPearl')) + || ($this->world->config('canWaterWalk', false) && $items->has('PegasusBoots')) + || $items->has('Flippers'); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda'); + }; + + return $this; + } } diff --git a/app/Region/Standard/LightWorld/NorthWest.php b/app/Region/Standard/LightWorld/NorthWest.php index eb6b8bce2..d2eae09e2 100644 --- a/app/Region/Standard/LightWorld/NorthWest.php +++ b/app/Region/Standard/LightWorld/NorthWest.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Pedestal("Master Sword Pedestal", 0x289B0, null, $this), - new Location\Chest("King's Tomb", 0xE97A, null, $this), - new Location\Chest("Kakariko Tavern", 0xE9CE, null, $this), - new Location\Chest("Chicken House", 0xE9E9, null, $this), - new Location\Chest("Kakariko Well - Top", 0xEA8E, null, $this), - new Location\Chest("Kakariko Well - Left", 0xEA91, null, $this), - new Location\Chest("Kakariko Well - Middle", 0xEA94, null, $this), - new Location\Chest("Kakariko Well - Right", 0xEA97, null, $this), - new Location\Chest("Kakariko Well - Bottom", 0xEA9A, null, $this), - new Location\Chest("Blind's Hideout - Top", 0xEB0F, null, $this), - new Location\Chest("Blind's Hideout - Left", 0xEB12, null, $this), - new Location\Chest("Blind's Hideout - Right", 0xEB15, null, $this), - new Location\Chest("Blind's Hideout - Far Left", 0xEB18, null, $this), - new Location\Chest("Blind's Hideout - Far Right", 0xEB1B, null, $this), - new Location\Chest("Pegasus Rocks", 0xEB3F, null, $this), - new Location\Npc("Bottle Merchant", 0x2EB18, null, $this), - new Location\Npc("Magic Bat", 0x180015, null, $this), - new Location\Npc\BugCatchingKid("Sick Kid", 0x339CF, null, $this), - new Location\Standing("Lost Woods Hideout", 0x180000, null, $this), - new Location\Standing("Lumberjack Tree", 0x180001, null, $this), - new Location\Standing("Graveyard Ledge", 0x180004, null, $this), - new Location\Standing("Mushroom", 0x180013, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop("Light World Kakariko Shop", 0x03, 0xA0, 0x011F, 0x46, $this), - // Single entrance caves with no items in them ;) - new Shop\TakeAny("Fortune Teller (Light)", 0x83, 0xA0, 0x011F, 0x65, $this, [0xDBBD7 => [0x46]]), - new Shop\TakeAny("Bush Covered House", 0x83, 0xA0, 0x011F, 0x44, $this, [0xDBBB6 => [0x46]]), - new Shop\TakeAny("Lost Woods Gamble", 0x83, 0xA0, 0x0112, 0x3C, $this, [0xDBBAE => [0x58]]), - new Shop\TakeAny("Lumberjack House", 0x83, 0xA0, 0x011F, 0x76, $this, [0xDBBE8 => [0x46]]), - new Shop\TakeAny("Snitch Lady East", 0x83, 0xA0, 0x011F, 0x3E, $this, [0xDBBB0 => [0x46]]), - new Shop\TakeAny("Snitch Lady West", 0x83, 0xA0, 0x011F, 0x3F, $this, [0xDBBB1 => [0x46]]), - new Shop\TakeAny("Bomb Hut", 0x83, 0xA0, 0x011F, 0x4A, $this, [0xDBBBC => [0x46]]), - ]); - - $this->shops["Light World Kakariko Shop"]->clearInventory() - ->addInventory(0, Item::get('RedPotion'), 150) - ->addInventory(1, Item::get('Heart'), 10) - ->addInventory(2, Item::get('TenBombs'), 50); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Master Sword Pedestal"]->setItem(Item::get('MasterSword')); - $this->locations["King's Tomb"]->setItem(Item::get('Cape')); - $this->locations["Kakariko Tavern"]->setItem(Item::get('Bottle')); - $this->locations["Chicken House"]->setItem(Item::get('Boomerang')); - $this->locations["Kakariko Well - Top"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Kakariko Well - Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Kakariko Well - Middle"]->setItem(Item::get('TwentyRupees')); - $this->locations["Kakariko Well - Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Kakariko Well - Bottom"]->setItem(Item::get('ThreeBombs')); - $this->locations["Blind's Hideout - Top"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Blind's Hideout - Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Blind's Hideout - Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Blind's Hideout - Far Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Blind's Hideout - Far Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Pegasus Rocks"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Bottle Merchant"]->setItem(Item::get('Bottle')); - $this->locations["Magic Bat"]->setItem(Item::get('HalfMagic')); // @TODO: perhaps use 0xFF here - $this->locations["Sick Kid"]->setItem(Item::get('BugCatchingNet')); - $this->locations["Lost Woods Hideout"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Lumberjack Tree"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Graveyard Ledge"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Mushroom"]->setItem(Item::get('Mushroom')); - - return $this; - } - - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["Bomb Hut"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - $this->locations["Master Sword Pedestal"]->setRequirements(function($locations, $items) { - return $items->has('PendantOfPower') - && $items->has('PendantOfWisdom') - && $items->has('PendantOfCourage'); - }); - - $this->locations["King's Tomb"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') && ($items->canLiftDarkRocks() - || ($items->has('MagicMirror') && $items->has('MoonPearl') - && $this->world->getRegion('North West Dark World')->canEnter($locations, $items))); - }); - - $this->locations["Pegasus Rocks"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots'); - }); - - $this->locations["Magic Bat"]->setRequirements(function($locations, $items) { - return $items->has('Powder') - && ($items->has('Hammer') - || ($items->has('MoonPearl') && $items->has('MagicMirror') && $items->canLiftDarkRocks())); - }); - - $this->locations["Sick Kid"]->setRequirements(function($locations, $items) { - return $items->hasABottle(); - }); - - $this->locations["Lumberjack Tree"]->setRequirements(function($locations, $items) { - return $items->has('DefeatAgahnim') && $items->has('PegasusBoots'); - }); - - $this->locations["Graveyard Ledge"]->setRequirements(function($locations, $items) { - return $items->has('MagicMirror') && $items->has('MoonPearl') - && $this->world->getRegion('North West Dark World')->canEnter($locations, $items); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda'); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - $this->locations["King's Tomb"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') && ($items->canLiftDarkRocks() - || ($items->has('MagicMirror') && $items->glitchedLinkInDarkWorld())); - }); - - $this->locations["Magic Bat"]->setRequirements(function($locations, $items) { - return $items->has('Powder') - && ($items->has('Hammer') - || $items->has('PegasusBoots') - || $items->has('MagicMirror')); - }); - - $this->locations["Graveyard Ledge"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $items->glitchedLinkInDarkWorld()); - }); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["King's Tomb"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') && ($items->canLiftDarkRocks() - || ($items->has('MagicMirror') && $items->has('MoonPearl'))); - }); - - $this->locations["Magic Bat"]->setRequirements(function($locations, $items) { - return $items->has('Powder') - && ($items->has('Hammer') - || $items->has('PegasusBoots') - || ($items->has('MoonPearl') && $items->has('MagicMirror') && $items->canLiftDarkRocks() - && $this->world->getRegion('North West Dark World')->canEnter($locations, $items))); - }); - - $this->locations["Graveyard Ledge"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $items->has('MoonPearl') - && $this->world->getRegion('North West Dark World')->canEnter($locations, $items)); - }); - - return $this; - } +class NorthWest extends Region +{ + protected $name = 'Light World'; + + /** + * Create a new Light World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Pedestal("Master Sword Pedestal", [0x289B0], null, $this), + new Location\Chest("King's Tomb", [0xE97A], null, $this), + new Location\Chest("Kakariko Tavern", [0xE9CE], null, $this), + new Location\Chest("Chicken House", [0xE9E9], null, $this), + new Location\Chest("Kakariko Well - Top", [0xEA8E], null, $this), + new Location\Chest("Kakariko Well - Left", [0xEA91], null, $this), + new Location\Chest("Kakariko Well - Middle", [0xEA94], null, $this), + new Location\Chest("Kakariko Well - Right", [0xEA97], null, $this), + new Location\Chest("Kakariko Well - Bottom", [0xEA9A], null, $this), + new Location\Chest("Blind's Hideout - Top", [0xEB0F], null, $this), + new Location\Chest("Blind's Hideout - Left", [0xEB12], null, $this), + new Location\Chest("Blind's Hideout - Right", [0xEB15], null, $this), + new Location\Chest("Blind's Hideout - Far Left", [0xEB18], null, $this), + new Location\Chest("Blind's Hideout - Far Right", [0xEB1B], null, $this), + new Location\Chest("Pegasus Rocks", [0xEB3F], null, $this), + new Location\Npc("Bottle Merchant", [0x2EB18], null, $this), + new Location\Npc("Magic Bat", [0x180015], null, $this), + new Location\Npc\BugCatchingKid("Sick Kid", [0x339CF], null, $this), + new Location\Standing("Lost Woods Hideout", [0x180000], null, $this), + new Location\Standing("Lumberjack Tree", [0x180001], null, $this), + new Location\Standing("Graveyard Ledge", [0x180004], null, $this), + new Location\Standing("Mushroom", [0x180013], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->shops = new ShopCollection([ + new Shop("Light World Kakariko Shop", 0x03, 0xA0, 0x011F, 0x46, $this), + // Single entrance caves with no items in them ;) + new Shop\TakeAny("Fortune Teller (Light)", 0x83, 0xA0, 0x011F, 0x65, $this, [0xDBBD7 => [0x46]]), + new Shop\TakeAny("Bush Covered House", 0x83, 0xA0, 0x011F, 0x44, $this, [0xDBBB6 => [0x46]]), + new Shop\TakeAny("Lost Woods Gamble", 0x83, 0xA0, 0x0112, 0x3C, $this, [0xDBBAE => [0x58]]), + new Shop\TakeAny("Lumberjack House", 0x83, 0xA0, 0x011F, 0x76, $this, [0xDBBE8 => [0x46]]), + new Shop\TakeAny("Snitch Lady East", 0x83, 0xA0, 0x011F, 0x3E, $this, [0xDBBB0 => [0x46]]), + new Shop\TakeAny("Snitch Lady West", 0x83, 0xA0, 0x011F, 0x3F, $this, [0xDBBB1 => [0x46]]), + new Shop\TakeAny("Bomb Hut", 0x83, 0xA0, 0x011F, 0x4A, $this, [0xDBBBC => [0x46]]), + ]); + + $this->shops["Light World Kakariko Shop"]->clearInventory() + ->addInventory(0, Item::get('RedPotion', $world), 150) + ->addInventory(1, Item::get('Heart', $world), 10) + ->addInventory(2, Item::get('TenBombs', $world), 50); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["Bomb Hut"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->locations["Master Sword Pedestal"]->setRequirements(function ($locations, $items) { + return ($this->world->config('itemPlacement') !== 'basic' || $items->has('BookOfMudora')) + && $items->has('PendantOfPower') + && $items->has('PendantOfWisdom') + && $items->has('PendantOfCourage'); + }); + + $this->locations["King's Tomb"]->setRequirements(function ($locations, $items) { + return $items->has('PegasusBoots') && ($this->world->config('canBootsClip', false) + || ($items->canLiftDarkRocks() + || ($items->has('MagicMirror') && $items->has('MoonPearl') + && $this->world->getRegion('North West Dark World')->canEnter($locations, $items)))); + }); + + $this->locations["Pegasus Rocks"]->setRequirements(function ($locations, $items) { + return $items->has('PegasusBoots'); + }); + + $this->locations["Magic Bat"]->setRequirements(function ($locations, $items) { + return $items->has('Powder') + && ($items->has('Hammer') + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('MoonPearl') && $items->has('MagicMirror') && $items->canLiftDarkRocks() + && $this->world->getRegion('North West Dark World')->canEnter($locations, $items))); + }); + + $this->locations["Sick Kid"]->setRequirements(function ($locations, $items) { + return $items->hasABottle(); + }); + + $this->locations["Lumberjack Tree"]->setRequirements(function ($locations, $items) { + return $items->has('DefeatAgahnim') && $items->has('PegasusBoots'); + }); + + $this->locations["Graveyard Ledge"]->setRequirements(function ($locations, $items) { + return ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('MagicMirror') && $items->has('MoonPearl') + && $this->world->getRegion('North West Dark World')->canEnter($locations, $items)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda'); + }; + + return $this; + } } diff --git a/app/Region/Standard/LightWorld/South.php b/app/Region/Standard/LightWorld/South.php index f5f5a9267..debde33b2 100644 --- a/app/Region/Standard/LightWorld/South.php +++ b/app/Region/Standard/LightWorld/South.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Location\Chest("Floodgate Chest", 0xE98C, null, $this), - new Location\Chest("Link's House", 0xE9BC, null, $this), - new Location\Chest("Aginah's Cave", 0xE9F2, null, $this), - new Location\Chest("Mini Moldorm Cave - Far Left", 0xEB42, null, $this), - new Location\Chest("Mini Moldorm Cave - Left", 0xEB45, null, $this), - new Location\Chest("Mini Moldorm Cave - Right", 0xEB48, null, $this), - new Location\Chest("Mini Moldorm Cave - Far Right", 0xEB4B, null, $this), - new Location\Chest("Ice Rod Cave", 0xEB4E, null, $this), - new Location\Npc("Hobo", 0x33E7D, null, $this), - new Location\Drop\Bombos("Bombos Tablet", 0x180017, null, $this), - new Location\Standing("Cave 45", 0x180003, null, $this), - new Location\Standing("Checkerboard Cave", 0x180005, null, $this), - new Location\Npc("Mini Moldorm Cave - NPC", 0x180010, null, $this), - new Location\Dash("Library", 0x180012, null, $this), - new Location\Standing("Maze Race", 0x180142, null, $this), - new Location\Standing("Desert Ledge", 0x180143, null, $this), - new Location\Standing("Lake Hylia Island", 0x180144, null, $this), - new Location\Standing("Sunken Treasure", 0x180145, null, $this), - new Location\Dig\HauntedGrove("Flute Spot", 0x18014A, null, $this), - ]); - - $this->shops = new ShopCollection([ - new Shop("Light World Lake Hylia Shop", 0x03, 0xA0, 0x0112, 0x58, $this), - new Shop\Upgrade("Capacity Upgrade", 0x12, 0x04, 0x0115, 0x5D, $this), - // Single entrance caves with no items in them ;) - new Shop\TakeAny("20 Rupee Cave", 0x83, 0xA0, 0x0112, 0x7B, $this, [0xDBBED => [0x58]]), - new Shop\TakeAny("50 Rupee Cave", 0x83, 0xA0, 0x0112, 0x79, $this, [0xDBBEB => [0x58]]), - new Shop\TakeAny("Bonk Fairy (Light)", 0x83, 0xA0, 0x0112, 0x77, $this, [0xDBBE9 => [0x58]]), - new Shop\TakeAny("Desert Fairy", 0x83, 0xA0, 0x0112, 0x72, $this, [0xDBBE4 => [0x58]]), - new Shop\TakeAny("Good Bee Cave", 0x83, 0xA0, 0x0112, 0x6B, $this, [0xDBBDD => [0x58]]), - new Shop\TakeAny("Lake Hylia Fortune Teller", 0x83, 0xA0, 0x011F, 0x73, $this, [0xDBBE5 => [0x46]]), - new Shop\TakeAny("Light Hype Fairy", 0x83, 0xA0, 0x0112, 0x6C, $this, [0xDBBDE => [0x58]]), - new Shop\TakeAny("Kakariko Gamble Game", 0x83, 0xA0, 0x011F, 0x67, $this, [0xDBBD9 => [0x46]]), - ]); - - - $this->shops["Capacity Upgrade"]->clearInventory() - ->addInventory(0, Item::get('BombUpgrade5'), 100, 7) - ->addInventory(1, Item::get('ArrowUpgrade5'), 100, 7); - - $this->shops["Light World Lake Hylia Shop"]->clearInventory() - ->addInventory(0, Item::get('RedPotion'), 150) - ->addInventory(1, Item::get('Heart'), 10) - ->addInventory(2, Item::get('TenBombs'), 50); - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Floodgate Chest"]->setItem(Item::get('ThreeBombs')); - $this->locations["Link's House"]->setItem(Item::get('Lamp')); - $this->locations["Aginah's Cave"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Mini Moldorm Cave - Far Left"]->setItem(Item::get('ThreeBombs')); - $this->locations["Mini Moldorm Cave - Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Mini Moldorm Cave - Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Mini Moldorm Cave - Far Right"]->setItem(Item::get('TenArrows')); - $this->locations["Ice Rod Cave"]->setItem(Item::get('IceRod')); - $this->locations["Hobo"]->setItem(Item::get('Bottle')); - $this->locations["Bombos Tablet"]->setItem(Item::get('Bombos')); - $this->locations["Cave 45"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Checkerboard Cave"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Mini Moldorm Cave - NPC"]->setItem(Item::get('ThreeHundredRupees')); - $this->locations["Library"]->setItem(Item::get('BookOfMudora')); - $this->locations["Maze Race"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Desert Ledge"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Lake Hylia Island"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Sunken Treasure"]->setItem(Item::get('PieceOfHeart')); - $this->locations["Flute Spot"]->setItem(Item::get('OcarinaInactive')); - - return $this; - } - - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->shops["20 Rupee Cave"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks(); - }); - - $this->shops["50 Rupee Cave"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks(); - }); - - $this->shops["Bonk Fairy (Light)"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots'); - }); - - $this->shops["Light Hype Fairy"]->setRequirements(function($locations, $items) { - return $items->canBombThings(); - }); - - $this->shops["Capacity Upgrade"]->setRequirements(function($locations, $items) { - return $items->has('Flippers'); - }); - - $this->locations["Hobo"]->setRequirements(function($locations, $items) { - return $items->has('Flippers'); - }); - - $this->locations["Bombos Tablet"]->setRequirements(function($locations, $items) { - return $items->has('BookOfMudora') && ($items->hasSword(2) - || ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer'))) - && $items->has('MagicMirror') && $this->world->getRegion('South Dark World')->canEnter($locations, $items); - }); - - $this->locations["Cave 45"]->setRequirements(function($locations, $items) { - return $items->has('MagicMirror') && $this->world->getRegion('South Dark World')->canEnter($locations, $items); - }); - - $this->locations["Checkerboard Cave"]->setRequirements(function($locations, $items) { - return $items->canFly() && $items->canLiftDarkRocks() && $items->has('MagicMirror'); - }); - - $this->locations["Library"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots'); - }); - - $this->locations["Desert Ledge"]->setRequirements(function($locations, $items) { - return $this->world->getRegion('Desert Palace')->canEnter($locations, $items); - }); - - $this->locations["Lake Hylia Island"]->setRequirements(function($locations, $items) { - return $items->has('Flippers') && $items->has('MoonPearl') && $items->has('MagicMirror') - && ($this->world->getRegion('South Dark World')->canEnter($locations, $items) - || $this->world->getRegion('North East Dark World')->canEnter($locations, $items)); - }); - - $this->locations["Flute Spot"]->setRequirements(function($locations, $items) { - return $items->has('Shovel'); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda'); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - $this->locations["Lake Hylia Island"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || ($items->has('Flippers') && $items->has('MagicMirror') - && ($items->glitchedLinkInDarkWorld() - || $this->world->getRegion('North East Dark World')->canEnter($locations, $items))); - }); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->locations["Hobo"]->setRequirements(function($locations, $items) { - return true; - }); - - $this->locations["Bombos Tablet"]->setRequirements(function($locations, $items) { - return $items->has('BookOfMudora') && ($items->hasSword(2) - || ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer'))) - && ($items->has('PegasusBoots') - || ($items->has('MagicMirror') && $this->world->getRegion('South Dark World')->canEnter($locations, $items))); - }); - - $this->locations["Cave 45"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || ($items->has('MagicMirror') && $this->world->getRegion('South Dark World')->canEnter($locations, $items)); - }); - - $this->locations["Checkerboard Cave"]->setRequirements(function($locations, $items) { - return $items->canLiftRocks() - && ($items->has('PegasusBoots') - || ($items->has('MagicMirror') && $this->world->getRegion('Mire')->canEnter($locations, $items))); - }); - - $this->locations["Lake Hylia Island"]->setRequirements(function($locations, $items) { - return $items->has('PegasusBoots') - || ($items->has('Flippers') && $items->has('MagicMirror') - && (($items->has('MoonPearl') && $this->world->getRegion('South Dark World')->canEnter($locations, $items)) - || $this->world->getRegion('North East Dark World')->canEnter($locations, $items))); - }); - - return $this; - } +class South extends Region +{ + protected $name = 'Light World'; + + /** + * Create a new Light World Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->locations = new LocationCollection([ + new Location\Chest("Floodgate Chest", [0xE98C], null, $this), + new Location\Chest("Link's House", [0xE9BC], null, $this), + new Location\Chest("Aginah's Cave", [0xE9F2], null, $this), + new Location\Chest("Mini Moldorm Cave - Far Left", [0xEB42], null, $this), + new Location\Chest("Mini Moldorm Cave - Left", [0xEB45], null, $this), + new Location\Chest("Mini Moldorm Cave - Right", [0xEB48], null, $this), + new Location\Chest("Mini Moldorm Cave - Far Right", [0xEB4B], null, $this), + new Location\Chest("Ice Rod Cave", [0xEB4E], null, $this), + new Location\Npc("Hobo", [0x33E7D], null, $this), + new Location\Drop\Bombos("Bombos Tablet", [0x180017], null, $this), + new Location\Standing("Cave 45", [0x180003], null, $this), + new Location\Standing("Checkerboard Cave", [0x180005], null, $this), + new Location\Npc("Mini Moldorm Cave - NPC", [0x180010], null, $this), + new Location\Dash("Library", [0x180012], null, $this), + new Location\Standing("Maze Race", [0x180142], null, $this), + new Location\Standing("Desert Ledge", [0x180143], null, $this), + new Location\Standing("Lake Hylia Island", [0x180144], null, $this), + new Location\Standing("Sunken Treasure", [0x180145], null, $this), + new Location\Dig\HauntedGrove("Flute Spot", [0x18014A], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->shops = new ShopCollection([ + new Shop("Light World Lake Hylia Shop", 0x03, 0xA0, 0x0112, 0x58, $this), + new Shop\Upgrade("Capacity Upgrade", 0x12, 0x04, 0x0115, 0x5D, $this), + // Single entrance caves with no items in them ;) + new Shop\TakeAny("20 Rupee Cave", 0x83, 0xA0, 0x0112, 0x7B, $this, [0xDBBED => [0x58]]), + new Shop\TakeAny("50 Rupee Cave", 0x83, 0xA0, 0x0112, 0x79, $this, [0xDBBEB => [0x58]]), + new Shop\TakeAny("Bonk Fairy (Light)", 0x83, 0xA0, 0x0112, 0x77, $this, [0xDBBE9 => [0x58]]), + new Shop\TakeAny("Desert Fairy", 0x83, 0xA0, 0x0112, 0x72, $this, [0xDBBE4 => [0x58]]), + new Shop\TakeAny("Good Bee Cave", 0x83, 0xA0, 0x0112, 0x6B, $this, [0xDBBDD => [0x58]]), + new Shop\TakeAny("Lake Hylia Fortune Teller", 0x83, 0xA0, 0x011F, 0x73, $this, [0xDBBE5 => [0x46]]), + new Shop\TakeAny("Light Hype Fairy", 0x83, 0xA0, 0x0112, 0x6C, $this, [0xDBBDE => [0x58]]), + new Shop\TakeAny("Kakariko Gamble Game", 0x83, 0xA0, 0x011F, 0x67, $this, [0xDBBD9 => [0x46]]), + ]); + + + $this->shops["Capacity Upgrade"]->clearInventory() + ->addInventory(0, Item::get('BombUpgrade5', $world), 100, 7) + ->addInventory(1, Item::get('ArrowUpgrade5', $world), 100, 7); + + $this->shops["Light World Lake Hylia Shop"]->clearInventory() + ->addInventory(0, Item::get('RedPotion', $world), 150) + ->addInventory(1, Item::get('Heart', $world), 10) + ->addInventory(2, Item::get('TenBombs', $world), 50); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->shops["20 Rupee Cave"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks(); + }); + + $this->shops["50 Rupee Cave"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks(); + }); + + $this->shops["Bonk Fairy (Light)"]->setRequirements(function ($locations, $items) { + return $items->has('PegasusBoots'); + }); + + $this->shops["Light Hype Fairy"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->shops["Capacity Upgrade"]->setRequirements(function ($locations, $items) { + return $this->world->config('canFakeFlipper', false) || $items->has('Flippers'); + }); + + $this->locations["Aginah's Cave"]->setRequirements(function ($locations, $items) { + return $items->canBombThings(); + }); + + $this->locations["Hobo"]->setRequirements(function ($locations, $items) { + return ($this->world->config('canWaterWalk', false) && $items->has('PegasusBoots')) + || $this->world->config('canFakeFlipper', false) || $items->has('Flippers'); + }); + + $this->locations["Bombos Tablet"]->setRequirements(function ($locations, $items) { + return $items->has('BookOfMudora') && ($items->hasSword(2) + || ($this->world->config('mode.weapons') == 'swordless' && $items->has('Hammer'))) + && ($this->world->config('canOneFrameClipOW', false) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('MagicMirror') && $this->world->getRegion('South Dark World')->canEnter($locations, $items))); + }); + + $this->locations["Cave 45"]->setRequirements(function ($locations, $items) { + return $this->world->config('canOneFrameClipOW', false) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('MagicMirror') && $this->world->getRegion('South Dark World')->canEnter($locations, $items)); + }); + + $this->locations["Checkerboard Cave"]->setRequirements(function ($locations, $items) { + return $items->canLiftRocks() + && (($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('MagicMirror') && $this->world->getRegion('Mire')->canEnter($locations, $items))); + }); + + $this->locations["Library"]->setRequirements(function ($locations, $items) { + return $items->has('PegasusBoots'); + }); + + $this->locations["Desert Ledge"]->setRequirements(function ($locations, $items) { + return $this->world->getRegion('Desert Palace')->canEnter($locations, $items); + }); + + $this->locations["Lake Hylia Island"]->setRequirements(function ($locations, $items) { + return $this->world->config('canOneFrameClipOW', false) + || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || ($items->has('Flippers') && $items->has('MagicMirror') + && ($items->has('MoonPearl') && ($this->world->getRegion('South Dark World')->canEnter($locations, $items) + || $this->world->getRegion('North East Dark World')->canEnter($locations, $items)))); + }); + + $this->locations["Flute Spot"]->setRequirements(function ($locations, $items) { + return $items->has('Shovel'); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda'); + }; + + return $this; + } } diff --git a/app/Region/Standard/Medallions.php b/app/Region/Standard/Medallions.php index 9093e9601..0cbe648e3 100644 --- a/app/Region/Standard/Medallions.php +++ b/app/Region/Standard/Medallions.php @@ -1,4 +1,6 @@ -locations = new LocationCollection([ - new Medallion("Turtle Rock Medallion", [null, 0x180023, 't0' => 0x5020, 't1' => 0x50FF, 't2' => 0x51DE], null, $this), - new Medallion("Misery Mire Medallion", [null, 0x180022, 'm0' => 0x4FF2, 'm1' => 0x50D1, 'm2' => 0x51B0], null, $this), - ]); - } +class Medallions extends Region +{ + protected $name = 'Special'; - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Turtle Rock Medallion"]->setItem(Item::get('Quake')); - $this->locations["Misery Mire Medallion"]->setItem(Item::get('Ether')); + /** + * Create a new Medallions Region to hold sword locations. + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); - return $this; - } + $this->locations = new LocationCollection([ + new Medallion("Turtle Rock Medallion", [null, 0x180023, 't0' => 0x5020, 't1' => 0x50FF, 't2' => 0x51DE], null, $this), + new Medallion("Misery Mire Medallion", [null, 0x180022, 'm0' => 0x4FF2, 'm1' => 0x50D1, 'm2' => 0x51B0], null, $this), + ]); + } } diff --git a/app/Region/Standard/MiseryMire.php b/app/Region/Standard/MiseryMire.php index 62f9eb553..164821fbe 100644 --- a/app/Region/Standard/MiseryMire.php +++ b/app/Region/Standard/MiseryMire.php @@ -1,4 +1,6 @@ -boss = Boss::get("Vitreous"); - - $this->locations = new LocationCollection([ - new Location\BigChest("Misery Mire - Big Chest", 0xEA67, null, $this), - new Location\Chest("Misery Mire - Main Lobby", 0xEA5E, null, $this), - new Location\Chest("Misery Mire - Big Key Chest", 0xEA6D, null, $this), - new Location\Chest("Misery Mire - Compass Chest", 0xEA64, null, $this), - new Location\Chest("Misery Mire - Bridge Chest", 0xEA61, null, $this), - new Location\Chest("Misery Mire - Map Chest", 0xEA6A, null, $this), - new Location\Chest("Misery Mire - Spike Chest", 0xE9DA, null, $this), - new Location\Drop("Misery Mire - Boss", 0x180158, null, $this), - - new Location\Prize\Crystal("Misery Mire - Prize", [null, 0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], null, $this), - ]); - - $this->prize_location = $this->locations["Misery Mire - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Misery Mire - Big Chest"]->setItem(Item::get('CaneOfSomaria')); - $this->locations["Misery Mire - Main Lobby"]->setItem(Item::get('KeyD6')); - $this->locations["Misery Mire - Big Key Chest"]->setItem(Item::get('BigKeyD6')); - $this->locations["Misery Mire - Compass Chest"]->setItem(Item::get('CompassD6')); - $this->locations["Misery Mire - Bridge Chest"]->setItem(Item::get('KeyD6')); - $this->locations["Misery Mire - Map Chest"]->setItem(Item::get('MapD6')); - $this->locations["Misery Mire - Spike Chest"]->setItem(Item::get('KeyD6')); - $this->locations["Misery Mire - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Misery Mire - Prize"]->setItem(Item::get('Crystal6')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Misery Mire - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyD6'); - }); - - $this->locations["Misery Mire - Spike Chest"]->setRequirements(function($locations, $items) { - return !$this->world->config('region.cantTakeDamage', false) - || $items->has('CaneOfByrna') || $items->has('Cape'); - }); - - $this->locations["Misery Mire - Main Lobby"]->setRequirements(function($locations, $items) { - return $items->has('KeyD6') || $items->has('BigKeyD6'); - }); - - $this->locations["Misery Mire - Map Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyD6') || $items->has('BigKeyD6'); - }); - - $this->locations["Misery Mire - Big Key Chest"]->setRequirements(function($locations, $items) { - return $items->canLightTorches() - && (($locations["Misery Mire - Compass Chest"]->hasItem(Item::get('BigKeyD6')) && $items->has('KeyD6', 2)) - || $items->has('KeyD6', 3)); - }); - - $this->locations["Misery Mire - Compass Chest"]->setRequirements(function($locations, $items) { - return $items->canLightTorches() - && (($locations["Misery Mire - Big Key Chest"]->hasItem(Item::get('BigKeyD6')) && $items->has('KeyD6', 2)) - || $items->has('KeyD6', 3)); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Misery Mire - Boss"]->canAccess($items); - }; - - $this->locations["Misery Mire - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->has('CaneOfSomaria') && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) - && $items->has('BigKeyD6') - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD6') || $this->locations["Misery Mire - Boss"]->hasItem(Item::get('CompassD6'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD6') || $this->locations["Misery Mire - Boss"]->hasItem(Item::get('MapD6'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassD6') || $item == Item::get('MapD6')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ((($locations["Misery Mire Medallion"]->hasItem(Item::get('Bombos')) && $items->has('Bombos')) - || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Ether')) && $items->has('Ether')) - || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Quake')) && $items->has('Quake'))) - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) - && $items->has('MoonPearl') && ($items->has('PegasusBoots') || $items->has('Hookshot')) - && $items->canKillMostThings(8) - && $this->world->getRegion('Mire')->canEnter($locations, $items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode. - * - * @return $this - */ - public function initMajorGlitches() { - $this->initNoGlitches(); - - // @TODO: this function is probably wrong -_- - $this->can_complete = function($locations, $items) { - return ($this->canEnter($locations, $items) - && $items->has('CaneOfSomaria') && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) - && $items->has('BigKeyD6') && ( - $items->hasSword() || $items->has('Hammer') || $items->canShootArrows() - )) - || ((($locations->itemInLocations(Item::get('BigKeyD6'), [ - "Misery Mire - Compass Chest", - "Misery Mire - Big Key Chest", - ]) && $items->has('KeyD6', 2)) - || $items->has('KeyD6', 3)) - && ($locations["Tower of Hera - Boss"]->canAccess($items) - || $locations["Swamp Palace - Boss"]->canAccess($items)) - ); - }; - - // @TODO: doesn't account for 2x YBA - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ((($locations["Misery Mire Medallion"]->hasItem(Item::get('Bombos')) && $items->has('Bombos')) - || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Ether')) && $items->has('Ether')) - || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Quake')) && $items->has('Quake'))) - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) - && ($items->has('MoonPearl') || ($items->hasABottle() && $items->has('PegasusBoots'))) - && ($items->has('PegasusBoots') || $items->has('Hookshot')) - && $this->world->getRegion('Mire')->canEnter($locations, $items); - }; - - return $this; - } +class MiseryMire extends Region +{ + protected $name = 'Misery Mire'; + public $music_addresses = [ + 0x155B9, + ]; + + protected $map_reveal = 0x0100; + + protected $region_items = [ + 'BigKey', + 'BigKeyD6', + 'Compass', + 'CompassD6', + 'Key', + 'KeyD6', + 'Map', + 'MapD6', + ]; + + /** + * Create a new Misery Mire Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->boss = Boss::get("Vitreous", $world); + + $this->locations = new LocationCollection([ + new Location\BigChest("Misery Mire - Big Chest", [0xEA67], null, $this), + new Location\Chest("Misery Mire - Main Lobby", [0xEA5E], null, $this), + new Location\Chest("Misery Mire - Big Key Chest", [0xEA6D], null, $this), + new Location\Chest("Misery Mire - Compass Chest", [0xEA64], null, $this), + new Location\Chest("Misery Mire - Bridge Chest", [0xEA61], null, $this), + new Location\Chest("Misery Mire - Map Chest", [0xEA6A], null, $this), + new Location\Chest("Misery Mire - Spike Chest", [0xE9DA], null, $this), + new Location\Drop("Misery Mire - Boss", [0x180158], null, $this), + + new Location\Prize\Crystal("Misery Mire - Prize", [null, 0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Misery Mire - Prize"]; + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Misery Mire - Big Chest"]->setRequirements(function ($locations, $items) { + return $items->has('BigKeyD6'); + }); + + $this->locations["Misery Mire - Spike Chest"]->setRequirements(function ($locations, $items) { + return !$this->world->config('region.cantTakeDamage', false) + || $items->has('CaneOfByrna') || $items->has('Cape'); + }); + + $this->locations["Misery Mire - Main Lobby"]->setRequirements(function ($locations, $items) { + return $items->has('KeyD6') || $items->has('BigKeyD6'); + }); + + $this->locations["Misery Mire - Map Chest"]->setRequirements(function ($locations, $items) { + return $items->has('KeyD6') || $items->has('BigKeyD6'); + }); + + $this->locations["Misery Mire - Big Key Chest"]->setRequirements(function ($locations, $items) { + return $items->canLightTorches() + && (($locations["Misery Mire - Compass Chest"]->hasItem(Item::get('BigKeyD6', $this->world)) && $items->has('KeyD6', 2)) + || $items->has('KeyD6', 3)); + }); + + $this->locations["Misery Mire - Compass Chest"]->setRequirements(function ($locations, $items) { + return $items->canLightTorches() + && (($locations["Misery Mire - Big Key Chest"]->hasItem(Item::get('BigKeyD6', $this->world)) && $items->has('KeyD6', 2)) + || $items->has('KeyD6', 3)); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Misery Mire - Boss"]->canAccess($items); + }; + + $this->locations["Misery Mire - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && $items->has('CaneOfSomaria') && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) + && $items->has('BigKeyD6') + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD6') || $this->locations["Misery Mire - Boss"]->hasItem(Item::get('CompassD6', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD6') || $this->locations["Misery Mire - Boss"]->hasItem(Item::get('MapD6', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassD6', $this->world) || $item == Item::get('MapD6', $this->world)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($this->world->config('itemPlacement') !== 'basic' + || (($this->world->config('mode.weapons') === 'swordless' || $items->hasSword(2)) && $items->hasHealth(12) && ($items->hasBottle(2) || $items->hasArmor()))) + && ((($locations["Misery Mire Medallion"]->hasItem(Item::get('Bombos', $this->world)) && $items->has('Bombos')) + || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Ether', $this->world)) && $items->has('Ether')) + || ($locations["Misery Mire Medallion"]->hasItem(Item::get('Quake', $this->world)) && $items->has('Quake'))) + && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) + && $items->has('MoonPearl') && ( + ($this->world->config('itemPlacement') !== 'basic' && $items->has('PegasusBoots')) + || $items->has('Hookshot')) + && $items->canKillMostThings(8) + && $this->world->getRegion('Mire')->canEnter($locations, $items); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/PalaceOfDarkness.php b/app/Region/Standard/PalaceOfDarkness.php index 9c703a058..4f9e51ea5 100644 --- a/app/Region/Standard/PalaceOfDarkness.php +++ b/app/Region/Standard/PalaceOfDarkness.php @@ -1,4 +1,6 @@ -boss = Boss::get("Helmasaur King"); - - $this->locations = new LocationCollection([ - new Location\Chest("Palace of Darkness - Shooter Room", 0xEA5B, null, $this), - new Location\Chest("Palace of Darkness - Big Key Chest", 0xEA37, null, $this), - new Location\Chest("Palace of Darkness - The Arena - Ledge", 0xEA3A, null, $this), - new Location\Chest("Palace of Darkness - The Arena - Bridge", 0xEA3D, null, $this), - new Location\Chest("Palace of Darkness - Stalfos Basement", 0xEA49, null, $this), - new Location\Chest("Palace of Darkness - Map Chest", 0xEA52, null, $this), - new Location\BigChest("Palace of Darkness - Big Chest", 0xEA40, null, $this), - new Location\Chest("Palace of Darkness - Compass Chest", 0xEA43, null, $this), - new Location\Chest("Palace of Darkness - Harmless Hellway", 0xEA46, null, $this), - new Location\Chest("Palace of Darkness - Dark Basement - Left", 0xEA4C, null, $this), - new Location\Chest("Palace of Darkness - Dark Basement - Right", 0xEA4F, null, $this), - new Location\Chest("Palace of Darkness - Dark Maze - Top", 0xEA55, null, $this), - new Location\Chest("Palace of Darkness - Dark Maze - Bottom", 0xEA58, null, $this), - new Location\Drop("Palace of Darkness - Boss", 0x180153, null, $this), - - new Location\Prize\Crystal("Palace of Darkness - Prize", [null, 0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], null, $this), - ]); - - $this->prize_location = $this->locations["Palace of Darkness - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Palace of Darkness - Big Key Chest"]->setItem(Item::get('BigKeyD1')); - $this->locations["Palace of Darkness - The Arena - Ledge"]->setItem(Item::get('KeyD1')); - $this->locations["Palace of Darkness - The Arena - Bridge"]->setItem(Item::get('KeyD1')); - $this->locations["Palace of Darkness - Big Chest"]->setItem(Item::get('Hammer')); - $this->locations["Palace of Darkness - Compass Chest"]->setItem(Item::get('CompassD1')); - $this->locations["Palace of Darkness - Harmless Hellway"]->setItem(Item::get('FiveRupees')); - $this->locations["Palace of Darkness - Stalfos Basement"]->setItem(Item::get('KeyD1')); - $this->locations["Palace of Darkness - Dark Basement - Left"]->setItem(Item::get('Arrow')); - $this->locations["Palace of Darkness - Dark Basement - Right"]->setItem(Item::get('KeyD1')); - $this->locations["Palace of Darkness - Map Chest"]->setItem(Item::get('MapD1')); - $this->locations["Palace of Darkness - Dark Maze - Top"]->setItem(Item::get('ThreeBombs')); - $this->locations["Palace of Darkness - Dark Maze - Bottom"]->setItem(Item::get('KeyD1')); - $this->locations["Palace of Darkness - Shooter Room"]->setItem(Item::get('KeyD1')); - $this->locations["Palace of Darkness - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Palace of Darkness - Prize"]->setItem(Item::get('Crystal1')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Palace of Darkness - The Arena - Ledge"]->setRequirements(function($locations, $items) { - return $items->canShootArrows(); - }); - - $this->locations["Palace of Darkness - Big Key Chest"]->setRequirements(function($locations, $items) { - if ($locations["Palace of Darkness - Big Key Chest"]->hasItem(Item::get('KeyD1'))) { - return $items->has('KeyD1'); - } - - return (($items->has('Hammer') && $items->canShootArrows() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); - })->setAlwaysAllow(function($item, $items) { - return $item == Item::get('KeyD1') && $items->has('KeyD1', 5); - }); - - $this->locations["Palace of Darkness - The Arena - Bridge"]->setRequirements(function($locations, $items) { - return $items->has('KeyD1') - || ($items->canShootArrows() && $items->has('Hammer')); - }); - - $this->locations["Palace of Darkness - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('BigKeyD1') - && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); - }); - - $this->locations["Palace of Darkness - Compass Chest"]->setRequirements(function($locations, $items) { - return (($items->has('Hammer') && $items->canShootArrows() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) ? $items->has('KeyD1', 4) : $items->has('KeyD1', 3)); - }); - - $this->locations["Palace of Darkness - Harmless Hellway"]->setRequirements(function($locations, $items) { - if ($locations["Palace of Darkness - Harmless Hellway"]->hasItem(Item::get('KeyD1'))) { - return (($items->has('Hammer') && $items->canShootArrows() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) ? $items->has('KeyD1', 4) : $items->has('KeyD1', 3)); - } - - return (($items->has('Hammer') && $items->canShootArrows() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); - })->setAlwaysAllow(function($item, $items) { - return $item == Item::get('KeyD1') && $items->has('KeyD1', 5); - }); - - $this->locations["Palace of Darkness - Stalfos Basement"]->setRequirements(function($locations, $items) { - return $items->has('KeyD1') - || ($items->canShootArrows() && $items->has('Hammer')); - }); - - $this->locations["Palace of Darkness - Dark Basement - Left"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 4) : $items->has('KeyD1', 3)); - }); - - $this->locations["Palace of Darkness - Dark Basement - Right"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 4) : $items->has('KeyD1', 3)); - }); - - $this->locations["Palace of Darkness - Map Chest"]->setRequirements(function($locations, $items) { - return $items->canShootArrows(); - }); - - $this->locations["Palace of Darkness - Dark Maze - Top"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); - }); - - $this->locations["Palace of Darkness - Dark Maze - Bottom"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Palace of Darkness - Boss"]->canAccess($items); - }; - - $this->locations["Palace of Darkness - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $this->boss->canBeat($items, $locations) - && $items->has('Hammer') && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->canShootArrows() - && $items->has('BigKeyD1') && $items->has('KeyD1', 6) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD1') || $this->locations["Palace of Darkness - Boss"]->hasItem(Item::get('CompassD1'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD1') || $this->locations["Palace of Darkness - Boss"]->hasItem(Item::get('MapD1'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassD1') || $item == Item::get('MapD1')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->has('MoonPearl') && $this->world->getRegion('North East Dark World')->canEnter($locations, $items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode. - * - * @return $this - */ - public function initMajorGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->glitchedLinkInDarkWorld() - && $this->world->getRegion('North East Dark World')->canEnter($locations, $items) - || $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); - }; - } +class PalaceOfDarkness extends Region +{ + protected $name = 'Dark Palace'; + public $music_addresses = [ + 0x155B8, + ]; + + protected $map_reveal = 0x0200; + + protected $region_items = [ + 'BigKey', + 'BigKeyD1', + 'Compass', + 'CompassD1', + 'Key', + 'KeyD1', + 'Map', + 'MapD1', + ]; + + /** + * Create a new Palace of Darkness Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->boss = Boss::get("Helmasaur King", $world); + + $this->locations = new LocationCollection([ + new Location\Chest("Palace of Darkness - Shooter Room", [0xEA5B], null, $this), + new Location\Chest("Palace of Darkness - Big Key Chest", [0xEA37], null, $this), + new Location\Chest("Palace of Darkness - The Arena - Ledge", [0xEA3A], null, $this), + new Location\Chest("Palace of Darkness - The Arena - Bridge", [0xEA3D], null, $this), + new Location\Chest("Palace of Darkness - Stalfos Basement", [0xEA49], null, $this), + new Location\Chest("Palace of Darkness - Map Chest", [0xEA52], null, $this), + new Location\BigChest("Palace of Darkness - Big Chest", [0xEA40], null, $this), + new Location\Chest("Palace of Darkness - Compass Chest", [0xEA43], null, $this), + new Location\Chest("Palace of Darkness - Harmless Hellway", [0xEA46], null, $this), + new Location\Chest("Palace of Darkness - Dark Basement - Left", [0xEA4C], null, $this), + new Location\Chest("Palace of Darkness - Dark Basement - Right", [0xEA4F], null, $this), + new Location\Chest("Palace of Darkness - Dark Maze - Top", [0xEA55], null, $this), + new Location\Chest("Palace of Darkness - Dark Maze - Bottom", [0xEA58], null, $this), + new Location\Drop("Palace of Darkness - Boss", [0x180153], null, $this), + + new Location\Prize\Crystal("Palace of Darkness - Prize", [null, 0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Palace of Darkness - Prize"]; + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Palace of Darkness - The Arena - Ledge"]->setRequirements(function ($locations, $items) { + return $items->canShootArrows(); + }); + + $this->locations["Palace of Darkness - Big Key Chest"]->setRequirements(function ($locations, $items) { + if ($locations["Palace of Darkness - Big Key Chest"]->hasItem(Item::get('KeyD1', $this->world))) { + return $items->has('KeyD1'); + } + + return (($items->has('Hammer') && $items->canShootArrows() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('accessibility') !== 'locations' && $item == Item::get('KeyD1', $this->world) && $items->has('KeyD1', 5); + })->setFillRules(function ($item, $locations, $items) { + return $this->world->config('accessibility') !== 'locations' || $item != Item::get('KeyD1', $this->world); + }); + + $this->locations["Palace of Darkness - The Arena - Bridge"]->setRequirements(function ($locations, $items) { + return $items->has('KeyD1') + || ($items->canShootArrows() && $items->has('Hammer')); + }); + + $this->locations["Palace of Darkness - Big Chest"]->setRequirements(function ($locations, $items) { + return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('BigKeyD1') + && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); + }); + + $this->locations["Palace of Darkness - Compass Chest"]->setRequirements(function ($locations, $items) { + return ($items->has('Hammer') && $items->canShootArrows() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) ? $items->has('KeyD1', 4) : $items->has('KeyD1', 3); + }); + + $this->locations["Palace of Darkness - Harmless Hellway"]->setRequirements(function ($locations, $items) { + if ($locations["Palace of Darkness - Harmless Hellway"]->hasItem(Item::get('KeyD1', $this->world))) { + return ($items->has('Hammer') && $items->canShootArrows() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) ? $items->has('KeyD1', 4) : $items->has('KeyD1', 3); + } + + return (($items->has('Hammer') && $items->canShootArrows() && $items->has('Lamp', $this->world->config('item.require.Lamp', 1))) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('accessibility') !== 'locations' && $item == Item::get('KeyD1', $this->world) && $items->has('KeyD1', 5); + })->setFillRules(function ($item, $locations, $items) { + return $this->world->config('accessibility') !== 'locations' || $item != Item::get('KeyD1', $this->world); + }); + + $this->locations["Palace of Darkness - Stalfos Basement"]->setRequirements(function ($locations, $items) { + return $items->has('KeyD1') + || ($items->canShootArrows() && $items->has('Hammer')); + }); + + $this->locations["Palace of Darkness - Dark Basement - Left"]->setRequirements(function ($locations, $items) { + return ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) + || ($this->world->config('itemPlacement') === 'advanced' && $items->has('FireRod'))) + && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 4) : $items->has('KeyD1', 3)); + }); + + $this->locations["Palace of Darkness - Dark Basement - Right"]->setRequirements(function ($locations, $items) { + return ($items->has('Lamp', $this->world->config('item.require.Lamp', 1)) + || ($this->world->config('itemPlacement') === 'advanced' && $items->has('FireRod'))) + && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 4) : $items->has('KeyD1', 3)); + }); + + $this->locations["Palace of Darkness - Map Chest"]->setRequirements(function ($locations, $items) { + return $items->canShootArrows(); + }); + + $this->locations["Palace of Darkness - Dark Maze - Top"]->setRequirements(function ($locations, $items) { + return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); + }); + + $this->locations["Palace of Darkness - Dark Maze - Bottom"]->setRequirements(function ($locations, $items) { + return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && (($items->has('Hammer') && $items->canShootArrows()) ? $items->has('KeyD1', 6) : $items->has('KeyD1', 5)); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Palace of Darkness - Boss"]->canAccess($items); + }; + + $this->locations["Palace of Darkness - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && $this->boss->canBeat($items, $locations) + && $items->has('Hammer') && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->canShootArrows() + && $items->has('BigKeyD1') && $items->has('KeyD1', 6) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD1') || $this->locations["Palace of Darkness - Boss"]->hasItem(Item::get('CompassD1', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD1') || $this->locations["Palace of Darkness - Boss"]->hasItem(Item::get('MapD1', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassD1', $this->world) || $item == Item::get('MapD1', $this->world)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($this->world->config('itemPlacement') !== 'basic' + || (($this->world->config('mode.weapons') === 'swordless' || $items->hasSword()) && $items->hasHealth(7) && $items->hasBottle())) + && ((($items->has('MoonPearl') || ($this->world->config('canOWYBA', false) && $items->hasABottle())) + && $this->world->getRegion('North East Dark World')->canEnter($locations, $items)) + || ($this->world->config('canOneFrameClipUW', false) && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/SkullWoods.php b/app/Region/Standard/SkullWoods.php index e7c140bca..ce2700ac7 100644 --- a/app/Region/Standard/SkullWoods.php +++ b/app/Region/Standard/SkullWoods.php @@ -1,4 +1,6 @@ -boss = Boss::get("Mothula"); - - $this->locations = new LocationCollection([ - new Location\BigChest("Skull Woods - Big Chest", 0xE998, null, $this), - new Location\Chest("Skull Woods - Big Key Chest", 0xE99E, null, $this), - new Location\Chest("Skull Woods - Compass Chest", 0xE992, null, $this), - new Location\Chest("Skull Woods - Map Chest", 0xE99B, null, $this), - new Location\Chest("Skull Woods - Bridge Room", 0xE9FE, null, $this), - new Location\Chest("Skull Woods - Pot Prison", 0xE9A1, null, $this), - new Location\Chest("Skull Woods - Pinball Room", 0xE9C8, null, $this), - new Location\Drop("Skull Woods - Boss", 0x180155, null, $this), - - new Location\Prize\Crystal("Skull Woods - Prize", [null, 0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], null, $this), - ]); - - if ($this->world->config('region.forceSkullWoodsKey', true)) { - // F this key - $this->locations["Skull Woods - Pinball Room"]->setItem(Item::get('KeyD3')); - } - - $this->prize_location = $this->locations["Skull Woods - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Skull Woods - Big Chest"]->setItem(Item::get('FireRod')); - $this->locations["Skull Woods - Big Key Chest"]->setItem(Item::get('BigKeyD3')); - $this->locations["Skull Woods - Compass Chest"]->setItem(Item::get('CompassD3')); - $this->locations["Skull Woods - Map Chest"]->setItem(Item::get('MapD3')); - $this->locations["Skull Woods - Bridge Room"]->setItem(Item::get('KeyD3')); - $this->locations["Skull Woods - Pot Prison"]->setItem(Item::get('KeyD3')); - $this->locations["Skull Woods - Pinball Room"]->setItem(Item::get('KeyD3')); - $this->locations["Skull Woods - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Skull Woods - Prize"]->setItem(Item::get('Crystal3')); - - return $this; - } - - /** - * Check if a Boss can be placed in this region. - * currently Agahnim or Ganon can't be moved. - * - * @param Boss $boss boss we are testing - * - * @return bool - */ - public function canPlaceBoss(Boss $boss) : bool { - if ($this->name != "Ice Palace" && $this->world->config('mode.weapons') == 'swordless' - && $boss->getName() == 'Kholdstare') { - return false; - } - - return !in_array($boss->getName(), [ - "Agahnim", - "Agahnim2", - "Ganon", - "Trinexx", - ]); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Skull Woods - Pinball Room"]->setFillRules(function($item, $locations, $items) { - return $item == Item::get('KeyD3'); - }); - - $this->locations["Skull Woods - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyD3'); - })->setAlwaysAllow(function($item, $items) { - return $item == Item::get('BigKeyD3'); - }); - - $this->locations["Skull Woods - Bridge Room"]->setRequirements(function($locations, $items) { - return $items->has('MoonPearl') && $items->has('FireRod'); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Skull Woods - Boss"]->canAccess($items); - }; - - $this->locations["Skull Woods - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->has('MoonPearl') - && $items->has('FireRod') - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword()) - && $items->has('KeyD3', 3) - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD3') || $this->locations["Skull Woods - Boss"]->hasItem(Item::get('CompassD3'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD3') || $this->locations["Skull Woods - Boss"]->hasItem(Item::get('MapD3'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassD3') || $item == Item::get('MapD3')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->has('MoonPearl') && $this->world->getRegion('North West Dark World')->canEnter($locations, $items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $this->world->getRegion('North West Dark World')->canEnter($locations, $items); - }; - - return $this; - } - +class SkullWoods extends Region +{ + protected $name = 'Skull Woods'; + public $music_addresses = [ + 0x155BA, + 0x155BB, + 0x155BC, + 0x155BD, + 0x15608, + 0x15609, + 0x1560A, + 0x1560B, + ]; + + protected $map_reveal = 0x0080; + + protected $region_items = [ + 'BigKey', + 'BigKeyD3', + 'Compass', + 'CompassD3', + 'Key', + 'KeyD3', + 'Map', + 'MapD3', + ]; + + /** + * Create a new Skull Woods Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->boss = Boss::get("Mothula", $world); + + $this->locations = new LocationCollection([ + new Location\BigChest("Skull Woods - Big Chest", [0xE998], null, $this), + new Location\Chest("Skull Woods - Big Key Chest", [0xE99E], null, $this), + new Location\Chest("Skull Woods - Compass Chest", [0xE992], null, $this), + new Location\Chest("Skull Woods - Map Chest", [0xE99B], null, $this), + new Location\Chest("Skull Woods - Bridge Room", [0xE9FE], null, $this), + new Location\Chest("Skull Woods - Pot Prison", [0xE9A1], null, $this), + new Location\Chest("Skull Woods - Pinball Room", [0xE9C8], null, $this), + new Location\Drop("Skull Woods - Boss", [0x180155], null, $this), + + new Location\Prize\Crystal("Skull Woods - Prize", [null, 0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + + $this->prize_location = $this->locations["Skull Woods - Prize"]; + } + + /** + * Check if a Boss can be placed in this region. + * currently Agahnim or Ganon can't be moved. + * + * @param Boss $boss boss we are testing + * + * @return bool + */ + public function canPlaceBoss(Boss $boss, string $level = 'top'): bool + { + if ( + $this->name != "Ice Palace" && $this->world->config('mode.weapons') == 'swordless' + && $boss->getName() == 'Kholdstare' + ) { + return false; + } + + return !in_array($boss->getName(), [ + "Agahnim", + "Agahnim2", + "Ganon", + "Trinexx", + ]); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Skull Woods - Pinball Room"]->setFillRules(function ($item, $locations, $items) { + return $item == Item::get('KeyD3', $this->world); + }); + + $this->locations["Skull Woods - Big Chest"]->setRequirements(function ($locations, $items) { + return $items->has('BigKeyD3'); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('accessibility') !== 'locations' && $item == Item::get('BigKeyD3', $this->world); + }); + + $this->locations["Skull Woods - Bridge Room"]->setRequirements(function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('FireRod'); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Skull Woods - Boss"]->canAccess($items); + }; + + $this->locations["Skull Woods - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && $items->has('MoonPearl') + && $items->has('FireRod') + && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword()) + && $items->has('KeyD3', 3) + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD3') || $this->locations["Skull Woods - Boss"]->hasItem(Item::get('CompassD3', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD3') || $this->locations["Skull Woods - Boss"]->hasItem(Item::get('MapD3', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassD3', $this->world) || $item == Item::get('MapD3', $this->world)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($this->world->config('itemPlacement') !== 'basic' + || (($this->world->config('mode.weapons') === 'swordless' || $items->hasSword()) && $items->hasHealth(7) && $items->hasBottle())) + && ($this->world->config('canDungeonRevive') || $items->has('MoonPearl')) + && $this->world->getRegion('North West Dark World')->canEnter($locations, $items); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/SwampPalace.php b/app/Region/Standard/SwampPalace.php index 539979e15..898f98bfd 100644 --- a/app/Region/Standard/SwampPalace.php +++ b/app/Region/Standard/SwampPalace.php @@ -1,4 +1,6 @@ -boss = Boss::get("Arrghus"); - - $this->locations = new LocationCollection([ - new Location\Chest("Swamp Palace - Entrance", 0xEA9D, null, $this), - new Location\BigChest("Swamp Palace - Big Chest", 0xE989, null, $this), - new Location\Chest("Swamp Palace - Big Key Chest", 0xEAA6, null, $this), - new Location\Chest("Swamp Palace - Map Chest", 0xE986, null, $this), - new Location\Chest("Swamp Palace - West Chest", 0xEAA3, null, $this), - new Location\Chest("Swamp Palace - Compass Chest", 0xEAA0, null, $this), - new Location\Chest("Swamp Palace - Flooded Room - Left", 0xEAA9, null, $this), - new Location\Chest("Swamp Palace - Flooded Room - Right", 0xEAAC, null, $this), - new Location\Chest("Swamp Palace - Waterfall Room", 0xEAAF, null, $this), - new Location\Drop("Swamp Palace - Boss", 0x180154, null, $this), - - new Location\Prize\Crystal("Swamp Palace - Prize", [null, 0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], null, $this), - ]); - - $this->prize_location = $this->locations["Swamp Palace - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Swamp Palace - Entrance"]->setItem(Item::get('KeyD2')); - $this->locations["Swamp Palace - Big Chest"]->setItem(Item::get('Hookshot')); - $this->locations["Swamp Palace - Big Key Chest"]->setItem(Item::get('BigKeyD2')); - $this->locations["Swamp Palace - Map Chest"]->setItem(Item::get('MapD2')); - $this->locations["Swamp Palace - West Chest"]->setItem(Item::get('TwentyRupees')); - $this->locations["Swamp Palace - Compass Chest"]->setItem(Item::get('CompassD2')); - $this->locations["Swamp Palace - Flooded Room - Left"]->setItem(Item::get('TwentyRupees')); - $this->locations["Swamp Palace - Flooded Room - Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Swamp Palace - Waterfall Room"]->setItem(Item::get('TwentyRupees')); - $this->locations["Swamp Palace - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Swamp Palace - Prize"]->setItem(Item::get('Crystal2')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Swamp Palace - Entrance"]->setFillRules(function($item, $locations, $items) { - return $this->world->config('region.wildKeys', false) || $item == Item::get('KeyD2'); - }); - - $this->locations["Swamp Palace - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2') - && $items->has('Hammer') - && $items->has('BigKeyD2'); - })->setAlwaysAllow(function($item, $items) { - return $item == Item::get('BigKeyD2'); - }); - - $this->locations["Swamp Palace - Big Key Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2') - && $items->has('Hammer'); - }); - - $this->locations["Swamp Palace - Map Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2'); - }); - - $this->locations["Swamp Palace - West Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2') - && $items->has('Hammer'); - }); - - $this->locations["Swamp Palace - Compass Chest"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2') - && $items->has('Hammer'); - }); - - $this->locations["Swamp Palace - Flooded Room - Left"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2') - && $items->has('Hammer') - && $items->has('Hookshot'); - }); - - $this->locations["Swamp Palace - Flooded Room - Right"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2') - && $items->has('Hammer') - && $items->has('Hookshot'); - }); - - $this->locations["Swamp Palace - Waterfall Room"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2') - && $items->has('Hammer') - && $items->has('Hookshot'); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Swamp Palace - Boss"]->canAccess($items); - }; - - $this->locations["Swamp Palace - Boss"]->setRequirements(function($locations, $items) { - return $items->has('KeyD2') - && $items->has('Hammer') - && $items->has('Hookshot') - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD2') || $this->locations["Swamp Palace - Boss"]->hasItem(Item::get('CompassD2'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD2') || $this->locations["Swamp Palace - Boss"]->hasItem(Item::get('MapD2'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassD2') || $item == Item::get('MapD2')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->has('MoonPearl') && $items->has('MagicMirror') && $items->has('Flippers') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode. - * - * @return $this - */ - public function initMajorGlitches() { - $this->initNoGlitches(); - - $main = function($locations, $items) { - return $items->has('MoonPearl') && $items->has('MagicMirror') && $items->has('Flippers') - && $this->world->getRegion('South Dark World')->canEnter($locations, $items); - }; - - $hera = function($locations, $items) { - return $locations["Tower of Hera - Big Chest"]->canAccess($items); - }; - - $mire = function($locations, $items) { - return $items->has('KeyD6', 3) && $this->world->getRegion('Misery Mire')->canEnter($locations, $items); - }; - - $this->locations["Swamp Palace - Compass Chest"]->setRequirements(function($locations, $items) use ($main, $mire) { - return $items->has('KeyD2') && $items->has('Flippers') - && ($mire($locations, $items) - || ($main($locations, $items) && $items->has('Hammer'))); - }); - - $this->locations["Swamp Palace - Big Key Chest"]->setRequirements(function($locations, $items) use ($main, $mire) { - return $items->has('KeyD2') && $items->has('Flippers') - && ($mire($locations, $items) - || ($main($locations, $items) && $items->has('Hammer'))); - }); - - $this->locations["Swamp Palace - West Chest"]->setRequirements(function($locations, $items) use ($main, $mire) { - return $items->has('KeyD2') && $items->has('Flippers') - && ($mire($locations, $items) - || ($main($locations, $items) && $items->has('Hammer'))); - }); - - $this->locations["Swamp Palace - Big Chest"]->setRequirements(function($locations, $items) use ($main, $mire) { - return $items->has('KeyD2') && $items->has('Flippers') - && ($mire($locations, $items) && ($items->has('BigKeyD6') || $items->has('BigKeyD2') || $items->has('BigKeyP3')) - || ($main($locations, $items) && $items->has('Hammer') && $items->has('BigKeyD2'))); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyD2'); - }); - - $this->locations["Swamp Palace - Flooded Room - Left"]->setRequirements(function($locations, $items) use ($main, $mire) { - return $items->has('KeyD2') && $items->has('Hookshot') && $items->has('Flippers') - && ($mire($locations, $items) - || ($main($locations, $items) && $items->has('Hammer'))); - }); - - $this->locations["Swamp Palace - Flooded Room - Right"]->setRequirements(function($locations, $items) use ($main, $mire) { - return $items->has('KeyD2') && $items->has('Hookshot') && $items->has('Flippers') - && ($mire($locations, $items) - || ($main($locations, $items) && $items->has('Hammer'))); - }); - - $this->locations["Swamp Palace - Waterfall Room"]->setRequirements(function($locations, $items) use ($main, $mire) { - return $items->has('KeyD2') && $items->has('Hookshot') && $items->has('Flippers') - && ($mire($locations, $items) - || ($main($locations, $items) && $items->has('Hammer'))); - }); - - // @TODO: this function is probably wrong -_- - $this->locations["Swamp Palace - Boss"]->setRequirements(function($locations, $items) use ($main, $mire) { - return $items->has('KeyD2') && $items->has('Hookshot') && $items->has('Flippers') - && ($mire($locations, $items) - || ($main($locations, $items) && $items->has('Hammer'))) - && ($items->hasSword() || $items->has('Hammer') - || (($items->canShootArrows() || $items->canExtendMagic()) - && ($items->has('FireRod') || $items->has('IceRod')))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return $this->world->config('region.bossHaveKey', true) - || !in_array($item, [Item::get('KeyD2'), Item::get('BigKeyD2')]); - }); - - // @TODO: this function is probably wrong -_- - $this->can_complete = function($locations, $items) use ($main, $mire) { - return $main($locations, $items) && $items->has('KeyD2') && $items->has('Hookshot') - && ($items->has('Hammer') || $mire($locations, $items)) - && $locations["Swamp Palace - Boss"]->canAccess($items); - }; - - $this->can_enter = function($locations, $items) use ($main, $mire) { - return $items->has('RescueZelda') - && ($main($locations, $items) - || $mire($locations, $items)); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } +class SwampPalace extends Region +{ + protected $name = 'Swamp Palace'; + public $music_addresses = [ + 0x155B7, + ]; + + protected $map_reveal = 0x0400; + + protected $region_items = [ + 'BigKey', + 'BigKeyD2', + 'Compass', + 'CompassD2', + 'Key', + 'KeyD2', + 'Map', + 'MapD2', + ]; + + /** + * Create a new Swamp Palace Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->boss = Boss::get("Arrghus", $world); + + $this->locations = new LocationCollection([ + new Location\Chest("Swamp Palace - Entrance", [0xEA9D], null, $this), + new Location\BigChest("Swamp Palace - Big Chest", [0xE989], null, $this), + new Location\Chest("Swamp Palace - Big Key Chest", [0xEAA6], null, $this), + new Location\Chest("Swamp Palace - Map Chest", [0xE986], null, $this), + new Location\Chest("Swamp Palace - West Chest", [0xEAA3], null, $this), + new Location\Chest("Swamp Palace - Compass Chest", [0xEAA0], null, $this), + new Location\Chest("Swamp Palace - Flooded Room - Left", [0xEAA9], null, $this), + new Location\Chest("Swamp Palace - Flooded Room - Right", [0xEAAC], null, $this), + new Location\Chest("Swamp Palace - Waterfall Room", [0xEAAF], null, $this), + new Location\Drop("Swamp Palace - Boss", [0x180154], null, $this), + + new Location\Prize\Crystal("Swamp Palace - Prize", [null, 0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Swamp Palace - Prize"]; + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $main = function ($locations, $items) { + return $items->has('MoonPearl') && $items->has('MagicMirror') && $items->has('Flippers') + && $this->world->getRegion('South Dark World')->canEnter($locations, $items); + }; + + $mire = function ($locations, $items) { + return $this->world->config('canOneFrameClipUW', false) + && $items->has('KeyD6', 3) + && $this->world->getRegion('Misery Mire')->canEnter($locations, $items); + }; + + $this->locations["Swamp Palace - Entrance"]->setFillRules(function ($item, $locations, $items) { + return $this->world->config('region.wildKeys', false) || $item == Item::get('KeyD2', $this->world); + }); + + $this->locations["Swamp Palace - Big Chest"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->has('KeyD2') && $items->has('Flippers') + && ($mire($locations, $items) && ($items->has('BigKeyD6') || $items->has('BigKeyD2') || $items->has('BigKeyP3')) + || ($main($locations, $items) && $items->has('Hammer') && $items->has('BigKeyD2'))); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('accessibility') !== 'locations' && $item == Item::get('BigKeyD2', $this->world); + }); + + $this->locations["Swamp Palace - Big Key Chest"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->has('KeyD2') + && $items->has('Flippers') + && ($mire($locations, $items) + || ($main($locations, $items) && $items->has('Hammer'))); + }); + + $this->locations["Swamp Palace - Map Chest"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->canBombThings() + && (($items->has('KeyD2') && $main($locations, $items)) + || $mire($locations, $items)); + }); + + $this->locations["Swamp Palace - West Chest"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->has('KeyD2') + && $items->has('Flippers') + && ($mire($locations, $items) + || ($main($locations, $items) && $items->has('Hammer'))); + }); + + $this->locations["Swamp Palace - Compass Chest"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->has('KeyD2') + && $items->has('Flippers') + && ($mire($locations, $items) + || ($main($locations, $items) && $items->has('Hammer'))); + }); + + $this->locations["Swamp Palace - Flooded Room - Left"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->has('KeyD2') + && $items->has('Hookshot') + && $items->has('Flippers') + && ($mire($locations, $items) + || ($main($locations, $items) && $items->has('Hammer'))); + }); + + $this->locations["Swamp Palace - Flooded Room - Right"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->has('KeyD2') + && $items->has('Hookshot') + && $items->has('Flippers') + && ($mire($locations, $items) + || ($main($locations, $items) && $items->has('Hammer'))); + }); + + $this->locations["Swamp Palace - Waterfall Room"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->has('KeyD2') + && $items->has('Hookshot') + && $items->has('Flippers') + && ($mire($locations, $items) + || ($main($locations, $items) && $items->has('Hammer'))); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Swamp Palace - Boss"]->canAccess($items); + }; + + $this->locations["Swamp Palace - Boss"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return $items->has('KeyD2') + && $items->has('Flippers') + && ($mire($locations, $items) || ($main($locations, $items) && $items->has('Hammer'))) + && $items->has('Hookshot') + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD2') || $this->locations["Swamp Palace - Boss"]->hasItem(Item::get('CompassD2', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD2') || $this->locations["Swamp Palace - Boss"]->hasItem(Item::get('MapD2', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassD2', $this->world) || $item == Item::get('MapD2', $this->world)); + }); + + $this->can_enter = function ($locations, $items) use ($main, $mire) { + return $items->has('RescueZelda') + && ($this->world->config('itemPlacement') !== 'basic' + || (($this->world->config('mode.weapons') === 'swordless' || $items->hasSword()) && $items->hasHealth(7) && $items->hasBottle())) + && ($main($locations, $items) + || $mire($locations, $items)); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/ThievesTown.php b/app/Region/Standard/ThievesTown.php index 25775030c..ac244234d 100644 --- a/app/Region/Standard/ThievesTown.php +++ b/app/Region/Standard/ThievesTown.php @@ -1,4 +1,6 @@ -boss = Boss::get("Blind"); - - $this->locations = new LocationCollection([ - new Location\Chest("Thieves' Town - Attic", 0xEA0D, null, $this), - new Location\Chest("Thieves' Town - Big Key Chest", 0xEA04, null, $this), - new Location\Chest("Thieves' Town - Map Chest", 0xEA01, null, $this), - new Location\Chest("Thieves' Town - Compass Chest", 0xEA07, null, $this), - new Location\Chest("Thieves' Town - Ambush Chest", 0xEA0A, null, $this), - new Location\BigChest("Thieves' Town - Big Chest", 0xEA10, null, $this), - new Location\Chest("Thieves' Town - Blind's Cell", 0xEA13, null, $this), - new Location\Drop("Thieves' Town - Boss", 0x180156, null, $this), - - new Location\Prize\Crystal("Thieves' Town - Prize", [null, 0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], null, $this), - ]); - - $this->prize_location = $this->locations["Thieves' Town - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Thieves' Town - Attic"]->setItem(Item::get('ThreeBombs')); - $this->locations["Thieves' Town - Big Key Chest"]->setItem(Item::get('BigKeyD4')); - $this->locations["Thieves' Town - Map Chest"]->setItem(Item::get('MapD4')); - $this->locations["Thieves' Town - Compass Chest"]->setItem(Item::get('CompassD4')); - $this->locations["Thieves' Town - Ambush Chest"]->setItem(Item::get('TwentyRupees')); - $this->locations["Thieves' Town - Big Chest"]->setItem(Item::get('TitansMitt')); - $this->locations["Thieves' Town - Blind's Cell"]->setItem(Item::get('KeyD4')); - $this->locations["Thieves' Town - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Thieves' Town - Prize"]->setItem(Item::get('Crystal4')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Thieves' Town - Attic"]->setRequirements(function($locations, $items) { - return $items->has('KeyD4') && $items->has('BigKeyD4'); - }); - - $this->locations["Thieves' Town - Big Chest"]->setRequirements(function($locations, $items) { - if ($locations["Thieves' Town - Big Chest"]->hasItem(Item::get('KeyD4'))) { - return $items->has('Hammer') && $items->has('BigKeyD4'); - } - - return $items->has('Hammer') && $items->has('KeyD4') && $items->has('BigKeyD4'); - })->setAlwaysAllow(function($item, $items) { - return $item == Item::get('KeyD4') && $items->has('Hammer'); - }); - - $this->locations["Thieves' Town - Blind's Cell"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyD4'); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Thieves' Town - Boss"]->canAccess($items); - }; - - $this->locations["Thieves' Town - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->has('KeyD4') && $items->has('BigKeyD4') - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD4') || $this->locations["Thieves' Town - Boss"]->hasItem(Item::get('CompassD4'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD4') || $this->locations["Thieves' Town - Boss"]->hasItem(Item::get('MapD4'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassD4') || $item == Item::get('MapD4')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->has('MoonPearl') && $this->world->getRegion('North West Dark World')->canEnter($locations, $items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode. - * - * @return $this - */ - public function initMajorGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && $items->glitchedLinkInDarkWorld() - && $this->world->getRegion('North West Dark World')->canEnter($locations, $items); - }; - - return $this; - } +class ThievesTown extends Region +{ + protected $name = 'Thieves Town'; + public $music_addresses = [ + 0x155C6, + ]; + + protected $map_reveal = 0x0010; + + protected $region_items = [ + 'BigKey', + 'BigKeyD4', + 'Compass', + 'CompassD4', + 'Key', + 'KeyD4', + 'Map', + 'MapD4', + ]; + + /** + * Create a new Thieves Town Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->boss = Boss::get("Blind", $world); + + $this->locations = new LocationCollection([ + new Location\Chest("Thieves' Town - Attic", [0xEA0D], null, $this), + new Location\Chest("Thieves' Town - Big Key Chest", [0xEA04], null, $this), + new Location\Chest("Thieves' Town - Map Chest", [0xEA01], null, $this), + new Location\Chest("Thieves' Town - Compass Chest", [0xEA07], null, $this), + new Location\Chest("Thieves' Town - Ambush Chest", [0xEA0A], null, $this), + new Location\BigChest("Thieves' Town - Big Chest", [0xEA10], null, $this), + new Location\Chest("Thieves' Town - Blind's Cell", [0xEA13], null, $this), + new Location\Drop("Thieves' Town - Boss", [0x180156], null, $this), + + new Location\Prize\Crystal("Thieves' Town - Prize", [null, 0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Thieves' Town - Prize"]; + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $this->locations["Thieves' Town - Attic"]->setRequirements(function ($locations, $items) { + return $items->has('KeyD4') && $items->has('BigKeyD4'); + }); + + $this->locations["Thieves' Town - Big Chest"]->setRequirements(function ($locations, $items) { + if ($locations["Thieves' Town - Big Chest"]->hasItem(Item::get('KeyD4', $this->world))) { + return $items->has('Hammer') && $items->has('BigKeyD4'); + } + + return $items->has('Hammer') && $items->has('KeyD4') && $items->has('BigKeyD4'); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('accessibility') !== 'locations' && $item == Item::get('KeyD4', $this->world) && $items->has('Hammer'); + }); + + $this->locations["Thieves' Town - Blind's Cell"]->setRequirements(function ($locations, $items) { + return $items->has('BigKeyD4'); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Thieves' Town - Boss"]->canAccess($items); + }; + + $this->locations["Thieves' Town - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && $items->has('KeyD4') && $items->has('BigKeyD4') + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD4') || $this->locations["Thieves' Town - Boss"]->hasItem(Item::get('CompassD4', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD4') || $this->locations["Thieves' Town - Boss"]->hasItem(Item::get('MapD4', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassD4', $this->world) || $item == Item::get('MapD4', $this->world)); + }); + + $this->can_enter = function ($locations, $items) { + return $items->has('RescueZelda') + && ($this->world->config('itemPlacement') !== 'basic' + || (($this->world->config('mode.weapons') === 'swordless' || $items->hasSword()) && $items->hasHealth(7) && $items->hasBottle())) + && ($items->has('MoonPearl') || ($this->world->config('canOWYBA', false) && $items->hasABottle())) + && $this->world->getRegion('North West Dark World')->canEnter($locations, $items); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/TowerOfHera.php b/app/Region/Standard/TowerOfHera.php index 7f76a2320..f0b861dfa 100644 --- a/app/Region/Standard/TowerOfHera.php +++ b/app/Region/Standard/TowerOfHera.php @@ -1,4 +1,6 @@ -boss = Boss::get("Moldorm"); - - $this->locations = new LocationCollection([ - new Location\Chest("Tower of Hera - Big Key Chest", 0xE9E6, null, $this), - new Location\Standing\HeraBasement("Tower of Hera - Basement Cage", 0x180162, null, $this), - new Location\Chest("Tower of Hera - Map Chest", 0xE9AD, null, $this), - new Location\Chest("Tower of Hera - Compass Chest", 0xE9FB, null, $this), - new Location\BigChest("Tower of Hera - Big Chest", 0xE9F8, null, $this), - new Location\Drop("Tower of Hera - Boss", 0x180152, null, $this), - - new Location\Prize\Pendant("Tower of Hera - Prize", [null, 0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], null, $this), - ]); - - $this->prize_location = $this->locations["Tower of Hera - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Tower of Hera - Big Key Chest"]->setItem(Item::get('BigKeyP3')); - $this->locations["Tower of Hera - Basement Cage"]->setItem(Item::get('KeyP3')); - $this->locations["Tower of Hera - Map Chest"]->setItem(Item::get('MapP3')); - $this->locations["Tower of Hera - Compass Chest"]->setItem(Item::get('CompassP3')); - $this->locations["Tower of Hera - Big Chest"]->setItem(Item::get('MoonPearl')); - $this->locations["Tower of Hera - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Tower of Hera - Prize"]->setItem(Item::get('PendantOfPower')); - - return $this; - } - - /** - * Check if a Boss can be placed in this region. - * currently Agahnim or Ganon can't be moved. - * - * @param Boss $boss boss we are testing - * - * @return bool - */ - public function canPlaceBoss(Boss $boss) : bool { - if ($this->name != "Ice Palace" && $this->world->config('mode.weapons') == 'swordless' - && $boss->getName() == 'Kholdstare') { - return false; - } - - return !in_array($boss->getName(), [ - "Agahnim", - "Agahnim2", - "Armos Knights", - "Arrghus", - "Blind", - "Ganon", - "Lanmolas", - "Trinexx", - ]); - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Tower of Hera - Big Key Chest"]->setRequirements(function($locations, $items) { - return $items->canLightTorches() && $items->has('KeyP3'); - })->setAlwaysAllow(function($item, $items) { - return $item == Item::get('KeyP3'); - }); - - $this->locations["Tower of Hera - Compass Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyP3'); - }); - - $this->locations["Tower of Hera - Big Chest"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyP3'); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Tower of Hera - Boss"]->canAccess($items); - }; - - $this->locations["Tower of Hera - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $this->boss->canBeat($items, $locations) - && $items->has('BigKeyP3') - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassP3') || $this->locations["Tower of Hera - Boss"]->hasItem(Item::get('CompassP3'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapP3') || $this->locations["Tower of Hera - Boss"]->hasItem(Item::get('MapP3'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassP3') || $item == Item::get('MapP3')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('MagicMirror') || ($items->has('Hookshot') && $items->has('Hammer'))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode. - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - $main = function($locations, $items) { - return $items->has('PegasusBoots') - || (($items->has('MagicMirror') || ($items->has('Hookshot') && $items->has('Hammer'))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); - }; - - $mire = function($locations, $items) { - return (($locations->itemInLocations(Item::get('BigKeyD6'), [ - "Misery Mire - Compass Chest", - "Misery Mire - Big Key Chest", - ]) && $items->has('KeyD6', 2)) - || $items->has('KeyD6', 3)) - && $this->world->getRegion('Misery Mire')->canEnter($locations, $items); - }; - - $this->locations["Tower of Hera - Big Key Chest"]->setRequirements(function($locations, $items) { - return $items->canLightTorches() && $items->has('KeyP3'); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('KeyP3'); - }); - - $this->locations["Tower of Hera - Compass Chest"]->setRequirements(function($locations, $items) use ($main, $mire) { - return ($main($locations, $items) && $items->has('BigKeyP3')) - || $mire($locations, $items); - }); - - $this->locations["Tower of Hera - Big Chest"]->setRequirements(function($locations, $items) use ($main, $mire) { - return ($main($locations, $items) && $items->has('BigKeyP3')) - || ($mire($locations, $items) && ($items->has('BigKeyP3') || $items->has('BigKeyD6'))); - }); - - $this->locations["Tower of Hera - Boss"]->setRequirements(function($locations, $items) use ($main, $mire) { - return (($main($locations, $items) && $items->has('BigKeyP3')) - || $mire($locations, $items)) - && $this->boss->canBeat($items, $locations); - }); - - // @TODO: this function is probably wrong -_- - $this->can_complete = function($locations, $items) use ($main, $mire) { - return ((($main($locations, $items) && $items->has('BigKeyP3')) - || ($mire($locations, $items) && ($items->has('BigKeyP3') || $items->has('BigKeyD6')))) - && ($items->hasSword() || $items->has('Hammer'))) - || ($locations["Tower of Hera - Big Chest"]->canAccess($items) - && $locations["Swamp Palace - Boss"]->canAccess($items)); - }; - - $this->can_enter = function($locations, $items) use ($main, $mire) { - return $items->has('RescueZelda') - && ($main($locations, $items) - || $mire($locations, $items)); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ($items->has('PegasusBoots') - || (($items->has('MagicMirror') || ($items->has('Hookshot') && $items->has('Hammer'))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items))); - }; - - return $this; - } +class TowerOfHera extends Region +{ + protected $name = 'Tower Of Hera'; + public $music_addresses = [ + 0x155C5, + 0x1107A, + 0x10B8C, + ]; + + protected $map_reveal = 0x0020; + + protected $region_items = [ + 'BigKey', + 'BigKeyP3', + 'Compass', + 'CompassP3', + 'Key', + 'KeyP3', + 'Map', + 'MapP3', + ]; + + /** + * Create a new Tower of Hera Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + // set a default boss + $this->boss = Boss::get("Moldorm", $world); + + $this->locations = new LocationCollection([ + new Location\Chest("Tower of Hera - Big Key Chest", [0xE9E6], null, $this), + new Location\Standing\HeraBasement("Tower of Hera - Basement Cage", [0x180162], null, $this), + new Location\Chest("Tower of Hera - Map Chest", [0xE9AD], null, $this), + new Location\Chest("Tower of Hera - Compass Chest", [0xE9FB], null, $this), + new Location\BigChest("Tower of Hera - Big Chest", [0xE9F8], null, $this), + new Location\Drop("Tower of Hera - Boss", [0x180152], null, $this), + + new Location\Prize\Pendant("Tower of Hera - Prize", [null, 0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Tower of Hera - Prize"]; + } + + /** + * Check if a Boss can be placed in this region. + * currently Agahnim or Ganon can't be moved. + * + * @param Boss $boss boss we are testing + * + * @return bool + */ + public function canPlaceBoss(Boss $boss, string $level = 'top'): bool + { + if ( + $this->name != "Ice Palace" && $this->world->config('mode.weapons') == 'swordless' + && $boss->getName() == 'Kholdstare' + ) { + return false; + } + + return !in_array($boss->getName(), [ + "Agahnim", + "Agahnim2", + "Armos Knights", + "Arrghus", + "Blind", + "Ganon", + "Lanmolas", + "Trinexx", + ]); + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $main = function ($locations, $items) { + return ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots')) + || (($items->has('MagicMirror') || ($items->has('Hookshot') && $items->has('Hammer'))) + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items)); + }; + + $mire = function ($locations, $items) { + return $this->world->config('canOneFrameClipUW', false) + && (($locations->itemInLocations(Item::get('BigKeyD6', $this->world), [ + "Misery Mire - Compass Chest", + "Misery Mire - Big Key Chest", + ]) && $items->has('KeyD6', 2)) + || $items->has('KeyD6', 3)) + && $this->world->getRegion('Misery Mire')->canEnter($locations, $items); + }; + + $this->locations["Tower of Hera - Big Key Chest"]->setRequirements(function ($locations, $items) { + return $items->canLightTorches() && $items->has('KeyP3'); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('accessibility') !== 'locations' && $item == Item::get('KeyP3', $this->world); + }); + + $this->locations["Tower of Hera - Compass Chest"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return ($main($locations, $items) && $items->has('BigKeyP3')) + || $mire($locations, $items); + }); + + $this->locations["Tower of Hera - Big Chest"]->setRequirements(function ($locations, $items) use ($main, $mire) { + return ($main($locations, $items) && $items->has('BigKeyP3')) + || ($mire($locations, $items) && ($items->has('BigKeyP3') || $items->has('BigKeyD6'))); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Tower of Hera - Boss"]->canAccess($items); + }; + + $this->locations["Tower of Hera - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && $this->boss->canBeat($items, $locations) + && $items->has('BigKeyP3') + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassP3') || $this->locations["Tower of Hera - Boss"]->hasItem(Item::get('CompassP3', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapP3') || $this->locations["Tower of Hera - Boss"]->hasItem(Item::get('MapP3', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassP3', $this->world) || $item == Item::get('MapP3', $this->world)); + }); + + $this->can_enter = function ($locations, $items) use ($main, $mire) { + return $items->has('RescueZelda') + && ($main($locations, $items) + || $mire($locations, $items)); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Region/Standard/TurtleRock.php b/app/Region/Standard/TurtleRock.php index b192053f7..0c976ba0d 100644 --- a/app/Region/Standard/TurtleRock.php +++ b/app/Region/Standard/TurtleRock.php @@ -1,4 +1,6 @@ -boss = Boss::get("Trinexx"); - - $this->locations = new LocationCollection([ - new Location\Chest("Turtle Rock - Chain Chomps", 0xEA16, null, $this), - new Location\Chest("Turtle Rock - Compass Chest", 0xEA22, null, $this), - new Location\Chest("Turtle Rock - Roller Room - Left", 0xEA1C, null, $this), - new Location\Chest("Turtle Rock - Roller Room - Right", 0xEA1F, null, $this), - new Location\BigChest("Turtle Rock - Big Chest", 0xEA19, null, $this), - new Location\Chest("Turtle Rock - Big Key Chest", 0xEA25, null, $this), - new Location\Chest("Turtle Rock - Crystaroller Room", 0xEA34, null, $this), - new Location\Chest("Turtle Rock - Eye Bridge - Bottom Left", 0xEA31, null, $this), - new Location\Chest("Turtle Rock - Eye Bridge - Bottom Right", 0xEA2E, null, $this), - new Location\Chest("Turtle Rock - Eye Bridge - Top Left", 0xEA2B, null, $this), - new Location\Chest("Turtle Rock - Eye Bridge - Top Right", 0xEA28, null, $this), - new Location\Drop("Turtle Rock - Boss", 0x180159, null, $this), - - new Location\Prize\Crystal("Turtle Rock - Prize", [null, 0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], null, $this), - ]); - - $this->prize_location = $this->locations["Turtle Rock - Prize"]; - } - - /** - * Set Locations to have Items like the vanilla game. - * - * @return $this - */ - public function setVanilla() { - $this->locations["Turtle Rock - Chain Chomps"]->setItem(Item::get('KeyD7')); - $this->locations["Turtle Rock - Compass Chest"]->setItem(Item::get('CompassD7')); - $this->locations["Turtle Rock - Roller Room - Left"]->setItem(Item::get('MapD7')); - $this->locations["Turtle Rock - Roller Room - Right"]->setItem(Item::get('KeyD7')); - $this->locations["Turtle Rock - Big Chest"]->setItem(Item::get('MirrorShield')); - $this->locations["Turtle Rock - Big Key Chest"]->setItem(Item::get('BigKeyD7')); - $this->locations["Turtle Rock - Crystaroller Room"]->setItem(Item::get('KeyD7')); - $this->locations["Turtle Rock - Eye Bridge - Bottom Left"]->setItem(Item::get('KeyD7')); - $this->locations["Turtle Rock - Eye Bridge - Bottom Right"]->setItem(Item::get('TwentyRupees')); - $this->locations["Turtle Rock - Eye Bridge - Top Left"]->setItem(Item::get('FiveRupees')); - $this->locations["Turtle Rock - Eye Bridge - Top Right"]->setItem(Item::get('OneRupee')); - $this->locations["Turtle Rock - Boss"]->setItem(Item::get('BossHeartContainer')); - - $this->locations["Turtle Rock - Prize"]->setItem(Item::get('Crystal7')); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for No Glitches - * - * @return $this - */ - public function initNoGlitches() { - $this->locations["Turtle Rock - Chain Chomps"]->setRequirements(function($locations, $items) { - return $items->has('KeyD7'); - }); - - $this->locations["Turtle Rock - Roller Room - Left"]->setRequirements(function($locations, $items) { - return $items->has('FireRod') && $items->has('CaneOfSomaria'); - }); - - $this->locations["Turtle Rock - Roller Room - Right"]->setRequirements(function($locations, $items) { - return $items->has('FireRod') && $items->has('CaneOfSomaria'); - }); - - $this->locations["Turtle Rock - Compass Chest"]->setRequirements(function($locations, $items) { - return $items->has('CaneOfSomaria'); - }); - - $this->locations["Turtle Rock - Big Chest"]->setRequirements(function($locations, $items) { - return ($items->has('CaneOfSomaria') || $items->has('Hookshot')) - && $items->has('BigKeyD7') && $items->has('KeyD7', 2); - }); - - $this->locations["Turtle Rock - Big Key Chest"]->setRequirements(function($locations, $items) { - if (!$locations["Turtle Rock - Big Key Chest"]->hasItem(Item::get('BigKeyD7')) && $this->world->config('region.wildKeys', false)) { - return $locations["Turtle Rock - Big Key Chest"]->hasItem(Item::get('KeyD7')) ? $items->has('KeyD7', 3) : $items->has('KeyD7', 4); - } - return $items->has('KeyD7', 2); - })->setAlwaysAllow(function($item, $items) { - return $item == Item::get('KeyD7') && $items->has('KeyD7', 3); - }); - - $this->locations["Turtle Rock - Crystaroller Room"]->setRequirements(function($locations, $items) { - return $items->has('BigKeyD7') && $items->has('KeyD7', 2); - }); - - $this->locations["Turtle Rock - Eye Bridge - Bottom Left"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3) - && ($items->has('Cape') || $items->has('CaneOfByrna') - || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); - }); - - $this->locations["Turtle Rock - Eye Bridge - Bottom Right"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3) - && ($items->has('Cape') || $items->has('CaneOfByrna') - || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); - }); - - $this->locations["Turtle Rock - Eye Bridge - Top Left"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3) - && ($items->has('Cape') || $items->has('CaneOfByrna') - || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); - }); - - $this->locations["Turtle Rock - Eye Bridge - Top Right"]->setRequirements(function($locations, $items) { - return $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3) - && ($items->has('Cape') || $items->has('CaneOfByrna') - || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); - }); - - $this->can_complete = function($locations, $items) { - return $this->locations["Turtle Rock - Boss"]->canAccess($items); - }; - - $this->locations["Turtle Rock - Boss"]->setRequirements(function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->has('KeyD7', 4) - && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) - && $items->has('BigKeyD7') && $items->has('CaneOfSomaria') - && $this->boss->canBeat($items, $locations) - && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD7') || $this->locations["Turtle Rock - Boss"]->hasItem(Item::get('CompassD7'))) - && (!$this->world->config('region.wildMaps', false) || $items->has('MapD7') || $this->locations["Turtle Rock - Boss"]->hasItem(Item::get('MapD7'))); - })->setFillRules(function($item, $locations, $items) { - if (!$this->world->config('region.bossNormalLocation', true) - && ($item instanceof Item\Key || $item instanceof Item\BigKey - || $item instanceof Item\Map || $item instanceof Item\Compass)) { - return false; - } - - return true; - })->setAlwaysAllow(function($item, $items) { - return $this->world->config('region.bossNormalLocation', true) - && ($item == Item::get('CompassD7') || $item == Item::get('MapD7')); - }); - - $this->can_enter = function($locations, $items) { - return $items->has('RescueZelda') - && ((($locations["Turtle Rock Medallion"]->hasItem(Item::get('Bombos')) && $items->has('Bombos')) - || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Ether')) && $items->has('Ether')) - || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Quake')) && $items->has('Quake'))) - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) - && $items->has('MoonPearl') && $items->has('CaneOfSomaria') - && $items->canLiftDarkRocks() && $items->has('Hammer') - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); - }; - - $this->prize_location->setRequirements($this->can_complete); - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for MajorGlitches Mode. - * - * @return $this - */ - public function initMajorGlitches() { - $this->initOverworldGlitches(); - - // @TODO: entry functions don't account for 2x YBA - $lower = function($locations, $items) { - return $items->has('MagicMirror') && ($items->has('MoonPearl') - || ($items->hasABottle() && $items->has('PegasusBoots'))) - && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); - }; - - $middle = function($locations, $items) { - return ($items->has('MagicMirror') || ($items->glitchedLinkInDarkWorld() && $items->canSpinSpeed())) - && ($items->has('PegasusBoots') || $items->has('CaneOfSomaria') || $items->has('Hookshot') - || !$this->world->config('region.cantTakeDamage', false) - && ($items->has('Cape') || $items->has('CaneOfByrna'))) - && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items); - }; - - $upper = function($locations, $items) { - return ((($locations["Turtle Rock Medallion"]->hasItem(Item::get('Bombos')) && $items->has('Bombos')) - || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Ether')) && $items->has('Ether')) - || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Quake')) && $items->has('Quake'))) - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) - && ($items->has('MoonPearl') || ($items->hasABottle() && $items->has('PegasusBoots'))) - && $items->has('CaneOfSomaria') && $items->has('Hammer') - && ($items->canLiftDarkRocks() || $items->has('PegasusBoots')) - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); - }; - - $this->locations["Turtle Rock - Chain Chomps"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return ($upper($locations, $items) && $items->has('KeyD7')) - || $middle($locations, $items) - || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria')); - }); - - $this->locations["Turtle Rock - Roller Room - Left"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && ($upper($locations, $items) - || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Right", - "Turtle Rock - Compass Chest", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4))) - || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); - }); - - $this->locations["Turtle Rock - Roller Room - Right"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && ($upper($locations, $items) - || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Left", - "Turtle Rock - Compass Chest", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4))) - || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); - }); - - $this->locations["Turtle Rock - Compass Chest"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return $items->has('CaneOfSomaria') - && ($upper($locations, $items) - || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Left", - "Turtle Rock - Roller Room - Right", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4))) - || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); - }); - - $this->locations["Turtle Rock - Big Chest"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return $items->has('BigKeyD7') - && (($upper($locations, $items) && $items->has('KeyD7', 2)) - || ($middle($locations, $items) && ($items->has('Hookshot') || $items->has('CaneOfSomaria'))) - || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria'))); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyD7'); - }); - - $this->locations["Turtle Rock - Big Key Chest"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return (($upper($locations, $items) || $middle($locations, $items)) && $items->has('KeyD7', 2)) - || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('KeyD7', 4)); - }); - - $this->locations["Turtle Rock - Crystaroller Room"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return $items->has('BigKeyD7') && (($upper($locations, $items) && $items->has('KeyD7', 2)) - || $middle($locations, $items) - || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria'))); - }); - - $this->locations["Turtle Rock - Eye Bridge - Bottom Left"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return ($lower($locations, $items) - || (($upper($locations, $items) || $middle($locations, $items)) && - $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) - && ($items->has('Cape') || $items->has('CaneOfByrna') || $items->canBlockLasers()); - }); - - $this->locations["Turtle Rock - Eye Bridge - Bottom Right"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return ($lower($locations, $items) - || (($upper($locations, $items) || $middle($locations, $items)) && - $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) - && ($items->has('Cape') || $items->has('CaneOfByrna') || $items->canBlockLasers()); - }); - - $this->locations["Turtle Rock - Eye Bridge - Top Left"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return ($lower($locations, $items) - || (($upper($locations, $items) || $middle($locations, $items)) && - $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) - && ($items->has('Cape') || $items->has('CaneOfByrna') || $items->canBlockLasers()); - }); - - $this->locations["Turtle Rock - Eye Bridge - Top Right"]->setRequirements(function($locations, $items) use ($upper, $middle, $lower) { - return ($lower($locations, $items) - || (($upper($locations, $items) || $middle($locations, $items)) && - $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) - && ($items->has('Cape') || $items->has('CaneOfByrna') || $items->canBlockLasers()); - }); - - // @TODO: this function is probably wrong -_- - $this->can_complete = function($locations, $items) { - return $this->canEnter($locations, $items) - && $items->has('FireRod') && $items->has('IceRod') - && $items->has('BigKeyD7') && $items->has('CaneOfSomaria') - && ($items->has('Hammer') || $items->hasSword(2)) - && $items->has('KeyD7', 4); - }; - - // @TODO: this function is probably wrong -_- - $this->locations["Turtle Rock - Boss"]->setRequirements($this->can_complete); - - $this->can_enter = function($locations, $items) use ($lower, $middle, $upper) { - return $items->has('RescueZelda') - && ($lower($locations, $items) - || $middle($locations, $items) - || $upper($locations, $items)); - }; - - return $this; - } - - /** - * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained - * within for Overworld Glitches Mode - * - * @return $this - */ - public function initOverworldGlitches() { - $this->initNoGlitches(); - - $middle = function($locations, $items) { - return ($items->has('MagicMirror') || ($items->has('MoonPearl') && $items->canSpinSpeed())) - && ($items->has('PegasusBoots') || $items->has('CaneOfSomaria') || $items->has('Hookshot') - || !$this->world->config('region.cantTakeDamage', false) - && ($items->has('Cape') || $items->has('CaneOfByrna'))) - && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items); - }; - - $upper = function($locations, $items) { - return ((($locations["Turtle Rock Medallion"]->hasItem(Item::get('Bombos')) && $items->has('Bombos')) - || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Ether')) && $items->has('Ether')) - || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Quake')) && $items->has('Quake'))) - && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) - && $items->has('MoonPearl') && $items->has('CaneOfSomaria') - && $items->has('Hammer') && ($items->canLiftDarkRocks() || $items->has('PegasusBoots')) - && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); - }; - - $this->locations["Turtle Rock - Chain Chomps"]->setRequirements(function($locations, $items) use ($upper, $middle) { - return ($upper($locations, $items) && $items->has('KeyD7')) - || $middle($locations, $items); - }); - - $this->locations["Turtle Rock - Roller Room - Left"]->setRequirements(function($locations, $items) use ($upper, $middle) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && ($upper($locations, $items) - || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Right", - "Turtle Rock - Compass Chest", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4)))); - }); - - $this->locations["Turtle Rock - Roller Room - Right"]->setRequirements(function($locations, $items) use ($upper, $middle) { - return $items->has('FireRod') && $items->has('CaneOfSomaria') - && ($upper($locations, $items) - || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Left", - "Turtle Rock - Compass Chest", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4)))); - }); - - $this->locations["Turtle Rock - Compass Chest"]->setRequirements(function($locations, $items) use ($upper, $middle) { - return $items->has('CaneOfSomaria') - && ($upper($locations, $items) - || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7'), [ - "Turtle Rock - Roller Room - Left", - "Turtle Rock - Roller Room - Right", - ]) && $items->has('KeyD7', 2)) - || $items->has('KeyD7', 4)))); - }); - - $this->locations["Turtle Rock - Big Chest"]->setRequirements(function($locations, $items) use ($upper, $middle) { - return $items->has('BigKeyD7') && (($upper($locations, $items) && $items->has('KeyD7', 2)) - || ($middle($locations, $items) && ($items->has('Hookshot') || $items->has('CaneOfSomaria')))); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyD7'); - }); - - $this->locations["Turtle Rock - Crystaroller Room"]->setRequirements(function($locations, $items) use ($upper, $middle) { - return $items->has('BigKeyD7') && (($upper($locations, $items) && $items->has('KeyD7', 2)) - || $middle($locations, $items)); - })->setFillRules(function($item, $locations, $items) { - return $item != Item::get('BigKeyD7'); - }); - - $this->can_enter = function($locations, $items) use ($upper, $middle) { - return $items->has('RescueZelda') - && ($upper($locations, $items) || $middle($locations, $items)); - }; - - return $this; - } - +class TurtleRock extends Region +{ + protected $name = 'Turtle Rock'; + public $music_addresses = [ + 0x155C7, + 0x155A7, + 0x155AA, + 0x155AB, + ]; + + protected $map_reveal = 0x0008; + + protected $region_items = [ + 'BigKey', + 'BigKeyD7', + 'Compass', + 'CompassD7', + 'Key', + 'KeyD7', + 'Map', + 'MapD7', + ]; + + /** + * Consider using this as a way of filling all items at once. set to 0 for + * keysanity. + * @todo remove this if we don't plan on using it + */ + protected $dungeon_item_count = 7; + + /** + * Create a new Turtle Rock Region and initalize it's locations + * + * @param World $world World this Region is part of + * + * @return void + */ + public function __construct(World $world) + { + parent::__construct($world); + + $this->boss = Boss::get("Trinexx", $world); + + $this->locations = new LocationCollection([ + new Location\Chest("Turtle Rock - Chain Chomps", [0xEA16], null, $this), + new Location\Chest("Turtle Rock - Compass Chest", [0xEA22], null, $this), + new Location\Chest("Turtle Rock - Roller Room - Left", [0xEA1C], null, $this), + new Location\Chest("Turtle Rock - Roller Room - Right", [0xEA1F], null, $this), + new Location\BigChest("Turtle Rock - Big Chest", [0xEA19], null, $this), + new Location\Chest("Turtle Rock - Big Key Chest", [0xEA25], null, $this), + new Location\Chest("Turtle Rock - Crystaroller Room", [0xEA34], null, $this), + new Location\Chest("Turtle Rock - Eye Bridge - Bottom Left", [0xEA31], null, $this), + new Location\Chest("Turtle Rock - Eye Bridge - Bottom Right", [0xEA2E], null, $this), + new Location\Chest("Turtle Rock - Eye Bridge - Top Left", [0xEA2B], null, $this), + new Location\Chest("Turtle Rock - Eye Bridge - Top Right", [0xEA28], null, $this), + new Location\Drop("Turtle Rock - Boss", [0x180159], null, $this), + + new Location\Prize\Crystal("Turtle Rock - Prize", [null, 0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], null, $this), + ]); + $this->locations->setChecksForWorld($world->id); + $this->prize_location = $this->locations["Turtle Rock - Prize"]; + } + + /** + * Initalize the requirements for Entry and Completetion of the Region as well as access to all Locations contained + * within for No Glitches + * + * @return $this + */ + public function initalize() + { + $upper = function ($locations, $items) { + return ((($locations["Turtle Rock Medallion"]->hasItem(Item::get('Bombos', $this->world)) && $items->has('Bombos')) + || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Ether', $this->world)) && $items->has('Ether')) + || ($locations["Turtle Rock Medallion"]->hasItem(Item::get('Quake', $this->world)) && $items->has('Quake'))) + && ($this->world->config('mode.weapons') == 'swordless' || $items->hasSword())) + && $items->has('MoonPearl') + && $items->has('CaneOfSomaria') && $items->has('Hammer') + && ($items->canLiftDarkRocks() || ($this->world->config('canBootsClip', false) && $items->has('PegasusBoots'))) + && $this->world->getRegion('East Death Mountain')->canEnter($locations, $items); + }; + + $middle = function ($locations, $items) { + return (($this->world->config('canMirrorClip', false) && $items->has('MagicMirror')) + || (($this->world->config('canSuperSpeed', false) && $items->has('MoonPearl') && $items->canSpinSpeed()) + || ($this->world->config('canOWYBA', false) && $items->hasABottle()))) + && ($items->has('PegasusBoots') || $items->has('CaneOfSomaria') || $items->has('Hookshot') + || !$this->world->config('region.cantTakeDamage', false) + && ($items->has('Cape') || $items->has('CaneOfByrna'))) + && $this->world->getRegion('East Dark World Death Mountain')->canEnter($locations, $items); + }; + + $lower = function ($locations, $items) { + return $this->world->config('canMirrorWrap', false) + && $items->has('MagicMirror') && ($items->has('MoonPearl') + || ($items->hasABottle() && $items->has('PegasusBoots'))) + && $this->world->getRegion('West Death Mountain')->canEnter($locations, $items); + }; + + $this->locations["Turtle Rock - Chain Chomps"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return ($upper($locations, $items) && $items->has('KeyD7')) + || $middle($locations, $items) + || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria')); + }); + + $this->locations["Turtle Rock - Roller Room - Left"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return $items->has('FireRod') && $items->has('CaneOfSomaria') + && ($upper($locations, $items) + || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7', $this->world), [ + "Turtle Rock - Roller Room - Right", + "Turtle Rock - Compass Chest", + ]) && $items->has('KeyD7', 2)) + || $items->has('KeyD7', 4))) + || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); + }); + + $this->locations["Turtle Rock - Roller Room - Right"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return $items->has('FireRod') && $items->has('CaneOfSomaria') + && ($upper($locations, $items) + || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7', $this->world), [ + "Turtle Rock - Roller Room - Left", + "Turtle Rock - Compass Chest", + ]) && $items->has('KeyD7', 2)) + || $items->has('KeyD7', 4))) + || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); + }); + + $this->locations["Turtle Rock - Compass Chest"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return $items->has('CaneOfSomaria') + && ($upper($locations, $items) + || ($middle($locations, $items) && (($locations->itemInLocations(Item::get('BigKeyD7', $this->world), [ + "Turtle Rock - Roller Room - Left", + "Turtle Rock - Roller Room - Right", + ]) && $items->has('KeyD7', 2)) + || $items->has('KeyD7', 4))) + || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('KeyD7', 4))); + }); + + $this->locations["Turtle Rock - Big Chest"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return $items->has('BigKeyD7') + && (($upper($locations, $items) && $items->has('KeyD7', 2)) + || ($middle($locations, $items) && ($items->has('Hookshot') || $items->has('CaneOfSomaria'))) + || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria'))); + })->setFillRules(function ($item, $locations, $items) { + return $item != Item::get('BigKeyD7', $this->world); + }); + + $this->locations["Turtle Rock - Big Key Chest"]->setRequirements(function ($locations, $items) { + if (!$locations["Turtle Rock - Big Key Chest"]->hasItem(Item::get('BigKeyD7', $this->world)) && $this->world->config('region.wildKeys', false)) { + return $locations["Turtle Rock - Big Key Chest"]->hasItem(Item::get('KeyD7', $this->world)) ? $items->has('KeyD7', 3) : $items->has('KeyD7', 4); + } + return $items->has('KeyD7', 2); + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('accessibility') !== 'locations' && $item == Item::get('KeyD7', $this->world) && $items->has('KeyD7', 3); + }); + + $this->locations["Turtle Rock - Crystaroller Room"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return $items->has('BigKeyD7') && (($upper($locations, $items) && $items->has('KeyD7', 2)) + || $middle($locations, $items) + || ($lower($locations, $items) && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria'))); + })->setFillRules(function ($item, $locations, $items) { + return $item != Item::get('BigKeyD7', $this->world); + }); + + $this->locations["Turtle Rock - Eye Bridge - Bottom Left"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return ($lower($locations, $items) + || (($upper($locations, $items) || $middle($locations, $items)) && + $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) + && ($this->world->config('itemPlacement') !== 'basic' || $items->has('Cape') || $items->has('CaneOfByrna') + || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); + }); + + $this->locations["Turtle Rock - Eye Bridge - Bottom Right"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return ($lower($locations, $items) + || (($upper($locations, $items) || $middle($locations, $items)) && + $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) + && ($this->world->config('itemPlacement') !== 'basic' || $items->has('Cape') || $items->has('CaneOfByrna') + || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); + }); + + $this->locations["Turtle Rock - Eye Bridge - Top Left"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return ($lower($locations, $items) + || (($upper($locations, $items) || $middle($locations, $items)) && + $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) + && ($this->world->config('itemPlacement') !== 'basic' || $items->has('Cape') || $items->has('CaneOfByrna') + || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); + }); + + $this->locations["Turtle Rock - Eye Bridge - Top Right"]->setRequirements(function ($locations, $items) use ($upper, $middle, $lower) { + return ($lower($locations, $items) + || (($upper($locations, $items) || $middle($locations, $items)) && + $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) && $items->has('CaneOfSomaria') && $items->has('BigKeyD7') && $items->has('KeyD7', 3))) + && ($this->world->config('itemPlacement') !== 'basic' || $items->has('Cape') || $items->has('CaneOfByrna') + || ($this->world->config('item.overflow.count.Shield', 3) >= 3 && $items->canBlockLasers())); + }); + + $this->can_complete = function ($locations, $items) { + return $this->locations["Turtle Rock - Boss"]->canAccess($items); + }; + + // @todo lamp isn't necessary if one can enter lower + $this->locations["Turtle Rock - Boss"]->setRequirements(function ($locations, $items) { + return $this->canEnter($locations, $items) + && $items->has('KeyD7', 4) + && $items->has('Lamp', $this->world->config('item.require.Lamp', 1)) + && $items->has('BigKeyD7') && $items->has('CaneOfSomaria') + && $this->boss->canBeat($items, $locations) + && (!$this->world->config('region.wildCompasses', false) || $items->has('CompassD7') || $this->locations["Turtle Rock - Boss"]->hasItem(Item::get('CompassD7', $this->world))) + && (!$this->world->config('region.wildMaps', false) || $items->has('MapD7') || $this->locations["Turtle Rock - Boss"]->hasItem(Item::get('MapD7', $this->world))); + })->setFillRules(function ($item, $locations, $items) { + if ( + !$this->world->config('region.bossNormalLocation', true) + && ($item instanceof Item\Key || $item instanceof Item\BigKey + || $item instanceof Item\Map || $item instanceof Item\Compass) + ) { + return false; + } + + return true; + })->setAlwaysAllow(function ($item, $items) { + return $this->world->config('region.bossNormalLocation', true) + && ($item == Item::get('CompassD7', $this->world) || $item == Item::get('MapD7', $this->world)); + }); + + $this->can_enter = function ($locations, $items) use ($lower, $middle, $upper) { + return $items->has('RescueZelda') + && ($this->world->config('itemPlacement') !== 'basic' + || (($this->world->config('mode.weapons') === 'swordless' || $items->hasSword(2)) && $items->hasHealth(12) && ($items->hasBottle(2) || $items->hasArmor()))) + && ($lower($locations, $items) + || $middle($locations, $items) + || $upper($locations, $items)); + }; + + $this->prize_location->setRequirements($this->can_complete); + + return $this; + } } diff --git a/app/Rom.php b/app/Rom.php index b6b16bbd5..46bb5044a 100644 --- a/app/Rom.php +++ b/app/Rom.php @@ -1,4 +1,6 @@ - $build ?? static::BUILD, - 'hash' => $hash ?? static::HASH, - ]); - $build->patch = json_encode($patch); - $build->save(); - - return $build; - } - - /** - * Create a new wrapper - * - * @param string $source_location location of source ROM to edit - * - * @throws Exception if ROM source isn't readable - * - * @return void - */ - public function __construct(string $source_location = null) { - if ($source_location !== null && !is_readable($source_location)) { - throw new \Exception('Source ROM not readable'); - } - $this->tmp_file = tempnam(sys_get_temp_dir(), __CLASS__); - - if ($source_location !== null) { - copy($source_location, $this->tmp_file); - } - - $this->rom = fopen($this->tmp_file, "r+"); - $this->credits = new Credits; - $this->text = new Text; - $this->text->removeUnwanted(); - } - - /** - * resize ROM to a given size - * - * @param int|null $size number of bytes the ROM should be - * - * @return $this - * - */ - public function resize(int $size = null) : self { - ftruncate($this->rom, $size ?? static::SIZE); - - return $this; - } - - /** - * Check to see if this ROM matches base randomizer ROM. - * - * @return bool - */ - public function checkMD5() : bool { - return $this->getMD5() === static::HASH; - } - - /** - * Get MD5 of current file. - * - * @return string - */ - public function getMD5() : string { - return hash_file('md5', $this->tmp_file); - } - - /** - * Update the ROM's checksum to be proper - * - * @return $this - */ - public function updateChecksum() : self { - fseek($this->rom, 0x0); - $sum = 0x1FE; - for ($i = 0; $i < static::SIZE; $i += 1024) { - $bytes = array_values(unpack('C*', fread($this->rom, 1024))); - for ($j = 0; $j < 1024; ++$j) { - if ($j + $i >= 0x7FDC && $j + $i < 0x7FE0) { - // this skip is true for LoROM, HiROM skips: 0xFFDC - 0xFFDF - continue; - } - $sum += $bytes[$j]; - } - } - - $checksum = $sum & 0xFFFF; - $inverse = $checksum ^ 0xFFFF; - - $this->write(0x7FDC, pack('S*', $inverse, $checksum)); - - return $this; - } - - /** - * Write a vanilla World to the Rom. - * - * @return World - */ - public function writeVanilla() { - $world = World::factory('standard', 'vanilla', 'NoGlitches', 'ganon'); - $world->setVanilla(); - - foreach ($world->getLocations() as $location) { - $location->writeItem($this); - } - - $this->setSubstitutions([ - 0x12, 0x01, 0x35, 0xFF, // lamp -> 5 rupees - 0x0C, 0x01, 0x44, 0xFF, // Blue boom -> 10 arrows - 0x2A, 0x01, 0x46, 0xFF, // Red boom -> 300 rupees - ]); - - $this->setClockMode('off'); - $this->setHardMode(0); - - $this->setPyramidFairyChests(false); - $this->setWishingWellChests(false); - $this->setSmithyQuickItemGive(false); - - $this->setOpenMode(false); - $this->setSwordlessMode(false); - $this->setGanonAgahnimRng('vanilla'); - - $this->setMaxArrows(); - $this->setMaxBombs(); - $this->setStartingTime(0); - - $this->setBlindTextString("Ouch!\nMy Eyes!"); - $this->setUncleTextString("I feel we've\ndone this all\nbefore..."); - $this->setGanon1TextString("You drove\naway my other\nself, Agahnim\ntwo times…\nBut, I won't\ngive you the\nTriforce.\nI'll defeat\nyou!"); - $this->setGanon2TextString("can you beat\nmy darkness\ntechnique?"); - $this->setTriforceTextString("\n G G"); - - $this->writeText(); - - $this->setSeedString(str_pad("ZELDANODENSETSU", 21, ' ')); - - return $world; - } - - /** - * Set the number of crystals to enter Ganon's Tower, you will need to set setGanonInvincible to 'custom' to have - * Ganon respect this count. - * - * @param int $count number of crystals required - * - * @return $this - */ - public function setRequiredCrystals(int $count = 7) : self { - $this->write(0x18005E, pack('C', $count)); - - return $this; - } - - /** - * Write subsitutions - * - * @param array $substitutions [[id, max, replace id, 0xFF], ...] - * - * @return $this - */ - public function setSubstitutions(array $substitutions = []) { - $substitutions = array_merge($substitutions, [0xFF, 0xFF, 0xFF, 0xFF]); - - $this->write(0x184000, pack('C*', ...$substitutions)); - - return $this; - } - - /** - * set the items passed in as Link's starting equipment - * - * @param ItemCollection $items items to equip Link with - * - * @return $this - */ - public function setStartingEquipment(ItemCollection $items) { - $equipment = array_fill(0x340, 0x4F, 0); - $starting_rupees = 0; - $starting_arrow_capacity = 0; - $starting_bomb_capacity = 0; - // starting heart containers - if ($items->heartCount(0) < 1) { - $equipment[0x36C] = 0x18; - $equipment[0x36D] = 0x18; - } - // default abilities - $equipment[0x379] |= 0b01101000; - - foreach ($items as $item) { - switch ($item->getName()) { - case 'L1Sword': - $equipment[0x359] = 0x01; - break; - case 'L1SwordAndShield': - $equipment[0x359] = 0x01; - $equipment[0x35A] = 0x01; - break; - case 'L2Sword': - case 'MasterSword': - $equipment[0x359] = 0x02; - break; - case 'L3Sword': - $equipment[0x359] = 0x03; - break; - case 'L4Sword': - $equipment[0x359] = 0x04; - break; - case 'BlueShield': - $equipment[0x35A] = 0x01; - break; - case 'RedShield': - $equipment[0x35A] = 0x02; - break; - case 'MirrorShield': - $equipment[0x35A] = 0x03; - break; - case 'FireRod': - $equipment[0x345] = 0x01; - break; - case 'IceRod': - $equipment[0x346] = 0x01; - break; - case 'Hammer': - $equipment[0x34B] = 0x01; - break; - case 'Hookshot': - $equipment[0x342] = 0x01; - break; - case 'Bow': - $equipment[0x340] = 0x01; - $equipment[0x38E] |= 0b10000000; - break; - case 'BowAndArrows': - $equipment[0x340] = 0x02; - $equipment[0x38E] |= 0b10000000; - break; - case 'SilverArrowUpgrade': - $equipment[0x38E] |= 0b01000000; - break; - case 'BowAndSilverArrows': - $equipment[0x340] = 0x04; - $equipment[0x38E] |= 0b01000000; - break; - case 'Boomerang': - $equipment[0x341] = 0x01; - $equipment[0x38C] |= 0b10000000; - break; - case 'RedBoomerang': - $equipment[0x341] = 0x02; - $equipment[0x38C] |= 0b01000000; - break; - case 'Mushroom': - $equipment[0x344] = 0x01; - $equipment[0x38C] |= 0b00100000; - break; - case 'Powder': - $equipment[0x344] = 0x02; - $equipment[0x38C] |= 0b00010000; - break; - case 'Bombos': - $equipment[0x347] = 0x01; - break; - case 'Ether': - $equipment[0x348] = 0x01; - break; - case 'Quake': - $equipment[0x349] = 0x01; - break; - case 'Lamp': - $equipment[0x34A] = 0x01; - break; - case 'Shovel': - $equipment[0x34C] = 0x01; - $equipment[0x38C] |= 0b00000100; - break; - case 'OcarinaInactive': - $equipment[0x34C] = 0x02; - $equipment[0x38C] |= 0b00000010; - break; - case 'OcarinaActive': - $equipment[0x34C] = 0x03; - $equipment[0x38C] |= 0b00000001; - break; - case 'CaneOfSomaria': - $equipment[0x350] = 0x01; - break; - case 'Bottle': - if ($equipment[0x34F] < 4) { - $equipment[0x35C + $equipment[0x34F]] = 0x02; - $equipment[0x34F] += 1; - } - break; - case 'BottleWithRedPotion': - if ($equipment[0x34F] < 4) { - $equipment[0x35C + $equipment[0x34F]] = 0x03; - $equipment[0x34F] += 1; - } - break; - case 'BottleWithGreenPotion': - if ($equipment[0x34F] < 4) { - $equipment[0x35C + $equipment[0x34F]] = 0x04; - $equipment[0x34F] += 1; - } - break; - case 'BottleWithBluePotion': - if ($equipment[0x34F] < 4) { - $equipment[0x35C + $equipment[0x34F]] = 0x05; - $equipment[0x34F] += 1; - } - break; - case 'BottleWithBee': - if ($equipment[0x34F] < 4) { - $equipment[0x35C + $equipment[0x34F]] = 0x07; - $equipment[0x34F] += 1; - } - break; - case 'BottleWithFairy': - if ($equipment[0x34F] < 4) { - $equipment[0x35C + $equipment[0x34F]] = 0x06; - $equipment[0x34F] += 1; - } - break; - case 'BottleWithGoldBee': - if ($equipment[0x34F] < 4) { - $equipment[0x35C + $equipment[0x34F]] = 0x08; - $equipment[0x34F] += 1; - } - break; - case 'CaneOfByrna': - $equipment[0x351] = 0x01; - break; - case 'Cape': - $equipment[0x352] = 0x01; - break; - case 'MagicMirror': - $equipment[0x353] = 0x02; - break; - case 'PowerGlove': - $equipment[0x354] = 0x01; - break; - case 'TitansMitt': - $equipment[0x354] = 0x02; - break; - case 'BookOfMudora': - $equipment[0x34E] = 0x01; - break; - case 'Flippers': - $equipment[0x356] = 0x01; - $equipment[0x379] |= 0b00000010; - break; - case 'MoonPearl': - $equipment[0x357] = 0x01; - break; - case 'BugCatchingNet': - $equipment[0x34D] = 0x01; - break; - case 'BlueMail': - $equipment[0x35B] = 0x01; - break; - case 'RedMail': - $equipment[0x35B] = 0x02; - break; - case 'Bomb': - $equipment[0x343] = min($equipment[0x343] + 1, 99); - break; - case 'ThreeBombs': - $equipment[0x343] = min($equipment[0x343] + 3, 99); - break; - case 'TenBombs': - $equipment[0x343] = min($equipment[0x343] + 10, 99); - break; - case 'OneRupee': - $starting_rupees += 1; - break; - case 'FiveRupees': - $starting_rupees += 5; - break; - case 'TwentyRupees': - case 'TwentyRupees2': - $starting_rupees += 20; - break; - case 'FiftyRupees': - $starting_rupees += 50; - break; - case 'OneHundredRupees': - $starting_rupees += 100; - break; - case 'PendantOfCourage': - $equipment[0x374] |= 0b00000100; - break; - case 'PendantOfWisdom': - $equipment[0x374] |= 0b00000001; - break; - case 'PendantOfPower': - $equipment[0x374] |= 0b00000010; - break; - case 'HeartContainerNoAnimation': - case 'BossHeartContainer': - case 'HeartContainer': - $equipment[0x36C] = min($equipment[0x36C] + 0x08, 0xA0); - $equipment[0x36D] = min($equipment[0x36D] + 0x08, 0xA0); - break; - case 'PieceOfHeart': - $equipment[0x36B] += 1; - if ($equipment[0x36B] >= 4) { - $equipment[0x36C] = min($equipment[0x36C] + (0x08 * floor($equipment[0x36B] / 4)), 0xA0); - $equipment[0x36B] %= 4; - } - break; - case 'Heart': - $equipment[0x36D] = min($equipment[0x36D] + 0x08, 0xA0); - break; - case 'Arrow': - $equipment[0x377] = min($equipment[0x377] + 1, 99); - break; - case 'TenArrows': - $equipment[0x377] = min($equipment[0x377] + 10, 99); - break; - case 'SmallMagic': - $equipment[0x36E] = min($equipment[0x36E] + 0x10, 0x80); - break; - case 'ThreeHundredRupees': - $starting_rupees += 300; - break; - case 'PegasusBoots': - $equipment[0x355] = 0x01; - $equipment[0x379] |= 0b00000100; - break; - case 'BombUpgrade5': - $starting_bomb_capacity += 5; - break; - case 'BombUpgrade10': - $starting_bomb_capacity += 10; - break; - case 'ArrowUpgrade5': - $starting_arrow_capacity += 5; - break; - case 'ArrowUpgrade10': - $starting_arrow_capacity += 10; - break; - case 'HalfMagic': - $equipment[0x37B] = 0x01; - break; - case 'QuarterMagic': - $equipment[0x37B] = 0x02; - break; - case 'ProgressiveSword': - $equipment[0x359] = min($equipment[0x359] + 1, 4); - break; - case 'ProgressiveShield': - $equipment[0x35A] = min($equipment[0x35A] + 1, 3); - break; - case 'ProgressiveArmor': - $equipment[0x35B] = min($equipment[0x35B] + 1, 2); - break; - case 'ProgressiveGlove': - $equipment[0x354] = min($equipment[0x354] + 1, 2); - break; - case 'MapLW': - $equipment[0x368] |= 0b00000001; - break; - case 'MapDW': - $equipment[0x368] |= 0b00000010; - break; - case 'MapA2': - $equipment[0x368] |= 0b00000100; - break; - case 'MapD7': - $equipment[0x368] |= 0b00001000; - break; - case 'MapD4': - $equipment[0x368] |= 0b00010000; - break; - case 'MapP3': - $equipment[0x368] |= 0b00100000; - break; - case 'MapD5': - $equipment[0x368] |= 0b01000000; - break; - case 'MapD3': - $equipment[0x368] |= 0b10000000; - break; - case 'MapD6': - $equipment[0x369] |= 0b00000001; - break; - case 'MapD1': - $equipment[0x369] |= 0b00000010; - break; - case 'MapD2': - $equipment[0x369] |= 0b00000100; - break; - case 'MapA1': - $equipment[0x369] |= 0b00001000; - break; - case 'MapP2': - $equipment[0x369] |= 0b00010000; - break; - case 'MapP1': - $equipment[0x369] |= 0b00100000; - break; - case 'MapH1': - $equipment[0x369] |= 0b01000000; - break; - case 'MapH2': - $equipment[0x369] |= 0b10000000; - break; - case 'CompassA2': - $equipment[0x364] |= 0b00000100; - break; - case 'CompassD7': - $equipment[0x364] |= 0b00001000; - break; - case 'CompassD4': - $equipment[0x364] |= 0b00010000; - break; - case 'CompassP3': - $equipment[0x364] |= 0b00100000; - break; - case 'CompassD5': - $equipment[0x364] |= 0b01000000; - break; - case 'CompassD3': - $equipment[0x364] |= 0b10000000; - break; - case 'CompassD6': - $equipment[0x365] |= 0b00000001; - break; - case 'CompassD1': - $equipment[0x365] |= 0b00000010; - break; - case 'CompassD2': - $equipment[0x365] |= 0b00000100; - break; - case 'CompassA1': - $equipment[0x365] |= 0b00001000; - break; - case 'CompassP2': - $equipment[0x365] |= 0b00010000; - break; - case 'CompassP1': - $equipment[0x365] |= 0b00100000; - break; - case 'CompassH1': - $equipment[0x365] |= 0b01000000; - break; - case 'CompassH2': - $equipment[0x365] |= 0b10000000; - break; - case 'BigKeyA2': - $equipment[0x366] |= 0b00000100; - break; - case 'BigKeyD7': - $equipment[0x366] |= 0b00001000; - break; - case 'BigKeyD4': - $equipment[0x366] |= 0b00010000; - break; - case 'BigKeyP3': - $equipment[0x366] |= 0b00100000; - break; - case 'BigKeyD5': - $equipment[0x366] |= 0b01000000; - break; - case 'BigKeyD3': - $equipment[0x366] |= 0b10000000; - break; - case 'BigKeyD6': - $equipment[0x367] |= 0b00000001; - break; - case 'BigKeyD1': - $equipment[0x367] |= 0b00000010; - break; - case 'BigKeyD2': - $equipment[0x367] |= 0b00000100; - break; - case 'BigKeyA1': - $equipment[0x367] |= 0b00001000; - break; - case 'BigKeyP2': - $equipment[0x367] |= 0b00010000; - break; - case 'BigKeyP1': - $equipment[0x367] |= 0b00100000; - break; - case 'BigKeyH1': - $equipment[0x367] |= 0b01000000; - break; - case 'BigKeyH2': - $equipment[0x367] |= 0b10000000; - break; - case 'KeyH2': - $equipment[0x37C] += 1; - break; - case 'KeyH1': - $equipment[0x37D] += 1; - break; - case 'KeyP1': - $equipment[0x37E] += 1; - break; - case 'KeyP2': - $equipment[0x37F] += 1; - break; - case 'KeyA1': - $equipment[0x380] += 1; - break; - case 'KeyD2': - $equipment[0x381] += 1; - break; - case 'KeyD1': - $equipment[0x382] += 1; - break; - case 'KeyD6': - $equipment[0x383] += 1; - break; - case 'KeyD3': - $equipment[0x384] += 1; - break; - case 'KeyD5': - $equipment[0x385] += 1; - break; - case 'KeyP3': - $equipment[0x386] += 1; - break; - case 'KeyD4': - $equipment[0x387] += 1; - break; - case 'KeyD7': - $equipment[0x388] += 1; - break; - case 'KeyA2': - $equipment[0x389] += 1; - break; - case 'Crystal1': - $equipment[0x37A] |= 0b00000010; - break; - case 'Crystal2': - $equipment[0x37A] |= 0b00010000; - break; - case 'Crystal3': - $equipment[0x37A] |= 0b01000000; - break; - case 'Crystal4': - $equipment[0x37A] |= 0b00100000; - break; - case 'Crystal5': - $equipment[0x37A] |= 0b00000100; - break; - case 'Crystal6': - $equipment[0x37A] |= 0b00000001; - break; - case 'Crystal7': - $equipment[0x37A] |= 0b00001000; - break; - } - } - - $equipment[0x362] = $equipment[0x360] = $starting_rupees & 0xFF; - $equipment[0x363] = $equipment[0x361] = $starting_rupees >> 8; - - $this->write(0x183000, pack('C*', ...$equipment)); - // For file select screen - $this->write(0x271A6, pack('C*', ...array_slice($equipment, 0, 60))); - $this->setMaxArrows($starting_arrow_capacity); - $this->setMaxBombs($starting_bomb_capacity); - - if (config('alttp.mode.weapons') != 'swordless' && $equipment[0x359]) { - $this->write(0x180043, pack('C*', $equipment[0x359])); // write starting sword - } - - return $this; - } - - /** - * Set the Low Health Beep Speed - * - * @param string $setting name (0x00: off, 0x20: normal, 0x40: half, 0x80: quarter) - * - * @return $this - */ - public function setHeartBeepSpeed(string $setting) : self { - switch ($setting) { - case 'off': - $byte = 0x00; - break; - case 'half': - $byte = 0x40; - break; - case 'quarter': - $byte = 0x80; - break; - case 'double': - $byte = 0x10; - break; - case 'normal': - default: - $byte = 0x20; - } - - $this->write(0x180033, pack('C', $byte)); - - return $this; - } - - /** - * Set the Rupoor value to take rupees - * - * @param int $value - * - * @return $this - */ - public function setRupoorValue(int $value = 10) : self { - $this->write(0x180036, pack('v*', $value)); - - return $this; - } - - /** - * Set Cane of Byrna Cave spike floor damage - * - * @param int $dmg_value (0x08: 1 Heart, 0x02: 1/4 Heart) - * - * @return $this - */ - public function setByrnaCaveSpikeDamage(int $dmg_value = 0x08) : self { - $this->write(0x180168, pack('C*', $dmg_value)); - - return $this; - } - - /** - * Set Cane of Byrna Cave and Misery Mire spike room Byrna usage - * - * @param int $normal normal magic usage - * @param int $half half magic usage - * @param int $quarter quarter magic usage - * - * @return $this - */ - public function setCaneOfByrnaSpikeCaveUsage(int $normal = 0x04, int $half = 0x02, int $quarter = 0x01) : self { - $this->write(0x18016B, pack('C*', $normal, $half, $quarter)); - - return $this; - } - - /** - * Enable Byrna's ability to make you Invulnerable - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setCaneOfByrnaInvulnerability(bool $enable = true) : self { - $this->write(0x18004F, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Set Cane of Byrna Cave and Misery Mire spike room Cape usage - * - * @param int $normal normal magic usage - * @param int $half half magic usage - * @param int $quarter quarter magic usage - * - * @return $this - */ - public function setCapeSpikeCaveUsage(int $normal = 0x04, int $half = 0x08, int $quarter = 0x10) : self { - $this->write(0x18016E, pack('C*', $normal, $half, $quarter)); - - return $this; - } - - /** - * Set mode for HUD clock - * - * @param string $mode off|stopwatch|countdown-stop|countdown-continue - * @param bool $restart wether to restart the timer - * - * @return $this; - */ - public function setClockMode(string $mode = 'off', bool $restart = false) : self { - $compass_override = true; - switch ($mode) { - case 'stopwatch': - $bytes = [0x02, 0x01]; - break; - case 'countdown-ohko': - $bytes = [0x01, 0x02]; - $restart = true; - break; - case 'countdown-continue': - $bytes = [0x01, 0x01]; - break; - case 'countdown-stop': - $bytes = [0x01, 0x00]; - break; - case 'countdown-end': - $bytes = [0x01, 0x03]; - break; - case 'off': - default: - $bytes = [0x00, 0x00]; - $compass_override = false; - break; - } - - // @TODO: temporarly disable compass mode while this is enabled since they occupy the same region of the hud. - if ($compass_override) { - $this->setCompassMode('off'); - } - - $bytes = array_merge($bytes, [$restart ? 0x01 : 0x00]); - - $this->write(0x180190, pack('C*', ...$bytes)); - - return $this; - } - - /** - * Set starting time for HUD clock - * - * @param int $seconds time in seconds - * - * @return $this; - */ - public function setStartingTime(int $seconds = 0) : self { - $this->write(0x18020C, pack('l*', $seconds * 60)); - - return $this; - } - - /** - * Set time adjustment for collecting Red Clock Item - * - * @param int $seconds time in seconds - * - * @return $this; - */ - public function setRedClock(int $seconds = 0) : self { - $this->write(0x180200, pack('l*', $seconds * 60)); - - return $this; - } - - /** - * Set time adjustment for collecting Blue Clock Item - * - * @param int $seconds time in seconds - * - * @return $this; - */ - public function setBlueClock(int $seconds = 0) : self { - $this->write(0x180204, pack('l*', $seconds * 60)); - - return $this; - } - - /** - * Set time adjustment for collecting Green Clock Item - * - * @param int $seconds time in seconds - * - * @return $this; - */ - public function setGreenClock(int $seconds = 0) : self { - $this->write(0x180208, pack('l*', $seconds * 60)); - - return $this; - } - - /** - * Set the starting Max Arrows - * - * @param int $max - * - * @return $this - */ - public function setMaxArrows(int $max = 30) : self { - $this->write(0x180035, pack('C', $max)); - - return $this; - } - - /** - * Set the Digging Game Rng - * - * @param int $digs - * - * @return $this - */ - public function setDiggingGameRng(int $digs = 15) : self { - $this->write(0x180020, pack('C', $digs)); - $this->write(0xEFD95, pack('C', $digs)); - - return $this; - } - - /** - * Set the starting Max Bombs - * - * @param int $max - * - * @return $this - */ - public function setMaxBombs(int $max = 10) : self { - $this->write(0x180034, pack('C', $max)); - - return $this; - } - - /** - * Set values to fill for Capacity Upgrades - * currently only 4 things: Bomb5, Bomb10, Arrow5, Arrow10 - * - * @param array $fills array of values to fill in - * - * @return $this - */ - public function setCapacityUpgradeFills(array $fills) : self { - $this->write(0x180080, pack('C*', ...array_slice($fills, 0, 4))); - - return $this; - } - - /** - * Set values to fill for Health/Magic fills from Bottles - * currently only 2 things: Health, Magic - * - * @param array $fills array of values to fill in [health (0xA0 default), magic (0x80 default)] - * - * @return $this - */ - public function setBottleFills(array $fills) : self { - $this->write(0x180084, pack('C*', ...array_slice($fills, 0, 2))); - - return $this; - } - - /** - * Set the number of goal items to collect - * - * @param int $goal - * - * @return $this - */ - public function setGoalRequiredCount(int $goal = 0) : self { - $this->write(0x180167, pack('C', $goal)); - - return $this; - } - - /** - * Set the goal item icon - * - * @param string $goal_icon - * - * @return $this - */ - public function setGoalIcon(string $goal_icon = 'triforce') : self { - switch ($goal_icon) { - case 'triforce': - $byte = pack('S*', 0x280E); - break; - case 'star': - default: - $byte = pack('S*', 0x280D); - break; - } - $this->write(0x180165, $byte); - - return $this; - } - - /** - * Set Progressive Sword limit and item after limit is reached - * - * @param int $limit max number to receive - * @param int $item item byte to collect once limit is collected - * - * @return $this - */ - public function setLimitProgressiveSword(int $limit = 4, int $item = 0x36) : self { - $this->write(0x180090, pack('C*', $limit, $item)); - - return $this; - } - - /** - * Set Progressive Shield limit and item after limit is reached - * - * @param int $limit max number to receive - * @param int $item item byte to collect once limit is collected - * - * @return $this - */ - public function setLimitProgressiveShield(int $limit = 3, int $item = 0x36) : self { - $this->write(0x180092, pack('C*', $limit, $item)); - - return $this; - } - - /** - * Set Progressive Armor limit and item after limit is reached - * - * @param int $limit max number to receive - * @param int $item item byte to collect once limit is collected - * - * @return $this - */ - public function setLimitProgressiveArmor(int $limit = 2, int $item = 0x36) : self { - $this->write(0x180094, pack('C*', $limit, $item)); - - return $this; - } - - /** - * Set Bottle limit and item after limit is reached - * - * @param int $limit max number to receive - * @param int $item item byte to collect once limit is collected - * - * @return $this - */ - public function setLimitBottle(int $limit = 4, int $item = 0x36) : self { - $this->write(0x180096, pack('C*', $limit, $item)); - - return $this; - } - - /** - * Set Ganon to Invincible. 'dungeons' will require all dungeon bosses are dead to be able to damage Ganon. - * - * @param string $setting - * - * @return $this - */ - public function setGanonInvincible(string $setting = 'no') : self { - switch ($setting) { - case 'crystals': - $byte = pack('C*', 0x03); - break; - case 'dungeons': - $byte = pack('C*', 0x02); - break; - case 'yes': - $byte = pack('C*', 0x01); - break; - case 'custom': - $byte = pack('C', 0x06); - break; - case 'no': - default: - $byte = pack('C*', 0x00); - break; - } - $this->write(0x18003E, $byte); - - return $this; - } - - /** - * Set hearts color for low vision people - * - * @param string $color color to have HUD hearts - * - * @return $this - */ - public function setHeartColors(string $color) : self { - switch ($color_on) { - case 'blue': - $byte = 0x2C; - $file_byte = 0x0D; - break; - case 'green': - $byte = 0x3C; - $file_byte = 0x19; - break; - case 'yellow': - $byte = 0x28; - $file_byte = 0x09; - break; - case 'red': - default: - $byte = 0x24; - $file_byte = 0x05; - } - $this->write(0x6FA1E, pack('C*', $byte)); - $this->write(0x6FA20, pack('C*', $byte)); - $this->write(0x6FA22, pack('C*', $byte)); - $this->write(0x6FA24, pack('C*', $byte)); - $this->write(0x6FA26, pack('C*', $byte)); - $this->write(0x6FA28, pack('C*', $byte)); - $this->write(0x6FA2A, pack('C*', $byte)); - $this->write(0x6FA2C, pack('C*', $byte)); - $this->write(0x6FA2E, pack('C*', $byte)); - $this->write(0x6FA30, pack('C*', $byte)); - - $this->write(0x65561, pack('C*', $file_byte)); - - return $this; - } - - /** - * Set the opening Uncle text to a custom value - * - * @param string $string Uncle text can be 3 lines of 14 characters each - * - * @return $this - */ - public function setUncleTextString(string $string) : self { - $this->text->setString('uncle_leaving_text', $string); - return $this; - } - - /** - * Set the opening Ganon 1 text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setGanon1TextString(string $string) : self { - $this->text->setString('ganon_fall_in', $string); - return $this; - } - - /** - * Set the opening Ganon 2 text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setGanon2TextString(string $string) : self { - $this->text->setString('ganon_phase_3', $string); - return $this; - } - - /** - * Set the opening Ganon 1 text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setGanon1InvincibleTextString(string $string) : self { - $this->text->setString('ganon_fall_in_alt', $string); - return $this; - } - - /** - * Set the opening Ganon 2 text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setGanon2InvincibleTextString(string $string) : self { - $this->text->setString('ganon_phase_3_alt', $string); - return $this; - } - - - /** - * Set the Triforce text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setTriforceTextString(string $string) : self { - $this->text->setString('end_triforce', "{NOBORDER}\n" . $string); - return $this; - } - - /** - * Set the Blind text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setBlindTextString(string $string) : self { - $this->text->setString('blind_by_the_light', $string); - return $this; - } - - /** - * Set the Tavern Man text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setTavernManTextString(string $string) : self { - $this->text->setString('kakariko_tavern_fisherman', $string); - return $this; - } - - /** - * Set Sahasrahla before item collection text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setSahasrahla1TextString(string $string) : self { - $this->text->setString('sahasrahla_bring_courage', $string); - return $this; - } - - /** - * Set Sahasrahla after item collection text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setSahasrahla2TextString(string $string) : self { - $this->text->setString('sahasrahla_quest_have_master_sword', $string); - // Yes. That is the string randomizer uses for after green pendant - return $this; - } - - /** - * Set Bomb Shop before crystals 5 & 6 text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setBombShop1TextString(string $string) : self { - $this->text->setString('bomb_shop', $string); - return $this; - } - - /** - * Set Bomb Shop after crystals 5 & 6 text to a custom value - * - * @param string $string - * - * @return $this - */ - public function setBombShop2TextString(string $string) : self { - $this->text->setString('bomb_shop_big_bomb', $string); - return $this; - } - - /** - * Set the Pedestal text to a custom value - * - * @param string $string Pedestal text can be 3 lines of 14 characters each - * - * @return $this - */ - public function setPedestalTextbox(string $string) : self { - $this->text->setString('mastersword_pedestal_translated', $string); - return $this; - } - - /** - * Set the Bombos Tablet (no upgraded sword) text to a custom value - * - * @param string $string Bombos text can be 3 lines of 14 characters each - * - * @return $this - */ - public function setBombosTextbox(string $string) : self { - $this->text->setString('tablet_bombos_book', $string); - return $this; - } - - /** - * Set the Ether Tablet (no upgraded sword) text to a custom value - * - * @param string $string Ether text can be 3 lines of 14 characters each - * - * @return $this - */ - public function setEtherTextbox(string $string) : self { - $this->text->setString('tablet_ether_book', $string); - return $this; - } - - /** - * Set the specified text to a custom value - * - * @param string $key which text to set - * @param string $string text to display - * - * @return $this - */ - public function setText(string $key, string $string) : self { - $this->text->setString($key, $string); - - return $this; - } - - /** - * Commit the text table to rom - * - * @return $this - */ - public function writeText() : self { - $this->write(0xE0000, pack('C*', ...$this->text->getByteArray())); - return $this; - } - - /** - * Set the King's Return credits to a custom value - * Original: the return of the king - * - * @param string $string - * - * @return $this - */ - public function setKingsReturnCredits(string $string) : self { - $this->credits->updateCreditLine('castle', 0, $string); - - return $this; - } - - /** - * Set the Sanctuary credits to a custom value - * Original: the loyal priest - * - * @param string $string - * - * @return $this - */ - public function setSanctuaryCredits(string $string) : self { - $this->credits->updateCreditLine('sanctuary', 0, $string); - - return $this; - } - - /** - * Set the Kakariko Town credits to a custom value - * Original: sahasralah's homecoming - * - * @param string $string - * - * @return $this - */ - public function setKakarikoTownCredits(string $string) : self { - $this->credits->updateCreditLine('kakariko', 0, $string); - - return $this; - } - - /** - * Set the Desert Palace credits to a custom value - * Original: vultures rule the desert - * - * @param string $string - * - * @return $this - */ - public function setDesertPalaceCredits(string $string) : self { - $this->credits->updateCreditLine('desert', 0, $string); - - return $this; - } - - /** - * Set the Mountain Tower credits to a custom value - * Original: the bully makes a friend - * - * @param string $string - * - * @return $this - */ - public function setMountainTowerCredits(string $string) : self { - $this->credits->updateCreditLine('hera', 0, $string); - - return $this; - } - - /** - * Set the Links House credits to a custom value - * Original: your uncle recovers - * - * @param string $string - * - * @return $this - */ - public function setLinksHouseCredits(string $string) : self { - $this->credits->updateCreditLine('house', 0, $string); - - return $this; - } - - /** - * Set the Zora credits text to a custom value - * Original: finger webs for sale - * - * @param string $string - * - * @return $this - */ - public function setZoraCredits(string $string) : self { - $this->credits->updateCreditLine('zora', 0, $string); - - return $this; - } - - /** - * Set the Magic Shop credits text to a custom value - * Original: the witch and assistant - * - * @param string $string - * - * @return $this - */ - public function setMagicShopCredits(string $string) : self { - $this->credits->updateCreditLine('witch', 0, $string); - - return $this; - } - - /** - * Set the Woodsmans Hut credits text to a custom value - * Original: twin lumberjacks - * - * @param string $string - * - * @return $this - */ - public function setWoodsmansHutCredits(string $string) : self { - $this->credits->updateCreditLine('lumberjacks', 0, $string); - - return $this; - } - - /** - * Set the Flute Boy credits to a custom value - * Original: ocarina boy plays again - * - * @param string $string - * - * @return $this - */ - public function setFluteBoyCredits(string $string) : self { - $this->credits->updateCreditLine('grove', 0, $string); - - return $this; - } - - /** - * Set the Wishing Well credits to a custom value - * Original: venus. queen of faeries - * - * @param string $string - * - * @return $this - */ - public function setWishingWellCredits(string $string) : self { - $this->credits->updateCreditLine('well', 0, $string); - - return $this; - } - - /** - * Set the Swordsmiths credits to a custom value - * Original: the dwarven swordsmiths - * - * @param string $string - * - * @return $this - */ - public function setSwordsmithsCredits(string $string) : self { - $this->credits->updateCreditLine('smithy', 0, $string); - - return $this; - } - - /** - * Set the Bug-Catching Kid credits to a custom value - * Original: the bug-catching kid - * - * @param string $string - * - * @return $this - */ - public function setBugCatchingKidCredits(string $string) : self { - $this->credits->updateCreditLine('kakariko2', 0, $string); - - return $this; - } - - /** - * Set the Death Mountain credits to a custom value - * Original: the lost old man - * - * @param string $string - * - * @return $this - */ - public function setDeathMountainCredits(string $string) : self { - $this->credits->updateCreditLine('bridge', 0, $string); - - return $this; - } - - /** - * Set the Lost Woods credits to a custom value - * Original: the forest thief - * - * @param string $string - * - * @return $this - */ - public function setLostWoodsCredits(string $string) : self { - $this->credits->updateCreditLine('woods', 0, $string); - - return $this; - } - - /** - * Set the Pedestal credits to a custom value - * Original: and the master sword - * - * @param string $string - * - * @return $this - */ - public function setPedestalCredits(string $string) : self { - $this->credits->updateCreditLine('pedestal', 0, $string); - - return $this; - } - - /** - * Write the credits sequnce - * - * @return $this - */ - public function writeCredits() : self { - $data = $this->credits->getBinaryData(); - - $this->write(0x181500, pack('C*', ...$data['data'])); - $this->write(0x76CC0, pack('S*', ...$data['pointers'])); - - return $this; - } - - /** - * Set Menu Speed - * - * @param string $menu_speed speed at which the menu enters the screen - * - * @return $this - */ - public function setMenuSpeed($menu_speed = 'normal') : self { - $fast = false; - switch ($menu_speed) { - case 'instant': - $speed = pack('C*', 0xE8); - $fast = true; - break; - case 'fast': - $speed = pack('C*', 0x10); - break; - case 'normal': - default: - $speed = pack('C*', 0x08); - break; - case 'slow': - $speed = pack('C*', 0x04); - break; - } - $this->write(0x180048, $speed); - $this->write(0x6DD9A, pack('C*', $fast ? 0x20 : 0x11)); - $this->write(0x6DF2A, pack('C*', $fast ? 0x20 : 0x12)); - $this->write(0x6E0E9, pack('C*', $fast ? 0x20 : 0x12)); - - return $this; - } - - /** - * Enable/Disable the Quickswap function - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setQuickSwap($enable = false) : self { - $this->write(0x18004B, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable the Smithy Full Travel function - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setSmithyFreeTravel($enable = false) : self { - $this->write(0x18004C, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Set the single RNG Item table. These items will only get collected by player once per game. - * - * @param ItemCollection $items - * - * @return $this - */ - public function setSingleRNGTable(ItemCollection $items) : self { - $bytes = $items->map(function($item) { - return $item->getBytes()[0]; - }); - - $this->write(0x182000, pack('C*', ...$bytes)); - $this->write(0x18207F, pack('C*', count($bytes))); - - return $this; - } - - /** - * Set the multi RNG Item table. These items can be collected multiple times per game. - * - * @param ItemCollection $items - * - * @return $this - */ - public function setMultiRNGTable(ItemCollection $items) : self { - $bytes = $items->map(function($item) { - return $item->getBytes()[0]; - }); - - $this->write(0x182080, pack('C*', ...$bytes)); - $this->write(0x1820FF, pack('C*', count($bytes))); - - return $this; - } - - public function beeChest() { - $this->write(0x1D8000, pack('C*', 0xA9, 0x79, 0x22, 0x5D, 0xF6, 0x1D, 0x30, 0x14, 0xA5, 0x22, 0x99, 0x10, 0x0D, 0xA5, 0x23, - 0x99, 0x30, 0x0D, 0xA5, 0x20, 0x99, 0x00, 0x0D, 0xA5, 0x21, 0x99, 0x20, 0x0D, 0x6B)); - $this->write(0x180061, pack('C*', 0x00, 0x80, 0x3B)); - } - - /** - * Set the Seed Type - * - * @param string $setting name - * - * @return $this - */ - public function setRandomizerSeedType(string $setting) : self { - switch ($setting) { - case 'OverworldGlitches': - $byte = 0x02; - break; - case 'MajorGlitches': - $byte = 0x01; - break; - case 'off': - $byte = 0xFF; - break; - case 'NoGlitches': - default: - $byte = 0x00; - } - - $this->write(0x180210, pack('C', $byte)); - - return $this; - } - - /** - * Set the Game Type - * - * @param string $setting name - * - * @return $this - */ - public function setGameType(string $setting) : self { - switch ($setting) { - case 'enemizer': - $byte = 0b00000101; - case 'entrance': - $byte = 0b00000110; - case 'room': - $byte = 0b00001000; - case 'item': - default: - $byte = 0b00000100; - } - - $this->write(0x180211, pack('C', $byte)); - - return $this; - } - - /** - * Set the Plandomizer Author - * - * @param string $name name of author - * - * @return $this - */ - public function setPlandomizerAuthor(string $name) : self { - $this->write(0x180220, substr($name, 0, 31)); - - return $this; - } - - /** - * Set the Tournament Type - * - * @param string $setting name - * - * @return $this - */ - public function setTournamentType(string $setting) : self { - switch ($setting) { - case 'standard': - $bytes = [0x01, 0x00]; - break; - case 'none': - default: - $bytes = [0x00, 0x01]; - } - - $this->write(0x180213, pack('C*', ...$bytes)); - - return $this; - } - - /** - * Set the Hash on the Start Screen - * - * @param array $bytes 5 bytes that will appear on the start screen for verification - * - * @return $this - */ - public function setStartScreenHash(array $bytes) : self { - $this->write(0x180215, pack('C*', ...array_pad(array_slice($bytes, 0, 5), 5, 0x00))); - - return $this; - } - - /** - * Removes Shield from Uncle by moving the tiles for shield to his head and replaces them with his head. - * - * @return $this - */ - public function removeUnclesShield() : self { - $this->write(0x6D253, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); - $this->write(0x6D25B, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); - $this->write(0x6D283, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); - $this->write(0x6D28B, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x00, 0x0E)); - $this->write(0x6D2CB, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x02, 0x0E)); - $this->write(0x6D2FB, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x02, 0x0E)); - $this->write(0x6D313, pack('C*', 0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E)); - - return $this; - } - - /** - * Removes Sword from Uncle by moving the tiles for sword to his head and replaces them with his head. - * - * @return $this - */ - public function removeUnclesSword() : self { - $this->write(0x6D263, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); - $this->write(0x6D26B, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); - $this->write(0x6D293, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); - $this->write(0x6D29B, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x00, 0x0E)); - $this->write(0x6D2B3, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x02, 0x0E)); - $this->write(0x6D2BB, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x02, 0x0E)); - $this->write(0x6D2E3, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x02, 0x0E)); - $this->write(0x6D2EB, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x02, 0x0E)); - $this->write(0x6D31B, pack('C*', 0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E)); - $this->write(0x6D323, pack('C*', 0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E)); - - return $this; - } - - /** - * Set the sprite that spawns when a stunned Enemy is killed - * - * @param int $sprite id of sprite to drop (0xD9 green rupee) - * - * @return $this - */ - public function setStunnedSpritePrize(int $sprite = 0xD9) : self { - $this->write(0x37993, pack('C*', $sprite)); - - return $this; - } - - /** - * Set the sprite that spawns when powdered sprite that usually spawns a faerie is powdered. - * - * @param int $sprite id of sprite to drop - * - * @return $this - */ - public function setPowderedSpriteFairyPrize(int $sprite = 0xE3) : self { - $this->write(0x36DD0, pack('C*', $sprite)); - - return $this; - } - - /** - * Set pull tree prizes - * - * @param int $low id of sprite to drop (0xD9 green rupee) - * @param int $mid id of sprite to drop (0xDA blue rupee) - * @param int $high id of sprite to drop (0xDB red rupee) - * - * @return $this - */ - public function setPullTreePrizes(int $low = 0xD9, int $mid = 0xDA, int $high = 0xDB) : self { - $this->write(0xEFBD4, pack('C*', $low, $mid, $high)); - - return $this; - } - - - /** - * Set rupee crab, first and final prizes - * - * @param int $main id of sprite to drop (0xD9 green rupee) - * @param int $final id of sprite to drop (0xDB red rupee) - * - * @return $this - */ - public function setRupeeCrabPrizes(int $main = 0xD9, int $final = 0xDB) : self { - $this->write(0x329C8, pack('C*', $main)); - $this->write(0x329C4, pack('C*', $final)); - - return $this; - } - - /** - * Set fish save prize - * - * @param int $prize id of sprite to drop (0xDB red rupee) - * - * @return $this - */ - public function setFishSavePrize(int $prize = 0xDB) : self { - $this->write(0xE82CC, pack('C*', $prize)); - - return $this; - } - - /** - * Set Overworld bonk prizes - * - * @param array $prizes ids of sprites to drop (0x03 empty) - * - * @return $this - */ - public function setOverworldBonkPrizes(array $prize = []) : self { - $addresses = [ - 0x4CF6C, 0x4CFBA, 0x4CFE0, 0x4CFFB, 0x4D018, 0x4D01B, 0x4D028, 0x4D03C, - 0x4D059, 0x4D07A, 0x4D09E, 0x4D0A8, 0x4D0AB, 0x4D0AE, 0x4D0BE, 0x4D0DD, - 0x4D16A, 0x4D1E5, 0x4D1EE, 0x4D20B, 0x4CBBF, 0x4CBBF, 0x4CC17, 0x4CC1A, - 0x4CC4A, 0x4CC4D, 0x4CC53, 0x4CC69, 0x4CC6F, 0x4CC7C, 0x4CCEF, 0x4CD51, - 0x4CDC0, 0x4CDC3, 0x4CDC6, 0x4CE37, 0x4D2DE, 0x4D32F, 0x4D355, 0x4D367, - 0x4D384, 0x4D387, 0x4D397, 0x4D39E, 0x4D3AB, 0x4D3AE, 0x4D3D1, 0x4D3D7, - 0x4D3F8, 0x4D416, 0x4D420, 0x4D423, 0x4D42D, 0x4D449, 0x4D48C, 0x4D4D9, - 0x4D4DC, 0x4D4E3, 0x4D504, 0x4D507, 0x4D55E, 0x4D56A, - ]; - - foreach ($addresses as $address) { - $item = array_pop($prize); - $this->write($address, pack('C*', $item ?? 0x03)); - } - - return $this; - } - - /** - * Set Overworld dig prizes - * - * @param array $prizes ids of sprites to dig up - * - * @return $this - */ - public function setOverworldDigPrizes(array $prizes = []) : self { - $this->write(0x180100, pack('C*', ...$prizes)); - - return $this; - } - - /** - * Adjust some settings for hard mode - * - * @param int $level how hard to make it, higher should be harder - * - * @throws Exception if an unknown hard mode is selected - * - * @return $this - */ - public function setHardMode(int $level = 0) : self { - $this->setBelowGanonChest(false); - $this->setCaneOfByrnaSpikeCaveUsage(); - $this->setCapeSpikeCaveUsage(); - $this->setByrnaCaveSpikeDamage(0x08); - // Bryna magic amount used per "cycle" - $this->write(0x45C42, pack('C*', 0x04, 0x02, 0x01)); - - switch ($level) { - case -1: - case 0: - // Cape magic - $this->write(0x3ADA7, pack('C*', 0x04, 0x08, 0x10)); - $this->setCaneOfByrnaInvulnerability(true); - $this->setPowderedSpriteFairyPrize(0xE3); - $this->setBottleFills([0xA0, 0x80]); - $this->setCatchableFairies(true); - $this->setCatchableBees(true); - $this->setStunItems(0x03); - $this->setSilversOnlyAtGanon(false); - - $this->setRupoorValue(0); - - break; - case 1: - $this->write(0x3ADA7, pack('C*', 0x02, 0x02, 0x02)); - $this->setCaneOfByrnaInvulnerability(false); - $this->setPowderedSpriteFairyPrize(0xD8); // 1 heart - $this->setBottleFills([0x38, 0x40]); // 7 hearts, 1/2 magic refills - $this->setCatchableFairies(false); - $this->setCatchableBees(true); - $this->setStunItems(0x02); - $this->setSilversOnlyAtGanon(true); - - $this->setRupoorValue(10); - - break; - case 2: - $this->write(0x3ADA7, pack('C*', 0x01, 0x01, 0x01)); - $this->setCaneOfByrnaInvulnerability(false); - $this->setPowderedSpriteFairyPrize(0xD8); // 1 heart - $this->setBottleFills([0x08, 0x20]); // 1 heart, 1/4 magic refills - $this->setCatchableFairies(false); - $this->setCatchableBees(true); - $this->setStunItems(0x00); - $this->setSilversOnlyAtGanon(true); - - $this->setRupoorValue(20); - - break; - case 3: - $this->write(0x3ADA7, pack('C*', 0x01, 0x01, 0x01)); - $this->setCaneOfByrnaInvulnerability(false); - $this->setPowderedSpriteFairyPrize(0x79); // Bees - $this->setBottleFills([0x00, 0x00]); // 0 hearts, 0 magic refills - $this->setCatchableFairies(false); - $this->setCatchableBees(true); - $this->setStunItems(0x00); - $this->setSilversOnlyAtGanon(true); - - $this->setRupoorValue(9999); - - break; - default: - throw new \Exception("Trying to set hard mode that doesn't exist"); - } - - return $this; - } - - public function setupCustomShops($shops) : self { - $shops = $shops->filter(function($shop) { - return $shop->getActive(); - }); - - $shop_data = []; - $items_data = []; - $shop_id = 0x00; - $sram_offset = 0x00; - foreach ($shops as $shop) { - if ($shop_id == $shops->count() - 1) { - $shop_id = 0xFF; - } - $shop->writeExtraData($this); - // @TODO: make this clever and reuse when inv is the exact same. (except take any's) - $shop_data = array_merge($shop_data, [$shop_id], $shop->getBytes($sram_offset)); - $sram_offset += ($shop instanceof Shop\TakeAny) ? 1 : count($shop->getInventory()); - - if ($sram_offset > 36) { - throw new \Exception("Exceeded SRAM indexing for shops"); - } - - foreach ($shop->getInventory() as $item) { - $items_data = array_merge($items_data, [$shop_id, $item['id']], - array_values(unpack('C*', pack('S', $item['price'] ?? 0))), - [$item['max'] ?? 0, $item['replace_id'] ?? 0xFF], - array_values(unpack('C*', pack('S', $item['replace_price'] ?? 0)))); - } - ++$shop_id; - } - $this->write(0x184800, pack('C*', ...$shop_data)); - - $items_data = array_merge($items_data, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]); - $this->write(0x184900, pack('C*', ...$items_data)); - - return $this; - } - - /** - * Set Rupee Arrow mode - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setRupeeArrow(bool $enable = false) : self { - $this->write(0x30052, pack('C*', $enable ? 0xDB : 0xE2)); // fish bottle merchant - $this->write(0x301FC, pack('C*', $enable ? 0xDA : 0xE1)); // replace Pot rupees - $this->write(0xECB4E, $enable ? pack('C*', 0xA9, 0x00, 0xEA, 0xEA) : pack('C*', 0xAF, 0x77, 0xF3, 0x7E)); // thief - $this->write(0xF0D96, $enable ? pack('C*', 0xA9, 0x00, 0xEA, 0xEA) : pack('C*', 0xAF, 0x77, 0xF3, 0x7E)); // pikit - $this->write(0x180175, pack('C*', $enable ? 0x01 : 0x00)); // enable mode - $this->write(0x180176, pack('S*', $enable ? 0x0A : 0x00)); // wood cost - $this->write(0x180178, pack('S*', $enable ? 0x32 : 0x00)); // silver cost - $this->write(0xEDA5, $enable ? pack('C*', 0x35, 0x41) : pack('C*', 0x43, 0x44)); // DW chest game - - return $this; - } - - /** - * Set whether Sahasrahla updates your map with Green Pendant when you talk to him - * - * @param int $reveals bitfield of what he reveals - * - * @return $this - */ - public function setMapRevealSahasrahla(int $reveals = 0x0000) : self { - $this->write(0x18017A, pack('S*', $reveals)); - - return $this; - } - - /** - * Set whether Bomb Shop dude updates your map with Red Cyrstals when you talk to him - * - * @param int $reveals bitfield of what he reveals - * - * @return $this - */ - public function setMapRevealBombShop(int $reveals = 0x0000) : self { - $this->write(0x18017C, pack('S*', $reveals)); - - return $this; - } - - /** - * Set it so trade fairies only trade bottles - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setRestrictFairyPonds(bool $enable = true) : self { - $this->write(0x18017E, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable Escape Assist - * - * @param int $flags assist -----mba m: Infinite Magic, b: Infinite Bombs, a: Infinite Arrows - * - * @return $this - */ - public function setEscapeAssist(int $flags = 0x00) : self { - $this->write(0x18004D, pack('C*', $flags)); - - return $this; - } - - /** - * Enable Escape Fills - * - * @param int $flags assist -----mba m: Magic refill, b: Bomb refill, a: Arrow refill - * @param int $rupess if rupee bow is enabled, this value is used for starting rupees - * - * @return $this - */ - public function setEscapeFills(int $flags = 0x00, int $rupees = 300) : self { - $this->write(0x18004E, pack('C*', $flags)); - $this->write(0x180183, pack('S*', $rupees)); - - return $this; - } - - /** - * Set Uncle Refills on respawn - * - * @param int $magic - * @param int $bombs - * @param int $arrows - * - * @return $this - */ - public function setUncleSpawnRefills(int $magic = 0x00, int $bombs = 0x00, int $arrows = 0x00) : self { - $this->write(0x180185, pack('C*', $magic, $bombs, $arrows)); - - return $this; - } - - /** - * Set Zelda Cell Refills on respawn - * - * @param int $magic - * @param int $bombs - * @param int $arrows - * - * @return $this - */ - public function setZeldaSpawnRefills(int $magic = 0x00, int $bombs = 0x00, int $arrows = 0x00) : self { - $this->write(0x180188, pack('C*', $magic, $bombs, $arrows)); - - return $this; - } - - /** - * Set Mantle Refills on respawn - * - * @param int $magic - * @param int $bombs - * @param int $arrows - * - * @return $this - */ - public function setMantleSpawnRefills(int $magic = 0x00, int $bombs = 0x00, int $arrows = 0x00) : self { - $this->write(0x18018B, pack('C*', $magic, $bombs, $arrows)); - - return $this; - } - - /** - * Set the prizes for the pick 3 chest games. - * - * @param array $prizes item id's of prizes should be length 32 - * - * @return $this - */ - public function setChancePrizes(array $prizes = null) { - if (!$prizes) { - $prizes = [ - // high stakes game - 0x47, 0x34, 0x46, 0x34, 0x46, 0x46, 0x34, 0x47, - 0x46, 0x47, 0x34, 0x46, 0x47, 0x34, 0x46, 0x47, - // low stakes game - 0x34, 0x47, 0x41, 0x47, 0x41, 0x41, 0x47, 0x34, - 0x41, 0x34, 0x47, 0x41, 0x34, 0x47, 0x41, 0x34, - ]; - } - - $this->write(0xEED5, pack('C*', ...$prizes)); // 32 bytes - - return $this; - } - - /** - * Set Generic keys mode, if enabled all keys will share 1 pool. - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setGenericKeys(bool $enable = false) : self { - $this->write(0x180172, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Set Smithy Quick Item Give mode. I.E. just gives an item if you rescue him with no sword bogarting - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setSmithyQuickItemGive(bool $enable = true) : self { - $this->write(0x180029, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Set Pyramid Fountain to have 2 chests - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setPyramidFairyChests(bool $enable = true) : self { - $this->write(0x1FC16, $enable - ? pack('C*', 0xB1, 0xC6, 0xF9, 0xC9, 0xC6, 0xF9) - : pack('C*', 0xA8, 0xB8, 0x3D, 0xD0, 0xB8, 0x3D)); - - return $this; - } - - /** - * Enable Hammer activates tablets - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setHammerTablet(bool $enable = false) : self { - $this->write(0x180044, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable Hammer breaks Aghanim's barrier no matter what - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setHammerBarrier(bool $enable = false) : self { - $this->write(0x18005D, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable ability to bug net catch Fairy - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setCatchableFairies(bool $enable = true) : self { - $this->write(0x34FD6, pack('C*', $enable ? 0xF0 : 0x80)); - - return $this; - } - - - /** - * Enable which objects stun - * - * @param int $flags display ------hb h: hookshot, b: Boomerang - * - * @return $this - */ - public function setStunItems(int $flags = 0x03) : self { - $this->write(0x180180, pack('C*', $flags)); - - return $this; - } - - /** - * Enable silver arrows can only be used in Ganon's room - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setSilversOnlyAtGanon(bool $enable = false) : self { - $this->write(0x180181, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Set when silvers equip - * - * @param string $setting name - * - * @return $this - */ - public function setSilversEquip(string $setting) : self { - switch ($setting) { - case 'both': - $byte = 0x03; - break; - case 'ganon': - $byte = 0x02; - break; - case 'off': - $byte = 0x00; - break; - case 'collection': - default: - $byte = 0x01; - } - - $this->write(0x180182, pack('C*', $byte)); - - return $this; - } - - /** - * Enable/Disable ability to bug net catch Bee (also makes them attack you?) - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setCatchableBees(bool $enable = true) : self { - $this->write(0xF5D73, pack('C*', $enable ? 0xF0 : 0x80)); - $this->write(0xF5F10, pack('C*', $enable ? 0xF0 : 0x80)); - - return $this; - } - - /** - * Set space directly below Ganon to have a chest - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setBelowGanonChest(bool $enable = true) : self { - // convert telepathic tile to chest and place it - $this->write(0x50563, $enable ? pack('C*', 0xC5, 0x76) : pack('C*', 0x3F, 0x14)); - // lock door to under ganon - $this->write(0x50599, $enable ? pack('C*', 0x38) : pack('C*', 0x00)); - // set dungeon secret to this chest - $this->write(0xE9A5, $enable ? pack('C*', 0x10, 0x00, 0x58) : pack('C*', 0x7E, 0x00, 0x24)); - - return $this; - } - - /** - * Place 2 chests in Waterfall of Wishing Fairy. - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setWishingWellChests(bool $enable = false) : self { - // set item table to proper room - $this->write(0xE9AE, $enable ? pack('C*', 0x14, 0x01) : pack('C*', 0x05, 0x00)); - $this->write(0xE9CF, $enable ? pack('C*', 0x14, 0x01) : pack('C*', 0x3D, 0x01)); - - // room 276 remodel - $this->write(0x1F714, $enable - ? base64_decode( - "4QAQrA0pmgFYmA8RsWH8TYEg2gIs4WH8voFhsWJU2gL9jYNE4WL9HoMxpckxpGkxwCJNpGkxxvlJxvkQmaBcmaILmGAN6MBV6MALk" . - "gBzmGD+aQCYo2H+a4H+q4WpyGH+roH/aQLYo2L/a4P/K4fJyGL/LoP+oQCqIWH+poH/IQLKIWL/JoO7I/rDI/q7K/rDK/q7U/rDU/" . - "qwoD2YE8CYUsCIAGCQAGDoAGDwAGCYysDYysDYE8DYUsD8vYX9HYf/////8P+ALmEOgQ7//w==") - : base64_decode( - "4QAQrA0pmgFYmA8RsGH8TQEg0gL8vQUs4WH8voFhsGJU0gL9jQP9HQdE4WL9HoMxpckxpGkxwCJNpGkouD1QuD0QmaBcmaILmGAN4" . - "cBV4cALkgBzmGD+aQCYo2H+a4H+q4WpyGH+roH/aQLYo2L/a4P/K4fJyGL/LoP+oQCqIWH+poH/IQLKIWL/JoO7I/rDI/q7K/rDK/" . - "q7U/rDU/qwoD2YE8CYUsCIAGCQAGDoAGDwAGCYysDYysDYE8DYUsD/////8P+ALmEOgQ7//w==")); - - return $this; - } - - /** - * Remove 2 statues at hylia fairy - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setHyliaFairyShop(bool $enable = false) : self { - $this->write(0x01F810, $enable - ? pack('C*', 0x1A, 0x1E, 0x01, 0x1A, 0x1E, 0x01) - : pack('C*', 0xFC, 0x94, 0xE4, 0xFD, 0x34, 0xE4)); - - return $this; - } - - /** - * Enable/Disable Waterfall of Wishing Fairy's ability to upgrade items. - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setWishingWellUpgrade(bool $enable = false) : self { - $this->write(0x348DB, pack('C*', $enable ? 0x0C : 0x2A)); - $this->write(0x348EB, pack('C*', $enable ? 0x04 : 0x05)); - - return $this; - } - - public function setGameState(string $state = null) { - $this->setOpenMode(false); - $this->setFixFakeWorld(false); - switch ($state) { - case 'open': - return $this->setOpenMode(true); - case 'inverted': - return $this->setInvertedMode(true); - case 'standard': - default: - return $this; - } - } - - /** - * Set Game in Open Mode. (Post rain state with Escape undone) - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setOpenMode(bool $enable = true) : self { - $this->write(0x180032, pack('C*', $enable ? 0x01 : 0x00)); - $this->setSewersLampCone(!$enable); - $this->setLightWorldLampCone(false); - $this->setDarkWorldLampCone(false); - - return $this; - } - - /** - * Set Game in Inverted Mode. (Post rain state with Escape undone and in the Dark Wold with a whole slew of other crap) - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setInvertedMode(bool $enable = true) : self { - // this mode is based on open mode ;) - $this->setOpenMode($enable); - - $this->write(snes_to_pc(0x30804A), pack('C*', 0x01)); // ; main toggle - $this->write(snes_to_pc(0x0283E0), pack('C*', 0xF0)); // ; residual portal - $this->write(snes_to_pc(0x02B34D), pack('C*', 0xF0)); // ; residual portal - $this->write(snes_to_pc(0x06DB78), pack('C*', 0x8B)); // ; residual portal - $this->write(snes_to_pc(0x05AF79), pack('C*', 0xF0)); // ; vortex - $this->write(snes_to_pc(0x0DB3C5), pack('C*', 0xC6)); // ; vortex - $this->write(snes_to_pc(0x07A3F4), pack('C*', 0xF0)); // ; duck - $this->write(snes_to_pc(0x07A3F4), pack('C*', 0xF0)); // ; duck - $this->write(snes_to_pc(0x02E849), pack('S*', 0x0043, 0x0056, 0x0058, 0x006C, 0x006F, 0x0070, 0x007B, 0x007F, 0x001B)); // ; Dark World Flute Spots - $this->write(snes_to_pc(0x02E8D5), pack('S*', 0x07C8)); // ; nudge flute spot 3 out of gargoyle statue - $this->write(snes_to_pc(0x02E8F7), pack('S*', 0x01F8)); // ; nudge flute spot 3 out of gargoyle statue - $this->write(snes_to_pc(0x07A943), pack('C*', 0xF0)); // ; Dark to light world mirror - $this->write(snes_to_pc(0x07A96D), pack('C*', 0xD0)); // ; residual portal? - $this->write(snes_to_pc(0x08D40C), pack('C*', 0xD0)); // ; morph poof - $this->setFixFakeWorld($enable); // ; ER's Fix fake worlds fix. Currently needed for inverted - - $this->write(0x15B8C, pack('C', 0x6C)); // update link's house exit to be dark world (All the other exit table values can be reused) - $this->write(0xDBB73 + 0x00, pack('C', 0x53)); // entering links house door leads to bomb shop - $this->write(0xDBB73 + 0x52, pack('C', 0x01)); // entering bomb shop leads to links house - - // swap GT and AT entrances - $this->write(0xDBB73 + 0x23, pack('C', 0x37)); // entering AT Door Leads to GT - $this->write(0xDBB73 + 0x36, pack('C', 0x24)); // entering GT Door Leads to AT - $this->write(0x15AEE + 2*0x38, pack('S*', 0x00e0)); // exiting AT leads to GT - $this->write(0x15AEE + 2*0x25, pack('S*', 0x000c)); // exiting GT leads to AT - - // Bumper Cave (Bottom) => Old Man Cave (West) - $this->write(0xDBB73 + 0x15, pack('C', 0x06)); - $this->write(0x15AEE + 2*0x17, pack('S*', 0x00F0)); - - // Old Man Cave (West) => Bumper Cave (Bottom) - $this->write(0xDBB73 + 0x05, pack('C', 0x16)); - $this->write(0x15AEE + 2*0x07, pack('S*', 0x00FB)); - - // Death Mountain Return Cave (West) => Bumper Cave (Top) - $this->write(0xDBB73 + 0x2D, pack('C', 0x17)); - $this->write(0x15AEE + 2*0x2F, pack('S*', 0x00EB)); - - // Old Man Cave (East) => Death Mountain Return Cave (West) - $this->write(0xDBB73 + 0x06, pack('C', 0x2E)); - $this->write(0x15AEE + 2*0x08, pack('S*', 0x00e6)); - - // Bumper Cave (Top) => Dark Death Mountain Fairy - $this->write(0xDBB73 + 0x16, pack('C', 0x5E)); - - // fix trock doors for reverse entrances - $this->write(0xFED31, pack('C', 0x0E)); // preopen bombable exit - $this->write(0xFEE41, pack('C', 0x0E)); // preopen bombable exit - - // Dark Death Mountain Healer Fairy => Old Man Cave (East) - $this->write(0xDBB73 + 0x6F, pack('C', 0x07)); - $this->write(0x15AEE + 2*0x18, pack('S*', 0x00f1)); - $this->write(0x15B8C + 0x18, pack('C', 0x43)); - $this->write(0x15BDB + 2 * 0x18, pack('S*', 0x1400)); - $this->write(0x15C79 + 2 * 0x18, pack('S*', 0x0294)); - $this->write(0x15D17 + 2 * 0x18, pack('S*', 0x0600)); - $this->write(0x15DB5 + 2 * 0x18, pack('S*', 0x02e8)); - $this->write(0x15E53 + 2 * 0x18, pack('S*', 0x0678)); - $this->write(0x15EF1 + 2 * 0x18, pack('S*', 0x0303)); - $this->write(0x15F8F + 2 * 0x18, pack('S*', 0x0685)); - $this->write(0x1602D + 0x18, pack('C', 0x0a)); - $this->write(0x1607C + 0x18, pack('C', 0xf6)); - $this->write(0x160CB + 2 * 0x18, pack('S*', 0x0000)); - $this->write(0x16169 + 2 * 0x18, pack('S*', 0x0000)); - - // Pyramid Exit <= Houlihan - $this->write(0x15AEE + 2*0x3D, pack('S*', 0x0003)); - $this->write(0x15B8C + 0x3D, pack('C', 0x5b)); - $this->write(0x15BDB + 2 * 0x3D, pack('S*', 0x0b0e)); - $this->write(0x15C79 + 2 * 0x3D, pack('S*', 0x075a)); - $this->write(0x15D17 + 2 * 0x3D, pack('S*', 0x0674)); - $this->write(0x15DB5 + 2 * 0x3D, pack('S*', 0x07a8)); - $this->write(0x15E53 + 2 * 0x3D, pack('S*', 0x06e8)); - $this->write(0x15EF1 + 2 * 0x3D, pack('S*', 0x07c7)); - $this->write(0x15F8F + 2 * 0x3D, pack('S*', 0x06f3)); - $this->write(0x1602D + 0x3D, pack('C', 0x06)); - $this->write(0x1607C + 0x3D, pack('C', 0xfa)); - $this->write(0x160CB + 2 * 0x3D, pack('S*', 0x0000)); - $this->write(0x16169 + 2 * 0x3D, pack('S*', 0x0000)); - - // Change sanc spawn point to dark sanc - $this->write(snes_to_pc(0x02D8D4), pack('S*', 0x112)); - $this->write(snes_to_pc(0x02D8E8), pack('C*', 0x22, 0x22, 0x22, 0x23, 0x04, 0x04, 0x04, 0x05)); - $this->write(snes_to_pc(0x02D91A), pack('S*', 0x0400)); - $this->write(snes_to_pc(0x02D928), pack('S*', 0x222e)); - $this->write(snes_to_pc(0x02D936), pack('S*', 0x229a)); - $this->write(snes_to_pc(0x02D944), pack('S*', 0x0480)); - $this->write(snes_to_pc(0x02D952), pack('S*', 0x00a5)); - $this->write(snes_to_pc(0x02D960), pack('S*', 0x007F)); - $this->write(snes_to_pc(0x02D96D), pack('C', 0x14)); - $this->write(snes_to_pc(0x02D974), pack('C', 0x00)); - $this->write(snes_to_pc(0x02D97B), pack('C', 0xFF)); - $this->write(snes_to_pc(0x02D982), pack('C', 0x00)); - $this->write(snes_to_pc(0x02D989), pack('C', 0x02)); - $this->write(snes_to_pc(0x02D990), pack('C', 0x00)); - $this->write(snes_to_pc(0x02D998), pack('S*', 0x0000)); - $this->write(snes_to_pc(0x02D9A6), pack('S*', 0x005A)); - $this->write(snes_to_pc(0x02D9B3), pack('C', 0x12)); - - // Write dark sanc exit data to StartingAreaExitTable table - $this->write(0x180250, pack('S*', 0x0112) . pack('C', 0x53) - . pack('S*', 0x001e, 0x0400, 0x06e2, 0x0446, 0x0758, 0x046d, 0x075f) - . pack('C*', 0x00, 0x00, 0x00)); - - // Write to StartingAreaExitOffset table to indicate that dark sanc spawn uses first row in table - $this->write(0x180240, pack('C*', 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00)); - - $this->write(snes_to_pc(0x308350), pack('C*', 0x00, 0x00, 0x01)); // Death mountain cave should start on overworld - - // Change old man spawn point to End of old man cave - $this->write(snes_to_pc(0x02D8DE), pack('S*', 0x00F1)); - $this->write(snes_to_pc(0x02D910), pack('C*', 0x1F, 0x1E, 0x1F, 0x1F, 0x03, 0x02, 0x03, 0x03)); - $this->write(snes_to_pc(0x02D924), pack('S*', 0x0300)); - $this->write(snes_to_pc(0x02D932), pack('S*', 0x1F10)); - $this->write(snes_to_pc(0x02D940), pack('S*', 0x1FC0)); - $this->write(snes_to_pc(0x02D94E), pack('S*', 0x0378)); - $this->write(snes_to_pc(0x02D95C), pack('S*', 0x0187)); - $this->write(snes_to_pc(0x02D96A), pack('S*', 0x017F)); - $this->write(snes_to_pc(0x02D972), pack('C', 0x06)); - $this->write(snes_to_pc(0x02D979), pack('C', 0x00)); - $this->write(snes_to_pc(0x02D980), pack('C', 0xFF)); - $this->write(snes_to_pc(0x02D987), pack('C', 0x00)); - $this->write(snes_to_pc(0x02D98E), pack('C', 0x22)); - $this->write(snes_to_pc(0x02D995), pack('C', 0x12)); - $this->write(snes_to_pc(0x02D9A2), pack('S*', 0x0000)); - $this->write(snes_to_pc(0x02D9B0), pack('S*', 0x0007)); - $this->write(snes_to_pc(0x02D9B8), pack('C', 0x12)); - - // Write to StartingAreaOverworldDoor table to indicate the overworld door being used for - // the single entrance spawn point - $this->write(0x180247, pack('C*', 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00)); - - // aga tower exit/ pyramid spawn (now hyrule castle ledge spawn) - $this->write(0x15AEE + 2 * 0x06, pack('S', 0x0020)); - $this->write(0x15B8C + 0x06, pack('C', 0x1B)); - $this->write(0x15BDB + 2 * 0x06, pack('S', 0x00AE)); - $this->write(0x15C79 + 2 * 0x06, pack('S', 0x0610)); - $this->write(0x15D17 + 2 * 0x06, pack('S', 0x077E)); - $this->write(0x15DB5 + 2 * 0x06, pack('S', 0x0672)); - $this->write(0x15E53 + 2 * 0x06, pack('S', 0x07F8)); - $this->write(0x15EF1 + 2 * 0x06, pack('S', 0x067D)); - $this->write(0x15F8F + 2 * 0x06, pack('S', 0x0803)); - $this->write(0x1602D + 0x06, pack('C', 0x00)); - $this->write(0x1607C + 0x06, pack('C', 0xf2)); - $this->write(0x160CB + 2 * 0x06, pack('S', 0x0000)); - $this->write(0x16169 + 2 * 0x06, pack('S', 0x0000)); - - // move flute spot 9 (notice that the values of this match the 2nd, 3rd etc value of hyrule castle spawn) - $this->write(snes_to_pc(0x02E87B), pack('S', 0x00ae)); - $this->write(snes_to_pc(0x02E89D), pack('S', 0x0610)); - $this->write(snes_to_pc(0x02E8BF), pack('S', 0x077e)); - $this->write(snes_to_pc(0x02E8E1), pack('S', 0x0672)); - $this->write(snes_to_pc(0x02E903), pack('S', 0x07f8)); - $this->write(snes_to_pc(0x02E925), pack('S', 0x067d)); - $this->write(snes_to_pc(0x02E947), pack('S', 0x0803)); - $this->write(snes_to_pc(0x02E969), pack('S', 0x0000)); - $this->write(snes_to_pc(0x02E98B), pack('S', 0xFFF2)); - - $this->write(snes_to_pc(0x1AF696), pack('C', 0xF0)); // Bat X position (sprite_retreat_bat.asm:130) - $this->write(snes_to_pc(0x1AF6B2), pack('C', 0x33)); // Bat Delay (sprite_retreat_bat.asm:136) - - // New Hole Mask Position - $this->write(snes_to_pc(0x1AF730), pack('C*', - 0x6A, 0x9E, 0x0C, 0x00, 0x7A, 0x9E, 0x0C, 0x00, 0x8A, 0x9E, 0x0C, 0x00, 0x6A, 0xAE, 0x0C, 0x00, - 0x7A, 0xAE, 0x0C, 0x00, 0x8A, 0xAE, 0x0C, 0x00, 0x67, 0x97, 0x0C, 0x00, 0x8D, 0x97, 0x0C, 0x00)); - - // redefine some map16 tiles - $this->write(snes_to_pc(0x0FF1C8), pack('S*', - 0x190F, 0x190F, 0x190F, 0x194C, 0x190F, 0x194B, 0x190F, 0x195C, 0x594B, 0x194C, 0x19EE, 0x19EE, - 0x194B, 0x19EE, 0x19EE, 0x19EE, 0x594B, 0x190F, 0x595C, 0x190F, 0x190F, 0x195B, 0x190F, 0x190F, - 0x19EE, 0x19EE, 0x195C, 0x19EE, 0x19EE, 0x19EE, 0x19EE, 0x595C, 0x595B, 0x190F, 0x190F, 0x190F)); - - // Redefine more map16 tiles - $this->write(snes_to_pc(0x0FA480), pack('S*', 0x190F, 0x196B, 0x9D04, 0x9D04, 0x196B, 0x190F, 0x9D04, 0x9D04)); - - // update pyramid hole entrances - $this->write(snes_to_pc(0x1bb810), pack('S*', 0x00BE, 0x00C0, 0x013E)); - $this->write(snes_to_pc(0x1bb836), pack('S*', 0x001B, 0x001B, 0x001B)); - - // add an extra pyramid hole entrance - $this->write(snes_to_pc(0x308300), pack('S', 0x0140)); // ExtraHole_Map16 - $this->write(snes_to_pc(0x308320), pack('S', 0x001B)); // ExtraHole_Area - $this->write(snes_to_pc(0x308340), pack('C', 0x7B)); // ExtraHole_Entrance - - // prioritize retreat Bat and use 3rd sprite group - $this->write(snes_to_pc(0x1af504), pack('S', 0x148B)); - $this->write(snes_to_pc(0x1af50c), pack('S', 0x149B)); - $this->write(snes_to_pc(0x1af514), pack('S', 0x14A4)); - $this->write(snes_to_pc(0x1af51c), pack('S', 0x1489)); - $this->write(snes_to_pc(0x1af524), pack('S', 0x14AC)); - $this->write(snes_to_pc(0x1af52c), pack('S', 0x54AC)); - $this->write(snes_to_pc(0x1af534), pack('S', 0x148C)); - $this->write(snes_to_pc(0x1af53c), pack('S', 0x548C)); - $this->write(snes_to_pc(0x1af544), pack('S', 0x1484)); - $this->write(snes_to_pc(0x1af54c), pack('S', 0x5484)); - $this->write(snes_to_pc(0x1af554), pack('S', 0x14A2)); - $this->write(snes_to_pc(0x1af55c), pack('S', 0x54A2)); - $this->write(snes_to_pc(0x1af564), pack('S', 0x14A0)); - $this->write(snes_to_pc(0x1af56c), pack('S', 0x54A0)); - $this->write(snes_to_pc(0x1af574), pack('S', 0x148E)); - $this->write(snes_to_pc(0x1af57c), pack('S', 0x548E)); - $this->write(snes_to_pc(0x1af584), pack('S', 0x14AE)); - $this->write(snes_to_pc(0x1af58c), pack('S', 0x54AE)); - - // Make retreat bat gfx available in Hyrule castle. - $this->write(snes_to_pc(0x00DB9D), pack('C', 0x1A)); // sprite set 1, section 3 - $this->write(snes_to_pc(0x00DC09), pack('C', 0x1A)); // sprite set 27, section 3 - - // use new castle hole graphics (The values are the SNES address of the graphics: 31e000) - $this->write(snes_to_pc(0x00D009), pack('C', 0x31)); - $this->write(snes_to_pc(0x00D0e8), pack('C', 0xE0)); - $this->write(snes_to_pc(0x00D1c7), pack('C', 0x00)); - $this->write(snes_to_pc(0x1BE8DA), pack('S', 0x39AD)); // add color for shading for castle hole - - $this->write(0x180169, pack('C', 0x02)); // lock aga door - $this->write(0xF6E58, pack('C', 0x80)); // don't allow "whirlpool" under castle gate - - // Turtle rock tail - $this->write(0x0086E, pack('C*', 0x5C, 0x00, 0xA0, 0xA1)); // JML.l $A1A000 (a.k.a. JML.l InvertedTileAttributeLookup) - - // Add warps under rocks, etc. - $this->write(snes_to_pc(0x1BC67A), pack('C*', 0x2E, 0x0B, 0x82)); // Replace a rupee under bush to add a warp on map 80 (top of kak) - $this->write(snes_to_pc(0x1BC81E), pack('C*', 0x94, 0x1D, 0x82)); // Replace a heart under bush to add a warp on map 120 (mire) - $this->write(snes_to_pc(0x1BC655), pack('C*', 0x4A, 0x1D, 0x82)); // Replace a bomb :( under bush to add a warp on map 78 (DM) - $this->write(snes_to_pc(0x1BC80D), pack('C*', 0xB2, 0x0B, 0x82)); // map 111 - $this->write(snes_to_pc(0x1BC3DF), pack('C*', 0xD8, 0xD1)); // new pointer for map 115 no items to replace - $this->write(snes_to_pc(0x1BD1D8), pack('C*', 0xA8, 0x02, 0x82, 0xFF, 0xFF)); // new data for map115 - $this->write(snes_to_pc(0x1BC85A), pack('C*', 0x50, 0x0F, 0x82)); - - // move pyramid exit overworld door - $this->write(0xDB96F + 2 * 0x35, pack('S', 0x001B)); - $this->write(0xDBA71 + 2 * 0x35, pack('S', 0x06A4)); - $this->write(0xDBB73 + 0x35, pack('C', 0x36)); - - // Remove Hyrule Castle Gate warp - $this->write(snes_to_pc(0x09D436), pack('C', 0xF3)); // replace whirlpool with (harmless) SpritePositionTarget Overlord - - // Pyramid exits to new hyrule castle area - $this->write(0x15AEE + 2 * 0x37, pack('S', 0x0010)); - $this->write(0x15B8C + 0x37, pack('C', 0x1B)); - $this->write(0x15BDB + 2 * 0x37, pack('S', 0x0418)); - $this->write(0x15C79 + 2 * 0x37, pack('S', 0x0679)); - $this->write(0x15D17 + 2 * 0x37, pack('S', 0x06B4)); - $this->write(0x15DB5 + 2 * 0x37, pack('S', 0x06C6)); - $this->write(0x15E53 + 2 * 0x37, pack('S', 0x0728)); - $this->write(0x15EF1 + 2 * 0x37, pack('S', 0x06E6)); - $this->write(0x15F8F + 2 * 0x37, pack('S', 0x0733)); - $this->write(0x1602D + 0x37, pack('C', 0x07)); - $this->write(0x1607C + 0x37, pack('C', 0xf9)); - $this->write(0x160CB + 2 * 0x37, pack('S', 0x0000)); - $this->write(0x16169 + 2 * 0x37, pack('S', 0x0000)); - $this->write(snes_to_pc(0x1BC387), pack('C*', 0xDD, 0xD1)); // New pointer for map 71 no items to replace - $this->write(snes_to_pc(0x1BD1DD), pack('C*', 0xA4, 0x06, 0x82, 0x9E, 0x06, 0x82, 0xFF, 0xFF)); // new data for map 71 - - $this->write(0x180089, pack('C', 0x01)); // open TR main entrance on exiting - - $this->write(snes_to_pc(0x0ABFBB), pack('C', 0x90)); // move mirror portal indicator to correct map (0xB0 normally) - - $this->write(snes_to_pc(0x0280A6), pack('C', 0xD0)); // Spawn logic - - $this->write(snes_to_pc(0x06B2AB), pack('C*', 0xF0, 0xE1, 0x05)); // frog pickup on contact - - $this->text->setString('sign_path_to_death_mountain', "→ Bumper Cave\nYou need Cape and Mirror, but not Hookshot"); - $this->text->setString('sign_bumper_cave', "Cave to lost, old man.\nGood luck."); - $this->text->setString('sign_east_of_bomb_shop', "\n← Your House"); - $this->text->setString('sign_east_of_links_house', "\n← Bomb Shoppe"); - $this->text->setString('kiki_leaving_screen', "{NOTEXT}", false); - $this->text->setString('dark_sanctuary', "{NOTEXT}", false); - $this->text->setString('dark_sanctuary_yes', "{NOTEXT}", false); - $this->text->setString('dark_sanctuary_no', "If you want that healing you're gonna need 20 rupees."); - - $this->text->setString('menu_start_2', "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n{CHOICE3}", false); - $this->text->setString('menu_start_3', "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n Dark Mountain\n{CHOICE2}", false); - - $this->text->setString('intro_main', "{INTRO}\n Episode III\n{PAUSE3}\n A Link to\n the Past\n" - . "{PAUSE3}\nInverted\n Randomizer\n{PAUSE3}\nAfter mostly disregarding what happened in the first two games,\n" - . "{PAUSE3}\nLink has been transported to the Dark World\n{PAUSE3}\nWhile he was slumbering,\n" - . "{PAUSE3}\nWhatever will happen?\n{PAUSE3}\n{CHANGEPIC}\nGanon has moved around all the items in Hyrule.\n" - . "{PAUSE7}\nYou will have to find all the items necessary to beat Ganon.\n" - . "{PAUSE7}\nThis is your chance to be a hero.\n{PAUSE3}\n{CHANGEPIC}\n" - . "You must get the 7 crystals to beat Ganon.\n{PAUSE9}\n{CHANGEPIC}", false); - - return $this; - } - - /** - * Enable maps to show crystals on overworld map - * - * @param bool $require_map switch on or off - * - * @return $this - */ - public function setMapMode(bool $require_map = false) : self { - $this->write(0x18003B, pack('C*', $require_map ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable compass to show dungeon count - * - * @param string $setting switch on or off - * - * @return $this - */ - public function setCompassMode(string $setting = 'off') : self { - switch ($setting) { - case 'on': - $byte = 0x02; - break; - case 'pickup': - $byte = 0x01; - break; - case 'off': - default: - $byte = 0x00; - } - - $this->write(0x18003C, pack('C', $byte)); - - return $this; - } - - /** - * Enable text box to show with free roaming items - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setFreeItemTextMode(bool $enable = true) : self { - $this->write(0x18016A, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable free items to show up in menu - * - * @param int $flags display ----dcba a: Small Keys, b: Big Key, c: Map, d: Compass - * - * @return $this - */ - public function setFreeItemMenu(int $flags = 0x00) : self { - $this->write(0x180045, pack('C*', $flags)); - - return $this; - } - - /** - * Enable swordless mode - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setSwordlessMode(bool $enable = false) : self { - $this->write(0x18003F, pack('C*', $enable ? 0x01 : 0x00)); // Hammer Ganon - $this->write(0x180040, pack('C*', $enable ? 0x01 : 0x00)); // Open Curtains - $this->write(0x180041, pack('C*', $enable ? 0x01 : 0x00)); // Swordless Medallions - $this->write(0x180043, pack('C*', $enable ? 0xFF : 0x00)); // set Link's starting sword 0xFF is taken sword - - $this->setHammerTablet($enable); - $this->setHammerBarrier(false); - - return $this; - } - - /** - * Enable lampless light cone in Sewers - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setSewersLampCone(bool $enable = true) : self { - $this->write(0x180038, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable lampless light cone in Light World Dungeons - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setLightWorldLampCone(bool $enable = true) : self { - $this->write(0x180039, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable lampless light cone in Dark World Dungeons - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setDarkWorldLampCone(bool $enable = true) : self { - $this->write(0x18003A, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable the ROM Hack that doesn't leave Link stranded in DW - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setMirrorlessSaveAndQuitToLightWorld(bool $enable = true) : self { - $this->write(0x1800A0, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable ability to Save and Quit from Boss room after item collection. - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setSaveAndQuitFromBossRoom(bool $enable = false) : self { - $this->write(0x180042, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable the ROM Hack that drains the Swamp on transition - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setSwampWaterLevel(bool $enable = true) : self { - $this->write(0x1800A1, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable the ROM Hack that sends Link to Real DW on death in DW dungeon if AG1 is not dead - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setPreAgahnimDarkWorldDeathInDungeon(bool $enable = true) : self { - $this->write(0x1800A2, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable World on Agahnim Death - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setWorldOnAgahnimDeath(bool $enable = true) : self { - $this->write(0x1800A3, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable PoD EG correction - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setPODEGfix(bool $enable = true) : self { - $this->write(0x1800A4, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable locking Hyrule Castle Door to AG1 during escape - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setLockAgahnimDoorInEscape(bool $enable = true) : self { - $this->write(0x180169, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Enable/Disable fix Fake Light World/Fake Dark World as caused by leaving the underworld. - * Generally should only be used/enabled by Entrance Randomizer - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function setFixFakeWorld(bool $enable = false) : self { - $this->write(0x180174, pack('C*', $enable ? 0x01 : 0x00)); - - return $this; - } - - /** - * Set the Ganon Warp Phase and Agahnim BB mode - * - * @param string $setting name - * - * @return $this - */ - public function setGanonAgahnimRng(string $setting = 'table') : self { - switch ($setting) { - case 'none': - $byte = 0x01; - break; - case 'vanilla': - case 'table': - default: - $byte = 0x00; - } - - $this->write(0x180086, pack('C', $byte)); - - return $this; - } - - /** - * Write the seed identifier - * - * @param string $seed identifier for this seed - * - * @return $this - */ - public function setSeedString(string $seed) : self { - $this->write(0x7FC0, substr($seed, 0, 21)); - - return $this; - } - - /** - * Write a block of data to RNG Block in ROM. - * - * @param callable $random prng byte generator - * - * @return $this - */ - public function writeRNGBlock(callable $random) : self { - $string = ''; - for ($i = 0; $i < 1024; $i++) { - $string .= pack('C*', $random()); - } - $this->write(0x178000, $string); - - return $this; - } - - /** - * set the flags byte in ROM - * - * dgGe mutT - * d - Nonstandard Dungeon Configuration (Not Map/Compass/BigKey/SmallKeys in same quantity as vanilla) - * g - Requires Minor Glitches (Fake flippers, bomb jumps, etc) - * G - Requires Major Glitches (OW YBA/Clips, etc) - * e - Requires EG - * - * m - Contains Multiples of Major Items - * u - Contains Unreachable Items - * t - Minor Trolling (Swapped around levers, etc) - * T - Major Trolling (Forced-guess softlocks, impossible seed, etc) - * - * @param int $flags byte of flags to set - * - * @return $this - */ - public function setWarningFlags(int $flags) : self { - $this->write(0x180212, pack('C*', $flags)); - - return $this; - } - - /** - * Mute all audio tracks. - * - * @param bool $enable switch on or off - * - * @return $this - */ - public function muteMusic(bool $enable = true) : self { - $tracks_by_volume = [ - 0x00 => [0xD373B, 0xD375B, 0xD90F8], - 0x14 => [0xDA710, 0xDA7A4, 0xDA7BB, 0xDA7D2], - 0x3C => [0xD5954, 0xD653B, 0xDA736, 0xDA752, 0xDA772, 0xDA792], - 0x50 => [0xD5B47, 0xD5B5E], - 0x5A => [0xD4306], - 0x64 => [0xD6878, 0xD6883, 0xD6E48, 0xD6E76, 0xD6EFB, 0xD6F2D, 0xDA211, 0xDA35B, 0xDA37B, 0xDA38E, - 0xDA39F, 0xDA5C3, 0xDA691, 0xDA6A8, 0xDA6DF], - 0x78 => [0xD2349, 0xD3F45, 0xD42EB, 0xD48B9, 0xD48FF, 0xD543F, 0xD5817, 0xD5957, 0xD5ACB, 0xD5AE8, - 0xD5B4A, 0xDA5DE, 0xDA608, 0xDA635, 0xDA662, 0xDA71F, 0xDA7AF, 0xDA7C6, 0xDA7DD], - 0x82 => [0xD2F00, 0xDA3D5], - 0xA0 => [0xD249C, 0xD24CD, 0xD2C09, 0xD2C53, 0xD2CAF, 0xD2CEB, 0xD2D91, 0xD2EE6, 0xD38ED, 0xD3C91, - 0xD3CD3, 0xD3CE8, 0xD3F0C, 0xD3F82, 0xD405F, 0xD4139, 0xD4198, 0xD41D5, 0xD41F6, 0xD422B, 0xD4270, - 0xD42B1, 0xD4334, 0xD4371, 0xD43A6, 0xD43DB, 0xD441E, 0xD4597, 0xD4B3C, 0xD4BAB, 0xD4C03, 0xD4C53, - 0xD4C7F, 0xD4D9C, 0xD5424, 0xD65D2, 0xD664F, 0xD6698, 0xD66FF, 0xD6985, 0xD6C5C, 0xD6C6F, 0xD6C8E, - 0xD6CB4, 0xD6D7D, 0xD827D, 0xD960C, 0xD9828, 0xDA233, 0xDA3A2, 0xDA49E, 0xDA72B, 0xDA745, 0xDA765, - 0xDA785, 0xDABF6, 0xDAC0D, 0xDAEBE, 0xDAFAC], - 0xAA => [0xD9A02, 0xD9BD6], - 0xB4 => [0xD21CD, 0xD2279, 0xD2E66, 0xD2E70, 0xD2EAB, 0xD3B97, 0xD3BAC, 0xD3BE8, 0xD3C0D, 0xD3C39, - 0xD3C68, 0xD3C9F, 0xD3CBC, 0xD401E, 0xD4290, 0xD443E, 0xD456F, 0xD47D3, 0xD4D43, 0xD4DCC, 0xD4EBA, - 0xD4F0B, 0xD4FE5, 0xD5012, 0xD54BC, 0xD54D5, 0xD54F0, 0xD5509, 0xD57D8, 0xD59B9, 0xD5A2F, 0xD5AEB, - 0xD5E5E, 0xD5FE9, 0xD658F, 0xD674A, 0xD6827, 0xD69D6, 0xD69F5, 0xD6A05, 0xD6AE9, 0xD6DCF, 0xD6E20, - 0xD6ECB, 0xD71D4, 0xD71E6, 0xD7203, 0xD721E, 0xD8724, 0xD8732, 0xD9652, 0xD9698, 0xD9CBC, 0xD9DC0, - 0xD9E49, 0xDAA68, 0xDAA77, 0xDAA88, 0xDAA99, 0xDAF04], - 0x8C => [0xD1D28, 0xD1D41, 0xD1D5C, 0xD1D77, 0xD1EEE, 0xD311D, 0xD31D1, 0xD4148, 0xD5543, 0xD5B6F, - 0xD65B3, 0xD6760, 0xD6B6B, 0xD6DF6, 0xD6E0D, 0xD73A1, 0xD814C, 0xD825D, 0xD82BE, 0xD8340, 0xD8394, - 0xD842C, 0xD8796, 0xD8903, 0xD892A, 0xD91E8, 0xD922B, 0xD92E0, 0xD937E, 0xD93C1, 0xDA958, 0xDA971, - 0xDA98C, 0xDA9A7], - 0xC8 => [0xD1D92, 0xD1DBD, 0xD1DEB, 0xD1F5D, 0xD1F9F, 0xD1FBD, 0xD1FDC, 0xD1FEA, 0xD20CA, 0xD21BB, - 0xD22C9, 0xD2754, 0xD284C, 0xD2866, 0xD2887, 0xD28A0, 0xD28BA, 0xD28DB, 0xD28F4, 0xD293E, 0xD2BF3, - 0xD2C1F, 0xD2C69, 0xD2CA1, 0xD2CC5, 0xD2D05, 0xD2D73, 0xD2DAF, 0xD2E3D, 0xD2F36, 0xD2F46, 0xD2F6F, - 0xD2FCF, 0xD2FDF, 0xD302B, 0xD3086, 0xD3099, 0xD30A5, 0xD30CD, 0xD30F6, 0xD3154, 0xD3184, 0xD333A, - 0xD33D9, 0xD349F, 0xD354A, 0xD35E5, 0xD3624, 0xD363C, 0xD3672, 0xD3691, 0xD36B4, 0xD36C6, 0xD3724, - 0xD3767, 0xD38CB, 0xD3B1D, 0xD3B2F, 0xD3B55, 0xD3B70, 0xD3B81, 0xD3BBF, 0xD3F65, 0xD3FA6, 0xD404F, - 0xD4087, 0xD417A, 0xD41A0, 0xD425C, 0xD4319, 0xD433C, 0xD43EF, 0xD440C, 0xD4452, 0xD4494, 0xD44B5, - 0xD4512, 0xD45D1, 0xD45EF, 0xD4682, 0xD46C3, 0xD483C, 0xD4848, 0xD4855, 0xD4862, 0xD486F, 0xD487C, - 0xD4A1C, 0xD4A3B, 0xD4A60, 0xD4B27, 0xD4C7A, 0xD4D12, 0xD4D81, 0xD4E90, 0xD4ED6, 0xD4EE2, 0xD5005, - 0xD502E, 0xD503C, 0xD5081, 0xD51B1, 0xD51C7, 0xD51CF, 0xD51EF, 0xD520C, 0xD5214, 0xD5231, 0xD5257, - 0xD526D, 0xD5275, 0xD52AF, 0xD52BD, 0xD52CD, 0xD52DB, 0xD549C, 0xD5801, 0xD58A4, 0xD5A68, 0xD5A7F, - 0xD5C12, 0xD5D71, 0xD5E10, 0xD5E9A, 0xD5F8B, 0xD5FA4, 0xD651A, 0xD6542, 0xD65ED, 0xD661D, 0xD66D7, - 0xD6776, 0xD68BD, 0xD68E5, 0xD6956, 0xD6973, 0xD69A8, 0xD6A51, 0xD6A86, 0xD6B96, 0xD6C3E, 0xD6D4A, - 0xD6E9C, 0xD6F80, 0xD717E, 0xD7190, 0xD71B9, 0xD811D, 0xD8139, 0xD816B, 0xD818A, 0xD819E, 0xD81BE, - 0xD829C, 0xD82E1, 0xD8306, 0xD830E, 0xD835E, 0xD83AB, 0xD83CA, 0xD83F0, 0xD83F8, 0xD844B, 0xD8479, - 0xD849E, 0xD84CB, 0xD84EB, 0xD84F3, 0xD854A, 0xD8573, 0xD859D, 0xD85B4, 0xD85CE, 0xD862A, 0xD8681, - 0xD87E3, 0xD87FF, 0xD887B, 0xD88C6, 0xD88E3, 0xD8944, 0xD897B, 0xD8C97, 0xD8CA4, 0xD8CB3, 0xD8CC2, - 0xD8CD1, 0xD8D01, 0xD917B, 0xD918C, 0xD919A, 0xD91B5, 0xD91D0, 0xD91DD, 0xD9220, 0xD9273, 0xD9284, - 0xD9292, 0xD92AD, 0xD92C8, 0xD92D5, 0xD9311, 0xD9322, 0xD9330, 0xD934B, 0xD9366, 0xD9373, 0xD93B6, - 0xD97A6, 0xD97C2, 0xD97DC, 0xD97FB, 0xD9811, 0xD98FF, 0xD996F, 0xD99A8, 0xD99D5, 0xD9A30, 0xD9A4E, - 0xD9A6B, 0xD9A88, 0xD9AF7, 0xD9B1D, 0xD9B43, 0xD9B7C, 0xD9BA9, 0xD9C84, 0xD9C8D, 0xD9CAC, 0xD9CE8, - 0xD9CF3, 0xD9CFD, 0xD9D46, 0xDA35E, 0xDA37E, 0xDA391, 0xDA478, 0xDA4C3, 0xDA4D7, 0xDA4F6, 0xDA515, - 0xDA6E2, 0xDA9C2, 0xDA9ED, 0xDAA1B, 0xDAA57, 0xDABAF, 0xDABC9, 0xDABE2, 0xDAC28, 0xDAC46, 0xDAC63, - 0xDACB8, 0xDACEC, 0xDAD08, 0xDAD25, 0xDAD42, 0xDAD5F, 0xDAE17, 0xDAE34, 0xDAE51, 0xDAF2E, 0xDAF55, - 0xDAF6B, 0xDAF81, 0xDB14F, 0xDB16B, 0xDB180, 0xDB195, 0xDB1AA], - 0xD2 => [0xD2B88, 0xD364A, 0xD369F, 0xD3747], - 0xDC => [0xD213F, 0xD2174, 0xD229E, 0xD2426, 0xD4731, 0xD4753, 0xD4774, 0xD4795, 0xD47B6, 0xD4AA5, - 0xD4AE4, 0xD4B96, 0xD4CA5, 0xD5477, 0xD5A3D, 0xD6566, 0xD672C, 0xD67C0, 0xD69B8, 0xD6AB1, 0xD6C05, - 0xD6DB3, 0xD71AB, 0xD8E2D, 0xD8F0D, 0xD94E0, 0xD9544, 0xD95A8, 0xD9982, 0xD9B56, 0xDA694, 0xDA6AB, - 0xDAE88, 0xDAEC8, 0xDAEE6, 0xDB1BF], - 0xE6 => [0xD210A, 0xD22DC, 0xD2447, 0xD5A4D, 0xD5DDC, 0xDA251, 0xDA26C], - 0xF0 => [0xD945E, 0xD967D, 0xD96C2, 0xD9C95, 0xD9EE6, 0xDA5C6], - 0xFA => [0xD2047, 0xD24C2, 0xD24EC, 0xD25A4, 0xD51A8, 0xD51E6, 0xD524E, 0xD529E, 0xD6045, 0xD81DE, - 0xD821E, 0xD94AA, 0xD9A9E, 0xD9AE4, 0xDA289], - 0xFF => [0xD2085, 0xD21C5, 0xD5F28], - ]; - - foreach ($tracks_by_volume as $original_volume => $tracks) { - $byte = pack('C*', $enable ? 0x00 : $original_volume); - foreach ($tracks as $address) { - $this->write($address, $byte); - } - } - - return $this; - } - - /** - * Apply a patch to the ROM - * - * @param array $patch patch to apply - * - * @return $this - * - **/ - public function applyPatch(array $patch) : self { - foreach ($patch as $part) { - foreach ($part as $address => $data) { - $this->write($address, pack('C*', ...array_values($data)), false); - } - } - - return $this; - } - - /** - * Apply a patch file to the ROM - * - * @param string $file_name JSON file to load and apply - * - * @throws Exception if the file isn't readable - * - * @return $this - * - **/ - public function applyPatchFile(string $file_name) : self { - if (!is_readable($file_name)) { - return new \Exception('Patch file not readable'); - } - - return $this->applyPatch(json_decode(file_get_contents($file_name), true)); - } - - /** - * rummage table - * - * @return $this - */ - public function rummageTable() : self { - Tournament::apply($this); - - return $this; - } - - /** - * Save the changes to this output file - * - * @param string $output_location location on the filesystem to write the new ROM. - * - * @return bool - */ - public function save(string $output_location) : bool { - return copy($this->tmp_file, $output_location); - } - - /** - * Write packed data at the given offset - * - * @param int $offset location in the ROM to begin writing - * @param string $data data to write to the ROM - * @param bool $log write this write to the log - * - * @return $this - */ - public function write(int $offset, string $data, bool $log = true) : self { - if ($log) { - $unpacked = array_values(unpack('C*', $data)); - $this->write_log[] = [$offset => $unpacked]; - } - fseek($this->rom, $offset); - fwrite($this->rom, $data); - - return $this; - } - - /** - * Get the array of bytes written in the order they were written to the rom - * - * @return array - */ - public function getWriteLog() : array { - return $this->write_log; - } - - /** - * Read data from the ROM file into an array - * - * @param int $offset location in the ROM to begin reading - * @param int $length data to read - * // TODO: this should probably always be an array, or a new Bytes object - * @return array - */ - public function read(int $offset, int $length = 1) { - fseek($this->rom, $offset); - $unpacked = unpack('C*', fread($this->rom, $length)); - return count($unpacked) == 1 ? $unpacked[1] : array_values($unpacked); - } - - /** - * Object destruction magic method - * - * @return void - */ - public function __destruct() { - if ($this->rom) { - fclose($this->rom); - } - unlink($this->tmp_file); - } +class Rom +{ + const BUILD = '2019-08-26'; + const HASH = '1907d4caccffe60fc69940cfa11b2dab'; + const SIZE = 2097152; + + private $tmp_file; + private $credits; + private $text; + protected $rom; + protected $write_log = []; + + /** + * Save a ROM build the DB for later retervial if someone is patching for an old seed. + * + * @param array $patch for the build + * + * @return Build + */ + public static function saveBuild(array $patch, $build = null, $hash = null): Build + { + $build = Build::firstOrNew([ + 'build' => $build ?? static::BUILD, + ]); + $build->hash = $hash ?? static::HASH; + $build->patch = json_encode($patch); + $build->save(); + + return $build; + } + + /** + * Create a new wrapper + * + * @param string $source_location location of source ROM to edit + * + * @throws \Exception if ROM source isn't readable + * + * @return void + */ + public function __construct(string $source_location = null) + { + if ($source_location !== null && !is_readable($source_location)) { + throw new \Exception('Source ROM not readable'); + } + $this->tmp_file = tempnam(sys_get_temp_dir(), __CLASS__); + + if ($this->tmp_file === false) { + throw new \Exception('could not make temp file'); + } + + if ($source_location !== null) { + copy($source_location, $this->tmp_file); + } + + $this->rom = fopen($this->tmp_file, "r+"); + $this->credits = new Credits; + $this->text = new Text; + $this->text->removeUnwanted(); + } + + /** + * resize ROM to a given size + * + * @param int|null $size number of bytes the ROM should be + * + * @return $this + * + */ + public function resize(int $size = null): self + { + ftruncate($this->rom, $size ?? static::SIZE); + + return $this; + } + + /** + * Check to see if this ROM matches base randomizer ROM. + * + * @return bool + */ + public function checkMD5(): bool + { + return $this->getMD5() === static::HASH; + } + + /** + * Get MD5 of current file. + * + * @return string + */ + public function getMD5(): string + { + return hash_file('md5', $this->tmp_file); + } + + /** + * Update the ROM's checksum to be proper + * + * @return $this + */ + public function updateChecksum(): self + { + fseek($this->rom, 0x0); + $sum = 0x1FE; + for ($i = 0; $i < static::SIZE; $i += 1024) { + $block = fread($this->rom, 1024); + if ($block === false) { + throw new \Exception('Could not read block.'); + } + $bytes = array_values(unpack('C*', $block)); + for ($j = 0; $j < 1024; ++$j) { + if ($j + $i >= 0x7FDC && $j + $i < 0x7FE0) { + // this skip is true for LoROM, HiROM skips: 0xFFDC - 0xFFDF + continue; + } + $sum += $bytes[$j]; + } + } + + $checksum = $sum & 0xFFFF; + $inverse = $checksum ^ 0xFFFF; + + $this->write(0x7FDC, pack('S*', $inverse, $checksum)); + + return $this; + } + + /** + * Write subsitutions + * + * @param array $substitutions [[id, max, replace id, 0xFF], ...] + * + * @return $this + */ + public function setSubstitutions(array $substitutions = []) + { + $substitutions = array_merge($substitutions, [0xFF, 0xFF, 0xFF, 0xFF]); + + $this->write(0x184000, pack('C*', ...$substitutions)); + + return $this; + } + + /** + * set the items passed in as Link's starting equipment + * + * @param ItemCollection $items items to equip Link with + * + * @return $this + */ + public function setStartingEquipment(ItemCollection $items) + { + $equipment = array_fill(0x340, 0x4F, 0); + $starting_rupees = 0; + $starting_arrow_capacity = 0; + $starting_bomb_capacity = 0; + // starting heart containers + if ($items->heartCount(0) < 1) { + $equipment[0x36C] = 0x18; + $equipment[0x36D] = 0x18; + } + // default abilities + $equipment[0x379] |= 0b01101000; + + foreach ($items as $item) { + switch ($item->getTarget()->getRawName()) { + case 'L1Sword': + $equipment[0x359] = 0x01; + break; + case 'L1SwordAndShield': + $equipment[0x359] = 0x01; + $equipment[0x35A] = 0x01; + break; + case 'L2Sword': + case 'MasterSword': + $equipment[0x359] = 0x02; + break; + case 'L3Sword': + $equipment[0x359] = 0x03; + break; + case 'L4Sword': + $equipment[0x359] = 0x04; + break; + case 'BlueShield': + $equipment[0x35A] = 0x01; + break; + case 'RedShield': + $equipment[0x35A] = 0x02; + break; + case 'MirrorShield': + $equipment[0x35A] = 0x03; + break; + case 'FireRod': + $equipment[0x345] = 0x01; + break; + case 'IceRod': + $equipment[0x346] = 0x01; + break; + case 'Hammer': + $equipment[0x34B] = 0x01; + break; + case 'Hookshot': + $equipment[0x342] = 0x01; + break; + case 'Bow': + $equipment[0x340] = 0x01; + if ($this->readByte(0x180175) !== 0x01) { + $equipment[0x38E] |= 0b10000000; + } + break; + case 'BowAndArrows': + $equipment[0x340] = 0x02; + $equipment[0x38E] |= 0b10000000; + if ($this->readByte(0x180175) === 0x01) { + $equipment[0x377] = 0x01; + } + break; + case 'SilverArrowUpgrade': + $equipment[0x38E] |= 0b01000000; + if ($this->readByte(0x180175) === 0x01) { + $equipment[0x377] = 0x01; + } + break; + case 'BowAndSilverArrows': + $equipment[0x340] = 0x04; + $equipment[0x38E] |= 0b01000000; + if ($this->readByte(0x180175) === 0x01) { + $equipment[0x377] = 0x01; + } else { + $equipment[0x38E] |= 0b10000000; + } + break; + case 'Progressivebow': + min($equipment[0x340] + 2, 4); + if ($this->readByte(0x180175) === 0x01) { + $equipment[0x377] = 0x01; + } + // @todo figure out 0x38E + break; + case 'Boomerang': + $equipment[0x341] = 0x01; + $equipment[0x38C] |= 0b10000000; + break; + case 'RedBoomerang': + $equipment[0x341] = 0x02; + $equipment[0x38C] |= 0b01000000; + break; + case 'Mushroom': + $equipment[0x344] = 0x01; + $equipment[0x38C] |= 0b00101000; + break; + case 'Powder': + $equipment[0x344] = 0x02; + $equipment[0x38C] |= 0b00010000; + break; + case 'Bombos': + $equipment[0x347] = 0x01; + break; + case 'Ether': + $equipment[0x348] = 0x01; + break; + case 'Quake': + $equipment[0x349] = 0x01; + break; + case 'Lamp': + $equipment[0x34A] = 0x01; + break; + case 'Shovel': + $equipment[0x34C] = 0x01; + $equipment[0x38C] |= 0b00000100; + break; + case 'OcarinaInactive': + $equipment[0x34C] = 0x02; + $equipment[0x38C] |= 0b00000010; + break; + case 'OcarinaActive': + $equipment[0x34C] = 0x03; + $equipment[0x38C] |= 0b00000001; + break; + case 'CaneOfSomaria': + $equipment[0x350] = 0x01; + break; + case 'Bottle': + if ($equipment[0x34F] < 4) { + $equipment[0x35C + $equipment[0x34F]] = 0x02; + $equipment[0x34F] += 1; + } + break; + case 'BottleWithRedPotion': + if ($equipment[0x34F] < 4) { + $equipment[0x35C + $equipment[0x34F]] = 0x03; + $equipment[0x34F] += 1; + } + break; + case 'BottleWithGreenPotion': + if ($equipment[0x34F] < 4) { + $equipment[0x35C + $equipment[0x34F]] = 0x04; + $equipment[0x34F] += 1; + } + break; + case 'BottleWithBluePotion': + if ($equipment[0x34F] < 4) { + $equipment[0x35C + $equipment[0x34F]] = 0x05; + $equipment[0x34F] += 1; + } + break; + case 'BottleWithBee': + if ($equipment[0x34F] < 4) { + $equipment[0x35C + $equipment[0x34F]] = 0x07; + $equipment[0x34F] += 1; + } + break; + case 'BottleWithFairy': + if ($equipment[0x34F] < 4) { + $equipment[0x35C + $equipment[0x34F]] = 0x06; + $equipment[0x34F] += 1; + } + break; + case 'BottleWithGoldBee': + if ($equipment[0x34F] < 4) { + $equipment[0x35C + $equipment[0x34F]] = 0x08; + $equipment[0x34F] += 1; + } + break; + case 'CaneOfByrna': + $equipment[0x351] = 0x01; + break; + case 'Cape': + $equipment[0x352] = 0x01; + break; + case 'MagicMirror': + $equipment[0x353] = 0x02; + break; + case 'PowerGlove': + $equipment[0x354] = 0x01; + break; + case 'TitansMitt': + $equipment[0x354] = 0x02; + break; + case 'BookOfMudora': + $equipment[0x34E] = 0x01; + break; + case 'Flippers': + $equipment[0x356] = 0x01; + $equipment[0x379] |= 0b00000010; + break; + case 'MoonPearl': + $equipment[0x357] = 0x01; + break; + case 'BugCatchingNet': + $equipment[0x34D] = 0x01; + break; + case 'BlueMail': + $equipment[0x35B] = 0x01; + break; + case 'RedMail': + $equipment[0x35B] = 0x02; + break; + case 'Bomb': + $equipment[0x343] = min($equipment[0x343] + 1, 99); + break; + case 'ThreeBombs': + $equipment[0x343] = min($equipment[0x343] + 3, 99); + break; + case 'TenBombs': + $equipment[0x343] = min($equipment[0x343] + 10, 99); + break; + case 'OneRupee': + $starting_rupees += 1; + break; + case 'FiveRupees': + $starting_rupees += 5; + break; + case 'TwentyRupees': + case 'TwentyRupees2': + $starting_rupees += 20; + break; + case 'FiftyRupees': + $starting_rupees += 50; + break; + case 'OneHundredRupees': + $starting_rupees += 100; + break; + case 'PendantOfCourage': + $equipment[0x374] |= 0b00000100; + break; + case 'PendantOfWisdom': + $equipment[0x374] |= 0b00000001; + break; + case 'PendantOfPower': + $equipment[0x374] |= 0b00000010; + break; + case 'HeartContainerNoAnimation': + case 'BossHeartContainer': + case 'HeartContainer': + $equipment[0x36C] = min($equipment[0x36C] + 0x08, 0xA0); + $equipment[0x36D] = min($equipment[0x36D] + 0x08, 0xA0); + break; + case 'PieceOfHeart': + $equipment[0x36B] += 1; + if ($equipment[0x36B] >= 4) { + $equipment[0x36C] = min($equipment[0x36C] + (0x08 * floor($equipment[0x36B] / 4)), 0xA0); + $equipment[0x36B] %= 4; + } + break; + case 'Heart': + $equipment[0x36D] = min($equipment[0x36D] + 0x08, 0xA0); + break; + case 'Arrow': + $equipment[0x377] = min($equipment[0x377] + 1, 99); + break; + case 'TenArrows': + $equipment[0x377] = min($equipment[0x377] + 10, 99); + break; + case 'SmallMagic': + $equipment[0x36E] = min($equipment[0x36E] + 0x10, 0x80); + break; + case 'ThreeHundredRupees': + $starting_rupees += 300; + break; + case 'PegasusBoots': + $equipment[0x355] = 0x01; + $equipment[0x379] |= 0b00000100; + break; + case 'BombUpgrade5': + $starting_bomb_capacity += 5; + break; + case 'BombUpgrade10': + $starting_bomb_capacity += 10; + break; + case 'ArrowUpgrade5': + $starting_arrow_capacity += 5; + break; + case 'ArrowUpgrade10': + $starting_arrow_capacity += 10; + break; + case 'HalfMagic': + $equipment[0x37B] = 0x01; + break; + case 'QuarterMagic': + $equipment[0x37B] = 0x02; + break; + case 'ProgressiveSword': + $equipment[0x359] = min($equipment[0x359] + 1, 4); + break; + case 'ProgressiveShield': + $equipment[0x35A] = min($equipment[0x35A] + 1, 3); + break; + case 'ProgressiveArmor': + $equipment[0x35B] = min($equipment[0x35B] + 1, 2); + break; + case 'ProgressiveGlove': + $equipment[0x354] = min($equipment[0x354] + 1, 2); + break; + case 'MapLW': + $equipment[0x368] |= 0b00000001; + break; + case 'MapDW': + $equipment[0x368] |= 0b00000010; + break; + case 'MapA2': + $equipment[0x368] |= 0b00000100; + break; + case 'MapD7': + $equipment[0x368] |= 0b00001000; + break; + case 'MapD4': + $equipment[0x368] |= 0b00010000; + break; + case 'MapP3': + $equipment[0x368] |= 0b00100000; + break; + case 'MapD5': + $equipment[0x368] |= 0b01000000; + break; + case 'MapD3': + $equipment[0x368] |= 0b10000000; + break; + case 'MapD6': + $equipment[0x369] |= 0b00000001; + break; + case 'MapD1': + $equipment[0x369] |= 0b00000010; + break; + case 'MapD2': + $equipment[0x369] |= 0b00000100; + break; + case 'MapA1': + $equipment[0x369] |= 0b00001000; + break; + case 'MapP2': + $equipment[0x369] |= 0b00010000; + break; + case 'MapP1': + $equipment[0x369] |= 0b00100000; + break; + case 'MapH1': + $equipment[0x369] |= 0b01000000; + break; + case 'MapH2': + $equipment[0x369] |= 0b10000000; + break; + case 'CompassA2': + $equipment[0x364] |= 0b00000100; + break; + case 'CompassD7': + $equipment[0x364] |= 0b00001000; + break; + case 'CompassD4': + $equipment[0x364] |= 0b00010000; + break; + case 'CompassP3': + $equipment[0x364] |= 0b00100000; + break; + case 'CompassD5': + $equipment[0x364] |= 0b01000000; + break; + case 'CompassD3': + $equipment[0x364] |= 0b10000000; + break; + case 'CompassD6': + $equipment[0x365] |= 0b00000001; + break; + case 'CompassD1': + $equipment[0x365] |= 0b00000010; + break; + case 'CompassD2': + $equipment[0x365] |= 0b00000100; + break; + case 'CompassA1': + $equipment[0x365] |= 0b00001000; + break; + case 'CompassP2': + $equipment[0x365] |= 0b00010000; + break; + case 'CompassP1': + $equipment[0x365] |= 0b00100000; + break; + case 'CompassH1': + $equipment[0x365] |= 0b01000000; + break; + case 'CompassH2': + $equipment[0x365] |= 0b10000000; + break; + case 'BigKeyA2': + $equipment[0x366] |= 0b00000100; + break; + case 'BigKeyD7': + $equipment[0x366] |= 0b00001000; + break; + case 'BigKeyD4': + $equipment[0x366] |= 0b00010000; + break; + case 'BigKeyP3': + $equipment[0x366] |= 0b00100000; + break; + case 'BigKeyD5': + $equipment[0x366] |= 0b01000000; + break; + case 'BigKeyD3': + $equipment[0x366] |= 0b10000000; + break; + case 'BigKeyD6': + $equipment[0x367] |= 0b00000001; + break; + case 'BigKeyD1': + $equipment[0x367] |= 0b00000010; + break; + case 'BigKeyD2': + $equipment[0x367] |= 0b00000100; + break; + case 'BigKeyA1': + $equipment[0x367] |= 0b00001000; + break; + case 'BigKeyP2': + $equipment[0x367] |= 0b00010000; + break; + case 'BigKeyP1': + $equipment[0x367] |= 0b00100000; + break; + case 'BigKeyH1': + $equipment[0x367] |= 0b01000000; + break; + case 'BigKeyH2': + $equipment[0x367] |= 0b10000000; + break; + case 'KeyH2': + $equipment[0x37C] += 1; + break; + case 'KeyH1': + $equipment[0x37D] += 1; + break; + case 'KeyP1': + $equipment[0x37E] += 1; + break; + case 'KeyP2': + $equipment[0x37F] += 1; + break; + case 'KeyA1': + $equipment[0x380] += 1; + break; + case 'KeyD2': + $equipment[0x381] += 1; + break; + case 'KeyD1': + $equipment[0x382] += 1; + break; + case 'KeyD6': + $equipment[0x383] += 1; + break; + case 'KeyD3': + $equipment[0x384] += 1; + break; + case 'KeyD5': + $equipment[0x385] += 1; + break; + case 'KeyP3': + $equipment[0x386] += 1; + break; + case 'KeyD4': + $equipment[0x387] += 1; + break; + case 'KeyD7': + $equipment[0x388] += 1; + break; + case 'KeyA2': + $equipment[0x389] += 1; + break; + case 'Crystal1': + $equipment[0x37A] |= 0b00000010; + break; + case 'Crystal2': + $equipment[0x37A] |= 0b00010000; + break; + case 'Crystal3': + $equipment[0x37A] |= 0b01000000; + break; + case 'Crystal4': + $equipment[0x37A] |= 0b00100000; + break; + case 'Crystal5': + $equipment[0x37A] |= 0b00000100; + break; + case 'Crystal6': + $equipment[0x37A] |= 0b00000001; + break; + case 'Crystal7': + $equipment[0x37A] |= 0b00001000; + break; + } + } + + $equipment[0x362] = $equipment[0x360] = $starting_rupees & 0xFF; + $equipment[0x363] = $equipment[0x361] = $starting_rupees >> 8; + + $this->write(0x183000, pack('C*', ...$equipment)); + // For file select screen + $this->write(0x271A6, pack('C*', ...array_slice($equipment, 0, 60))); + $this->setMaxArrows($starting_arrow_capacity); + $this->setMaxBombs($starting_bomb_capacity); + + // not swordless mode and setting a sword + if ($this->readByte(0x180043) !== 0xFF && $equipment[0x359]) { + // write starting sword + $this->write(0x180043, pack('C*', $equipment[0x359])); + } + + return $this; + } + + /** + * Set the Low Health Beep Speed + * + * @param string $setting name (0x00: off, 0x20: normal, 0x40: half, 0x80: quarter) + * + * @return $this + */ + public function setHeartBeepSpeed(string $setting): self + { + switch ($setting) { + case 'off': + $byte = 0x00; + break; + case 'half': + $byte = 0x40; + break; + case 'quarter': + $byte = 0x80; + break; + case 'double': + $byte = 0x10; + break; + case 'normal': + default: + $byte = 0x20; + } + + $this->write(0x180033, pack('C', $byte)); + + return $this; + } + + /** + * Set the Rupoor value to take rupees + * + * @param int $value + * + * @return $this + */ + public function setRupoorValue(int $value = 10): self + { + $this->write(0x180036, pack('v*', $value)); + + return $this; + } + + /** + * Set Cane of Byrna Cave spike floor damage + * + * @param int $dmg_value (0x08: 1 Heart, 0x02: 1/4 Heart) + * + * @return $this + */ + public function setByrnaCaveSpikeDamage(int $dmg_value = 0x08): self + { + $this->write(0x180168, pack('C*', $dmg_value)); + + return $this; + } + + /** + * Set Cane of Byrna Cave and Misery Mire spike room Byrna usage + * + * @param int $normal normal magic usage + * @param int $half half magic usage + * @param int $quarter quarter magic usage + * + * @return $this + */ + public function setCaneOfByrnaSpikeCaveUsage(int $normal = 0x04, int $half = 0x02, int $quarter = 0x01): self + { + $this->write(0x18016B, pack('C*', $normal, $half, $quarter)); + + return $this; + } + + /** + * Enable Byrna's ability to make you Invulnerable + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setCaneOfByrnaInvulnerability(bool $enable = true): self + { + $this->write(0x18004F, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Set Cane of Byrna Cave and Misery Mire spike room Cape usage + * + * @param int $normal normal magic usage + * @param int $half half magic usage + * @param int $quarter quarter magic usage + * + * @return $this + */ + public function setCapeSpikeCaveUsage(int $normal = 0x04, int $half = 0x08, int $quarter = 0x10): self + { + $this->write(0x18016E, pack('C*', $normal, $half, $quarter)); + + return $this; + } + + /** + * Set mode for HUD clock + * + * @param string $mode off|stopwatch|countdown-stop|countdown-continue + * @param bool $restart wether to restart the timer + * + * @return $this; + */ + public function setClockMode(string $mode = 'off', bool $restart = false): self + { + $compass_override = true; + switch ($mode) { + case 'stopwatch': + $bytes = [0x02, 0x01]; + break; + case 'countdown-ohko': + $bytes = [0x01, 0x02]; + $restart = true; + break; + case 'countdown-continue': + $bytes = [0x01, 0x01]; + break; + case 'countdown-stop': + $bytes = [0x01, 0x00]; + break; + case 'countdown-end': + $bytes = [0x01, 0x03]; + $restart = false; + break; + case 'off': + default: + $bytes = [0x00, 0x00]; + $compass_override = false; + break; + } + + // @TODO: temporarly disable compass mode while this is enabled since they occupy the same region of the hud. + if ($compass_override) { + $this->setCompassMode('off'); + } + + $bytes = array_merge($bytes, [$restart ? 0x01 : 0x00]); + + $this->write(0x180190, pack('C*', ...$bytes)); + + return $this; + } + + /** + * Enable triforce-hunt turn in mode. + * + * @param bool $enable enable or disable turn in mode. + * + * @return void + */ + public function enableTriforceTurnIn(bool $enable = true): void + { + $this->write(0x180194, pack('C', $enable ? 0x01 : 0x00)); + } + + /** + * Set starting time for HUD clock. + * + * @param int $seconds time in seconds + * + * @return $this; + */ + public function setStartingTime(int $seconds = 0): self + { + $this->write(0x18020C, pack('l*', $seconds * 60)); + + return $this; + } + + /** + * Set time adjustment for collecting Red Clock Item + * + * @param int $seconds time in seconds + * + * @return $this; + */ + public function setRedClock(int $seconds = 0): self + { + $this->write(0x180200, pack('l*', $seconds * 60)); + + return $this; + } + + /** + * Set time adjustment for collecting Blue Clock Item + * + * @param int $seconds time in seconds + * + * @return $this; + */ + public function setBlueClock(int $seconds = 0): self + { + $this->write(0x180204, pack('l*', $seconds * 60)); + + return $this; + } + + /** + * Set time adjustment for collecting Green Clock Item + * + * @param int $seconds time in seconds + * + * @return $this; + */ + public function setGreenClock(int $seconds = 0): self + { + $this->write(0x180208, pack('l*', $seconds * 60)); + + return $this; + } + + /** + * Set the starting Max Arrows + * + * @param int $max + * + * @return $this + */ + public function setMaxArrows(int $max = 30): self + { + $this->write(0x180035, pack('C', $max)); + + return $this; + } + + /** + * Set the Digging Game Rng + * + * @param int $digs + * + * @return $this + */ + public function setDiggingGameRng(int $digs = 15): self + { + $this->write(0x180020, pack('C', $digs)); + $this->write(0xEFD95, pack('C', $digs)); + + return $this; + } + + /** + * Set the starting Max Bombs + * + * @param int $max + * + * @return $this + */ + public function setMaxBombs(int $max = 10): self + { + $this->write(0x180034, pack('C', $max)); + + return $this; + } + + /** + * Set values to fill for Capacity Upgrades + * currently only 4 things: Bomb5, Bomb10, Arrow5, Arrow10 + * + * @param array $fills array of values to fill in + * + * @return $this + */ + public function setCapacityUpgradeFills(array $fills): self + { + $this->write(0x180080, pack('C*', ...array_slice($fills, 0, 4))); + + return $this; + } + + /** + * Set values to fill for Health/Magic fills from Bottles + * currently only 2 things: Health, Magic + * + * @param array $fills array of values to fill in [health (0xA0 default), magic (0x80 default)] + * + * @return $this + */ + public function setBottleFills(array $fills): self + { + $this->write(0x180084, pack('C*', ...array_slice($fills, 0, 2))); + + return $this; + } + + /** + * Set the number of goal items to collect + * + * @param int $goal + * + * @return $this + */ + public function setGoalRequiredCount(int $goal = 0): self + { + $this->write(0x180167, pack('C', $goal)); + + return $this; + } + + /** + * Set the goal item icon + * + * @param string $goal_icon + * + * @return $this + */ + public function setGoalIcon(string $goal_icon = 'triforce'): self + { + switch ($goal_icon) { + case 'triforce': + $byte = pack('S*', 0x280E); + break; + case 'star': + default: + $byte = pack('S*', 0x280D); + break; + } + $this->write(0x180165, $byte); + + return $this; + } + + /** + * Set Progressive Sword limit and item after limit is reached + * + * @param int $limit max number to receive + * @param int $item item byte to collect once limit is collected + * + * @return $this + */ + public function setLimitProgressiveSword(int $limit = 4, int $item = 0x36): self + { + $this->write(0x180090, pack('C*', $limit, $item)); + + return $this; + } + + /** + * Set Progressive Shield limit and item after limit is reached + * + * @param int $limit max number to receive + * @param int $item item byte to collect once limit is collected + * + * @return $this + */ + public function setLimitProgressiveShield(int $limit = 3, int $item = 0x36): self + { + $this->write(0x180092, pack('C*', $limit, $item)); + + return $this; + } + + /** + * Set Progressive Armor limit and item after limit is reached + * + * @param int $limit max number to receive + * @param int $item item byte to collect once limit is collected + * + * @return $this + */ + public function setLimitProgressiveArmor(int $limit = 2, int $item = 0x36): self + { + $this->write(0x180094, pack('C*', $limit, $item)); + + return $this; + } + + /** + * Set Bottle limit and item after limit is reached + * + * @param int $limit max number to receive + * @param int $item item byte to collect once limit is collected + * + * @return $this + */ + public function setLimitBottle(int $limit = 4, int $item = 0x36): self + { + $this->write(0x180096, pack('C*', $limit, $item)); + + return $this; + } + + /** + * Set Progressive Bow limit and item after limit is reached + * + * @param int $limit max number to receive + * @param int $item item byte to collect once limit is collected + * + * @return $this + */ + public function setLimitProgressiveBow(int $limit = 2, int $item = 0x36): self + { + $this->write(0x180098, pack('C*', $limit, $item)); + + return $this; + } + + /** + * Set Ganon to Invincible. 'dungeons' will require all dungeon bosses are dead to be able to damage Ganon. + * + * @param string $setting + * + * @return $this + */ + public function setGanonInvincible(string $setting = 'no'): self + { + switch ($setting) { + case 'crystals': + $byte = pack('C*', 0x03); + break; + case 'dungeons': + $byte = pack('C*', 0x02); + break; + case 'yes': + $byte = pack('C*', 0x01); + break; + case 'custom': + $byte = pack('C', 0x04); + break; + case 'no': + default: + $byte = pack('C*', 0x00); + break; + } + $this->write(0x18003E, $byte); + + return $this; + } + + /** + * Set hearts color for low vision people + * + * @param string $color color to have HUD hearts + * + * @return $this + */ + public function setHeartColors(string $color): self + { + switch ($color) { + case 'blue': + $byte = 0x2C; + $file_byte = 0x0D; + break; + case 'green': + $byte = 0x3C; + $file_byte = 0x19; + break; + case 'yellow': + $byte = 0x28; + $file_byte = 0x09; + break; + case 'red': + default: + $byte = 0x24; + $file_byte = 0x05; + } + $this->write(0x6FA1E, pack('C*', $byte)); + $this->write(0x6FA20, pack('C*', $byte)); + $this->write(0x6FA22, pack('C*', $byte)); + $this->write(0x6FA24, pack('C*', $byte)); + $this->write(0x6FA26, pack('C*', $byte)); + $this->write(0x6FA28, pack('C*', $byte)); + $this->write(0x6FA2A, pack('C*', $byte)); + $this->write(0x6FA2C, pack('C*', $byte)); + $this->write(0x6FA2E, pack('C*', $byte)); + $this->write(0x6FA30, pack('C*', $byte)); + + $this->write(0x65561, pack('C*', $file_byte)); + + return $this; + } + + /** + * Set the specified text to a custom value + * + * @param string $key which text to set + * @param string $string text to display + * + * @return $this + */ + public function setText(string $key, string $string, ...$flags): self + { + $this->text->setString($key, $string, ...$flags); + + return $this; + } + + /** + * Commit the text table to rom + * + * @return $this + */ + public function writeText(): self + { + $this->write(0xE0000, pack('C*', ...$this->text->getByteArray())); + return $this; + } + + /** + * Set the specified credits line to a custom value + * + * @param string $key which credit to set + * @param string $string text to display + * + * @return $this + */ + public function setCredit(string $key, string $string, ...$flags): self + { + $this->credits->updateCreditLine($key, 0, $string); + + return $this; + } + + /** + * Write the credits sequnce + * + * @return $this + */ + public function writeCredits(): self + { + $data = $this->credits->getBinaryData(); + + $this->write(0x181500, pack('C*', ...$data['data'])); + $this->write(0x76CC0, pack('S*', ...$data['pointers'])); + + return $this; + } + + /** + * Set Menu Speed + * + * @param string $menu_speed speed at which the menu enters the screen + * + * @return $this + */ + public function setMenuSpeed($menu_speed = 'normal'): self + { + $fast = false; + switch ($menu_speed) { + case 'instant': + $speed = pack('C*', 0xE8); + $fast = true; + break; + case 'fast': + $speed = pack('C*', 0x10); + break; + case 'normal': + default: + $speed = pack('C*', 0x08); + break; + case 'slow': + $speed = pack('C*', 0x04); + break; + } + $this->write(0x180048, $speed); + $this->write(0x6DD9A, pack('C*', $fast ? 0x20 : 0x11)); + $this->write(0x6DF2A, pack('C*', $fast ? 0x20 : 0x12)); + $this->write(0x6E0E9, pack('C*', $fast ? 0x20 : 0x12)); + + return $this; + } + + /** + * Enable/Disable the Quickswap function + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setQuickSwap($enable = false): self + { + $this->write(0x18004B, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable the Smithy Full Travel function + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setSmithyFreeTravel($enable = false): self + { + $this->write(0x18004C, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Set Programmable 1 item. + * + * @return $this + */ + public function setProgrammable1(string $custom): self + { + switch ($custom) { + case 'bees': + $this->write(0x1D8000, pack( + 'C*', + 0xA9, + 0x79, + 0x22, + 0x5D, + 0xF6, + 0x1D, + 0x30, + 0x14, + 0xA5, + 0x22, + 0x99, + 0x10, + 0x0D, + 0xA5, + 0x23, + 0x99, + 0x30, + 0x0D, + 0xA5, + 0x20, + 0x99, + 0x00, + 0x0D, + 0xA5, + 0x21, + 0x99, + 0x20, + 0x0D, + 0x6B + )); + $this->write(0x180061, pack('C*', 0x00, 0x80, 0x3B)); + + break; + } + + return $this; + } + + /** + * Set the Seed Type + * + * @param string $setting name + * + * @return $this + */ + public function setRandomizerSeedType(string $setting): self + { + switch ($setting) { + case 'OverworldGlitches': + $byte = 0x02; + break; + case 'MajorGlitches': + $byte = 0x01; + break; + case 'off': + $byte = 0xFF; + break; + case 'NoGlitches': + default: + $byte = 0x00; + } + + $this->write(0x180210, pack('C', $byte)); + + return $this; + } + + /** + * Set the Game Type + * + * @param string $setting name + * + * @return $this + */ + public function setGameType(string $setting): self + { + switch ($setting) { + case 'enemizer': + $byte = 0b00000101; + + break; + case 'entrance': + $byte = 0b00000110; + + break; + case 'room': + $byte = 0b00001000; + + break; + case 'item': + default: + $byte = 0b00000100; + } + + $this->write(0x180211, pack('C', $byte)); + + return $this; + } + + /** + * Set the Plandomizer Author + * + * @param string $name name of author + * + * @return $this + */ + public function setPlandomizerAuthor(string $name): self + { + $this->write(0x180220, substr($name, 0, 31)); + + return $this; + } + + /** + * Set the Tournament Type + * + * @param string $setting name + * + * @return $this + */ + public function setTournamentType(string $setting): self + { + switch ($setting) { + case 'standard': + $bytes = [0x01, 0x00]; + + break; + case 'none': + default: + $bytes = [0x00, 0x01]; + } + + $this->write(0x180213, pack('C*', ...$bytes)); + + return $this; + } + + /** + * Set the Hash on the Start Screen + * + * @param array $bytes 5 bytes that will appear on the start screen for verification + * + * @return $this + */ + public function setStartScreenHash(array $bytes): self + { + $this->write(0x180215, pack('C*', ...array_pad(array_slice($bytes, 0, 5), 5, 0x00))); + + return $this; + } + + /** + * Removes Shield from Uncle by moving the tiles for shield to his head and replaces them with his head. + * + * @return $this + */ + public function removeUnclesShield(): self + { + $this->write(0x6D253, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); + $this->write(0x6D25B, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); + $this->write(0x6D283, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); + $this->write(0x6D28B, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x00, 0x0E)); + $this->write(0x6D2CB, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x02, 0x0E)); + $this->write(0x6D2FB, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x02, 0x0E)); + $this->write(0x6D313, pack('C*', 0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E)); + + return $this; + } + + /** + * Removes Sword from Uncle by moving the tiles for sword to his head and replaces them with his head. + * + * @return $this + */ + public function removeUnclesSword(): self + { + $this->write(0x6D263, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); + $this->write(0x6D26B, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); + $this->write(0x6D293, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E)); + $this->write(0x6D29B, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x00, 0x0E)); + $this->write(0x6D2B3, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x02, 0x0E)); + $this->write(0x6D2BB, pack('C*', 0x00, 0x00, 0xf6, 0xff, 0x02, 0x0E)); + $this->write(0x6D2E3, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x02, 0x0E)); + $this->write(0x6D2EB, pack('C*', 0x00, 0x00, 0xf7, 0xff, 0x02, 0x0E)); + $this->write(0x6D31B, pack('C*', 0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E)); + $this->write(0x6D323, pack('C*', 0x00, 0x00, 0xe4, 0xff, 0x08, 0x0E)); + + return $this; + } + + /** + * Set the sprite that spawns when a stunned Enemy is killed + * + * @param int $sprite id of sprite to drop (0xD9 green rupee) + * + * @return $this + */ + public function setStunnedSpritePrize(int $sprite = 0xD9): self + { + $this->write(0x37993, pack('C*', $sprite)); + + return $this; + } + + /** + * Set the sprite that spawns when powdered sprite that usually spawns a faerie is powdered. + * + * @param int $sprite id of sprite to drop + * + * @return $this + */ + public function setPowderedSpriteFairyPrize(int $sprite = 0xE3): self + { + $this->write(0x36DD0, pack('C*', $sprite)); + + return $this; + } + + /** + * Set pull tree prizes + * + * @param int $low id of sprite to drop (0xD9 green rupee) + * @param int $mid id of sprite to drop (0xDA blue rupee) + * @param int $high id of sprite to drop (0xDB red rupee) + * + * @return $this + */ + public function setPullTreePrizes(int $low = 0xD9, int $mid = 0xDA, int $high = 0xDB): self + { + $this->write(0xEFBD4, pack('C*', $low, $mid, $high)); + + return $this; + } + + + /** + * Set rupee crab, first and final prizes + * + * @param int $main id of sprite to drop (0xD9 green rupee) + * @param int $final id of sprite to drop (0xDB red rupee) + * + * @return $this + */ + public function setRupeeCrabPrizes(int $main = 0xD9, int $final = 0xDB): self + { + $this->write(0x329C8, pack('C*', $main)); + $this->write(0x329C4, pack('C*', $final)); + + return $this; + } + + /** + * Set fish save prize + * + * @param int $prize id of sprite to drop (0xDB red rupee) + * + * @return $this + */ + public function setFishSavePrize(int $prize = 0xDB): self + { + $this->write(0xE82CC, pack('C*', $prize)); + + return $this; + } + + /** + * Set Overworld bonk prizes + * + * @param array $prizes ids of sprites to drop (0x03 empty) + * + * @return $this + */ + public function setOverworldBonkPrizes(array $prizes = []): self + { + $addresses = [ + 0x4CF6C, 0x4CFBA, 0x4CFE0, 0x4CFFB, 0x4D018, 0x4D01B, 0x4D028, 0x4D03C, + 0x4D059, 0x4D07A, 0x4D09E, 0x4D0A8, 0x4D0AB, 0x4D0AE, 0x4D0BE, 0x4D0DD, + 0x4D16A, 0x4D1E5, 0x4D1EE, 0x4D20B, 0x4CBBF, 0x4CBBF, 0x4CC17, 0x4CC1A, + 0x4CC4A, 0x4CC4D, 0x4CC53, 0x4CC69, 0x4CC6F, 0x4CC7C, 0x4CCEF, 0x4CD51, + 0x4CDC0, 0x4CDC3, 0x4CDC6, 0x4CE37, 0x4D2DE, 0x4D32F, 0x4D355, 0x4D367, + 0x4D384, 0x4D387, 0x4D397, 0x4D39E, 0x4D3AB, 0x4D3AE, 0x4D3D1, 0x4D3D7, + 0x4D3F8, 0x4D416, 0x4D420, 0x4D423, 0x4D42D, 0x4D449, 0x4D48C, 0x4D4D9, + 0x4D4DC, 0x4D4E3, 0x4D504, 0x4D507, 0x4D55E, 0x4D56A, + ]; + + foreach ($addresses as $address) { + $item = array_pop($prizes); + $this->write($address, pack('C*', $item ?? 0x03)); + } + + return $this; + } + + /** + * Set Overworld dig prizes. + * + * @todo this should really truncate the data to not overwrite past the table! + * + * @param array $prizes ids of sprites to dig up + * + * @return $this + */ + public function setOverworldDigPrizes(array $prizes = []): self + { + $this->write(0x180100, pack('C*', ...$prizes)); + + return $this; + } + + /** + * Adjust some settings for hard mode + * + * @param int $level how hard to make it, higher should be harder + * + * @throws \Exception if an unknown hard mode is selected + * + * @return $this + */ + public function setHardMode(int $level = 0): self + { + $this->setCaneOfByrnaSpikeCaveUsage(); + $this->setCapeSpikeCaveUsage(); + $this->setByrnaCaveSpikeDamage(0x08); + // Bryna magic amount used per "cycle" + $this->write(0x45C42, pack('C*', 0x04, 0x02, 0x01)); + + switch ($level) { + case -1: + case 0: + // Cape magic + $this->write(0x3ADA7, pack('C*', 0x04, 0x08, 0x10)); + $this->setCaneOfByrnaInvulnerability(true); + $this->setPowderedSpriteFairyPrize(0xE3); + $this->setBottleFills([0xA0, 0x80]); + $this->setCatchableFairies(true); + $this->setCatchableBees(true); + $this->setStunItems(0x03); + $this->setSilversOnlyAtGanon(false); + + break; + case 1: + $this->write(0x3ADA7, pack('C*', 0x02, 0x04, 0x08)); + $this->setCaneOfByrnaInvulnerability(false); + $this->setPowderedSpriteFairyPrize(0xD8); // 1 heart + $this->setBottleFills([0x38, 0x40]); // 7 hearts, 1/2 magic refills + $this->setCatchableFairies(false); + $this->setCatchableBees(true); + $this->setStunItems(0x02); + $this->setSilversOnlyAtGanon(true); + + break; + case 2: + $this->write(0x3ADA7, pack('C*', 0x02, 0x04, 0x08)); + $this->setCaneOfByrnaInvulnerability(false); + $this->setPowderedSpriteFairyPrize(0xD8); // 1 heart + $this->setBottleFills([0x20, 0x20]); // 4 heart, 1/4 magic refills + $this->setCatchableFairies(false); + $this->setCatchableBees(true); + $this->setStunItems(0x00); + $this->setSilversOnlyAtGanon(true); + + break; + case 3: + $this->write(0x3ADA7, pack('C*', 0x01, 0x02, 0x04)); + $this->setCaneOfByrnaInvulnerability(false); + $this->setPowderedSpriteFairyPrize(0x79); // Bees + $this->setBottleFills([0x00, 0x00]); // 0 hearts, 0 magic refills + $this->setCatchableFairies(false); + $this->setCatchableBees(true); + $this->setStunItems(0x00); + $this->setSilversOnlyAtGanon(true); + + break; + default: + throw new \Exception("Trying to set hard mode that doesn't exist"); + } + + return $this; + } + + /** + * Quick and dirty shop setting code. + * + * @param \ALttP\Support\ShopCollection $shops shops to write to rom + * + * @return $this + */ + public function setupCustomShops($shops): self + { + $shops = $shops->filter(function ($shop) { + return $shop->getActive(); + }); + + $shop_data = []; + $items_data = []; + $shop_id = 0x00; + $sram_offset = 0x00; + foreach ($shops as $shop) { + if ($shop_id == $shops->count() - 1) { + $shop_id = 0xFF; + } + $shop->writeExtraData($this); + // @TODO: make this clever and reuse when inv is the exact same. (except take any's) + $shop_data = array_merge($shop_data, [$shop_id], $shop->getBytes($sram_offset)); + $sram_offset += ($shop instanceof Shop\TakeAny) ? 1 : count($shop->getInventory()); + + if ($sram_offset > 36) { + throw new \Exception("Exceeded SRAM indexing for shops"); + } + + foreach ($shop->getInventory() as $item) { + $items_data = array_merge( + $items_data, + [$shop_id, $item['id']], + array_values(unpack('C*', pack('S', $item['price'] ?? 0))), + [$item['max'] ?? 0, $item['replace_id'] ?? 0xFF], + array_values(unpack('C*', pack('S', $item['replace_price'] ?? 0))) + ); + } + ++$shop_id; + } + $this->write(0x184800, pack('C*', ...$shop_data)); + + $items_data = array_merge($items_data, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]); + $this->write(0x184900, pack('C*', ...$items_data)); + + return $this; + } + + /** + * Set Rupee Arrow mode + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setRupeeArrow(bool $enable = false): self + { + $this->write(0x30052, pack('C*', $enable ? 0xDB : 0xE2)); // fish bottle merchant + $this->write(0x301FC, pack('C*', $enable ? 0xDA : 0xE1)); // replace Pot rupees + $this->write(0xECB4E, $enable ? pack('C*', 0xA9, 0x00, 0xEA, 0xEA) : pack('C*', 0xAF, 0x77, 0xF3, 0x7E)); // thief + $this->write(0xF0D96, $enable ? pack('C*', 0xA9, 0x00, 0xEA, 0xEA) : pack('C*', 0xAF, 0x77, 0xF3, 0x7E)); // pikit + $this->write(0x180175, pack('C*', $enable ? 0x01 : 0x00)); // enable mode + $this->write(0x180176, pack('S*', $enable ? 0x0A : 0x00)); // wood cost + $this->write(0x180178, pack('S*', $enable ? 0x32 : 0x00)); // silver cost + $this->write(0xEDA5, $enable ? pack('C*', 0x35, 0x41) : pack('C*', 0x43, 0x44)); // DW chest game + + return $this; + } + + /** + * Set whether Sahasrahla updates your map with Green Pendant when you talk to him + * + * @param int $reveals bitfield of what he reveals + * + * @return $this + */ + public function setMapRevealSahasrahla(int $reveals = 0x0000): self + { + $this->write(0x18017A, pack('S*', $reveals)); + + return $this; + } + + /** + * Set whether Bomb Shop dude updates your map with Red Cyrstals when you talk to him + * + * @param int $reveals bitfield of what he reveals + * + * @return $this + */ + public function setMapRevealBombShop(int $reveals = 0x0000): self + { + $this->write(0x18017C, pack('S*', $reveals)); + + return $this; + } + + /** + * Set it so trade fairies only trade bottles + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setRestrictFairyPonds(bool $enable = true): self + { + $this->write(0x18017E, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable Escape Assist + * + * @param int $flags assist -----mba m: Infinite Magic, b: Infinite Bombs, a: Infinite Arrows + * + * @return $this + */ + public function setEscapeAssist(int $flags = 0x00): self + { + $this->write(0x18004D, pack('C*', $flags)); + + return $this; + } + + /** + * Enable Escape Fills + * + * @param int $flags assist -----mba m: Magic refill, b: Bomb refill, a: Arrow refill + * @param int $rupees if rupee bow is enabled, this value is used for starting rupees + * + * @return $this + */ + public function setEscapeFills(int $flags = 0x00, int $rupees = 300): self + { + $this->write(0x18004E, pack('C*', $flags)); + $this->write(0x180183, pack('S*', $rupees)); + + return $this; + } + + /** + * Set Uncle Refills on respawn + * + * @param int $magic + * @param int $bombs + * @param int $arrows + * + * @return $this + */ + public function setUncleSpawnRefills(int $magic = 0x00, int $bombs = 0x00, int $arrows = 0x00): self + { + $this->write(0x180185, pack('C*', $magic, $bombs, $arrows)); + + return $this; + } + + /** + * Set Zelda Cell Refills on respawn + * + * @param int $magic + * @param int $bombs + * @param int $arrows + * + * @return $this + */ + public function setZeldaSpawnRefills(int $magic = 0x00, int $bombs = 0x00, int $arrows = 0x00): self + { + $this->write(0x180188, pack('C*', $magic, $bombs, $arrows)); + + return $this; + } + + /** + * Set Mantle Refills on respawn + * + * @param int $magic + * @param int $bombs + * @param int $arrows + * + * @return $this + */ + public function setMantleSpawnRefills(int $magic = 0x00, int $bombs = 0x00, int $arrows = 0x00): self + { + $this->write(0x18018B, pack('C*', $magic, $bombs, $arrows)); + + return $this; + } + + /** + * Set the prizes for the pick 3 chest games. + * + * @param array $prizes item id's of prizes should be length 32 + * + * @return $this + */ + public function setChancePrizes(array $prizes = null) + { + if (!$prizes) { + $prizes = [ + // high stakes game + 0x47, 0x34, 0x46, 0x34, 0x46, 0x46, 0x34, 0x47, + 0x46, 0x47, 0x34, 0x46, 0x47, 0x34, 0x46, 0x47, + // low stakes game + 0x34, 0x47, 0x41, 0x47, 0x41, 0x41, 0x47, 0x34, + 0x41, 0x34, 0x47, 0x41, 0x34, 0x47, 0x41, 0x34, + ]; + } + + $this->write(0xEED5, pack('C*', ...$prizes)); // 32 bytes + + return $this; + } + + /** + * Set Generic keys mode, if enabled all keys will share 1 pool. + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setGenericKeys(bool $enable = false): self + { + $this->write(0x180172, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Set Smithy Quick Item Give mode. I.E. just gives an item if you rescue him with no sword bogarting + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setSmithyQuickItemGive(bool $enable = true): self + { + $this->write(0x180029, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Set Pyramid Fountain to have 2 chests + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setPyramidFairyChests(bool $enable = true): self + { + $this->write(0x1FC16, $enable + ? pack('C*', 0xB1, 0xC6, 0xF9, 0xC9, 0xC6, 0xF9) + : pack('C*', 0xA8, 0xB8, 0x3D, 0xD0, 0xB8, 0x3D)); + + return $this; + } + + /** + * Enable Hammer activates tablets + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setHammerTablet(bool $enable = false): self + { + $this->write(0x180044, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable Hammer breaks Aghanim's barrier no matter what + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setHammerBarrier(bool $enable = false): self + { + $this->write(0x18005D, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable ability to bug net catch Fairy + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setCatchableFairies(bool $enable = true): self + { + $this->write(0x34FD6, pack('C*', $enable ? 0xF0 : 0x80)); + + return $this; + } + + + /** + * Enable which objects stun + * + * @param int $flags display ------hb h: hookshot, b: Boomerang + * + * @return $this + */ + public function setStunItems(int $flags = 0x03): self + { + $this->write(0x180180, pack('C*', $flags)); + + return $this; + } + + /** + * Enable silver arrows can only be used in Ganon's room + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setSilversOnlyAtGanon(bool $enable = false): self + { + $this->write(0x180181, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Set when silvers equip + * + * @param string $setting name + * + * @return $this + */ + public function setSilversEquip(string $setting): self + { + switch ($setting) { + case 'both': + $byte = 0x03; + break; + case 'ganon': + $byte = 0x02; + break; + case 'off': + $byte = 0x00; + break; + case 'collection': + default: + $byte = 0x01; + } + + $this->write(0x180182, pack('C*', $byte)); + + return $this; + } + + /** + * Enable/Disable ability to bug net catch Bee (also makes them attack you?) + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setCatchableBees(bool $enable = true): self + { + $this->write(0xF5D73, pack('C*', $enable ? 0xF0 : 0x80)); + $this->write(0xF5F10, pack('C*', $enable ? 0xF0 : 0x80)); + + return $this; + } + + /** + * Place 2 chests in Waterfall of Wishing Fairy. + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setWishingWellChests(bool $enable = false): self + { + // set item table to proper room + $this->write(0xE9AE, $enable ? pack('C*', 0x14, 0x01) : pack('C*', 0x05, 0x00)); + $this->write(0xE9CF, $enable ? pack('C*', 0x14, 0x01) : pack('C*', 0x3D, 0x01)); + + // room 276 remodel + $this->write(0x1F714, $enable + ? (base64_decode( + "4QAQrA0pmgFYmA8RsWH8TYEg2gIs4WH8voFhsWJU2gL9jYNE4WL9HoMxpckxpGkxwCJNpGkxxvlJxvkQmaBcmaILmGAN6MBV6MALk" . + "gBzmGD+aQCYo2H+a4H+q4WpyGH+roH/aQLYo2L/a4P/K4fJyGL/LoP+oQCqIWH+poH/IQLKIWL/JoO7I/rDI/q7K/rDK/q7U/rDU/" . + "qwoD2YE8CYUsCIAGCQAGDoAGDwAGCYysDYysDYE8DYUsD8vYX9HYf/////8P+ALmEOgQ7//w==" + ) ?: '') + : (base64_decode( + "4QAQrA0pmgFYmA8RsGH8TQEg0gL8vQUs4WH8voFhsGJU0gL9jQP9HQdE4WL9HoMxpckxpGkxwCJNpGkouD1QuD0QmaBcmaILmGAN4" . + "cBV4cALkgBzmGD+aQCYo2H+a4H+q4WpyGH+roH/aQLYo2L/a4P/K4fJyGL/LoP+oQCqIWH+poH/IQLKIWL/JoO7I/rDI/q7K/rDK/" . + "q7U/rDU/qwoD2YE8CYUsCIAGCQAGDoAGDwAGCYysDYysDYE8DYUsD/////8P+ALmEOgQ7//w==" + ) ?: '')); + + return $this; + } + + /** + * Remove 2 statues at hylia fairy + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setHyliaFairyShop(bool $enable = false): self + { + $this->write(0x01F810, $enable + ? pack('C*', 0x1A, 0x1E, 0x01, 0x1A, 0x1E, 0x01) + : pack('C*', 0xFC, 0x94, 0xE4, 0xFD, 0x34, 0xE4)); + + return $this; + } + + /** + * Enable/Disable Waterfall of Wishing Fairy's ability to upgrade items. + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setWishingWellUpgrade(bool $enable = false): self + { + $this->write(0x348DB, pack('C*', $enable ? 0x0C : 0x2A)); + $this->write(0x348EB, pack('C*', $enable ? 0x04 : 0x05)); + + return $this; + } + + public function setGameState(string $state = null) + { + $this->setOpenMode(false); + $this->setFixFakeWorld(false); + switch ($state) { + case 'open': + case 'retro': + return $this->setOpenMode(true); + case 'inverted': + return $this->setInvertedMode(true); + case 'standard': + default: + return $this; + } + } + + /** + * Set Game in Open Mode. (Post rain state with Escape undone) + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setOpenMode(bool $enable = true): self + { + $this->write(0x180032, pack('C*', $enable ? 0x01 : 0x00)); + $this->setSewersLampCone(!$enable); + $this->setLightWorldLampCone(false); + $this->setDarkWorldLampCone(false); + + return $this; + } + + /** + * Set Game in Inverted Mode. (Post rain state with Escape undone and in the Dark Wold with a whole slew of other crap) + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setInvertedMode(bool $enable = true): self + { + // this mode is based on open mode ;) + $this->setOpenMode($enable); + + $this->write(snes_to_pc(0x30804A), pack('C*', 0x01)); // ; main toggle + $this->write(snes_to_pc(0x0283E0), pack('C*', 0xF0)); // ; residual portal + $this->write(snes_to_pc(0x02B34D), pack('C*', 0xF0)); // ; residual portal + $this->write(snes_to_pc(0x06DB78), pack('C*', 0x8B)); // ; residual portal + $this->write(snes_to_pc(0x05AF79), pack('C*', 0xF0)); // ; vortex + $this->write(snes_to_pc(0x0DB3C5), pack('C*', 0xC6)); // ; vortex + $this->write(snes_to_pc(0x07A3F4), pack('C*', 0xF0)); // ; duck + $this->write(snes_to_pc(0x07A3F4), pack('C*', 0xF0)); // ; duck + $this->write(snes_to_pc(0x02E849), pack('S*', 0x0043, 0x0056, 0x0058, 0x006C, 0x006F, 0x0070, 0x007B, 0x007F, 0x001B)); // ; Dark World Flute Spots + $this->write(snes_to_pc(0x02E8D5), pack('S*', 0x07C8)); // ; nudge flute spot 3 out of gargoyle statue + $this->write(snes_to_pc(0x02E8F7), pack('S*', 0x01F8)); // ; nudge flute spot 3 out of gargoyle statue + $this->write(snes_to_pc(0x07A943), pack('C*', 0xF0)); // ; Dark to light world mirror + $this->write(snes_to_pc(0x07A96D), pack('C*', 0xD0)); // ; residual portal? + $this->write(snes_to_pc(0x08D40C), pack('C*', 0xD0)); // ; morph poof + $this->setFixFakeWorld($enable); // ; ER's Fix fake worlds fix. Currently needed for inverted + + $this->write(0x15B8C, pack('C', 0x6C)); // update link's house exit to be dark world (All the other exit table values can be reused) + $this->write(0xDBB73 + 0x00, pack('C', 0x53)); // entering links house door leads to bomb shop + $this->write(0xDBB73 + 0x52, pack('C', 0x01)); // entering bomb shop leads to links house + + // swap GT and AT entrances + $this->write(0xDBB73 + 0x23, pack('C', 0x37)); // entering AT Door Leads to GT + $this->write(0xDBB73 + 0x36, pack('C', 0x24)); // entering GT Door Leads to AT + $this->write(0x15AEE + 2 * 0x38, pack('S*', 0x00e0)); // exiting AT leads to GT + $this->write(0x15AEE + 2 * 0x25, pack('S*', 0x000c)); // exiting GT leads to AT + + // Bumper Cave (Bottom) => Old Man Cave (West) + $this->write(0xDBB73 + 0x15, pack('C', 0x06)); + $this->write(0x15AEE + 2 * 0x17, pack('S*', 0x00F0)); + + // Old Man Cave (West) => Bumper Cave (Bottom) + $this->write(0xDBB73 + 0x05, pack('C', 0x16)); + $this->write(0x15AEE + 2 * 0x07, pack('S*', 0x00FB)); + + // Death Mountain Return Cave (West) => Bumper Cave (Top) + $this->write(0xDBB73 + 0x2D, pack('C', 0x17)); + $this->write(0x15AEE + 2 * 0x2F, pack('S*', 0x00EB)); + + // Old Man Cave (East) => Death Mountain Return Cave (West) + $this->write(0xDBB73 + 0x06, pack('C', 0x2E)); + $this->write(0x15AEE + 2 * 0x08, pack('S*', 0x00e6)); + + // Bumper Cave (Top) => Dark Death Mountain Fairy + $this->write(0xDBB73 + 0x16, pack('C', 0x5E)); + + // fix trock doors for reverse entrances + $this->write(0xFED31, pack('C', 0x0E)); // preopen bombable exit + $this->write(0xFEE41, pack('C', 0x0E)); // preopen bombable exit + + // Dark Death Mountain Healer Fairy => Old Man Cave (East) + $this->write(0xDBB73 + 0x6F, pack('C', 0x07)); + $this->write(0x15AEE + 2 * 0x18, pack('S*', 0x00f1)); + $this->write(0x15B8C + 0x18, pack('C', 0x43)); + $this->write(0x15BDB + 2 * 0x18, pack('S*', 0x1400)); + $this->write(0x15C79 + 2 * 0x18, pack('S*', 0x0294)); + $this->write(0x15D17 + 2 * 0x18, pack('S*', 0x0600)); + $this->write(0x15DB5 + 2 * 0x18, pack('S*', 0x02e8)); + $this->write(0x15E53 + 2 * 0x18, pack('S*', 0x0678)); + $this->write(0x15EF1 + 2 * 0x18, pack('S*', 0x0303)); + $this->write(0x15F8F + 2 * 0x18, pack('S*', 0x0685)); + $this->write(0x1602D + 0x18, pack('C', 0x0a)); + $this->write(0x1607C + 0x18, pack('C', 0xf6)); + $this->write(0x160CB + 2 * 0x18, pack('S*', 0x0000)); + $this->write(0x16169 + 2 * 0x18, pack('S*', 0x0000)); + + // Pyramid Exit <= Houlihan + $this->write(0x15AEE + 2 * 0x3D, pack('S*', 0x0003)); + $this->write(0x15B8C + 0x3D, pack('C', 0x5b)); + $this->write(0x15BDB + 2 * 0x3D, pack('S*', 0x0b0e)); + $this->write(0x15C79 + 2 * 0x3D, pack('S*', 0x075a)); + $this->write(0x15D17 + 2 * 0x3D, pack('S*', 0x0674)); + $this->write(0x15DB5 + 2 * 0x3D, pack('S*', 0x07a8)); + $this->write(0x15E53 + 2 * 0x3D, pack('S*', 0x06e8)); + $this->write(0x15EF1 + 2 * 0x3D, pack('S*', 0x07c7)); + $this->write(0x15F8F + 2 * 0x3D, pack('S*', 0x06f3)); + $this->write(0x1602D + 0x3D, pack('C', 0x06)); + $this->write(0x1607C + 0x3D, pack('C', 0xfa)); + $this->write(0x160CB + 2 * 0x3D, pack('S*', 0x0000)); + $this->write(0x16169 + 2 * 0x3D, pack('S*', 0x0000)); + + // Change sanc spawn point to dark sanc + $this->write(snes_to_pc(0x02D8D4), pack('S*', 0x112)); + $this->write(snes_to_pc(0x02D8E8), pack('C*', 0x22, 0x22, 0x22, 0x23, 0x04, 0x04, 0x04, 0x05)); + $this->write(snes_to_pc(0x02D91A), pack('S*', 0x0400)); + $this->write(snes_to_pc(0x02D928), pack('S*', 0x222e)); + $this->write(snes_to_pc(0x02D936), pack('S*', 0x229a)); + $this->write(snes_to_pc(0x02D944), pack('S*', 0x0480)); + $this->write(snes_to_pc(0x02D952), pack('S*', 0x00a5)); + $this->write(snes_to_pc(0x02D960), pack('S*', 0x007F)); + $this->write(snes_to_pc(0x02D96D), pack('C', 0x14)); + $this->write(snes_to_pc(0x02D974), pack('C', 0x00)); + $this->write(snes_to_pc(0x02D97B), pack('C', 0xFF)); + $this->write(snes_to_pc(0x02D982), pack('C', 0x00)); + $this->write(snes_to_pc(0x02D989), pack('C', 0x02)); + $this->write(snes_to_pc(0x02D990), pack('C', 0x00)); + $this->write(snes_to_pc(0x02D998), pack('S*', 0x0000)); + $this->write(snes_to_pc(0x02D9A6), pack('S*', 0x005A)); + $this->write(snes_to_pc(0x02D9B3), pack('C', 0x12)); + + // Write dark sanc exit data to StartingAreaExitTable table + $this->write(0x180250, pack('S*', 0x0112) . pack('C', 0x53) + . pack('S*', 0x001e, 0x0400, 0x06e2, 0x0446, 0x0758, 0x046d, 0x075f) + . pack('C*', 0x00, 0x00, 0x00)); + + // Write to StartingAreaExitOffset table to indicate that dark sanc spawn uses first row in table + $this->write(0x180240, pack('C*', 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00)); + + $this->write(snes_to_pc(0x308350), pack('C*', 0x00, 0x00, 0x01)); // Death mountain cave should start on overworld + + // Change old man spawn point to End of old man cave + $this->write(snes_to_pc(0x02D8DE), pack('S*', 0x00F1)); + $this->write(snes_to_pc(0x02D910), pack('C*', 0x1F, 0x1E, 0x1F, 0x1F, 0x03, 0x02, 0x03, 0x03)); + $this->write(snes_to_pc(0x02D924), pack('S*', 0x0300)); + $this->write(snes_to_pc(0x02D932), pack('S*', 0x1F10)); + $this->write(snes_to_pc(0x02D940), pack('S*', 0x1FC0)); + $this->write(snes_to_pc(0x02D94E), pack('S*', 0x0378)); + $this->write(snes_to_pc(0x02D95C), pack('S*', 0x0187)); + $this->write(snes_to_pc(0x02D96A), pack('S*', 0x017F)); + $this->write(snes_to_pc(0x02D972), pack('C', 0x06)); + $this->write(snes_to_pc(0x02D979), pack('C', 0x00)); + $this->write(snes_to_pc(0x02D980), pack('C', 0xFF)); + $this->write(snes_to_pc(0x02D987), pack('C', 0x00)); + $this->write(snes_to_pc(0x02D98E), pack('C', 0x22)); + $this->write(snes_to_pc(0x02D995), pack('C', 0x12)); + $this->write(snes_to_pc(0x02D9A2), pack('S*', 0x0000)); + $this->write(snes_to_pc(0x02D9B0), pack('S*', 0x0007)); + $this->write(snes_to_pc(0x02D9B8), pack('C', 0x12)); + + // Write to StartingAreaOverworldDoor table to indicate the overworld door being used for + // the single entrance spawn point + $this->write(0x180247, pack('C*', 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00)); + + // aga tower exit/ pyramid spawn (now hyrule castle ledge spawn) + $this->write(0x15AEE + 2 * 0x06, pack('S', 0x0020)); + $this->write(0x15B8C + 0x06, pack('C', 0x1B)); + $this->write(0x15BDB + 2 * 0x06, pack('S', 0x00AE)); + $this->write(0x15C79 + 2 * 0x06, pack('S', 0x0610)); + $this->write(0x15D17 + 2 * 0x06, pack('S', 0x077E)); + $this->write(0x15DB5 + 2 * 0x06, pack('S', 0x0672)); + $this->write(0x15E53 + 2 * 0x06, pack('S', 0x07F8)); + $this->write(0x15EF1 + 2 * 0x06, pack('S', 0x067D)); + $this->write(0x15F8F + 2 * 0x06, pack('S', 0x0803)); + $this->write(0x1602D + 0x06, pack('C', 0x00)); + $this->write(0x1607C + 0x06, pack('C', 0xf2)); + $this->write(0x160CB + 2 * 0x06, pack('S', 0x0000)); + $this->write(0x16169 + 2 * 0x06, pack('S', 0x0000)); + + // move flute spot 9 (notice that the values of this match the 2nd, 3rd etc value of hyrule castle spawn) + $this->write(snes_to_pc(0x02E87B), pack('S', 0x00ae)); + $this->write(snes_to_pc(0x02E89D), pack('S', 0x0610)); + $this->write(snes_to_pc(0x02E8BF), pack('S', 0x077e)); + $this->write(snes_to_pc(0x02E8E1), pack('S', 0x0672)); + $this->write(snes_to_pc(0x02E903), pack('S', 0x07f8)); + $this->write(snes_to_pc(0x02E925), pack('S', 0x067d)); + $this->write(snes_to_pc(0x02E947), pack('S', 0x0803)); + $this->write(snes_to_pc(0x02E969), pack('S', 0x0000)); + $this->write(snes_to_pc(0x02E98B), pack('S', 0xFFF2)); + + $this->write(snes_to_pc(0x1AF696), pack('C', 0xF0)); // Bat X position (sprite_retreat_bat.asm:130) + $this->write(snes_to_pc(0x1AF6B2), pack('C', 0x33)); // Bat Delay (sprite_retreat_bat.asm:136) + + // New Hole Mask Position + $this->write(snes_to_pc(0x1AF730), pack( + 'C*', + 0x6A, + 0x9E, + 0x0C, + 0x00, + 0x7A, + 0x9E, + 0x0C, + 0x00, + 0x8A, + 0x9E, + 0x0C, + 0x00, + 0x6A, + 0xAE, + 0x0C, + 0x00, + 0x7A, + 0xAE, + 0x0C, + 0x00, + 0x8A, + 0xAE, + 0x0C, + 0x00, + 0x67, + 0x97, + 0x0C, + 0x00, + 0x8D, + 0x97, + 0x0C, + 0x00 + )); + + // redefine some map16 tiles + $this->write(snes_to_pc(0x0FF1C8), pack( + 'S*', + 0x190F, + 0x190F, + 0x190F, + 0x194C, + 0x190F, + 0x194B, + 0x190F, + 0x195C, + 0x594B, + 0x194C, + 0x19EE, + 0x19EE, + 0x194B, + 0x19EE, + 0x19EE, + 0x19EE, + 0x594B, + 0x190F, + 0x595C, + 0x190F, + 0x190F, + 0x195B, + 0x190F, + 0x190F, + 0x19EE, + 0x19EE, + 0x195C, + 0x19EE, + 0x19EE, + 0x19EE, + 0x19EE, + 0x595C, + 0x595B, + 0x190F, + 0x190F, + 0x190F + )); + + // Redefine more map16 tiles + $this->write(snes_to_pc(0x0FA480), pack('S*', 0x190F, 0x196B, 0x9D04, 0x9D04, 0x196B, 0x190F, 0x9D04, 0x9D04)); + + // update pyramid hole entrances + $this->write(snes_to_pc(0x1bb810), pack('S*', 0x00BE, 0x00C0, 0x013E)); + $this->write(snes_to_pc(0x1bb836), pack('S*', 0x001B, 0x001B, 0x001B)); + + // add an extra pyramid hole entrance + $this->write(snes_to_pc(0x308300), pack('S', 0x0140)); // ExtraHole_Map16 + $this->write(snes_to_pc(0x308320), pack('S', 0x001B)); // ExtraHole_Area + $this->write(snes_to_pc(0x308340), pack('C', 0x7B)); // ExtraHole_Entrance + + // prioritize retreat Bat and use 3rd sprite group + $this->write(snes_to_pc(0x1af504), pack('S', 0x148B)); + $this->write(snes_to_pc(0x1af50c), pack('S', 0x149B)); + $this->write(snes_to_pc(0x1af514), pack('S', 0x14A4)); + $this->write(snes_to_pc(0x1af51c), pack('S', 0x1489)); + $this->write(snes_to_pc(0x1af524), pack('S', 0x14AC)); + $this->write(snes_to_pc(0x1af52c), pack('S', 0x54AC)); + $this->write(snes_to_pc(0x1af534), pack('S', 0x148C)); + $this->write(snes_to_pc(0x1af53c), pack('S', 0x548C)); + $this->write(snes_to_pc(0x1af544), pack('S', 0x1484)); + $this->write(snes_to_pc(0x1af54c), pack('S', 0x5484)); + $this->write(snes_to_pc(0x1af554), pack('S', 0x14A2)); + $this->write(snes_to_pc(0x1af55c), pack('S', 0x54A2)); + $this->write(snes_to_pc(0x1af564), pack('S', 0x14A0)); + $this->write(snes_to_pc(0x1af56c), pack('S', 0x54A0)); + $this->write(snes_to_pc(0x1af574), pack('S', 0x148E)); + $this->write(snes_to_pc(0x1af57c), pack('S', 0x548E)); + $this->write(snes_to_pc(0x1af584), pack('S', 0x14AE)); + $this->write(snes_to_pc(0x1af58c), pack('S', 0x54AE)); + + // Make retreat bat gfx available in Hyrule castle. + $this->write(snes_to_pc(0x00DB9D), pack('C', 0x1A)); // sprite set 1, section 3 + $this->write(snes_to_pc(0x00DC09), pack('C', 0x1A)); // sprite set 27, section 3 + + // use new castle hole graphics (The values are the SNES address of the graphics: 31e000) + $this->write(snes_to_pc(0x00D009), pack('C', 0x31)); + $this->write(snes_to_pc(0x00D0e8), pack('C', 0xE0)); + $this->write(snes_to_pc(0x00D1c7), pack('C', 0x00)); + $this->write(snes_to_pc(0x1BE8DA), pack('S', 0x39AD)); // add color for shading for castle hole + + $this->write(0x180169, pack('C', 0x02)); // lock aga door + $this->write(0xF6E58, pack('C', 0x80)); // don't allow "whirlpool" under castle gate + + // Turtle rock tail + $this->write(0x0086E, pack('C*', 0x5C, 0x00, 0xA0, 0xA1)); // JML.l $A1A000 (a.k.a. JML.l InvertedTileAttributeLookup) + + // Add warps under rocks, etc. + $this->write(snes_to_pc(0x1BC67A), pack('C*', 0x2E, 0x0B, 0x82)); // Replace a rupee under bush to add a warp on map 80 (top of kak) + $this->write(snes_to_pc(0x1BC81E), pack('C*', 0x94, 0x1D, 0x82)); // Replace a heart under bush to add a warp on map 120 (mire) + $this->write(snes_to_pc(0x1BC655), pack('C*', 0x4A, 0x1D, 0x82)); // Replace a bomb :( under bush to add a warp on map 78 (DM) + $this->write(snes_to_pc(0x1BC80D), pack('C*', 0xB2, 0x0B, 0x82)); // map 111 + $this->write(snes_to_pc(0x1BC3DF), pack('C*', 0xD8, 0xD1)); // new pointer for map 115 no items to replace + $this->write(snes_to_pc(0x1BD1D8), pack('C*', 0xA8, 0x02, 0x82, 0xFF, 0xFF)); // new data for map115 + $this->write(snes_to_pc(0x1BC85A), pack('C*', 0x50, 0x0F, 0x82)); + + // move pyramid exit overworld door + $this->write(0xDB96F + 2 * 0x35, pack('S', 0x001B)); + $this->write(0xDBA71 + 2 * 0x35, pack('S', 0x06A4)); + $this->write(0xDBB73 + 0x35, pack('C', 0x36)); + + // Remove Hyrule Castle Gate warp + $this->write(snes_to_pc(0x09D436), pack('C', 0xF3)); // replace whirlpool with (harmless) SpritePositionTarget Overlord + + // Pyramid exits to new hyrule castle area + $this->write(0x15AEE + 2 * 0x37, pack('S', 0x0010)); + $this->write(0x15B8C + 0x37, pack('C', 0x1B)); + $this->write(0x15BDB + 2 * 0x37, pack('S', 0x0418)); + $this->write(0x15C79 + 2 * 0x37, pack('S', 0x0679)); + $this->write(0x15D17 + 2 * 0x37, pack('S', 0x06B4)); + $this->write(0x15DB5 + 2 * 0x37, pack('S', 0x06C6)); + $this->write(0x15E53 + 2 * 0x37, pack('S', 0x0728)); + $this->write(0x15EF1 + 2 * 0x37, pack('S', 0x06E6)); + $this->write(0x15F8F + 2 * 0x37, pack('S', 0x0733)); + $this->write(0x1602D + 0x37, pack('C', 0x07)); + $this->write(0x1607C + 0x37, pack('C', 0xf9)); + $this->write(0x160CB + 2 * 0x37, pack('S', 0x0000)); + $this->write(0x16169 + 2 * 0x37, pack('S', 0x0000)); + $this->write(snes_to_pc(0x1BC387), pack('C*', 0xDD, 0xD1)); // New pointer for map 71 no items to replace + $this->write(snes_to_pc(0x1BD1DD), pack('C*', 0xA4, 0x06, 0x82, 0x9E, 0x06, 0x82, 0xFF, 0xFF)); // new data for map 71 + + $this->write(0x180089, pack('C', 0x01)); // open TR main entrance on exiting + + $this->write(snes_to_pc(0x0ABFBB), pack('C', 0x90)); // move mirror portal indicator to correct map (0xB0 normally) + + $this->write(snes_to_pc(0x0280A6), pack('C', 0xD0)); // Spawn logic + + $this->write(snes_to_pc(0x06B2AB), pack('C*', 0xF0, 0xE1, 0x05)); // frog pickup on contact + + $this->text->setString('sign_path_to_death_mountain', "→ Bumper Cave\nYou need Cape and Mirror, but not Hookshot"); + $this->text->setString('sign_bumper_cave', "Cave to lost, old man.\nGood luck."); + $this->text->setString('sign_east_of_bomb_shop', "\n← Your House"); + $this->text->setString('sign_east_of_links_house', "\n← Bomb Shoppe"); + $this->text->setString('kiki_leaving_screen', "{NOTEXT}", false); + $this->text->setString('dark_sanctuary', "{NOTEXT}", false); + $this->text->setString('dark_sanctuary_yes', "{NOTEXT}", false); + $this->text->setString('dark_sanctuary_no', "If you want that healing you're gonna need 20 rupees."); + + $this->text->setString('menu_start_2', "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n{CHOICE3}", false); + $this->text->setString('menu_start_3', "{MENU}\n{SPEED0}\n≥@'s house\n Dark Chapel\n Dark Mountain\n{CHOICE2}", false); + + $this->text->setString('intro_main', "{INTRO}\n Episode III\n{PAUSE3}\n A Link to\n the Past\n" + . "{PAUSE3}\nInverted\n Randomizer\n{PAUSE3}\nAfter mostly disregarding what happened in the first two games,\n" + . "{PAUSE3}\nLink has been transported to the Dark World\n{PAUSE3}\nWhile he was slumbering,\n" + . "{PAUSE3}\nWhatever will happen?\n{PAUSE3}\n{CHANGEPIC}\nGanon has moved around all the items in Hyrule.\n" + . "{PAUSE7}\nYou will have to find all the items necessary to beat Ganon.\n" + . "{PAUSE7}\nThis is your chance to be a hero.\n{PAUSE3}\n{CHANGEPIC}\n" + . "You must get the 7 crystals to beat Ganon.\n{PAUSE9}\n{CHANGEPIC}", false); + + return $this; + } + + /** + * Enable maps to show crystals on overworld map + * + * @param bool $require_map switch on or off + * + * @return $this + */ + public function setMapMode(bool $require_map = false): self + { + $this->write(0x18003B, pack('C*', $require_map ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable compass to show dungeon count + * + * @param string $setting switch on or off + * + * @return $this + */ + public function setCompassMode(string $setting = 'off'): self + { + switch ($setting) { + case 'on': + $byte = 0x02; + break; + case 'pickup': + $byte = 0x01; + break; + case 'off': + default: + $byte = 0x00; + } + + $this->write(0x18003C, pack('C', $byte)); + + return $this; + } + + /** + * Enable text box to show with free roaming items + * + * ---o bmcs + * o - enabled for outside dungeon items + * b - enabled for inside big key items + * m - enabled for inside map items + * c - enabled for inside compass items + * s - enabled for inside small key items + * + * @param int $bit_field switch on or off + * + * @return $this + */ + public function setFreeItemTextMode(int $bit_field = 0x00): self + { + $this->write(0x18016A, pack('C*', $bit_field)); + + return $this; + } + + /** + * Enable free items to show up in menu + * + * @param int $flags display ----dcba a: Small Keys, b: Big Key, c: Map, d: Compass + * + * @return $this + */ + public function setFreeItemMenu(int $flags = 0x00): self + { + $this->write(0x180045, pack('C*', $flags)); + + return $this; + } + + /** + * Enable swordless mode + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setSwordlessMode(bool $enable = false): self + { + $this->write(0x18003F, pack('C*', $enable ? 0x01 : 0x00)); // Hammer Ganon + $this->write(0x180040, pack('C*', $enable ? 0x01 : 0x00)); // Open Curtains + $this->write(0x180041, pack('C*', $enable ? 0x01 : 0x00)); // Swordless Medallions + $this->write(0x180043, pack('C*', $enable ? 0xFF : 0x00)); // set Link's starting sword 0xFF is taken sword + + $this->setHammerTablet($enable); + $this->setHammerBarrier(false); + + return $this; + } + + /** + * Enable lampless light cone in Sewers + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setSewersLampCone(bool $enable = true): self + { + $this->write(0x180038, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable lampless light cone in Light World Dungeons + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setLightWorldLampCone(bool $enable = true): self + { + $this->write(0x180039, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable lampless light cone in Dark World Dungeons + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setDarkWorldLampCone(bool $enable = true): self + { + $this->write(0x18003A, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable the ROM Hack that doesn't leave Link stranded in DW + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setMirrorlessSaveAndQuitToLightWorld(bool $enable = true): self + { + $this->write(0x1800A0, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable ability to Save and Quit from Boss room after item collection. + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setSaveAndQuitFromBossRoom(bool $enable = false): self + { + $this->write(0x180042, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable the ROM Hack that drains the Swamp on transition + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setSwampWaterLevel(bool $enable = true): self + { + $this->write(0x1800A1, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable the ROM Hack that sends Link to Real DW on death in DW dungeon if AG1 is not dead + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setPreAgahnimDarkWorldDeathInDungeon(bool $enable = true): self + { + $this->write(0x1800A2, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable World on Agahnim Death + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setWorldOnAgahnimDeath(bool $enable = true): self + { + $this->write(0x1800A3, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable PoD EG correction + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setPODEGfix(bool $enable = true): self + { + $this->write(0x1800A4, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable locking Hyrule Castle Door to AG1 during escape + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setLockAgahnimDoorInEscape(bool $enable = true): self + { + $this->write(0x180169, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Enable/Disable fix Fake Light World/Fake Dark World as caused by leaving the underworld. + * Generally should only be used/enabled by Entrance Randomizer + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function setFixFakeWorld(bool $enable = false): self + { + $this->write(0x180174, pack('C*', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Set the Ganon Warp Phase and Agahnim BB mode + * + * @param string $setting name + * + * @return $this + */ + public function setGanonAgahnimRng(string $setting = 'table'): self + { + switch ($setting) { + case 'none': + $byte = 0x01; + break; + case 'vanilla': + case 'table': + default: + $byte = 0x00; + } + + $this->write(0x180086, pack('C', $byte)); + + return $this; + } + + /** + * Set the Tower Crystal Requirement + * + * @param int $crystals + * + * @return $this + */ + public function setTowerCrystalRequirement(int $crystals = 7): self + { + $this->write(0x18005E, pack('C', max(min($crystals, 7), 0))); + + return $this; + } + + /** + * Set the Ganon Crystal Requirement + * + * @param int $crystals + * + * @return $this + */ + public function setGanonCrystalRequirement(int $crystals = 7): self + { + $this->write(0x18005F, pack('C', max(min($crystals, 7), 0))); + + return $this; + } + + /** + * Set the Pyramid Hole State. + * + * @param bool $open + * + * @return $this + */ + public function setPyramidHoleOpen(bool $open = false): self + { + $this->write(0x18008B, pack('C', $open ? 0x01 : 0x00)); + + return $this; + } + + /** + * Set the Ganon's Tower State. + * + * @param bool $open + * + * @return $this + */ + public function setGanonsTowerOpen(bool $open = false): self + { + $this->write(0x18008C, pack('C', $open ? 0x01 : 0x00)); + + return $this; + } + + /** + * Write the seed identifier + * + * @param string $seed identifier for this seed + * + * @return $this + */ + public function setSeedString(string $seed): self + { + $this->write(0x7FC0, substr($seed, 0, 21)); + + return $this; + } + + /** + * Write a block of data to RNG Block in ROM. + * + * @param callable $random prng byte generator + * + * @return $this + */ + public function writeRNGBlock(callable $random): self + { + $string = ''; + for ($i = 0; $i < 1024; $i++) { + $string .= pack('C*', $random()); + } + $this->write(0x178000, $string); + + return $this; + } + + /** + * set the flags byte in ROM + * + * dgGe mutT + * d - Nonstandard Dungeon Configuration (Not Map/Compass/BigKey/SmallKeys in same quantity as vanilla) + * g - Requires Minor Glitches (Fake flippers, bomb jumps, etc) + * G - Requires Major Glitches (OW YBA/Clips, etc) + * e - Requires EG + * + * m - Contains Multiples of Major Items + * u - Contains Unreachable Items + * t - Minor Trolling (Swapped around levers, etc) + * T - Major Trolling (Forced-guess softlocks, impossible seed, etc) + * + * @param int $flags byte of flags to set + * + * @return $this + */ + public function setWarningFlags(int $flags): self + { + $this->write(0x180212, pack('C*', $flags)); + + return $this; + } + + /** + * Mute all audio tracks. + * + * @param bool $enable switch on or off + * + * @return $this + */ + public function muteMusic(bool $enable = true): self + { + $this->write(0x18021A, pack('C', $enable ? 0x01 : 0x00)); + + return $this; + } + + /** + * Apply a patch to the ROM + * + * @param array $patch patch to apply + * + * @return $this + * + **/ + public function applyPatch(array $patch): self + { + foreach ($patch as $part) { + foreach ($part as $address => $data) { + $this->write($address, pack('C*', ...array_values($data)), false); + } + } + + return $this; + } + + /** + * Apply a patch file to the ROM + * + * @param string $file_name JSON file to load and apply + * + * @throws \Exception if the file isn't readable + * + * @return $this + * + **/ + public function applyPatchFile(string $file_name): self + { + if (!is_readable($file_name)) { + throw new \Exception('Patch file not readable'); + } + + $data = file_get_contents($file_name); + + if ($data === false) { + throw new \Exception('Patch file not readable'); + } + + return $this->applyPatch(json_decode($data, true)); + } + + /** + * rummage table + * + * @return $this + */ + public function rummageTable(): self + { + Tournament::apply($this); + + return $this; + } + + /** + * Save the changes to this output file + * + * @param string $output_location location on the filesystem to write the new ROM. + * + * @return bool + */ + public function save(string $output_location): bool + { + return copy($this->tmp_file, $output_location); + } + + /** + * Write packed data at the given offset + * + * @param int $offset location in the ROM to begin writing + * @param string $data data to write to the ROM + * @param bool $log write this write to the log + * + * @return $this + */ + public function write(int $offset, string $data, bool $log = true): self + { + if ($log) { + $unpacked = array_values(unpack('C*', $data)); + $this->write_log[] = [$offset => $unpacked]; + } + fseek($this->rom, $offset); + fwrite($this->rom, $data); + + return $this; + } + + /** + * Get the array of bytes written in the order they were written to the rom + * + * @return array + */ + public function getWriteLog(): array + { + return $this->write_log; + } + + /** + * Read data from the ROM file into an array + * + * @param int $offset location in the ROM to begin reading + * @param int $length data to read + * // TODO: this should probably always be an array, or a new Bytes object + * @return array + */ + public function read(int $offset, int $length = 1) + { + fseek($this->rom, $offset); + $packed = fread($this->rom, $length); + if ($packed === false) { + throw new \Exception('failed read'); + } + $unpacked = unpack('C*', $packed); + return count($unpacked) == 1 ? $unpacked[1] : array_values($unpacked); + } + + /** + * Read a byte from the ROM. It will return 0x00 if nothing is set at the + * address. + * + * @param int $offset location in the ROM to begin reading + * + * @return int + */ + public function readByte(int $offset): int + { + fseek($this->rom, $offset); + $packed = fread($this->rom, 1); + if ($packed === false) { + throw new \Exception('failed read'); + } + $unpacked = unpack('C*', $packed); + + return $unpacked[1] ?? 0x00; + } + + /** + * Object destruction magic method + * + * @return void + */ + public function __destruct() + { + if ($this->rom) { + fclose($this->rom); + } + unlink($this->tmp_file); + } } diff --git a/app/Seed.php b/app/Seed.php index 49054f257..07aa439d0 100644 --- a/app/Seed.php +++ b/app/Seed.php @@ -1,54 +1,26 @@ -stored_patch) { - $sha1 = sha1($seed->stored_patch); - $patch = Patch::firstOrCreate([ - 'sha1' => $sha1, - ]); - $patch->patch = $seed->stored_patch; - $patch->save(); - - $seed->stored_patch = null; - $seed->patch()->associate($patch); - $seed->save(); - } - }); - - static::created(function($seed) use ($hasher) { - $seed->hash = $hasher->encode($seed->id); - $seed->save(); - }); - } - - public function hashArray() { - return hash_array($this->id); - } - - public function setPatchAttribute($value) { - $this->stored_patch = $value; - } +class Seed extends Model +{ + public static function boot() + { + parent::boot(); - public function getPatchAttribute() { - return $this->patch()->first()->patch ?? null; - } + $hasher = new Hashids('vt', 10); - public function patch() { - return $this->belongsTo(Patch::class, 'patch_id'); - } + static::created(function ($seed) use ($hasher) { + $seed->hash = $hasher->encode($seed->id); + $seed->save(); + }); + } - public function clearPatch() { - $this->patch()->delete(); - } + public function hashArray() + { + return hash_array($this->id); + } } diff --git a/app/Services/HintService.php b/app/Services/HintService.php new file mode 100644 index 000000000..d32e732f4 --- /dev/null +++ b/app/Services/HintService.php @@ -0,0 +1,183 @@ +worlds = $worlds; + $this->advancement_items = $advancement_items; + $this->joke_hints = cache()->rememberForever('joke_hints', function () { + return array_filter(explode( + "\n-\n", + (string) preg_replace('/^-\n/', '', (string) file_get_contents(base_path('strings/hint.txt'))) + )); + }); + } + + /** + * Add hints to worlds + * + * @return void + */ + public function applyHints(): void + { + foreach ($this->worlds as $world) { + if ($world->config('spoil.Hints') !== 'on') { + $world->setText('sign_north_of_links_house', "Randomizer v31\n\n> -veetorp"); + continue; + } + + $tiles = fy_shuffle([ + 'telepathic_tile_eastern_palace', + 'telepathic_tile_tower_of_hera_floor_4', + 'telepathic_tile_spectacle_rock', + 'telepathic_tile_swamp_entrance', + 'telepathic_tile_thieves_town_upstairs', + 'telepathic_tile_misery_mire', + 'telepathic_tile_palace_of_darkness', + 'telepathic_tile_desert_bonk_torch_room', + 'telepathic_tile_castle_tower', + 'telepathic_tile_ice_large_room', + 'telepathic_tile_turtle_rock', + 'telepathic_tile_ice_entrace', + 'telepathic_tile_ice_stalfos_knights_room', + 'telepathic_tile_tower_of_hera_entrance', + 'telepathic_tile_south_east_darkworld_cave', + ]); + $locations = fy_shuffle([ + "Sahasrahla", + "Mimic Cave", + "Catfish", + "Graveyard Ledge", + "Purple Chest", + "Tower of Hera - Big Key Chest", + "Swamp Palace - Big Chest", + ["Misery Mire - Big Key Chest", "Misery Mire - Compass Chest"], + ["Swamp Palace - Big Key Chest", "Swamp Palace - West Chest"], + ["Pyramid Fairy - Left", "Pyramid Fairy - Right"], + ]); + + if ($world->config('region.wildBigKeys', false)) { + $gtbk_location = $world->getLocationsWithItem(Item::get('BigKeyA2', $world))->first(); + + if ($gtbk_location) { + $tile = array_pop($tiles); + $gtbk_hint = $gtbk_location->getHint(); + + Log::debug("$tile: $gtbk_hint"); + $world->setText($tile, $gtbk_hint); + } + } + + $boots_location = $world->getLocationsWithItem(Item::get('PegasusBoots', $world))->first(); + if ($boots_location) { + $tile = array_pop($tiles); + $boots_hint = $boots_location->getHint(); + + Log::debug("$tile: $boots_hint"); + $world->setText($tile, $boots_hint); + } + + $picks = range(0, count($locations) - 1); + for ($i = 0; $i < 5; ++$i) { + $picks = fy_shuffle($picks); + $pick = $locations[array_pop($picks)]; + + if (is_array($pick)) { + $hint = $world->getLocations()->filter(function ($location) use ($pick) { + return in_array($location->getName(), $pick); + })->getHint(); + } else { + $hint = $world->getLocation($pick)->getHint(); + } + + if (!$hint) { + continue; + } + $tile = array_pop($tiles); + + Log::debug("$tile: $hint"); + $world->setText($tile, $hint); + } + + $hintables = array_filter($this->advancement_items, function ($item) use ($world) { + return !$item instanceof Item\Shield + && !$item instanceof Item\Key + && !$item instanceof Item\Map + && !$item instanceof Item\Compass + && ($world->config('region.wildBigKeys', false) || !$item instanceof Item\BigKey) + && !$item instanceof Item\Bottle + && !$item instanceof Item\Sword + && !in_array($item->getRawName(), ['TenBombs', 'HalfMagic', 'BugCatchingNet', 'Powder', 'Mushroom']); + }); + + switch ($world->config('rom.HardMode', 0)) { + case -1: + $hints = array_slice(fy_shuffle($hintables ?? []), 0, count($tiles)); + + break; + case 0: + $hints = array_slice(fy_shuffle($hintables ?? []), 0, min(4, count($tiles))); + + break; + default: + $hints = []; + } + + $hints = array_filter(array_map(function ($item) use ($world) { + return $world->getLocationsWithItem($item)->filter(function ($location) { + return !$location instanceof Location\Medallion + && !$location instanceof Location\Fountain + && !$location instanceof Location\Prize + && !$location instanceof Location\Trade; + })->random(); + }, $hints)); + + $locations_with_item = $world->getLocationsWithItem()->filter(function ($location) use ($world) { + $item = $location->getItem(); + return !$location instanceof Location\Medallion + && !$location instanceof Location\Fountain + && !$location instanceof Location\Prize + && !$location instanceof Location\Trade + && !$item instanceof Item\Key + && !$item instanceof Item\Map + && !$item instanceof Item\Compass + && ($world->config('region.wildBigKeys', false) || !$item instanceof Item\BigKey); + }); + + $hint_locations = $locations_with_item->randomCollection(get_random_int((int) (floor((count($tiles) - count($hints)) / 2) - 1), count($tiles) - count($hints) - 1))->merge($hints); + + foreach ($tiles as $tile) { + $hint = $hint_locations->pop(); + $hint_text = ($hint ? $hint->getHint() : null) ?? array_first(fy_shuffle($this->joke_hints)); + + Log::debug(str_replace("\n", " ", "$tile: $hint_text")); + $world->setText($tile, $hint_text); + } + } + } +} diff --git a/app/Services/PlaythroughService.php b/app/Services/PlaythroughService.php new file mode 100644 index 000000000..a8426cd68 --- /dev/null +++ b/app/Services/PlaythroughService.php @@ -0,0 +1,257 @@ +copy(); + $junk_items = [ + Item::get('BlueShield', $world), + Item::get('Boomerang', $world), + Item::get('MirrorShield', $world), + Item::get('RedBoomerang', $world), + Item::get('RedShield', $world), + Item::get('BombUpgrade5', $world), + Item::get('BombUpgrade10', $world), + Item::get('BombUpgrade50', $world), + Item::get('ArrowUpgrade5', $world), + Item::get('ArrowUpgrade10', $world), + Item::get('ArrowUpgrade70', $world), + Item::get('RedPotion', $world), + Item::get('Bee', $world), + Item::get('TenArrows', $world), + Item::get('Bomb', $world), + Item::get('ThreeBombs', $world), + Item::get('OneRupee', $world), + Item::get('FiveRupees', $world), + Item::get('TwentyRupees', $world), + Item::get('FiftyRupees', $world), + Item::get('OneHundredRupees', $world), + Item::get('ThreeHundredRupees', $world), + Item::get('Heart', $world), + Item::get('Rupoor', $world), + ]; + + // remove junk locations for filtering later + $shadow_world->getLocations()->each(function ($location) use ($junk_items) { + $location_item = $location->getItem(); + if ($location_item && in_array($location_item, $junk_items)) { + $location->setItem(); + } + }); + + $location_sphere = $shadow_world->getLocationSpheres(); + $collectable_locations = new LocationCollection(array_flatten(array_map(function ($collection) { + return $collection->values(); + }, $location_sphere))); + $required_locations = new LocationCollection; + $required_locations_sphere = []; + $reverse_location_sphere = array_reverse($location_sphere, true); + + foreach ($reverse_location_sphere as $sphere_level => $sphere) { + if ($sphere_level == 0) { + continue; + } + Log::debug("playthrough SPHERE: $sphere_level"); + foreach ($sphere as $location) { + Log::debug(sprintf( + "playthrough Check: %s :: %s", + $location->getName(), + $location->getItem() ? $location->getItem()->getNiceName() : 'Nothing' + )); + // pull item out (we have to pull keys as well :( as they are used in calcs for big keys see DP) + $pulled_item = $location->getItem(); + if ($pulled_item === null) { + continue; + } + $location->setItem(); + if ((!$world->config('region.wildMaps', false) && $pulled_item instanceof Item\Map) + || (!$world->config('region.wildCompasses', false) && $pulled_item instanceof Item\Compass) + || in_array($pulled_item, $junk_items) + ) { + continue; + } + if (!$shadow_world->getWinCondition()($collectable_locations->getItems($shadow_world)->copy())) { + // put item back + $location->setItem($world->getCollectableLocations()[$location->getName()]->getItem()); + $required_locations->addItem($location); + $required_locations_sphere[$sphere_level][] = $location; + Log::debug(sprintf("playthrough Keep: %s :: %s", $location->getName(), $location->getItem()->getNiceName())); + continue; + } + + // Itterate all spheres bubbling up -_- + foreach (array_reverse(array_keys($required_locations_sphere)) as $check_sphere) { + // don't check the current sphere (thats a waste of time). + if ($check_sphere == $sphere_level || $required_locations->has($location->getName())) { + continue; + } + + // remove all higher sphere items from their locations + foreach ($required_locations_sphere as $higher_sphere => $higher_locations) { + if ($higher_sphere < $check_sphere) { + continue; + } + foreach ($higher_locations as $higher_location) { + $higher_location->setItem(); + } + } + + // test access of items in the outer sphere + foreach ($required_locations_sphere as $higher_sphere => $higher_locations) { + if ($higher_sphere != $check_sphere) { + continue; + } + foreach ($higher_locations as $higher_location) { + // remove the item we are trying to get + $temp_pull = $higher_location->getItem(); + $higher_location->setItem(); + $current_items = $collectable_locations->getItems($shadow_world)->copy(); + + if (!$higher_location->canAccess($current_items, $world->getLocations())) { + // put item back + $location->setItem($world->getCollectableLocations()[$location->getName()]->getItem()); + Log::debug(sprintf( + "playthrough Higher Location: %s :: %s", + $higher_location->getName(), + $world->getCollectableLocations()[$higher_location->getName()]->getItem()->getNiceName() + )); + $required_locations->addItem($location); + $required_locations_sphere[$sphere_level][] = $location; + Log::debug(sprintf( + "playthrough Readd: %s :: %s", + $location->getName(), + $location->getItem()->getNiceName() + )); + break 2; + } + $higher_location->setItem($temp_pull); + } + } + // put all higher items back + foreach ($required_locations as $higher_location) { + $higher_location->setItem($world->getCollectableLocations()[$higher_location->getName()]->getItem()); + } + } + } + } + + foreach ($required_locations as $higher_location) { + Log::debug(sprintf( + "playthrough REQ: %s :: %s", + $higher_location->getName(), + $world->getCollectableLocations()[$higher_location->getName()]->getItem()->getNiceName() + )); + } + if (!$walkthrough) { + return $required_locations->values(); + } + + // RUN PLAYTHROUGH of locations found above + $my_items = $shadow_world->getPreCollectedItems(); + $location_order = []; + $location_round = []; + $longest_item_chain = 1; + do { + // make sure we had something before going to the next round + if (!empty($location_round[$longest_item_chain])) { + $longest_item_chain++; + } + $location_round[$longest_item_chain] = []; + $available_locations = $shadow_world->getCollectableLocations()->filter(function ($location) use ($world, $my_items, $location_order) { + return !in_array($location, $location_order) + && $location->canAccess($my_items, $world->getLocations()); + }); + + $found_items = $available_locations->getItems(); + + $available_locations->each(function ($location) use ($world, &$location_order, &$location_round, $longest_item_chain) { + $item = $location->getItem(); + if ( + in_array($location, $location_order) + || !$location->hasItem() + ) { + return; + } + Log::debug(sprintf("Pushing: %s from %s", $item->getNiceName(), $location->getName())); + array_push($location_order, $location); + if ((($world->config('rom.genericKeys', false) || !$world->config('region.wildKeys', false)) && $item instanceof Item\Key) + || $item instanceof Item\Map + || $item instanceof Item\Compass + || $item == Item::get('RescueZelda', $world) + ) { + return; + } + array_push($location_round[$longest_item_chain], $location); + }); + $my_items = $my_items->merge($found_items); + } while ($found_items->count() > 0); + + $ret = ['longest_item_chain' => count($location_round)]; + if (count($shadow_world->getPreCollectedItems())) { + $i = 0; + foreach ($shadow_world->getPreCollectedItems() as $item) { + if ( + $item instanceof Item\Upgrade\Arrow + || $item instanceof Item\Upgrade\Bomb + || $item instanceof Item\Upgrade\Health + || $item instanceof Item\Event + ) { + continue; + } + + $location = sprintf("Equipment Slot %s", ++$i); + $ret[0]['Equipped'][$location] = $item->getName(); + } + } + foreach ($location_round as $round => $locations) { + $locations = array_filter($locations, function ($location) { + return !$location instanceof Location\Trade; + }); + if ($locations === null) { + continue; + } + if (!count($locations)) { + $ret['longest_item_chain']--; + } + foreach ($locations as $location) { + $ret[$round][$location->getRegion()->getName()][$location->getName()] = $location->getItem()->getName(); + } + } + + $ret['regions_visited'] = array_reduce($ret, function ($carry, $item) { + return (is_array($item)) ? $carry + count($item) : $carry; + }); + + return $ret; + } +} diff --git a/app/Shop.php b/app/Shop.php index 7dc508324..c371dd3e7 100644 --- a/app/Shop.php +++ b/app/Shop.php @@ -1,6 +1,7 @@ -name = $name; - $this->config = $config; - $this->shopkeeper = $shopkeeper; - $this->room_id = $room_id; - $this->door_id = $door_id; - $this->region = $region; - $this->writes = $writes; - } - - /** - * Get the name of this Shop - * - * @return string - */ - public function getName() : string { - return $this->name; - } - - public function getBytes(int $sram_offset = 0x00) : array { - return array_merge( - array_values(unpack('C*', pack('S', $this->room_id ?? 0))), - [$this->door_id, 0x00, ($this->config & 0xFC) + count($this->inventory), $this->shopkeeper, $sram_offset] - ); - } - - /** - * Write extra data into the rom for this location. Generally, this is used for take-anys that will essentually - * hijack another cave/house and place themselves in there. Usually it's done by wiriting the type ID into - * the table starting at 0xDBB73 offset by the entrance ID. - * - * @param Rom $rom Rom to write data to - * - * @return $this - */ - public function writeExtraData(Rom $rom) : self { - foreach ($this->writes as $address => $bytes) { - $rom->write($address, pack('C*', ...$bytes)); - } - - return $this; - } - - public function setActive(bool $active) : self { - $this->active = $active; - - return $this; - } - - public function getActive() : bool { - return $this->active; - } - - public function setShopkeeper(string $shopkeeper) : self { - switch ($shopkeeper) { - case 'old_man': - $this->shopkeeper = 0xE2; - break; - case 'old_woman': - $this->shopkeeper = 0xE3; - break; - case 'dark_shopkepper': - $this->shopkeeper = 0xC1; - break; - case 'shopkeeper': - default: - $this->shopkeeper = 0xA0; - } - - return $this; - } - - public function clearInventory() : self { - $this->inventory = []; - - return $this; - } - - public function addInventory(int $slot, Item $item, int $price, int $max = 0, Item $replacement = null, int $replacement_price = 0) : self { - $this->inventory[$slot] = [ - 'id' => head($item->getBytes()), - 'item' => $item, - 'price' => $price, - 'max' => $max, - 'replace_id' => $replacement === null ? 0xFF : head($replacement->getBytes()), - 'replacement_item' => $replacement, - 'replace_price' => $replacement_price, - ]; - - return $this; - } - - public function getInventory() : array { - return $this->inventory; - } - - public function getLocations() : LocationCollection { - $locations = []; - foreach($this->inventory as $slot => $record) { - $location = (new Location("$this->name - $slot", []))->setItem($record['item'])->setRegion($this->region); - if ($this->requirement_callback) { - $location->setRequirements($this->requirement_callback); - } - $locations[] = $location; - - if ($record['replacement_item']) { - $location = (new Location("$this->name - $slot.2", []))->setItem($record['replacement_item'])->setRegion($this->region); - if ($this->requirement_callback) { - $location->setRequirements($this->requirement_callback); - } - $locations[] = $location; - } - } - return new LocationCollection($locations); - } - - /** - * Determine if Link can access this location given his Items collected. Starts by checking if access to the Region - * is granted, then checks the spcific location. - * - * @param ItemCollection $items Items Link can collect - * - * @return bool - */ - public function canAccess($items, $locations = null) { - if (!$this->region->canEnter($locations ?? $this->region->getWorld()->getLocations(), $items)) { - return false; - } - - if (!$this->requirement_callback || call_user_func($this->requirement_callback, $locations ?? $this->region->getWorld()->getLocations(), $items)) { - return true; - } - - return false; - } - - /** - * Set the requirements callback for this Lcation, closure should take 2 arguments, $locations and $items and - * return boolean. - * - * @param Callable $callback function to be called when checking if Location can have Item - * - * @return $this - */ - public function setRequirements(Callable $callback) { - $this->requirement_callback = $callback; - - return $this; - } - - /** - * Get the Region of this Location. - * - * @return Region - */ - public function getRegion() { - return $this->region; - } - - public function copy() { - $copy = new static($this->name, $this->config, $this->shopkeeper, $this->room_id, $this->door_id, $this->region, $this->writes); - $copy->inventory = $this->inventory; - $copy->requirement_callback = $this->requirement_callback; - - return $copy; - } - - /** - * Convert this to string representation - * - * @return string - */ - public function __toString() { - return $this->name; - } +class Shop +{ + protected $name; + protected $config; + protected $shopkeeper; + protected $room_id; + protected $door_id; + protected $region; + protected $requirement_callback; + protected $writes = []; + protected $active = false; + protected $inventory = []; + + /** + * Create a new Shop + * + * @param string $name Unique name of Shop + * @param int $config td----qq t: take-any, d: check door, q: number of items for sale + * @param int $shopkeeper ppp---ss p: palette s: sprite + * @param int $room_id Id for the room to use + * @param int $door_id Id of door to use + * @param \ALttP\Region $region Region where the shop is found + * @param array $writes extra data that needs to be written to entrance table to make sure it works correctly + * + * @return void + */ + public function __construct(string $name, int $config, int $shopkeeper, int $room_id, int $door_id, Region $region, array $writes = []) + { + $this->name = $name; + $this->config = $config; + $this->shopkeeper = $shopkeeper; + $this->room_id = $room_id; + $this->door_id = $door_id; + $this->region = $region; + $this->writes = $writes; + } + + /** + * Get the name of this Shop + * + * @return string + */ + public function getName(): string + { + return $this->name; + } + + public function getBytes(int $sram_offset = 0x00): array + { + return array_merge( + array_values(unpack('C*', pack('S', $this->room_id ?? 0))), + [$this->door_id, 0x00, ($this->config & 0xFC) + count($this->inventory), $this->shopkeeper, $sram_offset] + ); + } + + /** + * Write extra data into the rom for this location. Generally, this is used for take-anys that will essentually + * hijack another cave/house and place themselves in there. Usually it's done by wiriting the type ID into + * the table starting at 0xDBB73 offset by the entrance ID. + * + * @param \ALttP\Rom $rom Rom to write data to + * + * @return $this + */ + public function writeExtraData(Rom $rom): self + { + foreach ($this->writes as $address => $bytes) { + $rom->write($address, pack('C*', ...$bytes)); + } + + return $this; + } + + public function setActive(bool $active): self + { + $this->active = $active; + + return $this; + } + + public function getActive(): bool + { + return $this->active; + } + + public function setShopkeeper(string $shopkeeper): self + { + switch ($shopkeeper) { + case 'old_man': + $this->shopkeeper = 0xE2; + break; + case 'old_woman': + $this->shopkeeper = 0xE3; + break; + case 'dark_shopkepper': + $this->shopkeeper = 0xC1; + break; + case 'shopkeeper': + default: + $this->shopkeeper = 0xA0; + } + + return $this; + } + + public function clearInventory(): self + { + $this->inventory = []; + + return $this; + } + + public function addInventory(int $slot, Item $item, int $price, int $max = 0, Item $replacement = null, int $replacement_price = 0): self + { + $this->inventory[$slot] = [ + 'id' => head($item->getBytes()), + 'item' => $item, + 'price' => $price, + 'max' => $max, + 'replace_id' => $replacement === null ? 0xFF : head($replacement->getBytes()), + 'replacement_item' => $replacement, + 'replace_price' => $replacement_price, + ]; + + return $this; + } + + public function getInventory(): array + { + return $this->inventory; + } + + public function getLocations(): LocationCollection + { + $locations = []; + foreach ($this->inventory as $slot => $record) { + $location = (new Location("$this->name - $slot", [], null, $this->region))->setItem($record['item']); + if ($this->requirement_callback) { + $location->setRequirements($this->requirement_callback); + } + $locations[] = $location; + + if ($record['replacement_item']) { + $location = (new Location("$this->name - $slot.2", [], null, $this->region))->setItem($record['replacement_item']); + if ($this->requirement_callback) { + $location->setRequirements($this->requirement_callback); + } + $locations[] = $location; + } + } + return new LocationCollection($locations); + } + + /** + * Determine if Link can access this location given his Items collected. Starts by checking if access to the Region + * is granted, then checks the spcific location. + * + * @param \ALttP\Support\ItemCollection $items Items Link can collect + * @param \ALttP\Support\LocationCollection|null $locations current locations + * + * @return bool + */ + public function canAccess($items, $locations = null) + { + if (!$this->region->canEnter($locations ?? $this->region->getWorld()->getLocations(), $items)) { + return false; + } + + if (!$this->requirement_callback || call_user_func($this->requirement_callback, $locations ?? $this->region->getWorld()->getLocations(), $items)) { + return true; + } + + return false; + } + + /** + * Set the requirements callback for this Lcation, closure should take 2 arguments, $locations and $items and + * return boolean. + * + * @param Callable $callback function to be called when checking if Location can have Item + * + * @return $this + */ + public function setRequirements(callable $callback) + { + $this->requirement_callback = $callback; + + return $this; + } + + /** + * Get the Region of this Location. + * + * @return \ALttP\Region + */ + public function getRegion() + { + return $this->region; + } + + public function copy() + { + $copy = new static($this->name, $this->config, $this->shopkeeper, $this->room_id, $this->door_id, $this->region, $this->writes); + $copy->inventory = $this->inventory; + $copy->requirement_callback = $this->requirement_callback; + + return $copy; + } + + /** + * Convert this to string representation + * + * @return string + */ + public function __toString() + { + return $this->name; + } } diff --git a/app/Shop/TakeAny.php b/app/Shop/TakeAny.php index ac7b7d0cd..59f035af6 100644 --- a/app/Shop/TakeAny.php +++ b/app/Shop/TakeAny.php @@ -1,10 +1,11 @@ -bytes[0] == $byte) { + return $item; + } + } - throw new \Exception('Unknown Sprite: ' . $name); - } + throw new \Exception('Unknown Sprite: ' . $byte); + } - /** - * Get the Sprite by byte - * - * @param int $byte byte of Sprite - * - * @throws Exception if the Sprite doesn't exist - * - * @return Sprite - */ - static public function getWithByte($byte) { - foreach (static::all() as $item) { - if ($item->bytes[0] == $byte) { - return $item; - } - } + /** + * Get the Sprite by bytes + * + * @param array $bytes array of bytes of Sprite + * + * @throws \Exception if the Sprite doesn't exist + * + * @return Sprite + */ + public static function getWithBytes($bytes) + { + foreach (static::all() as $item) { + foreach ($bytes as $key => $byte) { + if (!isset($item->bytes[$key]) || $item->bytes[$key] != $byte) { + continue 2; + } + } + return $item; + } - throw new \Exception('Unknown Sprite: ' . $name); - } + throw new \Exception('Unknown Sprite: ' . json_encode($bytes)); + } - /** - * Get the Sprite by bytes - * - * @param array $bytes array of bytes of Sprite - * - * @throws Exception if the Sprite doesn't exist - * - * @return Sprite - */ - static public function getWithBytes($bytes) { - foreach (static::all() as $item) { - foreach ($bytes as $key => $byte) { - if (!isset($item->bytes[$key]) || $item->bytes[$key] != $byte) { - continue 2; - } - } - return $item; - } + /** + * Get the all known Sprites + * + * @return SpriteCollection + */ + public static function all() + { + if (static::$items) { + return static::$items; + } - throw new \Exception('Unknown Sprite: ' . $name); - } + static::$items = new SpriteCollection([ + new Sprite("Raven", [0x00]), + new Sprite("Vulture", [0x01]), + new Sprite("FlyingStalfosHead", [0x02]), + new Sprite("Empty", [0x03]), + new Sprite("PullSwitchGood", [0x04]), + new Sprite("PullSwitch1", [0x05]), + new Sprite("PullSwitchBad", [0x06]), + new Sprite("PullSwitch2", [0x07]), + new Sprite("Octorok1", [0x08]), + new Sprite("Moldorm", [0x09]), + new Sprite("Octorok4", [0x0A]), + new Sprite("Chicken", [0x0B]), + new Sprite("Octorok", [0x0C]), + new Sprite("Buzzblob", [0x0D]), + new Sprite("Snapdragon", [0x0E]), + new Sprite("Octoballoon", [0x0F]), + new Sprite("OctoballoonHatchlings", [0x10]), + new Sprite("Hinox", [0x11]), + new Sprite("Moblin", [0x12]), + new Sprite("MiniHelmasaur", [0x13]), + new Sprite("ForkGate", [0x14]), + new Sprite("Antifairy", [0x15]), + new Sprite("Sahasrahla", [0x16]), + new Sprite("BushHoarder", [0x17]), + new Sprite("MiniMoldorm", [0x18]), + new Sprite("Poe", [0x19]), + new Sprite("Dwarves", [0x1A]), + new Sprite("WallArrow", [0x1B]), + new Sprite("Statue", [0x1C]), + new Sprite("Weathervane", [0x1D]), + new Sprite("CrystalSwitch", [0x1E]), + new Sprite("SickKid", [0x1F]), + new Sprite("Sluggula", [0x20]), + new Sprite("PushSwitch", [0x21]), + new Sprite("Ropa", [0x22]), + new Sprite("RedBari", [0x23]), + new Sprite("BlueBari", [0x24]), + new Sprite("TalkingTree", [0x25]), + new Sprite("HardhatBeetle", [0x26]), + new Sprite("Deadrock", [0x27]), + new Sprite("Storytellers", [0x28]), + new Sprite("BlindHistorian", [0x29]), + new Sprite("SweepingLady", [0x2A]), + new Sprite("Multipurpose", [0x2B]), + new Sprite("Lumberjacks", [0x2C]), + new Sprite("TelepathicStones", [0x2D]), + new Sprite("FluteBoyNotes", [0x2E]), + new Sprite("RaceNPCs", [0x2F]), + new Sprite("Person", [0x30]), + new Sprite("FortuneTeller", [0x31]), + new Sprite("AngryBrothers", [0x32]), + new Sprite("PullForRupees", [0x33]), + new Sprite("ScaredGirl2", [0x34]), + new Sprite("Innkeeper", [0x35]), + new Sprite("Potion Shop", [0x36]), + new Sprite("Waterfall", [0x37]), + new Sprite("ArrowTarget", [0x38]), + new Sprite("AverageMan", [0x39]), + new Sprite("MagicBat", [0x3A]), + new Sprite("DashItem", [0x3B]), + new Sprite("VillageKid", [0x3C]), + new Sprite("Sign", [0x3D]), + new Sprite("RockHoarder", [0x3E]), + new Sprite("TutorialSoldier", [0x3F]), + new Sprite("LightningLock", [0x40]), + new Sprite("BlueSwordSoldier", [0x41]), + new Sprite("GreenSwordSoldier", [0x42]), + new Sprite("RedSpearSoldier", [0x43]), + new Sprite("AssaultSwordSoldier", [0x44]), + new Sprite("GreenSpearSoldier", [0x45]), + new Sprite("BlueArcher", [0x46]), + new Sprite("GreenArcher", [0x47]), + new Sprite("RedJavelinSolider", [0x48]), + new Sprite("RedJavelinSolider2", [0x49]), + new Sprite("RedBombSolider", [0x4A]), + new Sprite("GreenSoldierRecruit", [0x4B]), + new Sprite("Geldman", [0x4C]), + new Sprite("Rabbit", [0x4D]), + new Sprite("Popo", [0x4E]), + new Sprite("Popo2", [0x4F]), + new Sprite("CannonBall", [0x50]), + new Sprite("Armos", [0x51]), + new Sprite("KingZora", [0x52]), + new Sprite("ArmosKnights", [0x53]), + new Sprite("Lanmolas", [0x54]), + new Sprite("FireballZora", [0x55]), + new Sprite("WalkingZora", [0x56]), + new Sprite("DesertPalaceBarrier", [0x57]), + new Sprite("Crab", [0x58]), + new Sprite("Bird", [0x59]), + new Sprite("Squirrel", [0x5A]), + new Sprite("SparkLR", [0x5B]), + new Sprite("SparkRL", [0x5C]), + new Sprite("RollerV1", [0x5D]), + new Sprite("RollerV2", [0x5E]), + new Sprite("Roller", [0x5F]), + new Sprite("RollerH", [0x60]), + new Sprite("Beamos", [0x61]), + new Sprite("MasterSword", [0x62]), + new Sprite("Devalant", [0x63]), + new Sprite("DevalantShooter", [0x64]), + new Sprite("ShootingGalleryNPC", [0x65]), + new Sprite("CannonBallShooterR", [0x66]), + new Sprite("CannonBallShooterL", [0x67]), + new Sprite("CannonBallShooterD", [0x68]), + new Sprite("CannonBallShooterU", [0x69]), + new Sprite("BallNChainTrooper", [0x6A]), + new Sprite("CannonSoldier", [0x6B]), + new Sprite("MirrorPortal", [0x6C]), + new Sprite("Rat", [0x6D]), + new Sprite("Rope", [0x6E]), + new Sprite("Keese", [0x6F]), + new Sprite("HelmasaurFireball", [0x70]), + new Sprite("Leever", [0x71]), + new Sprite("PondActivation", [0x72]), + new Sprite("Link's Uncle", [0x73]), + new Sprite("RunningMan", [0x74]), + new Sprite("BottleSalesman", [0x75]), + new Sprite("Zelda", [0x76]), + new Sprite("Antifairy2", [0x77]), + new Sprite("VillageElder", [0x78]), + new Sprite\Droppable("Bee", [0x79]), // Bee hoard? + new Sprite("Agahnim", [0x7A]), + new Sprite("AgahnimBall", [0x7B]), + new Sprite("Hyu", [0x7C]), + new Sprite("BigSpikeTrap", [0x7D]), + new Sprite("GuruguruBarCW", [0x7E]), + new Sprite("GuruguruBarCCW", [0x7F]), + new Sprite("Winder", [0x80]), + new Sprite("WaterTektite", [0x81]), + new Sprite("AntifairyCircle", [0x82]), + new Sprite("EyegoreGreen", [0x83]), + new Sprite("EyegoreRed", [0x84]), + new Sprite("StalfosYellow", [0x85]), + new Sprite("Kodongos", [0x86]), + new Sprite("Flames", [0x87]), + new Sprite("Mothula", [0x88]), + new Sprite("MothulaBeam", [0x89]), + new Sprite("SpikeTrap", [0x8A]), + new Sprite("Gibdo", [0x8B]), + new Sprite("Arrghus", [0x8C]), + new Sprite("ArrghusSpawn", [0x8D]), + new Sprite("Terrorpin", [0x8E]), + new Sprite("Slime", [0x8F]), + new Sprite("Wallmaster", [0x90]), + new Sprite("StalfosKnight", [0x91]), + new Sprite("Helmasaur", [0x92]), + new Sprite("Bumper", [0x93]), + new Sprite("Swimmers", [0x94]), + new Sprite("EyeLaserR", [0x95]), + new Sprite("EyeLaserL", [0x96]), + new Sprite("EyeLaserD", [0x97]), + new Sprite("EyeLaserU", [0x98]), + new Sprite("Pengator", [0x99]), + new Sprite("Kyameron", [0x9A]), + new Sprite("Wizzrobe", [0x9B]), + new Sprite("Tadpoles", [0x9C]), + new Sprite("Tadpoles2", [0x9D]), + new Sprite("Ostrich", [0x9E]), + new Sprite("Flute", [0x9F]), + new Sprite("Bird", [0xA0]), + new Sprite("Freezor", [0xA1]), + new Sprite("Kholdstare", [0xA2]), + new Sprite("KholdstareShell", [0xA3]), + new Sprite("FallingIce", [0xA4]), + new Sprite("ZazakFireball", [0xA5]), + new Sprite("ZazakRed", [0xA6]), + new Sprite("Stalfos", [0xA7]), + new Sprite("Zirro", [0xA8]), + new Sprite("Zirro2", [0xA9]), + new Sprite("Pikit", [0xAA]), + new Sprite("Maiden", [0xAB]), + new Sprite("Apple", [0xAC]), + new Sprite("LostOldMan", [0xAD]), + new Sprite("PipeD", [0xAE]), + new Sprite("PipeU", [0xAF]), + new Sprite("PipeR", [0xB0]), + new Sprite("PipeL", [0xB1]), + new Sprite\Droppable("BeeGood", [0xB2]), // released bee + new Sprite("HylianInscription", [0xB3]), + new Sprite("PurpleChest", [0xB4]), + new Sprite("BombSalesman", [0xB5]), + new Sprite("Kiki", [0xB6]), + new Sprite("BlindMaiden", [0xB7]), + new Sprite("Monologue", [0xB8]), + new Sprite("FeudingFriends", [0xB9]), + new Sprite("Whirlpool", [0xBA]), + new Sprite("Salesman", [0xBB]), + new Sprite("Drunk", [0xBC]), + new Sprite("Vitreous", [0xBD]), + new Sprite("VitreousSmallEyeball", [0xBE]), + new Sprite("VitreousLightning", [0xBF]), + new Sprite("Catfish", [0xC0]), + new Sprite("AgahnimTeleporting", [0xC1]), + new Sprite("Boulders", [0xC2]), + new Sprite("Gibo", [0xC3]), + new Sprite("Thief", [0xC4]), + new Sprite("Medusa", [0xC5]), + new Sprite("YomoMedusa", [0xC6]), + new Sprite("HokkuBokku", [0xC7]), + new Sprite("FairyBig", [0xC8]), + new Sprite("Tektite", [0xC9]), + new Sprite("ChainChomp", [0xCA]), + new Sprite("Trinexx", [0xCB]), + new Sprite("TrinexxHeadFire", [0xCC]), // might be wrong + new Sprite("TrinexxHeadIce", [0xCD]), // might be wrong + new Sprite("Blind", [0xCE]), + new Sprite("Swamola", [0xCF]), + new Sprite("Lynel", [0xD0]), + new Sprite("BunnyBeam", [0xD1]), + new Sprite("FloppingFish", [0xD2]), + new Sprite("Stal", [0xD3]), + new Sprite("Landmine", [0xD4]), + new Sprite("DiggingGameNPC", [0xD5]), + new Sprite("Ganon", [0xD6]), + new Sprite("GanonInvisible", [0xD7]), + new Sprite\Droppable("Heart", [0xD8]), + new Sprite\Droppable("RupeeGreen", [0xD9]), + new Sprite\Droppable("RupeeBlue", [0xDA]), + new Sprite\Droppable("RupeeRed", [0xDB]), + new Sprite\Droppable("BombRefill1", [0xDC]), + new Sprite\Droppable("BombRefill4", [0xDD]), + new Sprite\Droppable("BombRefill8", [0xDE]), + new Sprite\Droppable("MagicRefillSmall", [0xDF]), + new Sprite\Droppable("MagicRefillFull", [0xE0]), + new Sprite\Droppable("ArrowRefill5", [0xE1]), + new Sprite\Droppable("ArrowRefill10", [0xE2]), + new Sprite\Droppable("Fairy", [0xE3]), + new Sprite("Key", [0xE4]), + new Sprite("BigKey", [0xE5]), + new Sprite("Shield", [0xE6]), + new Sprite("Mushroom", [0xE7]), + new Sprite("FakeMasterSword", [0xE8]), + new Sprite("MagicShopDude", [0xE9]), + new Sprite("HeartContainer", [0xEA]), + new Sprite("HeartPiece", [0xEB]), + new Sprite("Bush", [0xEC]), + new Sprite("SomariaPlatform", [0xED]), + new Sprite("Mantle", [0xEE]), + new Sprite("SomariaPlatform1", [0xEF]), + new Sprite("SomariaPlatform2", [0xF0]), + new Sprite("SomariaPlatform3", [0xF1]), + new Sprite("MedallionTablet", [0xF2]), + ]); + return static::all(); + } - /** - * Get the all known Sprites - * - * @return SpriteCollection - */ - static public function all() { - if (static::$items) { - return static::$items; - } + /** + * Create a new Sprite + * + * @param string $name Unique name of item + * @param array $bytes data to write to Location addresses + * @param array|null $address Addresses in ROM to write back Location data if set + * + * @return void + */ + public function __construct($name, array $bytes, array $address = null) + { + $this->name = $name; + $this->nice_name = 'sprite.' . $name; + $this->bytes = $bytes; + $this->address = (array) $address; + } - static::$items = new SpriteCollection([ - new Sprite("Raven", "Raven", [0x00]), - new Sprite("Vulture", "Vulture", [0x01]), - new Sprite("FlyingStalfosHead", "Flying Stalfos Head", [0x02]), - new Sprite("Empty", "Empty", [0x03]), - new Sprite("PullSwitchGood", "Pull Switch (Good)", [0x04]), - new Sprite("PullSwitch1", "Pull Switch (Unused)", [0x05]), - new Sprite("PullSwitchBad", "Pull Switch (Bad)", [0x06]), - new Sprite("PullSwitch2", "Pull Switch (Unused)", [0x07]), - new Sprite("Octorok1", "Octorok (One Way)", [0x08]), - new Sprite("Moldorm", "Moldorm (Boss)", [0x09]), - new Sprite("Octorok4", "Octorok (Four Way)", [0x0A]), - new Sprite("Chicken", "Chicken", [0x0B]), - new Sprite("Octorok", "Octorok (?)", [0x0C]), - new Sprite("Buzzblob", "Buzzblob", [0x0D]), - new Sprite("Snapdragon", "Snapdragon", [0x0E]), - new Sprite("Octoballoon", "Octoballoon", [0x0F]), - new Sprite("OctoballoonHatchlings", "Octoballoon Hatchlings", [0x10]), - new Sprite("Hinox", "Hinox", [0x11]), - new Sprite("Moblin", "Moblin", [0x12]), - new Sprite("MiniHelmasaur", "Mini Helmasaur", [0x13]), - new Sprite("ForkGate", "Gargoyle's Domain Gate", [0x14]), - new Sprite("Antifairy", "Antifairy", [0x15]), - new Sprite("Sahasrahla", "Sahasrahla / Aginah", [0x16]), - new Sprite("BushHoarder", "Bush Hoarder", [0x17]), - new Sprite("MiniMoldorm", "Mini Moldorm", [0x18]), - new Sprite("Poe", "Poe", [0x19]), - new Sprite("Dwarves", "Dwarves", [0x1A]), - new Sprite("WallArrow", "Arrow in wall?", [0x1B]), - new Sprite("Statue", "Statue", [0x1C]), - new Sprite("Weathervane", "Weathervane", [0x1D]), - new Sprite("CrystalSwitch", "Crystal Switch", [0x1E]), - new Sprite("SickKid", "Bug-Catching Kid", [0x1F]), - new Sprite("Sluggula", "Sluggula", [0x20]), - new Sprite("PushSwitch", "Push Switch", [0x21]), - new Sprite("Ropa", "Ropa", [0x22]), - new Sprite("RedBari", "Red Bari", [0x23]), - new Sprite("BlueBari", "Blue Bari", [0x24]), - new Sprite("TalkingTree", "Talking Tree", [0x25]), - new Sprite("HardhatBeetle", "Hardhat Beetle", [0x26]), - new Sprite("Deadrock", "Deadrock", [0x27]), - new Sprite("Storytellers", "Storytellers", [0x28]), - new Sprite("BlindHistorian", "Blind Hideout attendant", [0x29]), - new Sprite("SweepingLady", "Sweeping Lady", [0x2A]), - new Sprite("Multipurpose", "Multipurpose Sprite", [0x2B]), - new Sprite("Lumberjacks", "Lumberjacks", [0x2C]), - new Sprite("TelepathicStones", "Telepathic stones? (No idea what this actually is, likely unused)", [0x2D]), - new Sprite("FluteBoyNotes", "Flute Boy's Notes", [0x2E]), - new Sprite("RaceNPCs", "Race HP NPCs", [0x2F]), - new Sprite("Person", "Person?", [0x30]), - new Sprite("FortuneTeller", "Fortune Teller", [0x31]), - new Sprite("AngryBrothers", "Angry Brothers", [0x32]), - new Sprite("PullForRupees", "Pull For Rupees Sprite", [0x33]), - new Sprite("ScaredGirl2", "Scared Girl 2", [0x34]), - new Sprite("Innkeeper", "Innkeeper", [0x35]), - new Sprite("Potion Shop", "Potion Shop", [0x36]), - new Sprite("Waterfall", "Waterfall", [0x37]), - new Sprite("ArrowTarget", "Arrow Target", [0x38]), - new Sprite("AverageMan", "Average Middle-Aged Man", [0x39]), - new Sprite("MagicBat", "Half Magic Bat", [0x3A]), - new Sprite("DashItem", "Dash Item", [0x3B]), - new Sprite("VillageKid", "Village Kid", [0x3C]), - new Sprite("Sign", "Signs? Chicken lady also showed up / Scared ladies outside houses.", [0x3D]), - new Sprite("RockHoarder", "Rock Hoarder", [0x3E]), - new Sprite("TutorialSoldier", "Tutorial Soldier", [0x3F]), - new Sprite("LightningLock", "Lightning Lock", [0x40]), - new Sprite("BlueSwordSoldier", "Blue Sword Soldier / Used by guards to detect player", [0x41]), - new Sprite("GreenSwordSoldier", "Green Sword Soldier", [0x42]), - new Sprite("RedSpearSoldier", "Red Spear Soldier", [0x43]), - new Sprite("AssaultSwordSoldier", "Assault Sword Soldier", [0x44]), - new Sprite("GreenSpearSoldier", "Green Spear Soldier", [0x45]), - new Sprite("BlueArcher", "Blue Archer", [0x46]), - new Sprite("GreenArcher", "Green Archer", [0x47]), - new Sprite("RedJavelinSolider", "Red Javelin Soldier", [0x48]), - new Sprite("RedJavelinSolider2", "Red Javelin Soldier 2", [0x49]), - new Sprite("RedBombSolider", "Red Bomb Soldiers", [0x4A]), - new Sprite("GreenSoldierRecruit", "Green Soldier Recruits", [0x4B]), - new Sprite("Geldman", "Geldman", [0x4C]), - new Sprite("Rabbit", "Rabbit", [0x4D]), - new Sprite("Popo", "Popo", [0x4E]), - new Sprite("Popo2", "Popo 2", [0x4F]), - new Sprite("CannonBall", "Cannon Balls", [0x50]), - new Sprite("Armos", "Armos", [0x51]), - new Sprite("KingZora", "Giant Zora", [0x52]), - new Sprite("ArmosKnights", "Armos Knights (Boss)", [0x53]), - new Sprite("Lanmolas", "Lanmolas (Boss)", [0x54]), - new Sprite("FireballZora", "Fireball Zora", [0x55]), - new Sprite("WalkingZora", "Walking Zora", [0x56]), - new Sprite("DesertPalaceBarrier", "Desert Palace Barriers", [0x57]), - new Sprite("Crab", "Crab", [0x58]), - new Sprite("Bird", "Bird", [0x59]), - new Sprite("Squirrel", "Squirrel", [0x5A]), - new Sprite("SparkLR", "Spark (Left to Right)", [0x5B]), - new Sprite("SparkRL", "Spark (Right to Left)", [0x5C]), - new Sprite("RollerV1", "Roller (vertical moving)", [0x5D]), - new Sprite("RollerV2", "Roller (vertical moving)", [0x5E]), - new Sprite("Roller", "Roller", [0x5F]), - new Sprite("RollerH", "Roller (horizontal moving)", [0x60]), - new Sprite("Beamos", "Beamos", [0x61]), - new Sprite("MasterSword", "Master Sword", [0x62]), - new Sprite("Devalant", "Devalant (Non-shooter)", [0x63]), - new Sprite("DevalantShooter", "Devalant (Shooter)", [0x64]), - new Sprite("ShootingGalleryNPC", "Shooting Gallery Proprietor", [0x65]), - new Sprite("CannonBallShooterR", "Moving Cannon Ball Shooters (Right)", [0x66]), - new Sprite("CannonBallShooterL", "Moving Cannon Ball Shooters (Left)", [0x67]), - new Sprite("CannonBallShooterD", "Moving Cannon Ball Shooters (Down)", [0x68]), - new Sprite("CannonBallShooterU", "Moving Cannon Ball Shooters (Up)", [0x69]), - new Sprite("BallNChainTrooper", "Ball N' Chain Trooper", [0x6A]), - new Sprite("CannonSoldier", "Cannon Soldier", [0x6B]), - new Sprite("MirrorPortal", "Mirror Portal", [0x6C]), - new Sprite("Rat", "Rat", [0x6D]), - new Sprite("Rope", "Rope", [0x6E]), - new Sprite("Keese", "Keese", [0x6F]), - new Sprite("HelmasaurFireball", "Helmasaur King Fireball", [0x70]), - new Sprite("Leever", "Leever", [0x71]), - new Sprite("PondActivation", "Activator for the ponds (where you throw in items)", [0x72]), - new Sprite("Link's Uncle", "Uncle / Priest", [0x73]), - new Sprite("RunningMan", "Running Man", [0x74]), - new Sprite("BottleSalesman", "Bottle Salesman", [0x75]), - new Sprite("Zelda", "Princess Zelda", [0x76]), - new Sprite("Antifairy2", "Antifairy (Alternate)", [0x77]), - new Sprite("VillageElder", "Village Elder", [0x78]), - new Sprite\Droppable("Bee", "Bee Swarm", [0x79]), // Bee hoard? - new Sprite("Agahnim", "Agahnim", [0x7A]), - new Sprite("AgahnimBall", "Agahnim Energy Ball", [0x7B]), - new Sprite("Hyu", "Hyu", [0x7C]), - new Sprite("BigSpikeTrap", "Big Spike Trap", [0x7D]), - new Sprite("GuruguruBarCW", "Guruguru Bar (Clockwise)", [0x7E]), - new Sprite("GuruguruBarCCW", "Guruguru Bar (Counter Clockwise)", [0x7F]), - new Sprite("Winder", "Winder", [0x80]), - new Sprite("WaterTektite", "Water Tektite", [0x81]), - new Sprite("AntifairyCircle", "Antifairy Circle", [0x82]), - new Sprite("EyegoreGreen", "Green Eyegore", [0x83]), - new Sprite("EyegoreRed", "Red Eyegore", [0x84]), - new Sprite("StalfosYellow", "Yellow Stalfos", [0x85]), - new Sprite("Kodongos", "Kodongos", [0x86]), - new Sprite("Flames", "Flames", [0x87]), - new Sprite("Mothula", "Mothula (Boss)", [0x88]), - new Sprite("MothulaBeam", "Mothula's Beam", [0x89]), - new Sprite("SpikeTrap", "Spike Trap", [0x8A]), - new Sprite("Gibdo", "Gibdo", [0x8B]), - new Sprite("Arrghus", "Arrghus (Boss)", [0x8C]), - new Sprite("ArrghusSpawn", "Arrghus spawn", [0x8D]), - new Sprite("Terrorpin", "Terrorpin", [0x8E]), - new Sprite("Slime", "Slime", [0x8F]), - new Sprite("Wallmaster", "Wallmaster", [0x90]), - new Sprite("StalfosKnight", "Stalfos Knight", [0x91]), - new Sprite("Helmasaur", "Helmasaur King", [0x92]), - new Sprite("Bumper", "Bumper", [0x93]), - new Sprite("Swimmers", "Swimmers", [0x94]), - new Sprite("EyeLaserR", "Eye Laser (Right)", [0x95]), - new Sprite("EyeLaserL", "Eye Laser (Left)", [0x96]), - new Sprite("EyeLaserD", "Eye Laser (Down)", [0x97]), - new Sprite("EyeLaserU", "Eye Laser (Up)", [0x98]), - new Sprite("Pengator", "Pengator", [0x99]), - new Sprite("Kyameron", "Kyameron", [0x9A]), - new Sprite("Wizzrobe", "Wizzrobe", [0x9B]), - new Sprite("Tadpoles", "Tadpoles", [0x9C]), - new Sprite("Tadpoles2", "Tadpoles", [0x9D]), - new Sprite("Ostrich", "Ostrich (Haunted Grove)", [0x9E]), - new Sprite("Flute", "Flute", [0x9F]), - new Sprite("Bird", "Birds (Haunted Grove)", [0xA0]), - new Sprite("Freezor", "Freezor", [0xA1]), - new Sprite("Kholdstare", "Kholdstare (Boss)", [0xA2]), - new Sprite("KholdstareShell", "Kholdstare's Shell", [0xA3]), - new Sprite("FallingIce", "Falling Ice", [0xA4]), - new Sprite("ZazakFireball", "Zazak Fireball", [0xA5]), - new Sprite("ZazakRed", "Red Zazak", [0xA6]), - new Sprite("Stalfos", "Stalfos", [0xA7]), - new Sprite("Zirro", "Bomber Flying Creatures from Darkworld", [0xA8]), - new Sprite("Zirro2", "Bomber Flying Creatures from Darkworld", [0xA9]), - new Sprite("Pikit", "Pikit", [0xAA]), - new Sprite("Maiden", "Maiden", [0xAB]), - new Sprite("Apple", "Apple", [0xAC]), - new Sprite("LostOldMan", "Lost Old Man", [0xAD]), - new Sprite("PipeD", "Down Pipe", [0xAE]), - new Sprite("PipeU", "Up Pipe", [0xAF]), - new Sprite("PipeR", "Right Pipe", [0xB0]), - new Sprite("PipeL", "Left Pipe", [0xB1]), - new Sprite\Droppable("BeeGood", "Good Bee", [0xB2]), // released bee - new Sprite("HylianInscription", "Hylian Inscription", [0xB3]), - new Sprite("PurpleChest", "Thief's chest (not the one that follows you, the one that you grab from the DW smithy house)", [0xB4]), - new Sprite("BombSalesman", "Bomb Salesman", [0xB5]), - new Sprite("Kiki", "Kiki", [0xB6]), - new Sprite("BlindMaiden", "Maiden following you in Blind Dungeon", [0xB7]), - new Sprite("Monologue", "Monologue Testing Sprite", [0xB8]), - new Sprite("FeudingFriends", "Feuding Friends on Death Mountain", [0xB9]), - new Sprite("Whirlpool", "Whirlpool", [0xBA]), - new Sprite("Salesman", "Salesman / chestgame guy / 300 rupee giver guy / Chest game thief", [0xBB]), - new Sprite("Drunk", "Drunk in the inn", [0xBC]), - new Sprite("Vitreous", "Vitreous (Large Eyeball)", [0xBD]), - new Sprite("VitreousSmallEyeball", "Vitreous (Small Eyeball)", [0xBE]), - new Sprite("VitreousLightning", "Vitreous' Lightning", [0xBF]), - new Sprite("Catfish", "Monster in Lake of Ill Omen / Quake Medallion", [0xC0]), - new Sprite("AgahnimTeleporting", "Agahnim teleporting Zelda to dark world", [0xC1]), - new Sprite("Boulders", "Boulders", [0xC2]), - new Sprite("Gibo", "Gibo", [0xC3]), - new Sprite("Thief", "Thief", [0xC4]), - new Sprite("Medusa", "Medusa", [0xC5]), - new Sprite("YomoMedusa", "Yomo Medusa", [0xC6]), - new Sprite("HokkuBokku", "Hokku-Bokku", [0xC7]), - new Sprite("FairyBig", "Big Fairy who heals you", [0xC8]), - new Sprite("Tektite", "Tektite", [0xC9]), - new Sprite("ChainChomp", "Chain Chomp", [0xCA]), - new Sprite("Trinexx", "Trinexx", [0xCB]), - new Sprite("TrinexxHeadFire", "Another part of trinexx", [0xCC]), // might be wrong - new Sprite("TrinexxHeadIce", "Yet another part of trinexx", [0xCD]), // might be wrong - new Sprite("Blind", "Blind The Thief (Boss)", [0xCE]), - new Sprite("Swamola", "Swamola", [0xCF]), - new Sprite("Lynel", "Lynel", [0xD0]), - new Sprite("BunnyBeam", "Bunny Beam", [0xD1]), - new Sprite("FloppingFish", "Flopping Fish", [0xD2]), - new Sprite("Stal", "Stal", [0xD3]), - new Sprite("Landmine", "Landmine", [0xD4]), - new Sprite("DiggingGameNPC", "Digging Game Proprietor", [0xD5]), - new Sprite("Ganon", "Ganon", [0xD6]), - new Sprite("GanonInvisible", "Copy of Ganon, except invincible?", [0xD7]), - new Sprite\Droppable("Heart", "Heart", [0xD8]), - new Sprite\Droppable("RupeeGreen", "Green Rupee", [0xD9]), - new Sprite\Droppable("RupeeBlue", "Blue Rupee", [0xDA]), - new Sprite\Droppable("RupeeRed", "Red Rupee", [0xDB]), - new Sprite\Droppable("BombRefill1", "Bomb Refill (1)", [0xDC]), - new Sprite\Droppable("BombRefill4", "Bomb Refill (4)", [0xDD]), - new Sprite\Droppable("BombRefill8", "Bomb Refill (8)", [0xDE]), - new Sprite\Droppable("MagicRefillSmall", "Small Magic Refill", [0xDF]), - new Sprite\Droppable("MagicRefillFull", "Full Magic Refill", [0xE0]), - new Sprite\Droppable("ArrowRefill5", "Arrow Refill (5)", [0xE1]), - new Sprite\Droppable("ArrowRefill10", "Arrow Refill (10)", [0xE2]), - new Sprite\Droppable("Fairy", "Fairy", [0xE3]), - new Sprite("Key", "Key", [0xE4]), - new Sprite("BigKey", "Big Key", [0xE5]), - new Sprite("Shield", "Shield", [0xE6]), - new Sprite("Mushroom", "Mushroom", [0xE7]), - new Sprite("FakeMasterSword", "Fake Master Sword", [0xE8]), - new Sprite("MagicShopDude", "Magic Shop dude / His items, including the magic powder", [0xE9]), - new Sprite("HeartContainer", "Heart Container", [0xEA]), - new Sprite("HeartPiece", "Heart Piece", [0xEB]), - new Sprite("Bush", "Bushes", [0xEC]), - new Sprite("SomariaPlatform", "Cane Of Somaria Platform", [0xED]), - new Sprite("Mantle", "Mantle", [0xEE]), - new Sprite("SomariaPlatform1", "Cane of Somaria Platform (Unused)", [0xEF]), - new Sprite("SomariaPlatform2", "Cane of Somaria Platform (Unused)", [0xF0]), - new Sprite("SomariaPlatform3", "Cane of Somaria Platform (Unused)", [0xF1]), - new Sprite("MedallionTablet", "Medallion Tablet", [0xF2]), - ]); - return static::all(); - } + /** + * Get the name of this Sprite. + * + * @return string + */ + public function getName() + { + return $this->name; + } - /** - * Create a new Sprite - * - * @param string $name Unique name of item - * @param string $nice_name Well formatted name for item - * @param array $bytes data to write to Location addresses - * @param array|null $address Addresses in ROM to write back Location data if set - * - * @return void - */ - public function __construct($name, $nice_name, array $bytes, array $address = null) { - $this->name = $name; - $this->nice_name = $nice_name; - $this->bytes = $bytes; - $this->address = (array) $address; - } + /** + * Get the nice name of this Sprite. + * + * @return string + */ + public function getNiceName(): string + { + $formatted = __($this->nice_name); - /** - * Get the name of this Sprite - * - * @return string - */ - public function getName() { - return $this->name; - } + return is_string($formatted) ? $formatted : ''; + } - /** - * Get the nice name of this Sprite - * - * @return string - */ - public function getNiceName() { - return $this->nice_name; - } + /** + * Get the i18n string of this Sprite. + * + * @return string + */ + public function getI18nName(): string + { + return $this->nice_name; + } - /** - * Get the bytes to write - * - * @return array - */ - public function getBytes() { - return $this->bytes; - } + /** + * Get the bytes to write + * + * @return array + */ + public function getBytes() + { + return $this->bytes; + } - /** - * Get the addresses to write to - * - * @return array - */ - public function getAddress() { - return $this->address; - } + /** + * Get the addresses to write to + * + * @return array + */ + public function getAddress() + { + return $this->address; + } - /** - * converts 4bpp 8x8 to palette reference at a given offset - * - * @author Zarby89 - * - * @param array $sprite byte array of gfx data - * @param int $pos position in stream to pull 8x8 from - * - * @return array - */ - static public function load8x8(array $sprite, int $pos = 0) { - //pos = 32 bytes to read per 8x8 tiles, will return an array of 64bytes - $positions = [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]; - $temp_array = []; - for ($x = 0; $x < 8; $x++) { - for ($y = 0; $y < 8; $y++) { - $tmpbyte = 0; - //There's 4 bit per pixel, 2 at the start, 2 at the middle, for every pixels - //so we read all of them in order up to 32 byte - if (($sprite[$pos + ($x * 2)] & $positions[$y]) == $positions[$y]) { $tmpbyte += 1; } - if (($sprite[$pos + ($x * 2) + 1] & $positions[$y]) == $positions[$y]) { $tmpbyte += 2; } - if (($sprite[$pos + 16 + ($x * 2)] & $positions[$y]) == $positions[$y]) { $tmpbyte += 4; } - if (($sprite[$pos + 16 + ($x * 2) + 1] & $positions[$y]) == $positions[$y]) { $tmpbyte += 8; } - $temp_array[$y + ($x * 8)] = $tmpbyte; - } - } + /** + * converts 4bpp 8x8 to palette reference at a given offset + * + * @author Zarby89 + * + * @param array $sprite byte array of gfx data + * @param int $pos position in stream to pull 8x8 from + * + * @return array + */ + public static function load8x8(array $sprite, int $pos = 0) + { + //pos = 32 bytes to read per 8x8 tiles, will return an array of 64bytes + $positions = [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]; + $temp_array = []; + for ($x = 0; $x < 8; $x++) { + for ($y = 0; $y < 8; $y++) { + $tmpbyte = 0; + //There's 4 bit per pixel, 2 at the start, 2 at the middle, for every pixels + //so we read all of them in order up to 32 byte + if (($sprite[$pos + ($x * 2)] & $positions[$y]) == $positions[$y]) { + $tmpbyte += 1; + } + if (($sprite[$pos + ($x * 2) + 1] & $positions[$y]) == $positions[$y]) { + $tmpbyte += 2; + } + if (($sprite[$pos + 16 + ($x * 2)] & $positions[$y]) == $positions[$y]) { + $tmpbyte += 4; + } + if (($sprite[$pos + 16 + ($x * 2) + 1] & $positions[$y]) == $positions[$y]) { + $tmpbyte += 8; + } + $temp_array[$y + ($x * 8)] = $tmpbyte; + } + } - return $temp_array; - } + return $temp_array; + } - /** - * converts 4bpp 16x16 to palette reference at a given offset - * - * @author Zarby89 - * - * @param array $sprite byte array of gfx data - * @param int $pos position in stream to pull 8x8 from - * - * @return array - */ - static public function load16x16(array $sprite, int $pos = 0) { - //pos 0x40 = head facing down, pos 0x4C0 = body facing down - $temp_array = array_fill(0, 16, []); - $top_left = static::load8x8($sprite, $pos ); - $top_right = static::load8x8($sprite, $pos + 0x20); - $bottom_left = static::load8x8($sprite, $pos + 0x200); - $bottom_right = static::load8x8($sprite, $pos + 0x200 + 0x20); + /** + * converts 4bpp 16x16 to palette reference at a given offset + * + * @author Zarby89 + * + * @param array $sprite byte array of gfx data + * @param int $pos position in stream to pull 8x8 from + * + * @return array + */ + public static function load16x16(array $sprite, int $pos = 0) + { + //pos 0x40 = head facing down, pos 0x4C0 = body facing down + $temp_array = array_fill(0, 16, []); + $top_left = static::load8x8($sprite, $pos); + $top_right = static::load8x8($sprite, $pos + 0x20); + $bottom_left = static::load8x8($sprite, $pos + 0x200); + $bottom_right = static::load8x8($sprite, $pos + 0x200 + 0x20); - //copy all the bytes at the correct position in the 2d array - for($x = 0; $x < 8; $x++) { - for ($y = 0; $y < 8; $y++) { - $temp_array[$x][$y] = $top_left[$x + ($y * 8)]; - $temp_array[$x + 8][$y] = $top_right[$x + ($y * 8)]; - $temp_array[$x][$y + 8] = $bottom_left[$x + ($y * 8)]; - $temp_array[$x + 8][$y + 8] = $bottom_right[$x + ($y * 8)]; - } - } - return $temp_array; - } + //copy all the bytes at the correct position in the 2d array + for ($x = 0; $x < 8; $x++) { + for ($y = 0; $y < 8; $y++) { + $temp_array[$x][$y] = $top_left[$x + ($y * 8)]; + $temp_array[$x + 8][$y] = $top_right[$x + ($y * 8)]; + $temp_array[$x][$y + 8] = $bottom_left[$x + ($y * 8)]; + $temp_array[$x + 8][$y + 8] = $bottom_right[$x + ($y * 8)]; + } + } + return $temp_array; + } - public function dumpBinBlock(Rom $rom) { - return [ - '0x6B080' => sprintf("%08b", $rom->read(0x6B080 + $this->bytes[0], 1)), - '0x6B173' => sprintf("%08b", $rom->read(0x6B173 + $this->bytes[0], 1)), - '0x6B266' => sprintf("%08b", $rom->read(0x6B266 + $this->bytes[0], 1)), - '0x6B359' => sprintf("%08b", $rom->read(0x6B359 + $this->bytes[0], 1)), - '0x6B44C' => sprintf("%08b", $rom->read(0x6B44C + $this->bytes[0], 1)), - '0x6B53F' => sprintf("%08b", $rom->read(0x6B53F + $this->bytes[0], 1)), - '0x6B632' => sprintf("%08b", $rom->read(0x6B632 + $this->bytes[0], 1)), - '0x6B725' => sprintf("%08b", $rom->read(0x6B725 + $this->bytes[0], 1)), - ]; - } + public function dumpBinBlock(Rom $rom) + { + return [ + '0x6B080' => sprintf("%08b", $rom->readByte(0x6B080 + (int) $this->bytes[0])), + '0x6B173' => sprintf("%08b", $rom->readByte(0x6B173 + (int) $this->bytes[0])), + '0x6B266' => sprintf("%08b", $rom->readByte(0x6B266 + (int) $this->bytes[0])), + '0x6B359' => sprintf("%08b", $rom->readByte(0x6B359 + (int) $this->bytes[0])), + '0x6B44C' => sprintf("%08b", $rom->readByte(0x6B44C + (int) $this->bytes[0])), + '0x6B53F' => sprintf("%08b", $rom->readByte(0x6B53F + (int) $this->bytes[0])), + '0x6B632' => sprintf("%08b", $rom->readByte(0x6B632 + (int) $this->bytes[0])), + '0x6B725' => sprintf("%08b", $rom->readByte(0x6B725 + (int) $this->bytes[0])), + ]; + } - public function readPropertiesFromRom(Rom $rom) { - $bytes = [ - $rom->read(0x6B080 + $this->bytes[0], 1), - $rom->read(0x6B173 + $this->bytes[0], 1), - $rom->read(0x6B266 + $this->bytes[0], 1), - $rom->read(0x6B359 + $this->bytes[0], 1), - $rom->read(0x6B44C + $this->bytes[0], 1), - $rom->read(0x6B53F + $this->bytes[0], 1), - $rom->read(0x6B632 + $this->bytes[0], 1), - $rom->read(0x6B725 + $this->bytes[0], 1), - ]; + public function readPropertiesFromRom(Rom $rom) + { + $bytes = [ + $rom->readByte(0x6B080 + (int) $this->bytes[0]), + $rom->readByte(0x6B173 + (int) $this->bytes[0]), + $rom->readByte(0x6B266 + (int) $this->bytes[0]), + $rom->readByte(0x6B359 + (int) $this->bytes[0]), + $rom->readByte(0x6B44C + (int) $this->bytes[0]), + $rom->readByte(0x6B53F + (int) $this->bytes[0]), + $rom->readByte(0x6B632 + (int) $this->bytes[0]), + $rom->readByte(0x6B725 + (int) $this->bytes[0]), + ]; - // these need to be bit shifted with mask, otherwise the "flag" might appear wrong - return [ - 'harmless' => $bytes[0] >> 7 & 1, - 'mastersword_ceremony' => $bytes[0] >> 6 & 1, - 'towards_walls' => $bytes[0] >> 5 & 1, - 'visibility' => $bytes[0] & 0x1F, - 'hit_points' => $bytes[1], - 'damage_type' => $bytes[2] & 0x0F, - 'unknown' => $bytes[2] >> 4, - 'death_animation_extra' => $bytes[3] >> 7 & 1, - 'invincible' => $bytes[3] >> 6 & 1, - 'width' => $bytes[3] >> 5 & 1, - 'shadow' => $bytes[3] >> 4 & 1, - 'palette' => $bytes[3] >> 1 & 0x07, - 'unknown2' => $bytes[3] & 1, - 'ignore_collision' => $bytes[4] >> 7 & 1, - 'statis' => $bytes[4] >> 6 & 1, - 'persist' => $bytes[4] >> 5 & 1, - 'hitbox' => $bytes[4] & 0x1F, - 'hitbox_interaction' => $bytes[5] >> 4, - 'deflect_arrows' => $bytes[5] >> 3 & 1, - 'unknown4' => $bytes[5] >> 2 & 1, - 'death_boss' => $bytes[5] >> 1 & 1, - 'falls_in_holes' => $bytes[5] & 1, - 'disable_interactions' => $bytes[6] >> 7 & 1, - 'water' => $bytes[6] >> 6 & 1, - 'shield_destruction' => $bytes[6] >> 5 & 1, - 'damage_sound' => $bytes[6] >> 4 & 1, - 'prize_pack' => $bytes[6] & 0x0F, - 'death_conditional' => $bytes[7] >> 7 & 1, - 'death_conditional2' => $bytes[7] >> 6 & 1, - 'unused2' => $bytes[7] >> 5 & 1, - 'deflect_missles' => $bytes[7] >> 4 & 1, - 'collide_less' => $bytes[7] >> 3 & 1, - 'impervious_sword_hammer' => $bytes[7] >> 2 & 1, - 'impervious_arrows' => $bytes[7] >> 1 & 1, - 'disabled' => $bytes[7] & 1, - ]; - } + // these need to be bit shifted with mask, otherwise the "flag" might appear wrong + return [ + 'harmless' => $bytes[0] >> 7 & 1, + 'mastersword_ceremony' => $bytes[0] >> 6 & 1, + 'towards_walls' => $bytes[0] >> 5 & 1, + 'visibility' => $bytes[0] & 0x1F, + 'hit_points' => $bytes[1], + 'damage_type' => $bytes[2] & 0x0F, + 'unknown' => $bytes[2] >> 4, + 'death_animation_extra' => $bytes[3] >> 7 & 1, + 'invincible' => $bytes[3] >> 6 & 1, + 'width' => $bytes[3] >> 5 & 1, + 'shadow' => $bytes[3] >> 4 & 1, + 'palette' => $bytes[3] >> 1 & 0x07, + 'unknown2' => $bytes[3] & 1, + 'ignore_collision' => $bytes[4] >> 7 & 1, + 'statis' => $bytes[4] >> 6 & 1, + 'persist' => $bytes[4] >> 5 & 1, + 'hitbox' => $bytes[4] & 0x1F, + 'hitbox_interaction' => $bytes[5] >> 4, + 'deflect_arrows' => $bytes[5] >> 3 & 1, + 'unknown4' => $bytes[5] >> 2 & 1, + 'death_boss' => $bytes[5] >> 1 & 1, + 'falls_in_holes' => $bytes[5] & 1, + 'disable_interactions' => $bytes[6] >> 7 & 1, + 'water' => $bytes[6] >> 6 & 1, + 'shield_destruction' => $bytes[6] >> 5 & 1, + 'damage_sound' => $bytes[6] >> 4 & 1, + 'prize_pack' => $bytes[6] & 0x0F, + 'death_conditional' => $bytes[7] >> 7 & 1, + 'death_conditional2' => $bytes[7] >> 6 & 1, + 'unused2' => $bytes[7] >> 5 & 1, + 'deflect_missles' => $bytes[7] >> 4 & 1, + 'collide_less' => $bytes[7] >> 3 & 1, + 'impervious_sword_hammer' => $bytes[7] >> 2 & 1, + 'impervious_arrows' => $bytes[7] >> 1 & 1, + 'disabled' => $bytes[7] & 1, + ]; + } - /** - * serialized version of Sprite - * - * @return string - */ - public function __toString() { - return $this->name . serialize($this->bytes); - } + /** + * serialized version of Sprite + * + * @return string + */ + public function __toString() + { + return $this->name . serialize($this->bytes); + } } diff --git a/app/Sprite/Droppable.php b/app/Sprite/Droppable.php index 58cebe2eb..d82642e4b 100644 --- a/app/Sprite/Droppable.php +++ b/app/Sprite/Droppable.php @@ -1,10 +1,11 @@ -getArrayableItems($items) as $item) { - $this->addItem($item); - } - } +class BossCollection extends Collection +{ + /** + * Create a new collection. + * + * @param mixed $items + * + * @return void + */ + public function __construct($items = []) + { + parent::__construct($items); + + $this->items = []; + + foreach ($this->getArrayableItems($items) as $item) { + $this->addItem($item); + } + } - /** - * Add a Boss to this Collection - * - * @param Boss $item - * - * @return $this - */ - public function addItem(Boss $item) { - $this->offsetSet($item->getName(), $item); - return $this; - } + /** + * Add a Boss to this Collection + * + * @param Boss $item + * + * @return $this + */ + public function addItem(Boss $item) + { + $this->offsetSet($item->getName(), $item); + return $this; + } - /** - * Get a new Collection of Locations that the items have access to. - * - * @param ItemCollection $items Items available - * - * @return static - */ - public function canBeat(ItemCollection $items) { - return $this->filter(function($boss) use ($items) { - return $boss->canBeat($items); - }); - } + /** + * Get a new Collection of Locations that the items have access to. + * + * @param ItemCollection $items Items available + * + * @return static + */ + public function canBeat(ItemCollection $items) + { + return $this->filter(function ($boss) use ($items) { + return $boss->canBeat($items); + }); + } } diff --git a/app/Support/Bps.php b/app/Support/Bps.php deleted file mode 100644 index 09c717a8f..000000000 --- a/app/Support/Bps.php +++ /dev/null @@ -1,119 +0,0 @@ -encodeNumber(filesize($original))); - $bps = array_merge($bps, $this->encodeNumber(filesize($modified))); - $bps = array_merge($bps, [0x80]); // no metadata - - $original_rom = fopen($original, "r"); - $modified_rom = fopen($modified, "r"); - - $source_string = file_get_contents($original); - $target_string = file_get_contents($modified); - - $source = 0; - $output_offset = 0; - $target_offset = 0; - $source_offset = 0; - $target = ''; - $out = []; - while (!feof($original_rom) && !feof($modified_rom)) { - $original_byte = fread($original_rom, 1); - $modified_byte = fread($modified_rom, 1); - if ($output_offset % 1024 == 0 && $output_offset % 10 == 0) { - echo sprintf("%s : %skb (%s :: %s)\n", microtime(true), $output_offset / 1024, $source, strlen($target)); - } - ++$output_offset; - if ($modified_byte === $original_byte) { - if ($target) { - $target_legth = strlen($target); - if ($target_legth > 5) { - $search_target = strpos(substr($target_string, 0, $output_offset - $target_legth), $target); - if ($search_target !== false) { - $realitve_target_offset = $search_target - $target_offset; - $bps = array_merge($bps, $this->encodeNumber(static::BPS_ACTION_TARGET_COPY | (($target_legth - 1) << 2)), - $this->encodeNumber(($realitve_target_offset < 0) | (abs($realitve_target_offset) << 1))); - $target_offset += $realitve_target_offset + $target_legth; - continue; - } - - $search_source = strpos($source_string, $target); - if ($search_source !== false) { - $realitve_source_offset = $search_target - $source_offset; - $bps = array_merge($bps, $this->encodeNumber(static::BPS_ACTION_SOURCE_COPY | (($target_legth - 1) << 2)), - $this->encodeNumber(($realitve_source_offset < 0) | (abs($realitve_source_offset) << 1))); - $source_offset += $realitve_source_offset + $target_legth; - } - } else { - $bps = array_merge($bps, $this->encodeNumber(static::BPS_ACTION_TARGET_READ | (($target_legth - 1) << 2)), unpack('C*', $target)); - } - $target = ''; - } - ++$source; - } else { - if ($source) { - $bps = array_merge($bps, $this->encodeNumber(static::BPS_ACTION_SOURCE_READ | (($source - 1) << 2))); - $source = 0; - } - $target .= $modified_byte; - } - } - fclose($modified_rom); - fclose($original_rom); - - // footer - $bps = array_merge($bps, array_values(unpack('C*', pack('H*', hash_file('crc32', $original))))); - $bps = array_merge($bps, array_values(unpack('C*', pack('H*', hash_file('crc32', $modified))))); - $bps_string = pack('C*', ...$bps); - $bps_string .= pack('H*', hash('crc32', $bps_string)); - - return $bps_string; - } - - public function encodeNumber($number) { - $dataBytes = []; - while(true){ - $x = $number & 0x7f; - $number >>= 7; - if($number == 0){ - $dataBytes[] = 0x80 | $x; - break; - } - $dataBytes[] = $x; - $number--; - } - return $dataBytes; - } - - public function decodeNumber(array $dataBytes, int $offset = 0) { - $number = 0; - $shift = 1; - - while(true) { - $byte = $dataBytes[$offset++]; - $number += ($byte & 0x7f) * $shift; - if ($byte & 0x80) { - break; - } - $shift <<= 7; - $number += $shift; - } - - return $number; - } -} diff --git a/app/Support/Collection.php b/app/Support/Collection.php index a8eb9a658..afe2132c7 100644 --- a/app/Support/Collection.php +++ b/app/Support/Collection.php @@ -1,399 +1,447 @@ -items = is_array($items) ? $items : $this->getArrayableItems($items); - } - - /** - * Remove an item from the collection by name. - * - * @return $this - */ - public function removeItem($name) { - $this->offsetUnset($name); - return $this; - } - - /** - * Get one item randomly from the collection. - * - * @return mixed - */ - public function random() { - $new = $this->values(); - return $new[get_random_int(0, $this->count() - 1)]; - } - - /** - * Get a random subset of the collection of given size - * - * @param int $number size of the new collection - * - * @return static - */ - public function randomCollection($number = 1) { - $old = $this->values(); - $new = []; - while ($number-- > 0 && count($old) > 0) { - $new = array_merge($new, array_splice($old, get_random_int(0, count($old) - 1), 1)); - } - return new static($new); - } - - /** - * Run a filter over each of the items. - * - * @param callable|null $callback - * - * @return static - */ - public function filter(callable $callback = null) { - if ($callback) { - return new static(array_filter($this->items, $callback)); - } - - return new static(array_filter($this->items)); - } - - /** - * Get an array of the underlying elements - * - * @return array - */ - public function values() { - return array_values($this->items); - } - - /** - * Get the items in the collection that are not present in the given items. - * - * @param mixed $items items to diff against - * - * @return static - */ - public function diff($items) { - return new static(array_diff($this->items, $this->getArrayableItems($items))); - } - - /** - * Reverese the order of the items. - * - * @return static - */ - public function reverse() { - return new static(array_reverse($this->items)); - } - - /** - * Execute a callback over each item. - * - * @param callable $callback - * - * @return $this - */ - public function each(callable $callback) { - foreach ($this->items as $key => $item) { - if ($callback($item, $key) === false) { - break; - } - } - - return $this; - } - - /** - * Get the first item from the collection. - * - * @return mixed - */ - public function first() { - return reset($this->items); - } - - /** - * Get the next item from the collection based on internal pointer. - * - * @return mixed - */ - public function next() { - return next($this->items) === false ? $this->first() : current($this->items); - } - - - /** - * Get the last item from the collection. - * - * @return mixed - */ - public function last() { - return end($this->items); - } - - /** - * Get all of the items in the collection. - * - * @return array - */ - public function all() { - return $this->items; - } - - /** - * Get and remove the last item from the collection. - * - * @return mixed - */ - public function pop() { - return array_pop($this->items); - } - - /** - * Push an item onto the beginning of the collection. - * - * @param mixed $value - * - * @return $this - */ - public function unshift($value) { - array_unshift($this->items, $value); - - return $this; - } - - /** - * Get and remove an item from the begining collection. - * - * @return mixed - */ - public function shift() { - return array_shift($this->items); - } - - /** - * Take the first or last {$limit} items. - * - * @param int $limit - * - * @return static - */ - public function take($limit) { - if ($limit < 0) { - return $this->slice($limit, abs($limit)); - } - - return $this->slice(0, $limit); - } - - /** - * Slice the underlying collection array. - * - * @param int $offset - * @param int $length - * - * @return static - */ - public function slice($offset, $length = null) { - return new static(array_slice($this->items, $offset, $length, true)); - } - - /** - * Merge the collection with the given items. - * - * @param mixed $items - * - * @return static - */ - public function merge($items) { - return new static(array_merge($this->items, $this->getArrayableItems($items))); - } - - /** - * Get a fresh copy of this object, the underlying items will still be the same - * - * @return static - */ - public function copy() { - return new static($this->items); - } - - /** - * Reduce the collection to a single value. - * - * @param callable $callback - * @param mixed $initial - * - * @return mixed - */ - public function reduce(callable $callback, $initial = null) { - return array_reduce($this->items, $callback, $initial); - } - - /** - * Run a map over each of the items. - * - * @param callable $callback - * - * @return array - */ - public function map(callable $callback) { - $keys = array_keys($this->items); - - $items = array_map($callback, $this->items, $keys); - - return array_combine($keys, $items); - } - - /** - * Get the keys of the collection items. - * - * @return array - */ - public function keys() { - return array_keys($this->items); - } - - /** - * Determine if an item exists in the collection by key. - * - * @param mixed $key - * - * @return bool - */ - public function has($key) { - return $this->offsetExists($key); - } - - /** - * Intersect the collection with the given items. - * - * @param mixed $items - * - * @return static - */ - public function intersect($items) { - return new static(array_intersect($this->items, $this->getArrayableItems($items))); - } - - /** - * Determine if an item exists in the collection by key. - * - * @param mixed $key - * - * @return bool - */ - public function contains($item) { - return in_array($item, $this->items); - } - - /** - * Get the collection of items as a plain array. - * - * @return array - */ - public function toArray() { - return array_map(function ($value) { - return $value instanceof Arrayable ? $value->toArray() : $value; - }, $this->items); - } - - /** - * Determine if an item exists at an offset. - * - * @param mixed $offset - * - * @return bool - */ - public function offsetExists($offset) { - return isset($this->items[$offset]); - } - - /** - * Get an item at a given offset. - * - * @param mixed $offset - * - * @return mixed - */ - public function offsetGet($offset) { - return $this->items[$offset]; - } - - /** - * Set the item at a given offset. - * - * @param mixed $offset - * @param mixed $value - * - * @return void - */ - public function offsetSet($offset, $value) { - if ($offset === null) { - $this->items[] = $value; - } else { - $this->items[$offset] = $value; - } - } - - /** - * Unset the item at a given offset. - * - * @param mixed $offset - * - * @return void - */ - public function offsetUnset($offset) { - unset($this->items[$offset]); - } - - /** - * Count the number of items in the collection. - * - * @return int - */ - public function count() { - return count($this->items); - } - - /** - * Get an iterator for the items. - * - * @return ArrayIterator - */ - public function getIterator() { - return new ArrayIterator($this->items); - } - - /** - * Results array of items from Collection or Arrayable. - * - * @param mixed $items - * - * @return array - */ - protected function getArrayableItems($items) { - if ($items instanceof self) { - return $items->values(); - } - - return (array) $items; - } +class Collection implements ArrayAccess, Countable, IteratorAggregate +{ + protected $items = []; + + /** + * Create a new collection. + * + * @param mixed $items + * + * @return void + */ + public function __construct($items = []) + { + $this->items = is_array($items) ? $items : $this->getArrayableItems($items); + } + + /** + * Remove an item from the collection. + * + * @return $this + */ + public function removeItem($item) + { + foreach ($this->items as $key => $search_item) { + if ($search_item === $item) { + $this->offsetUnset($key); + + break; + } + } + + return $this; + } + + /** + * Get one item randomly from the collection. + * + * @return mixed + */ + public function random() + { + $new = $this->values(); + if ($this->count() === 0) { + return null; + } + return $new[get_random_int(0, $this->count() - 1)]; + } + + /** + * Get a random subset of the collection of given size + * + * @param int $number size of the new collection + * + * @return static + */ + public function randomCollection($number = 1) + { + $old = $this->values(); + $new = []; + while ($number-- > 0 && count($old) > 0) { + $new = array_merge($new, array_splice($old, get_random_int(0, count($old) - 1), 1)); + } + return new static($new); + } + + /** + * Run a filter over each of the items. + * + * @param callable|null $callback + * + * @return static + */ + public function filter(callable $callback = null) + { + if ($callback) { + return new static(array_filter($this->items, $callback)); + } + + return new static(array_filter($this->items)); + } + + /** + * Get an array of the underlying elements + * + * @return array + */ + public function values() + { + return array_values($this->items); + } + + /** + * Get the items in the collection that are not present in the given items. + * + * @param mixed $items items to diff against + * + * @return static + */ + public function diff($items) + { + return new static(array_diff($this->items, $this->getArrayableItems($items))); + } + + /** + * Reverese the order of the items. + * + * @return static + */ + public function reverse() + { + return new static(array_reverse($this->items)); + } + + /** + * Execute a callback over each item. + * + * @param callable $callback + * + * @return $this + */ + public function each(callable $callback) + { + foreach ($this->items as $key => $item) { + if ($callback($item, $key) === false) { + break; + } + } + + return $this; + } + + /** + * Get the first item from the collection. + * + * @return mixed + */ + public function first() + { + return reset($this->items); + } + + /** + * Get the next item from the collection based on internal pointer. + * + * @return mixed + */ + public function next() + { + return next($this->items) === false ? $this->first() : current($this->items); + } + + + /** + * Get the last item from the collection. + * + * @return mixed + */ + public function last() + { + return end($this->items); + } + + /** + * Get all of the items in the collection. + * + * @return array + */ + public function all() + { + return $this->items; + } + + /** + * Get and remove the last item from the collection. + * + * @return mixed + */ + public function pop() + { + return array_pop($this->items); + } + + /** + * Push an item onto the beginning of the collection. + * + * @param mixed $value + * + * @return $this + */ + public function unshift($value) + { + array_unshift($this->items, $value); + + return $this; + } + + /** + * Get and remove an item from the begining collection. + * + * @return mixed + */ + public function shift() + { + return array_shift($this->items); + } + + /** + * Take the first or last {$limit} items. + * + * @param int $limit + * + * @return static + */ + public function take($limit) + { + if ($limit < 0) { + return $this->slice($limit, abs($limit)); + } + + return $this->slice(0, $limit); + } + + /** + * Slice the underlying collection array. + * + * @param int $offset + * @param int $length + * + * @return static + */ + public function slice($offset, $length = null) + { + return new static(array_slice($this->items, $offset, $length, true)); + } + + /** + * Merge the collection with the given items. + * + * @param mixed $items + * + * @return static + */ + public function merge($items) + { + return new static(array_merge($this->items, $this->getArrayableItems($items))); + } + + /** + * Get a fresh copy of this object, the underlying items will still be the same + * + * @return static + */ + public function copy() + { + return new static($this->items); + } + + /** + * Reduce the collection to a single value. + * + * @param callable $callback + * @param mixed $initial + * + * @return mixed + */ + public function reduce(callable $callback, $initial = null) + { + return array_reduce($this->items, $callback, $initial); + } + + /** + * Run a map over each of the items. + * + * @param callable $callback + * + * @return array + */ + public function map(callable $callback) + { + $keys = array_keys($this->items); + + $items = array_map($callback, $this->items, $keys); + + return array_combine($keys, $items) ?: []; + } + + /** + * Get the keys of the collection items. + * + * @return array + */ + public function keys() + { + return array_keys($this->items); + } + + /** + * Determine if an item exists in the collection by key. + * + * @param mixed $key + * + * @return bool + */ + public function has($key) + { + return $this->offsetExists($key); + } + + /** + * Intersect the collection with the given items. + * + * @param mixed $items + * + * @return static + */ + public function intersect($items) + { + return new static(array_intersect($this->items, $this->getArrayableItems($items))); + } + + /** + * Determine if an item exists in the collection. + * + * @param mixed $item + * + * @return bool + */ + public function contains($item) + { + return in_array($item, $this->items); + } + + /** + * Get the collection of items as a plain array. + * + * @return array + */ + public function toArray() + { + return array_map(function ($value) { + return $value instanceof Arrayable ? $value->toArray() : $value; + }, $this->items); + } + + /** + * Determine if an item exists at an offset. + * + * @param mixed $offset + * + * @return bool + */ + public function offsetExists($offset) + { + return isset($this->items[$offset]); + } + + /** + * Get an item at a given offset. + * + * @param mixed $offset + * + * @return mixed + */ + public function offsetGet($offset) + { + return $this->items[$offset]; + } + + /** + * Set the item at a given offset. + * + * @param mixed $offset + * @param mixed $value + * + * @return void + */ + public function offsetSet($offset, $value) + { + if ($offset === null) { + $this->items[] = $value; + } else { + $this->items[$offset] = $value; + } + } + + /** + * Unset the item at a given offset. + * + * @param mixed $offset + * + * @return void + */ + public function offsetUnset($offset) + { + unset($this->items[$offset]); + } + + /** + * Count the number of items in the collection. + * + * @return int + */ + public function count() + { + return count($this->items); + } + + /** + * Get an iterator for the items. + * + * @return ArrayIterator + */ + public function getIterator() + { + return new ArrayIterator($this->items); + } + + /** + * Results array of items from Collection or Arrayable. + * + * @param mixed $items + * + * @return array + */ + protected function getArrayableItems($items) + { + if ($items instanceof self) { + return $items->values(); + } + + return (array) $items; + } } diff --git a/app/Support/Credits.php b/app/Support/Credits.php index ff3cbd990..026f65254 100644 --- a/app/Support/Credits.php +++ b/app/Support/Credits.php @@ -1,310 +1,333 @@ - [ - ['type' => 'small', 'x' => 5, 'y' => 19, 'text' => 'The return of the King'], - ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Hyrule Castle'], - ], - 'sanctuary' => [ - ['type' => 'small', 'x' => 8, 'y' => 19, 'text' => 'The loyal priest'], - ['type' => 'large', 'x' => 11, 'y' => 23, 'text' => 'Sanctuary'], - ], - 'kakariko' => [ - ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => "Sahasralah's Homecoming"], - ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Kakariko Town'], - ], - 'desert' => [ - ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'vultures rule the desert'], - ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Desert Palace'], - ], - 'hera' => [ - ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'the bully makes a friend'], - ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Mountain Tower'], - ], - 'house' => [ - ['type' => 'small', 'x' => 6, 'y' => 19, 'text' => 'your uncle recovers'], - ['type' => 'large', 'x' => 11, 'y' => 23, 'text' => 'Your House'], - ], - 'zora' => [ - ['type' => 'small', 'x' => 6, 'y' => 19, 'text' => 'finger webs for sale'], - ['type' => 'large', 'x' => 8, 'y' => 23, 'text' => "Zora's Waterfall"], - ], - 'witch' => [ - ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'the witch and assistant'], - ['type' => 'large', 'x' => 11, 'y' => 23, 'text' => 'Magic Shop'], - ], - 'lumberjacks' => [ - ['type' => 'small', 'x' => 8, 'y' => 19, 'text' => 'twin lumberjacks'], - ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => "Woodsmen's Hut"], - ], - 'grove' => [ - ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'ocarina boy plays again'], - ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Haunted Grove'], - ], - 'well' => [ - ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'venus, queen of faeries'], - ['type' => 'large', 'x' => 10, 'y' => 23, 'text' => 'Wishing Well'], - ], - 'smithy' => [ - ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'the dwarven swordsmiths'], - ['type' => 'large', 'x' => 12, 'y' => 23, 'text' => 'Smithery'], - ], - 'kakariko2' => [ - ['type' => 'small', 'x' => 6, 'y' => 19, 'text' => 'the bug-catching kid'], - ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Kakariko Town'], - ], - 'bridge' => [ - ['type' => 'small', 'x' => 8, 'y' => 19, 'text' => 'the lost old man'], - ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Death Mountain'], - ], - 'woods' => [ - ['type' => 'small', 'x' => 8, 'y' => 19, 'text' => 'the forest thief'], - ['type' => 'large', 'x' => 11, 'y' => 23, 'text' => 'Lost Woods'], - ], - 'pedestal' => [ - ['type' => 'small', 'x' => 6, 'y' => 19, 'text' => 'and the master sword'], - ['type' => 'small_alt', 'x' => 8, 'y' => 21, 'text' => 'sleeps again...'], - ['type' => 'large', 'x' => 12, 'y' => 23, 'text' => 'Forever!'], - ], - ]; +class Credits +{ + private $scenes = [ + 'castle' => [ + ['type' => 'small', 'x' => 5, 'y' => 19, 'text' => 'The return of the King'], + ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Hyrule Castle'], + ], + 'sanctuary' => [ + ['type' => 'small', 'x' => 8, 'y' => 19, 'text' => 'The loyal priest'], + ['type' => 'large', 'x' => 11, 'y' => 23, 'text' => 'Sanctuary'], + ], + 'kakariko' => [ + ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => "Sahasralah's Homecoming"], + ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Kakariko Town'], + ], + 'desert' => [ + ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'vultures rule the desert'], + ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Desert Palace'], + ], + 'hera' => [ + ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'the bully makes a friend'], + ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Mountain Tower'], + ], + 'house' => [ + ['type' => 'small', 'x' => 6, 'y' => 19, 'text' => 'your uncle recovers'], + ['type' => 'large', 'x' => 11, 'y' => 23, 'text' => 'Your House'], + ], + 'zora' => [ + ['type' => 'small', 'x' => 6, 'y' => 19, 'text' => 'finger webs for sale'], + ['type' => 'large', 'x' => 8, 'y' => 23, 'text' => "Zora's Waterfall"], + ], + 'witch' => [ + ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'the witch and assistant'], + ['type' => 'large', 'x' => 11, 'y' => 23, 'text' => 'Magic Shop'], + ], + 'lumberjacks' => [ + ['type' => 'small', 'x' => 8, 'y' => 19, 'text' => 'twin lumberjacks'], + ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => "Woodsmen's Hut"], + ], + 'grove' => [ + ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'ocarina boy plays again'], + ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Haunted Grove'], + ], + 'well' => [ + ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'venus, queen of faeries'], + ['type' => 'large', 'x' => 10, 'y' => 23, 'text' => 'Wishing Well'], + ], + 'smithy' => [ + ['type' => 'small', 'x' => 4, 'y' => 19, 'text' => 'the dwarven swordsmiths'], + ['type' => 'large', 'x' => 12, 'y' => 23, 'text' => 'Smithery'], + ], + 'kakariko2' => [ + ['type' => 'small', 'x' => 6, 'y' => 19, 'text' => 'the bug-catching kid'], + ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Kakariko Town'], + ], + 'bridge' => [ + ['type' => 'small', 'x' => 8, 'y' => 19, 'text' => 'the lost old man'], + ['type' => 'large', 'x' => 9, 'y' => 23, 'text' => 'Death Mountain'], + ], + 'woods' => [ + ['type' => 'small', 'x' => 8, 'y' => 19, 'text' => 'the forest thief'], + ['type' => 'large', 'x' => 11, 'y' => 23, 'text' => 'Lost Woods'], + ], + 'pedestal' => [ + ['type' => 'small', 'x' => 6, 'y' => 19, 'text' => 'and the master sword'], + ['type' => 'small_alt', 'x' => 8, 'y' => 21, 'text' => 'sleeps again...'], + ['type' => 'large', 'x' => 12, 'y' => 23, 'text' => 'Forever!'], + ], + ]; - public function updateCreditLine(string $scene, int $line, string $text, string $align = 'center') { - if (!isset($this->scenes[$scene][$line])) { - return false; - } + public function updateCreditLine(string $scene, int $line, string $text, string $align = 'center') + { + if (!isset($this->scenes[$scene][$line])) { + return false; + } - $text = substr($text, 0, 32); + $text = substr($text, 0, 32); - $this->scenes[$scene][$line]['text'] = $text; + $this->scenes[$scene][$line]['text'] = $text; - switch ($align) { - case 'left': - $this->scenes[$scene][$line]['x'] = 0; - break; - case 'right': - $this->scenes[$scene][$line]['x'] = (int) max(0, 32 - strlen($text)); - break; - case 'center': - default: - $this->scenes[$scene][$line]['x'] = (int) max(0, floor((32 - strlen($text)) / 2)); - break; - } - } + switch ($align) { + case 'left': + $this->scenes[$scene][$line]['x'] = 0; + break; + case 'right': + $this->scenes[$scene][$line]['x'] = (int) max(0, 32 - strlen($text)); + break; + case 'center': + default: + $this->scenes[$scene][$line]['x'] = (int) max(0, floor((32 - strlen($text)) / 2)); + break; + } + } - public function getBinaryData() : array { - $pointers = []; - $data = []; - foreach ($this->scenes as $scene) { - array_push($pointers, count($data)); - foreach ($scene as $part) { - switch ($part['type']) { - case 'small': - $data = array_merge($data, $this->getSmallConverted($part)); - break; - case 'small_alt': - $data = array_merge($data, $this->getSmallAltConverted($part)); - break; - case 'large': - $data = array_merge($data, $this->getLargeConverted($part)); - break; - } - } - } - array_push($pointers, count($data)); + public function getBinaryData(): array + { + $pointers = []; + $data = []; + foreach ($this->scenes as $scene) { + array_push($pointers, count($data)); + foreach ($scene as $part) { + switch ($part['type']) { + case 'small': + $data = array_merge($data, $this->getSmallConverted($part)); + break; + case 'small_alt': + $data = array_merge($data, $this->getSmallAltConverted($part)); + break; + case 'large': + $data = array_merge($data, $this->getLargeConverted($part)); + break; + } + } + } + array_push($pointers, count($data)); - return [ - 'pointers' => $pointers, - 'data' => $data, - ]; - } + return [ + 'pointers' => $pointers, + 'data' => $data, + ]; + } - // @TODO: consider making the records a proper type - protected function getSmallConverted(array $record) { - $data = []; + // @TODO: consider making the records a proper type + protected function getSmallConverted(array $record) + { + $data = []; - $converted_text = $this->convertCredits($record['text']); - $header = $this->getHeader($record['x'], $record['y'], count($converted_text)); - $data = array_merge($header, $converted_text); + $converted_text = $this->convertCredits($record['text']); + $header = $this->getHeader($record['x'], $record['y'], count($converted_text)); + $data = array_merge($header, $converted_text); - // special handler for apostrophies - $apostrophies = preg_replace("/'/", ',', preg_replace("/[^']/", " ", $record['text'])); - if (trim($apostrophies)) { - $converted_text = $this->convertCredits(trim($apostrophies)); - $header = $this->getHeader($record['x'] + strpos($apostrophies, ','), $record['y'] - 1, count($converted_text)); - $data = array_merge($data, $header, $converted_text); - } + // special handler for apostrophies + $apostrophies = (string) preg_replace("/'/", ',', (string) preg_replace("/[^']/", " ", (string) $record['text'])); + if (trim($apostrophies)) { + $converted_text = $this->convertCredits(trim($apostrophies)); + $header = $this->getHeader($record['x'] + strpos($apostrophies, ','), $record['y'] - 1, count($converted_text)); + $data = array_merge($data, $header, $converted_text); + } - // special handler for commas - $commas = preg_replace("/,/", "'", preg_replace("/[^,]/", " ", $record['text'])); - if (trim($commas)) { - $converted_text = $this->convertCredits(trim($commas)); - $header = $this->getHeader($record['x'] + strpos($commas, "'"), $record['y'] + 1, count($converted_text)); - $data = array_merge($data, $header, $converted_text); - } + // special handler for commas + $commas = (string) preg_replace("/,/", "'", (string) preg_replace("/[^,]/", " ", (string) $record['text'])); + if (trim($commas)) { + $converted_text = $this->convertCredits(trim($commas)); + $header = $this->getHeader($record['x'] + strpos($commas, "'"), $record['y'] + 1, count($converted_text)); + $data = array_merge($data, $header, $converted_text); + } - return $data; - } + return $data; + } - protected function getSmallAltConverted(array $record) { - $converted_text = $this->convertAltCredits($record['text']); - $header = $this->getHeader($record['x'], $record['y'], count($converted_text)); - return array_merge($header, $converted_text); - } + protected function getSmallAltConverted(array $record) + { + $converted_text = $this->convertAltCredits($record['text']); + $header = $this->getHeader($record['x'], $record['y'], count($converted_text)); + return array_merge($header, $converted_text); + } - protected function getlargeConverted(array $record) { - $data = []; + protected function getlargeConverted(array $record) + { + $data = []; - $converted_text = $this->convertLargeCreditsTop($record['text']); - $header = $this->getHeader($record['x'], $record['y'], count($converted_text)); - $data = array_merge($header, $converted_text); + $converted_text = $this->convertLargeCreditsTop($record['text']); + $header = $this->getHeader($record['x'], $record['y'], count($converted_text)); + $data = array_merge($header, $converted_text); - $converted_text = $this->convertLargeCreditsBottom($record['text']); - $header = $this->getHeader($record['x'], $record['y'] + 1, count($converted_text)); - $data = array_merge($data, $header, $converted_text); + $converted_text = $this->convertLargeCreditsBottom($record['text']); + $header = $this->getHeader($record['x'], $record['y'] + 1, count($converted_text)); + $data = array_merge($data, $header, $converted_text); - return $data; - } + return $data; + } - protected function getHeader($x, $y, $length) { - return unpack('C*', pack('N', (0x6000 - | ($y >> 5 << 11) | (($y & 0x1F) << 5) - | ($x >> 5 << 10) | ($x & 0x1F)) << 16 - | ($length * 2 - 1))); - } + protected function getHeader($x, $y, $length) + { + return unpack('C*', pack('N', (0x6000 + | ($y >> 5 << 11) | (($y & 0x1F) << 5) + | ($x >> 5 << 10) | ($x & 0x1F)) << 16 + | ($length * 2 - 1))); + } - /** - * Convert string to byte array for Credits that can be written to ROM - * - * @param string $string string to convert - * - * @return array - */ - public function convertLargeCreditsTop(string $string) : array { - $byte_array = []; - foreach (str_split(strtolower($string)) as $char) { - if (!preg_match('/[a-z]/', $char)) { - switch ($char) { - case "'": - $byte_array[] = 0x77; - break; - case '!': - $byte_array[] = 0x78; - break; - default: - $byte_array[] = 0x9F; - break; - } - continue; - } + /** + * Convert string to byte array for Credits that can be written to ROM + * + * @param string $string string to convert + * + * @return array + */ + public function convertLargeCreditsTop(string $string): array + { + $byte_array = []; + foreach (str_split(strtolower($string)) as $char) { + if (!preg_match('/[a-z]/', $char)) { + switch ($char) { + case "'": + $byte_array[] = 0x77; + break; + case '!': + $byte_array[] = 0x78; + break; + default: + $byte_array[] = 0x9F; + break; + } + continue; + } - $byte_array[] = ord($char) - 0x4; - } + $byte_array[] = ord($char) - 0x4; + } - return $byte_array; - } + return $byte_array; + } - /** - * Convert string to byte array for Credits that can be written to ROM - * - * @param string $string string to convert - * - * @return array - */ - public function convertLargeCreditsBottom(string $string) : array { - $byte_array = []; - foreach (str_split(strtolower($string)) as $char) { - if (!preg_match('/[a-z]/', $char)) { - switch ($char) { - case "'": - $byte_array[] = 0x9D; - break; - case '!': - $byte_array[] = 0x9E; - break; - default: - $byte_array[] = 0x9F; - break; - } - continue; - } + /** + * Convert string to byte array for Credits that can be written to ROM + * + * @param string $string string to convert + * + * @return array + */ + public function convertLargeCreditsBottom(string $string): array + { + $byte_array = []; + foreach (str_split(strtolower($string)) as $char) { + if (!preg_match('/[a-z]/', $char)) { + switch ($char) { + case "'": + $byte_array[] = 0x9D; + break; + case '!': + $byte_array[] = 0x9E; + break; + default: + $byte_array[] = 0x9F; + break; + } + continue; + } - $byte_array[] = ord($char) + 0x22; - } + $byte_array[] = ord($char) + 0x22; + } - return $byte_array; - } + return $byte_array; + } - /** - * Convert string to byte array for Credits that can be written to ROM - * - * @param string $string string to convert - * - * @return array - */ - public function convertAltCredits(string $string) : array { - $byte_array = []; - foreach (str_split(strtolower($string)) as $char) { - $byte_array[] = $this->charToAltCreditsHex($char); - } + /** + * Convert string to byte array for Credits that can be written to ROM + * + * @param string $string string to convert + * + * @return array + */ + public function convertAltCredits(string $string): array + { + $byte_array = []; + foreach (str_split(strtolower($string)) as $char) { + $byte_array[] = $this->charToAltCreditsHex($char); + } - return $byte_array; - } + return $byte_array; + } - /** - * Convert character to byte for ROM in Credits Sequence - * - * @param string $string character to convert - * - * @return int - */ - private function charToAltCreditsHex(string $char) : int { - if (preg_match('/[a-z]/', $char)) { - return ord($char) - 0x29; - } - switch ($char) { - case '.': return 0x52; - default: return 0x9F; - } - } + /** + * Convert character to byte for ROM in Credits Sequence + * + * @param string $char character to convert + * + * @return int + */ + private function charToAltCreditsHex(string $char): int + { + if (preg_match('/[a-z]/', $char)) { + return ord($char) - 0x29; + } + switch ($char) { + case '.': + return 0x52; + default: + return 0x9F; + } + } - /** - * Convert string to byte array for Credits that can be written to ROM - * - * @param string $string string to convert - * - * @return array - */ - public function convertCredits(string $string) : array { - $byte_array = []; - foreach (str_split(strtolower($string)) as $char) { - $byte_array[] = $this->charToCreditsHex($char); - } + /** + * Convert string to byte array for Credits that can be written to ROM + * + * @param string $string string to convert + * + * @return array + */ + public function convertCredits(string $string): array + { + $byte_array = []; + foreach (str_split(strtolower($string)) as $char) { + $byte_array[] = $this->charToCreditsHex($char); + } - return $byte_array; - } + return $byte_array; + } - /** - * Convert character to byte for ROM in Credits Sequence - * - * @param string $string character to convert - * - * @return int - */ - private function charToCreditsHex(string $char) : int { - if (preg_match('/[a-z]/', $char)) { - return ord($char) - 0x47; - } - switch ($char) { - case ' ': return 0x9F; - case ',': return 0x34; - case '.': return 0x37; - case '-': return 0x36; - case "'": return 0x35; - default: return 0x9F; - } - } + /** + * Convert character to byte for ROM in Credits Sequence + * + * @param string $char character to convert + * + * @return int + */ + private function charToCreditsHex(string $char): int + { + if (preg_match('/[a-z]/', $char)) { + return ord($char) - 0x47; + } + switch ($char) { + case ' ': + return 0x9F; + case ',': + return 0x34; + case '.': + return 0x37; + case '-': + return 0x36; + case "'": + return 0x35; + default: + return 0x9F; + } + } } diff --git a/app/Support/Dialog.php b/app/Support/Dialog.php index 343c2ecbc..7b4921ce3 100644 --- a/app/Support/Dialog.php +++ b/app/Support/Dialog.php @@ -1,418 +1,429 @@ -charToHex($char); - if ($write[0] == 0xFD) { - $new_string = array_merge($new_string, $write); - } else { - foreach ($write as $byte) { - $new_string = array_merge($new_string, array_pad([$byte], -2, 0x00)); - } - } - } - if (++$i % 3 == 0 && count($lines) > $i) { - $new_string[] = 0x7E; - } - if ($i >= 3 && $i < count($lines)) { - $new_string[] = 0x73; - } - } +class Dialog +{ + /** + * Convert string to byte array for Dialog Box that can be written to ROM + * + * @param string $string string to convert + * @param int $max_bytes maximum bytes to return + * + * @return array + */ + public function convertDialog(string $string, $max_bytes = 256) + { + $new_string = []; + $lines = explode("\n", mb_strtoupper($string)); + $i = 0; + foreach ($lines as $line) { + switch ($i) { + case 0: + $new_string[] = 0x74; + break; + case 1: + $new_string[] = 0x75; + break; + case 2: + default: + $new_string[] = 0x76; + break; + } + + $line_chars = preg_split('//u', mb_substr($line, 0, 14), null, PREG_SPLIT_NO_EMPTY); + + if ($line_chars === false) { + continue; + } + + foreach ($line_chars as $char) { + $write = $this->charToHex($char); + if ($write[0] == 0xFD) { + $new_string = array_merge($new_string, $write); + } else { + foreach ($write as $byte) { + $new_string = array_merge($new_string, array_pad([$byte], -2, 0x00)); + } + } + } + if (++$i % 3 == 0 && count($lines) > $i) { + $new_string[] = 0x7E; + } + if ($i >= 3 && $i < count($lines)) { + $new_string[] = 0x73; + } + } - $new_string[] = 0x7F; - if (count($new_string) > $max_bytes) { - return array_merge(array_slice($new_string, 0, $max_bytes - 1), [0x7F]); - } - return $new_string; - } + $new_string[] = 0x7F; + if (count($new_string) > $max_bytes) { + return array_merge(array_slice($new_string, 0, $max_bytes - 1), [0x7F]); + } + return $new_string; + } - /** - * Convert string to byte array for Compressed Dialog Box that can be written to ROM - * - * @param string $string string to convert - * @param bool $pause whether to pause for input - * @param int $max_bytes maximum bytes to return - * @param int $wrap if greater than 0 wrap lines to this value - * - * @return array - */ - public function convertDialogCompressed(string $string, $pause = true, $max_bytes = 2046, $wrap = 14) { - $pad_out = false; - $new_string = [0xFB]; - $lines = explode("\n", mb_strtoupper($string)); - if ($wrap > 0) { - $new_lines = []; - foreach ($lines as $line) { - $new_line = mb_wordwrap($line, $wrap, "\n"); - $new_lines = array_merge($new_lines, explode("\n", mb_strtoupper($new_line))); - } - $lines = $new_lines; - } - $i = 0; - $line_count = (substr(end($lines), 0, 1) == '{') ? count($lines) - 1 : count($lines); - foreach ($lines as $line) { - $line_chars = preg_split('//u', mb_substr($line, 0, 14), null, PREG_SPLIT_NO_EMPTY); - // command - // @TODO: refactor this to use regex - if (reset($line_chars) == "{") { - switch (trim($line)) { - case "{SPEED0}": - $new_string = array_merge($new_string, [0xFC, 0x00]); - break; - case "{SPEED2}": - $new_string = array_merge($new_string, [0xFC, 0x02]); - break; - case "{SPEED6}": - $new_string = array_merge($new_string, [0xFC, 0x06]); - break; - case "{PAUSE1}": - $new_string = array_merge($new_string, [0xFE, 0x78, 0x01]); - break; - case "{PAUSE3}": - $new_string = array_merge($new_string, [0xFE, 0x78, 0x03]); - break; - case "{PAUSE5}": - $new_string = array_merge($new_string, [0xFE, 0x78, 0x05]); - break; - case "{PAUSE7}": - $new_string = array_merge($new_string, [0xFE, 0x78, 0x07]); - break; - case "{PAUSE9}": - $new_string = array_merge($new_string, [0xFE, 0x78, 0x09]); - break; - case "{INPUT}": - $new_string = array_merge($new_string, [0xFA]); - break; - case "{CHOICE}": - $new_string = array_merge($new_string, [0xFE, 0x68]); - break; - case "{ITEMSELECT}": - $new_string = array_merge($new_string, [0xFE, 0x69]); - break; - case "{CHOICE2}": - $new_string = array_merge($new_string, [0xFE, 0x71]); - break; - case "{CHOICE3}": - $new_string = array_merge($new_string, [0xFE, 0x72]); - break; - case "{C:GREEN}": - $new_string = array_merge($new_string, [0xFE, 0x77, 0x07]); - break; - case "{C:YELLOW}": - $new_string = array_merge($new_string, [0xFE, 0x77, 0x02]); - break; - case "{HARP}": - $new_string = array_merge($new_string, [0xFE, 0x79, 0x2D]); - break; - case "{MENU}": - $new_string = array_merge($new_string, [0xFE, 0x6D, 0x00]); - break; - case "{BOTTOM}": - $new_string = array_merge($new_string, [0xFE, 0x6D, 0x01]); - break; - case "{NOBORDER}": - $new_string = array_merge($new_string, [0xFE, 0x6B, 0x02]); - break; - case "{CHANGEPIC}": - $new_string = array_merge($new_string, [0xFE, 0x67, 0xFE, 0x67]); - break; - case "{CHANGEMUSIC}": - $new_string = array_merge($new_string, [0xFE, 0x67]); - break; - case "{INTRO}": - $pad_out = true; - $new_string = array_merge($new_string, [0xFE, 0x6E, 0x00, 0xFE, 0x77, 0x07, 0xFC, 0x03, 0xFE, 0x6B, 0x02, 0xFE, 0x67]); - break; - case "{NOTEXT}": - return [0xFB, 0xFE, 0x6E, 0x00, 0xFE, 0x6B, 0x04]; - case "{IBOX}": - $new_string = array_merge($new_string, [0xFE, 0x6B, 0x02, 0xFE, 0x77, 0x07, 0xFC, 0x03, 0xF7]); - break; - } - $line_count--; - if (count($new_string) > $max_bytes) { - throw new \Exception("command overflowed byte length"); - } - continue; - } + /** + * Convert string to byte array for Compressed Dialog Box that can be written to ROM + * + * @param string $string string to convert + * @param bool $pause whether to pause for input + * @param int $max_bytes maximum bytes to return + * @param int $wrap if greater than 0 wrap lines to this value + * + * @return array + */ + public function convertDialogCompressed(string $string, $pause = true, $max_bytes = 2046, $wrap = 14) + { + $pad_out = false; + $new_string = [0xFB]; + $lines = explode("\n", mb_strtoupper($string)); + if ($wrap > 0) { + $new_lines = []; + foreach ($lines as $line) { + $new_line = mb_wordwrap($line, $wrap, "\n"); + $new_lines = array_merge($new_lines, explode("\n", mb_strtoupper($new_line))); + } + $lines = $new_lines; + } + $i = 0; + $line_count = (substr((string) end($lines), 0, 1) == '{') ? count($lines) - 1 : count($lines); + foreach ($lines as $line) { + $line_chars = preg_split('//u', mb_substr($line, 0, 14), null, PREG_SPLIT_NO_EMPTY); + if ($line_chars === false) { + continue; + } + // command + // @TODO: refactor this to use regex + if (reset($line_chars) == "{") { + switch (trim($line)) { + case "{SPEED0}": + $new_string = array_merge($new_string, [0xFC, 0x00]); + break; + case "{SPEED2}": + $new_string = array_merge($new_string, [0xFC, 0x02]); + break; + case "{SPEED6}": + $new_string = array_merge($new_string, [0xFC, 0x06]); + break; + case "{PAUSE1}": + $new_string = array_merge($new_string, [0xFE, 0x78, 0x01]); + break; + case "{PAUSE3}": + $new_string = array_merge($new_string, [0xFE, 0x78, 0x03]); + break; + case "{PAUSE5}": + $new_string = array_merge($new_string, [0xFE, 0x78, 0x05]); + break; + case "{PAUSE7}": + $new_string = array_merge($new_string, [0xFE, 0x78, 0x07]); + break; + case "{PAUSE9}": + $new_string = array_merge($new_string, [0xFE, 0x78, 0x09]); + break; + case "{INPUT}": + $new_string = array_merge($new_string, [0xFA]); + break; + case "{CHOICE}": + $new_string = array_merge($new_string, [0xFE, 0x68]); + break; + case "{ITEMSELECT}": + $new_string = array_merge($new_string, [0xFE, 0x69]); + break; + case "{CHOICE2}": + $new_string = array_merge($new_string, [0xFE, 0x71]); + break; + case "{CHOICE3}": + $new_string = array_merge($new_string, [0xFE, 0x72]); + break; + case "{C:GREEN}": + $new_string = array_merge($new_string, [0xFE, 0x77, 0x07]); + break; + case "{C:YELLOW}": + $new_string = array_merge($new_string, [0xFE, 0x77, 0x02]); + break; + case "{HARP}": + $new_string = array_merge($new_string, [0xFE, 0x79, 0x2D]); + break; + case "{MENU}": + $new_string = array_merge($new_string, [0xFE, 0x6D, 0x00]); + break; + case "{BOTTOM}": + $new_string = array_merge($new_string, [0xFE, 0x6D, 0x01]); + break; + case "{NOBORDER}": + $new_string = array_merge($new_string, [0xFE, 0x6B, 0x02]); + break; + case "{CHANGEPIC}": + $new_string = array_merge($new_string, [0xFE, 0x67, 0xFE, 0x67]); + break; + case "{CHANGEMUSIC}": + $new_string = array_merge($new_string, [0xFE, 0x67]); + break; + case "{INTRO}": + $pad_out = true; + $new_string = array_merge($new_string, [0xFE, 0x6E, 0x00, 0xFE, 0x77, 0x07, 0xFC, 0x03, 0xFE, 0x6B, 0x02, 0xFE, 0x67]); + break; + case "{NOTEXT}": + return [0xFB, 0xFE, 0x6E, 0x00, 0xFE, 0x6B, 0x04]; + case "{IBOX}": + $new_string = array_merge($new_string, [0xFE, 0x6B, 0x02, 0xFE, 0x77, 0x07, 0xFC, 0x03, 0xF7]); + break; + } + $line_count--; + if (count($new_string) > $max_bytes) { + throw new \Exception("command overflowed byte length"); + } + continue; + } - switch ($i) { - case 0: - break; - case 1: - $new_string[] = 0xF8; // row 2 - break; - case 2: - default: - if ($i >= 3 && $i < count($lines)) { - $new_string[] = 0xF6; // scroll - } else { - $new_string[] = 0xF9; // row 3 - } - break; - } + switch ($i) { + case 0: + break; + case 1: + $new_string[] = 0xF8; // row 2 + break; + case 2: + default: + if ($i >= 3 && $i < count($lines)) { + $new_string[] = 0xF6; // scroll + } else { + $new_string[] = 0xF9; // row 3 + } + break; + } - // the first box needs to fill the full width with spaces as the palette is loaded weird. - if ($pad_out && $i < 3) { - $line_chars = array_pad($line_chars, 14, ' '); - } + // the first box needs to fill the full width with spaces as the palette is loaded weird. + if ($pad_out && $i < 3) { + $line_chars = array_pad($line_chars, 14, ' '); + } - foreach ($line_chars as $char) { - $new_string = array_merge($new_string, $this->charToHex($char)); - } - $i++; + foreach ($line_chars as $char) { + $new_string = array_merge($new_string, $this->charToHex($char)); + } + $i++; - if ($pause && $i % 3 == 0 && $line_count > $i) { - $new_string[] = 0xFA; // wait for input - } - } + if ($pause && $i % 3 == 0 && $line_count > $i) { + $new_string[] = 0xFA; // wait for input + } + } - if (count($new_string) > $max_bytes) { - return array_merge(array_slice($new_string, 0, $max_bytes)); - } - return $new_string; - } + if (count($new_string) > $max_bytes) { + return array_merge(array_slice($new_string, 0, $max_bytes)); + } + return $new_string; + } - private static $characters = [ - ' ' => [0xFF], - '?' => [0xC6], - '!' => [0xC7], - ',' => [0xC8], - '-' => [0xC9], - "…" => [0xCC], - '.' => [0xCD], - '~' => [0xCE], - '~' => [0xCE], - "'" => [0xD8], - "’" => [0xD8], - "@" => [0xFE, 0x6A], // link's name compressed - ">" => [0xD2, 0xD3], // link face - "%" => [0xDD], // Hylian Bird - "^" => [0xDE], // Hylian Ankh - "=" => [0xDF], // Hylian Wavy lines - "↑" => [0xE0], - "↓" => [0xE1], - "→" => [0xE2], - "←" => [0xE3], - "≥" => [0xE4], // cursor - "¼" => [0xE5, 0xE7], // ¼ heart - "½" => [0xE6, 0xE7], // ½ heart - "¾" => [0xE8, 0xE9], // ¾ heart - "♥" => [0xEA, 0xEB], // full heart - "ᚋ" => [0xFE, 0x6C, 0x00], // var 0 - "ᚌ" => [0xFE, 0x6C, 0x01], // var 1 - "ᚍ" => [0xFE, 0x6C, 0x02], // var 2 - "ᚎ" => [0xFE, 0x6C, 0x03], // var 3 - "あ" => [0x00], - "い" => [0x01], - "う" => [0x02], - "え" => [0x03], - "お" => [0x04], - "や" => [0x05], - "ゆ" => [0x06], - "よ" => [0x07], - "か" => [0x08], - "き" => [0x09], - "く" => [0x0A], - "け" => [0x0B], - "こ" => [0x0C], - "わ" => [0x0D], - "を" => [0x0E], - "ん" => [0x0F], - "さ" => [0x10], - "し" => [0x11], - "す" => [0x12], - "せ" => [0x13], - "そ" => [0x14], - "が" => [0x15], - "ぎ" => [0x16], - "ぐ" => [0x17], - "た" => [0x18], - "ち" => [0x19], - "つ" => [0x1A], - "て" => [0x1B], - "と" => [0x1C], - "げ" => [0x1D], - "ご" => [0x1E], - "ざ" => [0x1F], - "な" => [0x20], - "に" => [0x21], - "ぬ" => [0x22], - "ね" => [0x23], - "の" => [0x24], - "じ" => [0x25], - "ず" => [0x26], - "ぜ" => [0x27], - "は" => [0x28], - "ひ" => [0x29], - "ふ" => [0x2A], - "へ" => [0x2B], - "ほ" => [0x2C], - "ぞ" => [0x2D], - "だ" => [0x2E], - "ぢ" => [0x2F], - "ま" => [0x30], - "み" => [0x31], - "む" => [0x32], - "め" => [0x33], - "も" => [0x34], - "づ" => [0x35], - "で" => [0x36], - "ど" => [0x37], - "ら" => [0x38], - "り" => [0x39], - "る" => [0x3A], - "れ" => [0x3B], - "ろ" => [0x3C], - "ば" => [0x3D], - "び" => [0x3E], - "ぶ" => [0x3F], - "べ" => [0x40], - "ぼ" => [0x41], - "ぱ" => [0x42], - "ぴ" => [0x43], - "ぷ" => [0x44], - "ぺ" => [0x45], - "ぽ" => [0x46], - "ゃ" => [0x47], - "ゅ" => [0x48], - "ょ" => [0x49], - "っ" => [0x4A], - "ぁ" => [0x4B], - "ぃ" => [0x4C], - "ぅ" => [0x4D], - "ぇ" => [0x4E], - "ぉ" => [0x4F], - "ア" => [0x50], - "イ" => [0x51], - "ウ" => [0x52], - "エ" => [0x53], - "オ" => [0x54], - "ヤ" => [0x55], - "ユ" => [0x56], - "ヨ" => [0x57], - "カ" => [0x58], - "キ" => [0x59], - "ク" => [0x5A], - "ケ" => [0x5B], - "コ" => [0x5C], - "ワ" => [0x5D], - "ヲ" => [0x5E], - "ン" => [0x5F], - "サ" => [0x60], - "シ" => [0x61], - "ス" => [0x62], - "セ" => [0x63], - "ソ" => [0x64], - "ガ" => [0x65], - "ギ" => [0x66], - "グ" => [0x67], - "タ" => [0x68], - "チ" => [0x69], - "ツ" => [0x6A], - "テ" => [0x6B], - "ト" => [0x6C], - "ゲ" => [0x6D], - "ゴ" => [0x6E], - "ザ" => [0x6F], - "ナ" => [0x70], - "ニ" => [0x71], - "ヌ" => [0x72], - "ネ" => [0x73], - "ノ" => [0x74], - "ジ" => [0x75], - "ズ" => [0x76], - "ゼ" => [0x77], - "ハ" => [0x78], - "ヒ" => [0x79], - "フ" => [0x7A], - "ヘ" => [0x7B], - "ホ" => [0x7C], - "ゾ" => [0x7D], - "ダ" => [0x7E], - "マ" => [0x80], - "ミ" => [0x81], - "ム" => [0x82], - "メ" => [0x83], - "モ" => [0x84], - "ヅ" => [0x85], - "デ" => [0x86], - "ド" => [0x87], - "ラ" => [0x88], - "リ" => [0x89], - "ル" => [0x8A], - "レ" => [0x8B], - "ロ" => [0x8C], - "バ" => [0x8D], - "ビ" => [0x8E], - "ブ" => [0x8F], - "ベ" => [0x90], - "ボ" => [0x91], - "パ" => [0x92], - "ピ" => [0x93], - "プ" => [0x94], - "ペ" => [0x95], - "ポ" => [0x96], - "ャ" => [0x97], - "ュ" => [0x98], - "ョ" => [0x99], - "ッ" => [0x9A], - "ァ" => [0x9B], - "ィ" => [0x9C], - "ゥ" => [0x9D], - "ェ" => [0x9E], - "ォ" => [0x9F] - ]; + private static $characters = [ + ' ' => [0xFF], + '?' => [0xC6], + '!' => [0xC7], + ',' => [0xC8], + '-' => [0xC9], + "…" => [0xCC], + '.' => [0xCD], + '~' => [0xCE], + '~' => [0xCE], + "'" => [0xD8], + "’" => [0xD8], + "@" => [0xFE, 0x6A], // link's name compressed + ">" => [0xD2, 0xD3], // link face + "%" => [0xDD], // Hylian Bird + "^" => [0xDE], // Hylian Ankh + "=" => [0xDF], // Hylian Wavy lines + "↑" => [0xE0], + "↓" => [0xE1], + "→" => [0xE2], + "←" => [0xE3], + "≥" => [0xE4], // cursor + "¼" => [0xE5, 0xE7], // ¼ heart + "½" => [0xE6, 0xE7], // ½ heart + "¾" => [0xE8, 0xE9], // ¾ heart + "♥" => [0xEA, 0xEB], // full heart + "ᚋ" => [0xFE, 0x6C, 0x00], // var 0 + "ᚌ" => [0xFE, 0x6C, 0x01], // var 1 + "ᚍ" => [0xFE, 0x6C, 0x02], // var 2 + "ᚎ" => [0xFE, 0x6C, 0x03], // var 3 + "あ" => [0x00], + "い" => [0x01], + "う" => [0x02], + "え" => [0x03], + "お" => [0x04], + "や" => [0x05], + "ゆ" => [0x06], + "よ" => [0x07], + "か" => [0x08], + "き" => [0x09], + "く" => [0x0A], + "け" => [0x0B], + "こ" => [0x0C], + "わ" => [0x0D], + "を" => [0x0E], + "ん" => [0x0F], + "さ" => [0x10], + "し" => [0x11], + "す" => [0x12], + "せ" => [0x13], + "そ" => [0x14], + "が" => [0x15], + "ぎ" => [0x16], + "ぐ" => [0x17], + "た" => [0x18], + "ち" => [0x19], + "つ" => [0x1A], + "て" => [0x1B], + "と" => [0x1C], + "げ" => [0x1D], + "ご" => [0x1E], + "ざ" => [0x1F], + "な" => [0x20], + "に" => [0x21], + "ぬ" => [0x22], + "ね" => [0x23], + "の" => [0x24], + "じ" => [0x25], + "ず" => [0x26], + "ぜ" => [0x27], + "は" => [0x28], + "ひ" => [0x29], + "ふ" => [0x2A], + "へ" => [0x2B], + "ほ" => [0x2C], + "ぞ" => [0x2D], + "だ" => [0x2E], + "ぢ" => [0x2F], + "ま" => [0x30], + "み" => [0x31], + "む" => [0x32], + "め" => [0x33], + "も" => [0x34], + "づ" => [0x35], + "で" => [0x36], + "ど" => [0x37], + "ら" => [0x38], + "り" => [0x39], + "る" => [0x3A], + "れ" => [0x3B], + "ろ" => [0x3C], + "ば" => [0x3D], + "び" => [0x3E], + "ぶ" => [0x3F], + "べ" => [0x40], + "ぼ" => [0x41], + "ぱ" => [0x42], + "ぴ" => [0x43], + "ぷ" => [0x44], + "ぺ" => [0x45], + "ぽ" => [0x46], + "ゃ" => [0x47], + "ゅ" => [0x48], + "ょ" => [0x49], + "っ" => [0x4A], + "ぁ" => [0x4B], + "ぃ" => [0x4C], + "ぅ" => [0x4D], + "ぇ" => [0x4E], + "ぉ" => [0x4F], + "ア" => [0x50], + "イ" => [0x51], + "ウ" => [0x52], + "エ" => [0x53], + "オ" => [0x54], + "ヤ" => [0x55], + "ユ" => [0x56], + "ヨ" => [0x57], + "カ" => [0x58], + "キ" => [0x59], + "ク" => [0x5A], + "ケ" => [0x5B], + "コ" => [0x5C], + "ワ" => [0x5D], + "ヲ" => [0x5E], + "ン" => [0x5F], + "サ" => [0x60], + "シ" => [0x61], + "ス" => [0x62], + "セ" => [0x63], + "ソ" => [0x64], + "ガ" => [0x65], + "ギ" => [0x66], + "グ" => [0x67], + "タ" => [0x68], + "チ" => [0x69], + "ツ" => [0x6A], + "テ" => [0x6B], + "ト" => [0x6C], + "ゲ" => [0x6D], + "ゴ" => [0x6E], + "ザ" => [0x6F], + "ナ" => [0x70], + "ニ" => [0x71], + "ヌ" => [0x72], + "ネ" => [0x73], + "ノ" => [0x74], + "ジ" => [0x75], + "ズ" => [0x76], + "ゼ" => [0x77], + "ハ" => [0x78], + "ヒ" => [0x79], + "フ" => [0x7A], + "ヘ" => [0x7B], + "ホ" => [0x7C], + "ゾ" => [0x7D], + "ダ" => [0x7E], + "マ" => [0x80], + "ミ" => [0x81], + "ム" => [0x82], + "メ" => [0x83], + "モ" => [0x84], + "ヅ" => [0x85], + "デ" => [0x86], + "ド" => [0x87], + "ラ" => [0x88], + "リ" => [0x89], + "ル" => [0x8A], + "レ" => [0x8B], + "ロ" => [0x8C], + "バ" => [0x8D], + "ビ" => [0x8E], + "ブ" => [0x8F], + "ベ" => [0x90], + "ボ" => [0x91], + "パ" => [0x92], + "ピ" => [0x93], + "プ" => [0x94], + "ペ" => [0x95], + "ポ" => [0x96], + "ャ" => [0x97], + "ュ" => [0x98], + "ョ" => [0x99], + "ッ" => [0x9A], + "ァ" => [0x9B], + "ィ" => [0x9C], + "ゥ" => [0x9D], + "ェ" => [0x9E], + "ォ" => [0x9F], + ]; - /** - * Convert character to byte for ROM - * - * @param string $string character to convert - * E5E7=<1/4 heart> - * E6E7=<1/2 heart> - * E8E9=<3/4 heart> - * EAEB= - * - * @return int - */ - private function charToHex($char) { - if (preg_match('/\d/', $char)) { - return [$char + 0xA0]; - } + /** + * Convert character to byte for ROM + * + * @param string $char character to convert + * + * @return array + */ + private function charToHex(string $char): array + { + if (preg_match('/\d/', $char)) { + return [(int) $char + 0xA0]; + } - if (preg_match('/[A-Z]/', $char)) { - return [ord($char) - 65 + 0xAA]; - } + if (preg_match('/[A-Z]/', $char)) { + return [ord($char) - 65 + 0xAA]; + } - return self::$characters[$char] ?? [0xFF]; - } + return self::$characters[$char] ?? [0xFF]; + } } diff --git a/app/Support/Ips.php b/app/Support/Ips.php index 6c6481ad1..050c2e340 100644 --- a/app/Support/Ips.php +++ b/app/Support/Ips.php @@ -1,79 +1,89 @@ - $bytes) { - $ips .= substr(pack('N', $address), 1); - $ips .= pack('n', count($bytes)); - $ips .= pack('C*', ...$bytes); - } - } - $ips .= 'EOF'; - - return $ips; - } - - public function ipsToPatch(string $ips) : array { - if (substr($ips, 0, 5) !== 'PATCH') { - throw new \Exception('Header not present'); - } - if (substr($ips, -3) !== 'EOF') { - throw new \Exception('EOF not present'); - } - - $data = substr($ips, 5, -3); - - $output = []; - while (!empty($data)) { - $address = array_first(unpack('N', pack('C', 0x00) . substr($data, 0, 3))); - $length = array_first(unpack('n', substr($data, 3, 2))); - - $output[$address] = array_values(unpack('C*', substr($data, 5, $length))); - - $data = substr($data, $length + 5); - } - - return $output; - } - - public function ipsFromFiles(string $original_rom, string $updated_rom) { - if (!is_readable($updated_rom) || !is_readable($original_rom)) { - throw new \Exception('Source Files not readable'); - } - - $original_rom = fopen($original_rom, "r"); - $updated_rom = fopen($updated_rom, "r"); - - $i = 0; - $cont = $i; - $out = []; - while (!feof($original_rom)) { - $original_byte = fread($original_rom, 1); - $updated_byte = fread($updated_rom, 1); - if ($updated_byte !== $original_byte) { - $out[$i] = [unpack('C*', $updated_byte)[1]]; - } - $i++; - } - - $backwards = array_reverse($out, true); - foreach ($backwards as $off => $value) { - if (isset($backwards[$off - 1])) { - $backwards[$off - 1] = array_merge($backwards[$off - 1], $backwards[$off]); - unset($backwards[$off]); - } - } - $forwards = array_reverse($backwards, true); - - array_walk($forwards, function(&$write, $address) { - $write = [$address => $write]; - }); - - return $this->patchToIps(array_values($forwards)); - } +class Ips +{ + public function patchToIps(array $patch): string + { + $ips = 'PATCH'; + foreach ($patch as $write) { + foreach ($write as $address => $bytes) { + $ips .= substr(pack('N', $address), 1); + $ips .= pack('n', count($bytes)); + $ips .= pack('C*', ...$bytes); + } + } + $ips .= 'EOF'; + + return $ips; + } + + public function ipsToPatch(string $ips): array + { + if (substr($ips, 0, 5) !== 'PATCH') { + throw new \Exception('Header not present'); + } + if (substr($ips, -3) !== 'EOF') { + throw new \Exception('EOF not present'); + } + + $data = substr($ips, 5, -3); + + $output = []; + while (!empty($data)) { + $address = array_first(unpack('N', pack('C', 0x00) . substr($data, 0, 3))); + $length = (int) array_first(unpack('n', substr($data, 3, 2))); + + $output[$address] = array_values(unpack('C*', substr($data, 5, $length))); + + $data = substr($data, $length + 5); + } + + return $output; + } + + public function ipsFromFiles(string $original_rom, string $updated_rom) + { + if (!is_readable($updated_rom) || !is_readable($original_rom)) { + throw new \Exception('Source Files not readable'); + } + + $original_rom = fopen($original_rom, "r"); + $updated_rom = fopen($updated_rom, "r"); + + if ($original_rom === false || $updated_rom === false) { + throw new \Exception('Could not open one of the files.'); + } + + $i = 0; + $cont = $i; + $out = []; + while (!feof($original_rom)) { + $original_byte = fread($original_rom, 1); + $updated_byte = fread($updated_rom, 1); + if ($updated_byte !== $original_byte) { + $out[$i] = [unpack('C*', $updated_byte ?: "\0")[1]]; + } + $i++; + } + + $backwards = array_reverse($out, true); + foreach ($backwards as $off => $value) { + if (isset($backwards[$off - 1])) { + $backwards[$off - 1] = array_merge($backwards[$off - 1], $backwards[$off]); + unset($backwards[$off]); + } + } + $forwards = array_reverse($backwards, true); + + array_walk($forwards, function (&$write, $address) { + $write = [$address => $write]; + }); + + return $this->patchToIps(array_values($forwards)); + } } diff --git a/app/Support/ItemCollection.php b/app/Support/ItemCollection.php index 0bab6cd5d..cadba0b37 100644 --- a/app/Support/ItemCollection.php +++ b/app/Support/ItemCollection.php @@ -1,597 +1,677 @@ -getArrayableItems($items) as $item) { - $this->addItem($item); - } - $this->world = $world ?? new class extends World { - public function __construct() {} - public function config(string $key, $default = NULL) { return null; } - }; - } - - /** - * Add an Item to this Collection - * - * @param Item $item - * - * @return $this - */ - public function addItem(Item $item) { - $item_name = $item->getName(); - $this->offsetSet($item_name, $item); - if (!isset($this->item_counts[$item_name])) { - $this->item_counts[$item_name] = 0; - } - - $this->item_counts[$item_name]++; - $this->string_rep = null; - - return $this; - } - - /** - * Remove an item from the collection by name. - * - * @return $this - */ - public function removeItem($name) { - if (!isset($this->item_counts[$name])) { - return $this; - } - - $this->item_counts[$name]--; - if ($this->item_counts[$name] === 0) { - $this->offsetUnset($name); - } - - return $this; - } - - /** - * Run a filter over each of the items. - * - * @param callable|null $callback - * - * @return static - */ - public function filter(callable $callback = null) { - if ($callback) { - return new static(array_filter($this->values(), $callback), $this->world); - } - - return new static(array_filter($this->values()), $this->world); - } - - /** - * Get an array of the underlying elements - * - * @return array - */ - public function values() { - $values = []; - foreach ($this->items as $item) { - for ($i = 0; $i < $this->item_counts[$item->getName()]; $i++) { - $values[] = $item; - } - } - return $values; - } - - /** - * Get the items in the collection that are not present in the given items. - * - * @param mixed $items items to diff against - * - * @return static - */ - public function diff($items) { - if (!count($items)) { - return $this->copy(); - } - - // TODO: this might not be correct - if (!is_a($items, static::class)) { - return parent::diff($items); - } - - $diffed = $this->copy(); - - foreach ($diffed->item_counts as $name => $amount) { - if (isset($items->item_counts[$name])) { - if ($items->item_counts[$name] < $amount) { - $diffed->item_counts[$name] = $amount - $items->item_counts[$name]; - } else { - $diffed->offsetUnset($name); - } - } - } - return $diffed; - } - - /** - * Intersect the collection with the given items. - * - * @param mixed $items - * - * @return static - */ - public function intersect($items) { - return new static(array_intersect($this->items, $this->getArrayableItems($items)), $this->world); - } - - /** - * Execute a callback over each item. - * - * @param callable $callback - * - * @return $this - */ - public function each(callable $callback) { - foreach ($this->items as $key => $item) { - for ($i = 0; $i < $this->item_counts[$key]; $i++) { - if ($callback($item, $key) === false) { - break; - } - } - } - - return $this; - } - - /** - * Merge the collection with the given items. - * - * @TODO: this whole function may be incorrect - * - * @param mixed $items - * - * @return static - */ - public function merge($items) { - if (!count($items)) { - return $this->copy(); - } - - if (!$items instanceof static) { - return $this->merge(new static($items, $this->world)); - } - - $merged = $this->copy(); - - $items->each(function($item) use ($merged) { - $merged->addItem($item); - }); - - return $merged; - } - - /** - * Get a fresh copy of this object, the underlying items will still be the same - * - * @return static - */ - public function copy() { - $new = new static([], $this->world); - $new->items = $this->items; - $new->item_counts = $this->item_counts; - - return $new; - } - - /** - * Reduce the collection to a single value. - * - * @param callable $callback - * @param mixed $initial - * - * @return mixed - */ - public function reduce(callable $callback, $initial = null) { - return array_reduce($this->values(), $callback, $initial); - } - - /** - * Run a map over each of the items. - * - * @param callable $callback - * - * @return array - */ - public function map(callable $callback) { - return array_map($callback, $this->values()); - } - - /** - * Determine if an item exists in the collection by key. - * - * @param mixed $key - * @param int $at_least mininum number of item in collection - * - * @return bool - */ - public function has($key, $at_least = 1) { - if ($at_least === 0) { - return true; - } - - if ($at_least == null) { - return false; - } - - // @TODO: this check is expensive, as this function is called A LOT, can we reduce it somehow? - if ($this->world->config('rom.genericKeys', false) && ($this->item_counts['ShopKey'] ?? false) - && strpos($key, 'Key') === 0) { - return true; - } - - return ($this->item_counts[$key] ?? 0) >= $at_least; - } - - /** - * For testing, we up the key count to 10 for every dungeon. - * - * @return $this - */ - public function manyKeys() : self { - foreach ($this->item_counts as $key => $count) { - if (strpos($key, 'Key') === 0) { - $this->item_counts[$key] = 10; - } - } - - return $this; - } - - /** - * Get the collection of items as a plain array. - * - * @return array - */ - public function toArray() { - return array_map(function ($value) { - return $value instanceof Arrayable ? $value->toArray() : $value; - }, $this->values()); - } - - /** - * Count the number of items in the collection. - * - * @return int - */ - public function count() { - return array_sum($this->item_counts); - } - - /** - * Get an iterator for the items. - * - * @return ArrayIterator - */ - public function getIterator() { - return new ArrayIterator($this->toArray()); - } - - /** - * Count the number of an item in the collection. - * - * @param mixed $key - * - * @return int - */ - public function countItem($key) { - return $this->item_counts[$key] ?? 0; - } - - /** - * Unset the item at a given offset. - * - * @param mixed $offset - * - * @return void - */ - public function offsetUnset($offset) { - unset($this->item_counts[$offset]); - unset($this->items[$offset]); - } - - /** - * Add an Item to a copy of this Collection - * - * @param Item $item - * - * @return static - */ - public function tempAdd(Item $item) { - $temp = $this->copy(); - return $temp->addItem($item); - } - - /** - * Get total collectable Health - * - * @param float $initial starting health - * - * @return float - */ - public function heartCount($initial = 3) { - $count = $initial; - - $hearts = $this->filter(function($item) { - return $item instanceof Item\Upgrade\Health; - }); - - foreach ($hearts as $heart) { - $count += ($heart->getName() == 'PieceOfHeart') ? .25 : 1; - } - - return $count; - } - - /** - * Requirements for lifting rocks - * - * @return bool - */ - public function canLiftRocks() { - return $this->has('PowerGlove') - || $this->has('ProgressiveGlove') - || $this->has('TitansMitt'); - } - - /** - * Requirements for lifting dark rocks - * - * @return bool - */ - public function canLiftDarkRocks() { - return $this->has('TitansMitt') - || $this->has('ProgressiveGlove', 2); - } - - /** - * Requirements for lighting torches - * - * @return bool - */ - public function canLightTorches() { - return $this->has('FireRod') || $this->has('Lamp'); - } - - /** - * Requirements for melting things, like ice statues - * should only be used in places where we have put Bombos pads in swordless - * - * @return bool - */ - public function canMeltThings() { - return $this->has('FireRod') - || ($this->has('Bombos') && ($this->world->config('mode.weapons') == 'swordless' || $this->hasSword())); - } - - /** - * Requirements for fast travel through the duck - * - * @return bool - */ - public function canFly() { - return $this->has('OcarinaActive') || $this->has('OcarinaInactive') && $this->canActivateOcarina(); - } - - private function canActivateOcarina() { - if ($this->world instanceof World\Inverted) { - return $this->has('MoonPearl') && $this->world->getRegion('North West Light World')->canEnter([], $this); - } - return true; - } - - /** - * Requirements for fast travel through the spin/hook speed - * - * @return bool - */ - public function canSpinSpeed() { - return $this->has('PegasusBoots') - && ($this->hasSword() || $this->has('Hookshot')); - } - - /** - * Requirements for lobbing arrows at things - * - * @param int $min_level minimum level of bow - * - * @return bool - */ - public function canShootArrows(int $min_level = 1) { - switch ($min_level) { - case 2: - return $this->has('BowAndSilverArrows') - || ($this->has('SilverArrowUpgrade') - && ($this->has('Bow') || $this->has('BowAndArrows'))); - case 1: - default: - return ($this->has('Bow') - && (!$this->world->config('rom.rupeeBow', false) || $this->has('ShopArrow') || $this->has('SilverArrowUpgrade'))) - || $this->has('BowAndArrows') - || $this->has('BowAndSilverArrows'); - } - - } - - /** - * Requirements for blocking lasers - * - * @return bool - */ - public function canBlockLasers() { - return $this->has('MirrorShield') - || $this->has('ProgressiveShield', 3); - } - - /** - * Requirements for magic usage - * - * @param float $bars number of magic bars - * - * @return bool - */ - public function canExtendMagic($bars = 2) { - return ($this->has('QuarterMagic') ? 4 : - ($this->has('HalfMagic') ? 2 : 1)) - * ($this->bottleCount() + 1) >= $bars; - } - - /** - * Requirements for being link in Dark World using Major Glitches - * - * @return bool - */ - public function glitchedLinkInDarkWorld() { - return $this->has('MoonPearl') - || $this->hasABottle(); - } - - /** - * Requirements for killing most things - * - * @return bool - */ - public function canKillMostThings($enemies = 5) { - return $this->has('UncleSword') - || (!$this->world->getCurrentlyFillingItems()->count() && $this->hasSword()) - || $this->has('CaneOfSomaria') - || ($this->has('TenBombs') && $enemies < 6) - || ($this->has('CaneOfByrna') && ($enemies < 6 || $this->canExtendMagic())) - || $this->canShootArrows() - || $this->has('Hammer') - || $this->has('FireRod'); - } - - /** - * Requirements for bombing things - * - * @return bool - */ - public function canBombThings() { - return true; - } - - /** - * Requirements for catching a Golden Bee - * - * @return bool - */ - public function canGetGoodBee() { - return $this->has('BugCatchingNet') - && $this->hasABottle() - && ($this->has('PegasusBoots') - || ($this->hasSword() && $this->has('Quake'))); - } - - /** - * Requirements for having a sword, we treat the special UncleSword like a progressive sword. - * - * @param int $min_level minimum level of sword - * - * @return bool - */ - public function hasSword(int $min_level = 1) { - switch ($min_level) { - case 4: - return $this->has('ProgressiveSword', 4) - || $this->has('UncleSword') && $this->has('ProgressiveSword', 3) - || $this->has('L4Sword'); - case 3: - return $this->has('ProgressiveSword', 3) - || $this->has('UncleSword') && $this->has('ProgressiveSword', 2) - || $this->has('L3Sword') - || $this->has('L4Sword'); - case 2: - return $this->has('ProgressiveSword', 2) - || $this->has('UncleSword') && $this->has('ProgressiveSword') - || $this->has('L2Sword') - || $this->has('MasterSword') - || $this->has('L3Sword') - || $this->has('L4Sword'); - case 1: - default: - return $this->has('ProgressiveSword') - || $this->has('UncleSword') - || $this->has('L1Sword') - || $this->has('L1SwordAndShield') - || $this->has('L2Sword') - || $this->has('MasterSword') - || $this->has('L3Sword') - || $this->has('L4Sword'); - } - } - - /** - * Requirements for having X bottles - * - * @param int $at_least mininum number of item in collection - * - * @return bool - */ - public function hasBottle(int $at_least = 1) : bool { - return $this->bottleCount() >= $at_least; - } - - /** - * Requirements for having X bottles - * - * @param int $at_least mininum number of item in collection - * - * @return bool - */ - public function bottleCount() : int { - return $this->filter(function($item) { - return $item instanceof Item\Bottle; - })->count(); - } - - /** - * Requirements for having a bottle - * - * @return bool - */ - public function hasABottle() { - return $this->has('BottleWithBee') - || $this->has('BottleWithFairy') - || $this->has('BottleWithRedPotion') - || $this->has('BottleWithGreenPotion') - || $this->has('BottleWithBluePotion') - || $this->has('Bottle') - || $this->has('BottleWithGoldBee'); - } - - public function __toString() { - if ($this->string_rep === null) { - $this->string_rep = $this->reduce(function($carry, $item) { - return $carry . $item->getName(); - }, ''); - } - - return $this->string_rep; - } +class ItemCollection extends Collection +{ + protected $item_counts = []; + private $string_rep = null; + private $checks_for_world = 0; + + /** + * Create a new collection. + * + * @param mixed $items + * + * @return void + */ + public function __construct($items = []) + { + parent::__construct($items); + + $this->items = []; + + foreach ($this->getArrayableItems($items) as $item) { + $this->addItem($item); + } + } + + public function setChecksForWorld(int $world_id) + { + $this->checks_for_world = $world_id; + } + + /** + * Add an Item to this Collection + * + * @param Item $item + * + * @return $this + */ + public function addItem(Item $item) + { + $item_name = $item->getName(); + $this->offsetSet($item_name, $item); + if (!isset($this->item_counts[$item_name])) { + $this->item_counts[$item_name] = 0; + } + + $this->item_counts[$item_name]++; + $this->string_rep = null; + + return $this; + } + + /** + * Remove an item from the collection by name. + * + * @return $this + */ + public function removeItem($name) + { + if (!isset($this->item_counts[$name])) { + return $this; + } + + $this->item_counts[$name]--; + if ($this->item_counts[$name] === 0) { + $this->offsetUnset($name); + } + + return $this; + } + + /** + * Run a filter over each of the items. + * + * @param callable|null $callback + * + * @return static + */ + public function filter(callable $callback = null) + { + if ($callback) { + return new static(array_filter($this->values(), $callback)); + } + + return new static(array_filter($this->values())); + } + + /** + * Get an array of the underlying elements + * + * @return array + */ + public function values() + { + $values = []; + foreach ($this->items as $item) { + for ($i = 0; $i < $this->item_counts[$item->getName()]; $i++) { + $values[] = $item; + } + } + return $values; + } + + /** + * Get the items in the collection that are not present in the given items. + * + * @param mixed $items items to diff against + * + * @return static + */ + public function diff($items) + { + if (!count($items)) { + return $this->copy(); + } + + // TODO: this might not be correct + if (!is_a($items, static::class)) { + return parent::diff($items); + } + + $diffed = $this->copy(); + + foreach ($diffed->item_counts as $name => $amount) { + if (isset($items->item_counts[$name])) { + if ($items->item_counts[$name] < $amount) { + $diffed->item_counts[$name] = $amount - $items->item_counts[$name]; + } else { + $diffed->offsetUnset($name); + } + } + } + return $diffed; + } + + /** + * Intersect the collection with the given items. + * + * @param mixed $items + * + * @return static + */ + public function intersect($items) + { + return new static(array_intersect($this->items, $this->getArrayableItems($items))); + } + + /** + * Execute a callback over each item. + * + * @param callable $callback + * + * @return $this + */ + public function each(callable $callback) + { + foreach ($this->items as $key => $item) { + for ($i = 0; $i < $this->item_counts[$key]; $i++) { + if ($callback($item, $key) === false) { + break; + } + } + } + + return $this; + } + + /** + * Merge the collection with the given items. + * + * @param mixed $items + * + * @return static + */ + public function merge($items) + { + if (!count($items)) { + return $this->copy(); + } + + if (!$items instanceof static) { + return $this->merge(new static($items)); + } + + $merged = $this->copy(); + + $items->each(function ($item) use ($merged) { + $merged->addItem($item); + }); + + return $merged; + } + + /** + * Get a fresh copy of this object, the underlying items will still be the same + * + * @return static + */ + public function copy() + { + $new = new static; + $new->items = $this->items; + $new->item_counts = $this->item_counts; + $new->checks_for_world = $this->checks_for_world; + + return $new; + } + + /** + * Reduce the collection to a single value. + * + * @param callable $callback + * @param mixed $initial + * + * @return mixed + */ + public function reduce(callable $callback, $initial = null) + { + return array_reduce($this->values(), $callback, $initial); + } + + /** + * Run a map over each of the items. + * + * @param callable $callback + * + * @return array + */ + public function map(callable $callback) + { + return array_map($callback, $this->values()); + } + + /** + * Determine if an item exists in the collection by key. + * + * @param mixed $key + * @param int $at_least mininum number of item in collection + * + * @return bool + */ + public function has($key, $at_least = 1) + { + $key = "$key:$this->checks_for_world"; + + if ($at_least === 0) { + return true; + } + + if ($at_least == null) { + return false; + } + + // @TODO: this check is expensive, as this function is called A LOT, can we reduce it somehow? + // assuming if there are ShopKey's available then we are in generic key mode, this is a really bad assumption + // but we need to make it until we can rewrite this class + if (($this->item_counts['ShopKey'] ?? false) && strpos($key, 'Key') === 0) { + return true; + } + + return ($this->item_counts[$key] ?? 0) >= $at_least; + } + + /** + * For testing, we up the key count to 10 for every dungeon. + * + * @return $this + */ + public function manyKeys(): self + { + foreach ($this->item_counts as $key => $count) { + if (strpos($key, 'Key') === 0) { + $this->item_counts[$key] = 10; + } + } + + return $this; + } + + /** + * Get the collection of items as a plain array. + * + * @return array + */ + public function toArray() + { + return array_map(function ($value) { + return $value instanceof Arrayable ? $value->toArray() : $value; + }, $this->values()); + } + + /** + * Count the number of items in the collection. + * + * @return int + */ + public function count() + { + return (int) array_sum($this->item_counts); + } + + /** + * Get an iterator for the items. + * + * @return ArrayIterator + */ + public function getIterator() + { + return new ArrayIterator($this->toArray()); + } + + /** + * Unset the item at a given offset. + * + * @param mixed $offset + * + * @return void + */ + public function offsetUnset($offset) + { + unset($this->item_counts[$offset]); + unset($this->items[$offset]); + } + + /** + * Get total collectable Health + * + * @param float $initial starting health + * + * @return float + */ + public function heartCount(float $initial = 3.0) + { + $count = $initial; + + $hearts = $this->filter(function ($item) { + return $item instanceof Item\Upgrade\Health; + }); + + foreach ($hearts as $heart) { + $count += ($heart->getName() == 'PieceOfHeart') ? .25 : 1; + } + + return $count; + } + + /** + * Requirements for lifting rocks + * + * @return bool + */ + public function canLiftRocks() + { + return $this->has('PowerGlove') + || $this->has('ProgressiveGlove') + || $this->has('TitansMitt'); + } + + /** + * Requirements for lifting dark rocks + * + * @return bool + */ + public function canLiftDarkRocks() + { + return $this->has('TitansMitt') + || $this->has('ProgressiveGlove', 2); + } + + /** + * Requirements for lighting torches + * + * @return bool + */ + public function canLightTorches() + { + return $this->has('FireRod') || $this->has('Lamp'); + } + + /** + * Requirements for melting things, like ice statues + * should only be used in places where we have put Bombos pads in swordless + * + * @param \ALttP\World $world world to check items against + * + * @return bool + */ + public function canMeltThings(World $world) + { + return $this->has('FireRod') + || ($this->has('Bombos') && ($world->config('mode.weapons') === 'swordless' || $this->hasSword())); + } + + /** + * Requirements for fast travel through the duck + * + * @param \ALttP\World $world world to check items against + * + * @return bool + */ + public function canFly(World $world) + { + return $this->has('OcarinaActive') || $this->has('OcarinaInactive') && $this->canActivateOcarina($world); + } + + private function canActivateOcarina(World $world) + { + if ($world instanceof World\Inverted) { + return $this->has('MoonPearl') + && ($this->has('DefeatAgahnim') + || ((($this->has('Hammer') && $this->canLiftRocks()) || $this->canLiftDarkRocks()))); + } + return true; + } + + /** + * Requirements for fast travel through the spin/hook speed + * + * @return bool + */ + public function canSpinSpeed() + { + return $this->has('PegasusBoots') + && ($this->hasSword() || $this->has('Hookshot')); + } + + /** + * Requirements for lobbing arrows at things + * + * @param int $min_level minimum level of bow + * + * @return bool + */ + public function canShootArrows(int $min_level = 1) + { + switch ($min_level) { + case 2: + return $this->has('BowAndSilverArrows') + || $this->has('ProgressiveBow', 2) + || ($this->has('SilverArrowUpgrade') + && ($this->has('Bow') || $this->has('BowAndArrows'))); + case 1: + default: + return ($this->has('Bow') && ($this->has('ShopArrow') || $this->has('SilverArrowUpgrade'))) + || $this->has('ProgressiveBow') + || $this->has('BowAndArrows') + || $this->has('BowAndSilverArrows'); + } + } + + /** + * Requirements for blocking lasers + * + * @return bool + */ + public function canBlockLasers() + { + return $this->has('MirrorShield') + || $this->has('ProgressiveShield', 3); + } + + /** + * Requirements for magic usage + * + * @param float $bars number of magic bars + * + * @return bool + */ + public function canExtendMagic($bars = 2.0) + { + return ($this->has('QuarterMagic') ? 4 : ($this->has('HalfMagic') ? 2 : 1)) + * ($this->bottleCount() + 1) >= $bars; + } + + /** + * Requirements for being link in Dark World using Major Glitches + * + * @return bool + */ + public function glitchedLinkInDarkWorld() + { + return $this->has('MoonPearl') + || $this->hasABottle(); + } + + /** + * Check if player has access to enough health. + * + * @param float $minimum minimum health + * + * @return bool + */ + public function hasHealth(float $minimum): bool + { + return $this->filter(function ($item) { + return $item instanceof Item\Upgrade\Health; + })->reduce(function ($carry, $item) { + return $carry + $item->power; + }, 0) >= $minimum; + } + + /** + * Requirements for killing most things + * + * @return bool + */ + public function canKillEscapeThings() + { + return $this->has('UncleSword') + || $this->has('CaneOfSomaria') + || $this->has('TenBombs') + || $this->has('CaneOfByrna') + || $this->canShootArrows() + || $this->has('Hammer') + || $this->has('FireRod'); + } + + /** + * Requirements for killing most things + * + * @return bool + */ + public function canKillMostThings($enemies = 5) + { + return $this->hasSword() + || $this->has('CaneOfSomaria') + || ($this->has('TenBombs') && $enemies < 6) + || ($this->has('CaneOfByrna') && ($enemies < 6 || $this->canExtendMagic())) + || $this->canShootArrows() + || $this->has('Hammer') + || $this->has('FireRod'); + } + + /** + * Requirements for bombing things + * + * @return bool + */ + public function canBombThings() + { + return true; + } + + /** + * Requirements for catching a Golden Bee + * + * @return bool + */ + public function canGetGoodBee() + { + return $this->has('BugCatchingNet') + && $this->hasABottle() + && ($this->has('PegasusBoots') + || ($this->hasSword() && $this->has('Quake'))); + } + + /** + * Requirements for having a sword, we treat the special UncleSword like a progressive sword. + * + * @param int $min_level minimum level of sword + * + * @return bool + */ + public function hasSword(int $min_level = 1) + { + switch ($min_level) { + case 4: + return $this->has('ProgressiveSword', 4) + || $this->has('UncleSword') && $this->has('ProgressiveSword', 3) + || $this->has('L4Sword'); + case 3: + return $this->has('ProgressiveSword', 3) + || $this->has('UncleSword') && $this->has('ProgressiveSword', 2) + || $this->has('L3Sword') + || $this->has('L4Sword'); + case 2: + return $this->has('ProgressiveSword', 2) + || $this->has('UncleSword') && $this->has('ProgressiveSword') + || $this->has('L2Sword') + || $this->has('MasterSword') + || $this->has('L3Sword') + || $this->has('L4Sword'); + case 1: + default: + return $this->has('ProgressiveSword') + || $this->has('UncleSword') + || $this->has('L1Sword') + || $this->has('L1SwordAndShield') + || $this->has('L2Sword') + || $this->has('MasterSword') + || $this->has('L3Sword') + || $this->has('L4Sword'); + } + } + + /** + * Requirements for having armor. + * + * @param int $min_level minimum level of armor + * + * @return bool + */ + public function hasArmor(int $min_level = 1): bool + { + switch ($min_level) { + case 2: + return $this->has('ProgressiveArmor', 2) + || $this->has('RedMail'); + case 1: + default: + return $this->has('ProgressiveArmor') + || $this->has('BlueMail') + || $this->has('RedMail'); + } + } + + /** + * Requirements for having X bottles. + * + * @param int $at_least mininum number of item in collection + * + * @return bool + */ + public function hasBottle(int $at_least = 1): bool + { + return $this->bottleCount() >= $at_least; + } + + /** + * Count the bottles that are in the collection. + * + * @return int + */ + public function bottleCount(): int + { + return $this->filter(function ($item) { + return $item instanceof Item\Bottle; + })->count(); + } + + /** + * Requirements for having a bottle. + * + * @return bool + */ + public function hasABottle() + { + return $this->has('BottleWithBee') + || $this->has('BottleWithFairy') + || $this->has('BottleWithRedPotion') + || $this->has('BottleWithGreenPotion') + || $this->has('BottleWithBluePotion') + || $this->has('Bottle') + || $this->has('BottleWithGoldBee'); + } + + public function __toString() + { + if ($this->string_rep === null) { + $this->string_rep = $this->reduce(function ($carry, $item) { + return $carry . $item->getName(); + }, ''); + } + + return $this->string_rep; + } } diff --git a/app/Support/LocationCollection.php b/app/Support/LocationCollection.php index 5cec1e186..c8b199daa 100644 --- a/app/Support/LocationCollection.php +++ b/app/Support/LocationCollection.php @@ -1,4 +1,6 @@ -getArrayableItems($items) as $item) { - $this->addItem($item); - } - } - - /** - * Add a Location to this Collection - * - * @param Location $item - * - * @return $this - */ - public function addItem(Location $item) { - $this->offsetSet($item->getName(), $item); - return $this; - } - - /** - * Get a Collection of Locations that do not have Items assigned - * - * @return static - */ - public function getEmptyLocations() { - return $this->filter(function($location) { - return !$location->hasItem(); - }); - } - - /** - * Get a Collection of Locations that do have Items assigned - * - * @return static - */ - public function getNonEmptyLocations() { - return $this->filter(function($location) { - return $location->hasItem(); - }); - } - - /** - * get the hint string for this location collection. - */ - public function getHint() { - $prime_location = $this->locationsWithItem()->first(); - - $items = $this->getItems()->map(function($item) use ($prime_location) { - if ($prime_location->getRegion()->getWorld()->config('rom.genericKeys', false) && $item instanceof Item\Key) { - $item = Item::get('KeyGK'); - } - - $item_name = __('hint.item.' . $item->getTarget()->getName()); - - return (is_array($item_name)) ? array_first(fy_shuffle($item_name)) : $item_name; - }); - - switch (count($items)) { - case 1: return $prime_location->getHint(); - case 0: return null; - } - - - $location_name = __('hint.location.' . $prime_location->getName()); - - if (is_array($location_name)) { - $location_name = array_first($location_name); // on multi-locations we want the first one - } - - $last_item = array_pop($items); - - return implode(', ', $items) . ' and ' . $last_item . ' ' . $location_name; - } - - /** - * Deterime if the Locations given has at least a particular amount of a particular Item - * - * @param Item $item Item to search for - * @param LocationCollection $locations locations to search against - * @param int $count the required minimum number of Items - * - * @return bool - */ - public function itemInLocations(Item $item, $locations, $count = 1) { - foreach ($locations as $location) { - if ($this->items[$location]->hasItem($item)) { - $count--; - } - } - return $count < 1; - } - - /** - * Get all the Items assigned in this - * - * @param World $world allow a world context to be passed in for item collection being returned - * - * @return ItemCollection - */ - public function getItems(World $world = null) { - return new ItemCollection($this->filter(function($location) { - return $location->hasItem(); - })->map(function ($location) { - return $location->getItem(); - }), $world); - } - - /** - * Get all the Regions that this Collection is part of - * - * @return array - */ - public function getRegions() { - $regions = []; - foreach ($this->items as $location) { - if (!in_array($location->getRegion(), $regions)) { - array_push($regions, $location->getRegion()); - } - } - return $regions; - } - - /** - * Get a new Collection of Locations that have (a particlar) Item assigned - * - * @param Item|null $item Item to search for - * - * @return static - */ - public function locationsWithItem(Item $item = null) { - return $this->filter(function($location) use ($item) { - return $location->hasItem($item); - }); - } - - /** - * cut the collection into two, and place the begginging at the end - * - * @param Location $location Location to cut at - * - * @return static - */ - public function reorderAt(Location $location) { - $key = array_search($location, array_values($this->items)); - return new static(array_merge(array_slice($this->items, $key), array_slice($this->items, 0, $key))); - } - - /** - * Get a new Collection of Locations that the items have access to. - * - * @param ItemCollection $items Items available - * - * @return static - */ - public function canAccess(ItemCollection $items) { - return $this->filter(function($location) use ($items) { - return $location->canAccess($items); - }); - } +class LocationCollection extends Collection +{ + private $checks_for_world = 0; + + /** + * Create a new collection. + * + * @param mixed $items + * + * @return void + */ + public function __construct($items = []) + { + parent::__construct($items); + + $this->items = []; + + foreach ($this->getArrayableItems($items) as $item) { + $this->addItem($item); + } + } + + public function setChecksForWorld(int $world_id) + { + $this->checks_for_world = $world_id; + } + + /** + * Add a Location to this Collection + * + * @param Location $item + * + * @return $this + */ + public function addItem(Location $item) + { + $this->offsetSet($item->getName(), $item); + return $this; + } + + /** + * Remove an item from the collection. + * + * @return $this + */ + public function removeItem($key) + { + $this->offsetUnset("$key:$this->checks_for_world"); + + return $this; + } + + /** + * Get a Collection of Locations that do not have Items assigned + * + * @return static + */ + public function getEmptyLocations() + { + return $this->filter(function ($location) { + return !$location->hasItem(); + }); + } + + /** + * Get a Collection of Locations that do have Items assigned + * + * @return static + */ + public function getNonEmptyLocations() + { + return $this->filter(function ($location) { + return $location->hasItem(); + }); + } + + /** + * get the hint string for this location collection. + */ + public function getHint() + { + $prime_location = $this->locationsWithItem()->first(); + + $items = $this->getItems()->map(function ($item) use ($prime_location) { + if ($prime_location->getRegion()->getWorld()->config('rom.genericKeys', false) && $item instanceof Item\Key) { + $item = Item::get('KeyGK', $prime_location->getRegion()->getWorld()); + } + + $item_name = __('hint.item.' . $item->getTarget()->getName()); + + return (is_array($item_name)) ? array_first(fy_shuffle($item_name)) : $item_name; + }); + + switch (count($items)) { + case 1: + return $prime_location->getHint(); + case 0: + return null; + } + + + $location_name = __('hint.location.' . $prime_location->getName()); + + if (is_array($location_name)) { + $location_name = array_first($location_name); // on multi-locations we want the first one + } + + $last_item = array_pop($items); + + return implode(', ', $items) . ' and ' . $last_item . ' ' . $location_name; + } + + /** + * Deterime if the Locations given has at least a particular amount of a particular Item + * + * @param Item $item Item to search for + * @param LocationCollection $locations locations to search against + * @param int $count the required minimum number of Items + * + * @return bool + */ + public function itemInLocations(Item $item, $locations, $count = 1) + { + foreach ($locations as $location) { + if ($this->items[$location . ':' . $this->checks_for_world]->hasItem($item)) { + $count--; + } + } + return $count < 1; + } + + /** + * Get all the Items assigned in this + * + * @todo see about actual world comparison, not ID comparison later (this was required for shadow world). + * + * @param World $world allow a world context to be passed in for item collection being returned + * + * @return ItemCollection + */ + public function getItems(World $world = null) + { + return new ItemCollection($this->filter(function ($location) use ($world) { + $item = $location->getItem(); + return $item !== null && ($world === null || $item->getWorld()->id === $world->id); + })->map(function ($location) { + return $location->getItem(); + })); + } + + /** + * Get all the Regions that this Collection is part of + * + * @return array + */ + public function getRegions() + { + $regions = []; + foreach ($this->items as $location) { + if (!in_array($location->getRegion(), $regions)) { + array_push($regions, $location->getRegion()); + } + } + return $regions; + } + + /** + * Get a new Collection of Locations that have (a particlar) Item assigned + * + * @param Item|null $item Item to search for + * + * @return static + */ + public function locationsWithItem(Item $item = null) + { + return $this->filter(function ($location) use ($item) { + return $location->hasItem($item); + }); + } + + /** + * Get a new Collection of Locations that the items have access to. + * + * @param ItemCollection $items Items available + * + * @return static + */ + public function canAccess(ItemCollection $items) + { + return $this->filter(function ($location) use ($items) { + return $location->canAccess($items); + }); + } + + /** + * Get a random subset of the collection of given size + * + * @param int $number size of the new collection + * + * @return static + */ + public function randomCollection($number = 1) + { + $random_collection = parent::randomCollection($number); + $random_collection->checks_for_world = $this->checks_for_world; + + return $random_collection; + } + + /** + * Run a filter over each of the items. + * + * @param callable|null $callback + * + * @return static + */ + public function filter(callable $callback = null) + { + if ($callback) { + $filtered = new static(array_filter($this->items, $callback)); + } else { + $filtered = new static(array_filter($this->items)); + } + + $filtered->checks_for_world = $this->checks_for_world; + + return $filtered; + } + + /** + * Merge the collection with the given items. + * + * @param mixed $items + * + * @return static + */ + public function merge($items) + { + $merged = parent::merge($items); + $merged->checks_for_world = $this->checks_for_world; + + return $merged; + } + + /** + * Get a fresh copy of this object, the underlying items will still be the same + * + * @return static + */ + public function copy() + { + $copy = parent::copy(); + $copy->checks_for_world = $this->checks_for_world; + + return $copy; + } + + /** + * Get an item at a given offset. + * + * @param string $offset + * + * @return mixed + */ + public function offsetGet($offset) + { + $offset = str_replace(":$this->checks_for_world", '', $offset); + return $this->items["$offset:$this->checks_for_world"]; + } } diff --git a/app/Support/Lz2.php b/app/Support/Lz2.php index 958617ddc..e2e82c4aa 100644 --- a/app/Support/Lz2.php +++ b/app/Support/Lz2.php @@ -1,4 +1,6 @@ -reverse_bytes = $reverse_bytes; - } + /** + * In Lz2 for ALttP, they use 2 different Lz2 algs, where the Repeat command can either have the address + * reversed or not. False is what you would want generally for GFX (de)compression. Other areas such as + * the sprite dmg table would be true. + * + * @param bool $reverse_bytes Reverse bytes in repeat command. + * + * @return void + */ + public function __construct(bool $reverse_bytes = false) + { + $this->reverse_bytes = $reverse_bytes; + } - /** - * compress array of bytes; - * - * @param array $data array of byte data to compress - * - * @throws Exception if invoked on empty data - * - * @return array compressed byte array - */ - public function compress(array $data) { - if (empty($data)) { - throw new \Exception("Data is null."); - } + /** + * compress array of bytes; + * + * @param array $data array of byte data to compress + * + * @throws \Exception if invoked on empty data + * + * @return array compressed byte array + */ + public function compress(array $data) + { + if (empty($data)) { + throw new \Exception("Data is null."); + } - $output = []; - $position = 0; - $length = count($data); + $output = []; + $position = 0; + $length = count($data); - $directCopyBuffer = []; + $directCopyBuffer = []; - while ($position < $length) { - $currentByte = $data[$position++]; - $nextByte = 0; - $repeatAddress = 0; + while ($position < $length) { + $currentByte = $data[$position++]; + $nextByte = 0; + $repeatAddress = 0; - $byteCount = array_fill(0, self::REPEAT + 1, 0); + $byteCount = array_fill(0, self::REPEAT + 1, 0); - // Evaluate Byte Fill - $byteCount[self::BYTE_FILL] = 1; - for ($i = $position; $i < $length; $i++) { - if ($data[$i] !== $currentByte) { - break; - } - $byteCount[self::BYTE_FILL]++; - } + // Evaluate Byte Fill + $byteCount[self::BYTE_FILL] = 1; + for ($i = $position; $i < $length; $i++) { + if ($data[$i] !== $currentByte) { + break; + } + $byteCount[self::BYTE_FILL]++; + } - // Evaluate Word Fill - $byteCount[self::WORD_FILL] = 1; - if ($position < $length) { - $byteCount[self::WORD_FILL]++; - $nextByte = $data[$position]; - $oddEven = 0; - for ($i = $position + 1; $i < $length; $i++, $oddEven++) { - $currentOddEvenByte = ($oddEven & 1) == 0 ? $currentByte : $nextByte; - if ($data[$i] != $currentOddEvenByte) { - break; - } - $byteCount[self::WORD_FILL]++; - } - } + // Evaluate Word Fill + $byteCount[self::WORD_FILL] = 1; + if ($position < $length) { + $byteCount[self::WORD_FILL]++; + $nextByte = $data[$position]; + $oddEven = 0; + for ($i = $position + 1; $i < $length; $i++, $oddEven++) { + $currentOddEvenByte = ($oddEven & 1) == 0 ? $currentByte : $nextByte; + if ($data[$i] != $currentOddEvenByte) { + break; + } + $byteCount[self::WORD_FILL]++; + } + } - // Evaluate Increasing Fill - $byteCount[self::INCREASE_FILL] = 1; - $increaseByte = ($currentByte + 1); - for ($i = $position; $i < $length; $i++) { - if ($data[$i] !== $increaseByte++) { - break; - } - $byteCount[self::INCREASE_FILL]++; - } + // Evaluate Increasing Fill + $byteCount[self::INCREASE_FILL] = 1; + $increaseByte = ($currentByte + 1); + for ($i = $position; $i < $length; $i++) { + if ($data[$i] !== $increaseByte++) { + break; + } + $byteCount[self::INCREASE_FILL]++; + } - // Evaluate Repeat - $byteCount[self::REPEAT] = 0; - //Slow O(n^2) brute force algorithm for now - $maxAddressInt = min(0xFFFF, $position - 2); - if ($maxAddressInt >= 0) { - for ($start = 0; $start <= $maxAddressInt; $start++) { - $chunkSize = 0; + // Evaluate Repeat + $byteCount[self::REPEAT] = 0; + //Slow O(n^2) brute force algorithm for now + $maxAddressInt = min(0xFFFF, $position - 2); + if ($maxAddressInt >= 0) { + for ($start = 0; $start <= $maxAddressInt; $start++) { + $chunkSize = 0; - for ($pos = $position - 1; $pos < $length && $chunkSize < 1023; $pos++) { - if ($data[$pos] != $data[$start + $chunkSize]) { - break; - } - $chunkSize++; - } + for ($pos = $position - 1; $pos < $length && $chunkSize < 1023; $pos++) { + if ($data[$pos] != $data[$start + $chunkSize]) { + break; + } + $chunkSize++; + } - if ($chunkSize > $byteCount[self::REPEAT]) { - $repeatAddress = $start; - $byteCount[self::REPEAT] = $chunkSize; - } - } - } + if ($chunkSize > $byteCount[self::REPEAT]) { + $repeatAddress = $start; + $byteCount[self::REPEAT] = $chunkSize; + } + } + } - // Choose next command - $nextCommand = self::DIRECT_COPY; // Default command unless anything better is found - $nextCommandByteCount = 1; - for ($commandSuggestion = 1; $commandSuggestion < count($byteCount); $commandSuggestion++) { - // Would this command save any space? - if ($byteCount[$commandSuggestion] >= self::COMMAND_WEIGHT[$commandSuggestion]) { - // Is it better than what we already have? - if ($byteCount[$commandSuggestion] > $nextCommandByteCount) { - $nextCommand = $commandSuggestion; - $nextCommandByteCount = $byteCount[$commandSuggestion]; - } - } - } + // Choose next command + $nextCommand = self::DIRECT_COPY; // Default command unless anything better is found + $nextCommandByteCount = 1; + for ($commandSuggestion = 1; $commandSuggestion < count($byteCount); $commandSuggestion++) { + // Would this command save any space? + if ($byteCount[$commandSuggestion] >= self::COMMAND_WEIGHT[$commandSuggestion]) { + // Is it better than what we already have? + if ($byteCount[$commandSuggestion] > $nextCommandByteCount) { + $nextCommand = $commandSuggestion; + $nextCommandByteCount = $byteCount[$commandSuggestion]; + } + } + } - // Direct Copy commands are incrementally built. - // Output or add to as needed. - if ($nextCommand == self::DIRECT_COPY) { - array_push($directCopyBuffer, $currentByte); - if (count($directCopyBuffer) >= 1023) { - // Direct Copy has a maximum length of 1023 bytes - $this->outputCommand(self::DIRECT_COPY, count($directCopyBuffer), $output); - foreach ($directCopyBuffer as $buffer) { - array_push($output, $buffer); - } - $directCopyBuffer = []; - } - } else { - if (!empty($directCopyBuffer)) { - // Direct Copy command in progress. Write it to output before proceeding - $this->outputCommand(self::DIRECT_COPY, count($directCopyBuffer), $output); - foreach ($directCopyBuffer as $buffer) { - array_push($output, $buffer); - } - $directCopyBuffer = []; - } - } + // Direct Copy commands are incrementally built. + // Output or add to as needed. + if ($nextCommand == self::DIRECT_COPY) { + array_push($directCopyBuffer, $currentByte); + if (count($directCopyBuffer) >= 1023) { + // Direct Copy has a maximum length of 1023 bytes + $this->outputCommand(self::DIRECT_COPY, count($directCopyBuffer), $output); + foreach ($directCopyBuffer as $buffer) { + array_push($output, $buffer); + } + $directCopyBuffer = []; + } + } else { + if (!empty($directCopyBuffer)) { + // Direct Copy command in progress. Write it to output before proceeding + $this->outputCommand(self::DIRECT_COPY, count($directCopyBuffer), $output); + foreach ($directCopyBuffer as $buffer) { + array_push($output, $buffer); + } + $directCopyBuffer = []; + } + } - // Output command - switch($nextCommand) { - case self::DIRECT_COPY: - // Already handled above - break; - case self::BYTE_FILL: - $this->outputCommand($nextCommand, $nextCommandByteCount, $output); - array_push($output, $currentByte); - break; - case self::WORD_FILL: - $this->outputCommand($nextCommand, $nextCommandByteCount, $output); - array_push($output, $currentByte); - array_push($output, $nextByte); - break; - case self::INCREASE_FILL: - $this->outputCommand($nextCommand, $nextCommandByteCount, $output); - array_push($output, $currentByte); - break; - case self::REPEAT: - $this->outputCommand($nextCommand, $nextCommandByteCount, $output); - if ($this->reverse_bytes) { - array_push($output, $repeatAddress >> 8, $repeatAddress % 256); - } else { - array_push($output, $repeatAddress % 256, $repeatAddress >> 8); - } - break; - } + // Output command + switch ($nextCommand) { + case self::DIRECT_COPY: + // Already handled above + break; + case self::BYTE_FILL: + $this->outputCommand($nextCommand, $nextCommandByteCount, $output); + array_push($output, $currentByte); + break; + case self::WORD_FILL: + $this->outputCommand($nextCommand, $nextCommandByteCount, $output); + array_push($output, $currentByte); + array_push($output, $nextByte); + break; + case self::INCREASE_FILL: + $this->outputCommand($nextCommand, $nextCommandByteCount, $output); + array_push($output, $currentByte); + break; + case self::REPEAT: + $this->outputCommand($nextCommand, $nextCommandByteCount, $output); + if ($this->reverse_bytes) { + array_push($output, $repeatAddress >> 8, $repeatAddress % 256); + } else { + array_push($output, $repeatAddress % 256, $repeatAddress >> 8); + } + break; + } - $position += ($nextCommandByteCount) - 1; - } + $position += ($nextCommandByteCount) - 1; + } - // Output Direct Copy buffer if it exists - if (!empty($directCopyBuffer)) { - $this->outputCommand(self::DIRECT_COPY, count($directCopyBuffer), $output); - foreach ($directCopyBuffer as $buffer) { - array_push($output, $buffer); - } - } + // Output Direct Copy buffer if it exists + if (!empty($directCopyBuffer)) { + $this->outputCommand(self::DIRECT_COPY, count($directCopyBuffer), $output); + foreach ($directCopyBuffer as $buffer) { + array_push($output, $buffer); + } + } - array_push($output, 0xFF); - return $output; - } + array_push($output, 0xFF); + return $output; + } - /** - * Decompress LZ2 byte array. Confidence that this works properly, 99%. - * - * @param array $compressedData array of bytes - * @param int $start starting point in array - * - * @throws Exception if encounters an unknown decompress command or invoked on empty data - * - * @return array decompressed bytes in array - */ - public function decompress(array $compressedData, int $start = 0) { - if (empty($compressedData)) { - throw new \Exception("Compressed data is null."); - } + /** + * Decompress LZ2 byte array. Confidence that this works properly, 99%. + * + * @param array $compressedData array of bytes + * @param int $start starting point in array + * + * @throws \Exception if encounters an unknown decompress command or invoked on empty data + * + * @return array decompressed bytes in array + */ + public function decompress(array $compressedData, int $start = 0) + { + if (empty($compressedData)) { + throw new \Exception("Compressed data is null."); + } - $output = []; - $position = $start; + $output = []; + $position = $start; - while (true) { - $commandLength = $compressedData[$position++]; - if ($commandLength == 0xFF) { - break; - } + while (true) { + $commandLength = $compressedData[$position++]; + if ($commandLength == 0xFF) { + break; + } - $command = ($commandLength >> 5); + $command = ($commandLength >> 5); - if ($command == self::LONG_COMMAND) { - $length = $compressedData[$position++]; - $length |= (($commandLength & 3) << 8); - $length++; - $command = (($commandLength >> 2) & 7); - } else { - $length = ($commandLength & 0x1F) + 1; - } + if ($command == self::LONG_COMMAND) { + $length = $compressedData[$position++]; + $length |= (($commandLength & 3) << 8); + $length++; + $command = (($commandLength >> 2) & 7); + } else { + $length = ($commandLength & 0x1F) + 1; + } - switch ($command) { - case self::DIRECT_COPY: - for ($i = 0; $i < $length; $i++) { - array_push($output, $compressedData[$position++]); - } - break; - case self::BYTE_FILL: - $fillByte = $compressedData[$position++]; - for ($i = 0; $i < $length; $i++) { - array_push($output, $fillByte); - } - break; - case self::WORD_FILL: - $fillByteEven = $compressedData[$position++]; - $fillByteOdd = $compressedData[$position++]; - for ($i = 0; $i < $length; $i++) { - $thisByte = ($i & 1) == 0 ? $fillByteEven : $fillByteOdd; - array_push($output, $thisByte); - } - break; - case self::INCREASE_FILL: - $increaseFillByte = $compressedData[$position++]; - for ($i = 0; $i < $length; $i++) { - array_push($output, $increaseFillByte++); - } - break; - case self::REPEAT: - if ($this->reverse_bytes) { - $origin = (($compressedData[$position++] << 8) | $compressedData[$position++]); - } else { - $origin = ($compressedData[$position++] | ($compressedData[$position++] << 8)); - } - for ($i = 0; $i < $length; $i++) { - array_push($output, $output[$origin++]); - } - break; - default: - throw new \Exception("Invalid Lz2 command: " + $command); - } - } + switch ($command) { + case self::DIRECT_COPY: + for ($i = 0; $i < $length; $i++) { + array_push($output, $compressedData[$position++]); + } + break; + case self::BYTE_FILL: + $fillByte = $compressedData[$position++]; + for ($i = 0; $i < $length; $i++) { + array_push($output, $fillByte); + } + break; + case self::WORD_FILL: + $fillByteEven = $compressedData[$position++]; + $fillByteOdd = $compressedData[$position++]; + for ($i = 0; $i < $length; $i++) { + $thisByte = ($i & 1) == 0 ? $fillByteEven : $fillByteOdd; + array_push($output, $thisByte); + } + break; + case self::INCREASE_FILL: + $increaseFillByte = $compressedData[$position++]; + for ($i = 0; $i < $length; $i++) { + array_push($output, $increaseFillByte++); + } + break; + case self::REPEAT: + if ($this->reverse_bytes) { + $origin = (($compressedData[$position++] << 8) | $compressedData[$position++]); + } else { + $origin = ($compressedData[$position++] | ($compressedData[$position++] << 8)); + } + for ($i = 0; $i < $length; $i++) { + $output[] = $output[$origin++]; + } + break; + default: + throw new \Exception("Invalid Lz2 command: " . $command); + } + } - return $output; - } + return $output; + } - /** - * prep command and add to byte stream - * - * @param int $command command to be added to byte array - * @param int $length number of bytes this command is related to - * @param array &$output array we are adding the command to - * - * @return void - */ - private function outputCommand(int $command, int $length, array &$output) { - if ($length > 32) { - // Long command - $length--; - $firstByte = (0xE0 | ($command << 2) | ($length >> 8)); - $secondByte = $length; - array_push($output, $firstByte); - array_push($output, $secondByte % 256); - } else { - // Short command - $length--; - $commandLength = ($command << 5 | $length); - array_push($output, $commandLength); - } - } + /** + * prep command and add to byte stream + * + * @param int $command command to be added to byte array + * @param int $length number of bytes this command is related to + * @param array $output reference array we are adding the command to + * + * @return void + */ + private function outputCommand(int $command, int $length, array &$output) + { + if ($length > 32) { + // Long command + $length--; + $firstByte = (0xE0 | ($command << 2) | ($length >> 8)); + $secondByte = $length; + array_push($output, $firstByte); + array_push($output, $secondByte % 256); + } else { + // Short command + $length--; + $commandLength = ($command << 5 | $length); + array_push($output, $commandLength); + } + } } diff --git a/app/Support/ShopCollection.php b/app/Support/ShopCollection.php index 9eeb9971b..0ae1c1d88 100644 --- a/app/Support/ShopCollection.php +++ b/app/Support/ShopCollection.php @@ -1,53 +1,64 @@ -getArrayableItems($items) as $item) { - $this->addItem($item); - } - } - - /** - * Add a Shop to this Collection - * - * @param Shop $item - * - * @return $this - */ - public function addItem(Shop $item) { - $this->offsetSet($item->getName(), $item); - return $this; - } - - /** - * Get all the Items assigned in this - * - * @param World $world allow a world context to be passed in for item collection being returned - * - * @return ItemCollection - */ - public function getItems(World $world = null) { - return $this->reduce(function ($locations, $shop) { - return $locations->merge($shop->getLocations()); - }, new LocationCollection)->getItems($world); - } - - public function getLocations() { - return $this->reduce(function ($locations, $shop) { - return $locations->merge($shop->getLocations()); - }, new LocationCollection); - } +class ShopCollection extends Collection +{ + /** + * Create a new collection. + * + * @param mixed $items + * + * @return void + */ + public function __construct($items = []) + { + parent::__construct($items); + + $this->items = []; + + foreach ($this->getArrayableItems($items) as $item) { + $this->addItem($item); + } + } + + /** + * Add a Shop to this Collection + * + * @param Shop $item + * + * @return $this + */ + public function addItem(Shop $item) + { + $this->offsetSet($item->getName(), $item); + return $this; + } + + /** + * Get all the Items assigned in this + * + * @param \ALttP\World $world allow a world context to be passed in for item collection being returned + * + * @return ItemCollection + */ + public function getItems(World $world = null) + { + return $this->reduce(function ($locations, $shop) { + return $locations->merge($shop->getLocations()); + }, new LocationCollection)->getItems($world); + } + + public function getLocations() + { + return $this->reduce(function ($locations, $shop) { + return $locations->merge($shop->getLocations()); + }, new LocationCollection); + } } diff --git a/app/Support/SpriteCollection.php b/app/Support/SpriteCollection.php index 0dbe65138..90a0b76a7 100644 --- a/app/Support/SpriteCollection.php +++ b/app/Support/SpriteCollection.php @@ -1,33 +1,42 @@ -getArrayableItems($items) as $item) { - $this->addItem($item); - } - } +class SpriteCollection extends Collection +{ + /** + * Create a new collection. + * + * @param mixed $items + * + * @return void + */ + public function __construct($items = []) + { + parent::__construct($items); + + $this->items = []; + + foreach ($this->getArrayableItems($items) as $item) { + $this->addItem($item); + } + } - /** - * Add an Sprite to this Collection - * - * @param Sprite $item - * - * @return $this - */ - public function addItem(Sprite $item) { - $this->offsetSet($item->getName(), $item); - return $this; - } + /** + * Add an Sprite to this Collection + * + * @param Sprite $item + * + * @return $this + */ + public function addItem(Sprite $item) + { + $this->offsetSet($item->getName(), $item); + return $this; + } } diff --git a/app/Support/WorldCollection.php b/app/Support/WorldCollection.php new file mode 100644 index 000000000..13a140d52 --- /dev/null +++ b/app/Support/WorldCollection.php @@ -0,0 +1,90 @@ +worlds = $worlds; + } + + /** + * Check if all the worlds are winnable + * + * @return bool + */ + public function isWinnable(): bool + { + foreach ($this->worlds as $reset_count_world) { + $reset_count_world->resetCollectedLocations(); + } + + $found_locations = 0; + $assumed_items = new ItemCollection; + do { + $current_locations = 0; + foreach ($this->worlds as $collect_world) { + $assumed_items = $assumed_items->merge($collect_world->collectOtherItems($assumed_items)); + $current_locations += $collect_world->getCollectedLocationsCount(); + } + if ($found_locations == $current_locations) { + break; + } else { + $found_locations = $current_locations; + } + } while (true); + + foreach ($this->worlds as $check_world) { + if (!$check_world->getWinCondition()($assumed_items)) { + return false; + } + } + + return true; + } + + /** + * Get the first item from the collection. + * + * @return \ALttP\World + */ + public function first(): World + { + return reset($this->worlds); + } + + /** + * Takes an ItemCollection and calls checkWinCondition on each world, until + * one returns false, or we run out. + * + * @param \ALttP\Support\ItemCollection $items Items to check win condition with + * + * @return bool + */ + public function checkWinCondition(ItemCollection $items): bool + { + foreach ($this->worlds as $check_world) { + if (!$check_world->getWinCondition()($items)) { + return false; + } + } + + return true; + } +} diff --git a/app/Support/XXTEA.php b/app/Support/XXTEA.php index b18ef918a..9d9581721 100644 --- a/app/Support/XXTEA.php +++ b/app/Support/XXTEA.php @@ -1,88 +1,96 @@ -key = array_values(unpack('L*', pack('C*', ...array_slice(array_merge($key, array_fill(0, 16, 0)), 0, 16)))); - } + /** + * Create encryptor + * + * @param array $key 16 byte (max) key to use for encryption/decryption + */ + public function __construct(array $key = []) + { + $this->key = array_values(unpack('L*', pack('C*', ...array_slice(array_merge($key, array_fill(0, 16, 0)), 0, 16)))); + } - /** - * encrypt the byte array - * - * @param array $unencrypted data array to encrypt - * - * @return array - */ - public function encrypt(array $unencrypted) { - if (count($unencrypted) < 8) { - throw new \Exception('Data to encrypt must be at least 8 bytes long'); - } + /** + * encrypt the byte array + * + * @param array $unencrypted data array to encrypt + * + * @return array + */ + public function encrypt(array $unencrypted) + { + if (count($unencrypted) < 8) { + throw new \Exception('Data to encrypt must be at least 8 bytes long'); + } - $unencrypted = array_values(unpack('L*', pack('C*', ...array_slice(array_merge($unencrypted, array_fill(0, 4, 0)), 0, ceil(count($unencrypted) / 4) * 4)))); - $encrypted = $unencrypted; + $unencrypted = array_values(unpack('L*', pack('C*', ...array_slice(array_merge($unencrypted, array_fill(0, 4, 0)), 0, (int) ceil(count($unencrypted) / 4) * 4)))); + $encrypted = $unencrypted; - $n = count($unencrypted) - 1; - $z = $unencrypted[$n]; - $q = floor(6 + 52 / ($n + 1)); + $n = count($unencrypted) - 1; + $z = $unencrypted[$n]; + $q = floor(6 + 52 / ($n + 1)); - $sum = 0; - while (0 < $q--) { - $sum = $this->int32($sum + self::DELTA); - $e = $sum >> 2 & 3; - for ($p = 0; $p < $n; $p++) { - $y = $encrypted[$p + 1]; - $z = $encrypted[$p] = $this->int32($encrypted[$p] + $this->mx($sum, $y, $z, $p, $e, $this->key)); - } - $y = $encrypted[0]; - $z = $encrypted[$n] = $this->int32($encrypted[$n] + $this->mx($sum, $y, $z, $p, $e, $this->key)); - } - return array_values(unpack('C*', pack('L*', ...$encrypted))); - } + $sum = 0; + while (0 < $q--) { + $sum = $this->int32($sum + self::DELTA); + $e = $sum >> 2 & 3; + for ($p = 0; $p < $n; $p++) { + $y = $encrypted[$p + 1]; + $z = $encrypted[$p] = $this->int32($encrypted[$p] + $this->mx($sum, $y, $z, $p, $e, $this->key)); + } + $y = $encrypted[0]; + $z = $encrypted[$n] = $this->int32($encrypted[$n] + $this->mx($sum, $y, $z, $p, $e, $this->key)); + } + return array_values(unpack('C*', pack('L*', ...$encrypted))); + } - /** - * encrypt the byte array - * - * @param array $encrypted data array to encrypt - * - * @return array - */ - public function decrypt(array $encrypted) { - $encrypted = array_values(unpack('L*', pack('C*', ...$encrypted))); - $unencrypted = $encrypted; + /** + * encrypt the byte array + * + * @param array $encrypted data array to encrypt + * + * @return array + */ + public function decrypt(array $encrypted) + { + $encrypted = array_values(unpack('L*', pack('C*', ...$encrypted))); + $unencrypted = $encrypted; - $n = count($encrypted) - 1; - $y = $encrypted[0]; - $q = floor(6 + 52 / ($n + 1)); + $n = count($encrypted) - 1; + $y = $encrypted[0]; + $q = floor(6 + 52 / ($n + 1)); - $sum = $this->int32($q * self::DELTA); - while ($sum != 0) { - $e = $sum >> 2 & 3; - for ($p = $n; $p > 0; $p--) { - $z = $unencrypted[$p - 1]; - $y = $unencrypted[$p] = $this->int32($unencrypted[$p] - $this->mx($sum, $y, $z, $p, $e, $this->key)); - } - $z = $unencrypted[$n]; - $y = $unencrypted[0] = $this->int32($unencrypted[0] - $this->mx($sum, $y, $z, $p, $e, $this->key)); - $sum = $this->int32($sum - self::DELTA); - } - return array_values(unpack('C*', pack('L*', ...$unencrypted))); - } + $sum = $this->int32($q * self::DELTA); + while ($sum != 0) { + $e = $sum >> 2 & 3; + for ($p = $n; $p > 0; $p--) { + $z = $unencrypted[$p - 1]; + $y = $unencrypted[$p] = $this->int32($unencrypted[$p] - $this->mx($sum, $y, $z, $p, $e, $this->key)); + } + $z = $unencrypted[$n]; + $y = $unencrypted[0] = $this->int32($unencrypted[0] - $this->mx($sum, $y, $z, $p, $e, $this->key)); + $sum = $this->int32($sum - self::DELTA); + } + return array_values(unpack('C*', pack('L*', ...$unencrypted))); + } - private function mx($sum, $y, $z, $p, $e, $k) { - return ((($z >> 5 & 0x07FFFFFF) ^ $y << 2) + (($y >> 3 & 0x1FFFFFFF) ^ $z << 4)) ^ (($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z)); - } + private function mx($sum, $y, $z, $p, $e, $k) + { + return ((($z >> 5 & 0x07FFFFFF) ^ $y << 2) + (($y >> 3 & 0x1FFFFFFF) ^ $z << 4)) ^ (($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z)); + } - private function int32($n) { - return ($n & 0xFFFFFFFF); - } + private function int32($n) + { + return ($n & 0xFFFFFFFF); + } } diff --git a/app/Support/Zspr.php b/app/Support/Zspr.php index 662b0e093..5b5e18a22 100644 --- a/app/Support/Zspr.php +++ b/app/Support/Zspr.php @@ -1,119 +1,148 @@ -data = file_get_contents($source_location); - - if (substr($this->data, 0, 4) !== 'ZSPR') { - throw new \Exception('Source not valid Zspr file'); - } - - $this->bytes = array_values(unpack('C*', $this->data)); - - $this->sprite_data_offset = $this->bytes[12] << 24 | $this->bytes[11] << 16 | $this->bytes[10] << 8 | $this->bytes[9]; - $this->palette_data_offset = $this->bytes[18] << 24 | $this->bytes[17] << 16 | $this->bytes[16] << 8 | $this->bytes[15]; - - $variable_data = array_values(unpack('v*', substr($this->data, 29, $this->sprite_data_offset - 29))); - while (count($variable_data)) { - $char = array_shift($variable_data); - if (!$char) { - break; - } - $this->display_text .= $this->unichr($char); - } - - while (count($variable_data)) { - $char = array_shift($variable_data); - if (!$char) { - break; - } - $this->author .= $this->unichr($char); - } - - $variable_data = array_values(unpack('c*', pack('v*', ...$variable_data))); - while (count($variable_data)) { - $char = array_shift($variable_data); - if (!$char) { - break; - } - $this->author_rom .= chr($char); - } - } - - public function getVersion() { - return $this->bytes[4]; - } - - public function checksum() { - return (array_sum($this->bytes) & 0xFFFF) == ($this->bytes[6] << 8 | $this->bytes[5]); - } - - public function getPixelData() { - $length = $this->bytes[14] << 8 | $this->bytes[13]; - - return substr($this->data, $this->sprite_data_offset, $length); - } - - // we have faster access through the internal bytes array, but dirty quick for release here - public function getPixelBytes() { - return array_values(unpack('C*', $this->getPixelData())); - } - - public function getPaletteData() { - $length = $this->bytes[20] << 8 | $this->bytes[19]; - - return substr($this->data, $this->palette_data_offset, $length); - } - - // @TODO: use internal bytes array instead *derp* - public function getPaletteBytes() { - return array_values(unpack('C*', $this->getPaletteData())); - } - - public function getType() { - switch ($this->bytes[22] << 8 | $this->bytes[21]) { - case 1: - return 'Sprite'; - default: - return 'Unkown'; - } - } - - public function getDisplayText() { - return $this->display_text; - } - - public function getAuthor() { - return $this->author; - } - - public function getAuthorRomDisplay() { - return $this->author_rom; - } - protected function unichr($u) { - return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES'); - } +class Zspr +{ + /** @var string */ + private $data; + /** @var string */ + private $display_text = ''; + /** @var string */ + private $author = ''; + /** @var string */ + private $author_rom = ''; + /** @var int */ + private $sprite_data_offset; + /** @var int */ + private $palette_data_offset; + /** @var array */ + private $bytes = []; + + /** + * Create a new wrapper + * + * @param string $source_location location of source Zspr + * + * @return void + */ + public function __construct(string $source_location) + { + if (!is_readable($source_location)) { + throw new \Exception('Source Zspr not readable'); + } + + $data = file_get_contents($source_location); + + if ($data === false) { + throw new \Exception('Source Zspr not readable'); + } + + $this->data = $data; + + if (substr($this->data, 0, 4) !== 'ZSPR') { + throw new \Exception('Source not valid Zspr file'); + } + + $this->bytes = array_values(unpack('C*', $this->data)); + + $this->sprite_data_offset = $this->bytes[12] << 24 | $this->bytes[11] << 16 | $this->bytes[10] << 8 | $this->bytes[9]; + $this->palette_data_offset = $this->bytes[18] << 24 | $this->bytes[17] << 16 | $this->bytes[16] << 8 | $this->bytes[15]; + + $variable_data = array_values(unpack('v*', substr($this->data, 29, $this->sprite_data_offset - 29))); + while (count($variable_data)) { + $char = array_shift($variable_data); + if (!$char) { + break; + } + $this->display_text .= $this->unichr($char); + } + + while (count($variable_data)) { + $char = array_shift($variable_data); + if (!$char) { + break; + } + $this->author .= $this->unichr($char); + } + + $variable_data = array_values(unpack('c*', pack('v*', ...$variable_data))); + while (count($variable_data)) { + $char = array_shift($variable_data); + if (!$char) { + break; + } + $this->author_rom .= chr($char); + } + } + + public function getVersion() + { + return $this->bytes[4]; + } + + public function checksum() + { + return (array_sum($this->bytes) & 0xFFFF) == ($this->bytes[6] << 8 | $this->bytes[5]); + } + + public function getPixelData() + { + $length = $this->bytes[14] << 8 | $this->bytes[13]; + + return substr($this->data, $this->sprite_data_offset, $length); + } + + // we have faster access through the internal bytes array, but dirty quick for release here + public function getPixelBytes() + { + return array_values(unpack('C*', $this->getPixelData())); + } + + public function getPaletteData() + { + $length = $this->bytes[20] << 8 | $this->bytes[19]; + + return substr($this->data, $this->palette_data_offset, $length); + } + + // @TODO: use internal bytes array instead *derp* + public function getPaletteBytes() + { + return array_values(unpack('C*', $this->getPaletteData())); + } + + public function getType() + { + switch ($this->bytes[22] << 8 | $this->bytes[21]) { + case 1: + return 'Sprite'; + default: + return 'Unkown'; + } + } + + public function getDisplayText() + { + return $this->display_text; + } + + public function getAuthor() + { + return $this->author; + } + + public function getAuthorRomDisplay() + { + return $this->author_rom; + } + protected function unichr($u) + { + return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES'); + } } diff --git a/app/Text.php b/app/Text.php index 4b3736b75..641483739 100644 --- a/app/Text.php +++ b/app/Text.php @@ -1,4 +1,6 @@ -converter = new Dialog; - $this->text_array = $this->$translation(); - } - - /** - * Updates a specific string in the table, including +class Text +{ + protected $text_array; + protected $converter; + + public function __construct($translation = 'en') + { + $this->converter = new Dialog; + $this->text_array = $this->$translation(); + } + + /** + * Updates a specific string in the table, including * encoding the string. - * - * @param string $id The ID of the string to update + * + * @param string $id The ID of the string to update * @param string $value the string to add to the table - * - * @return void - */ - public function setString(string $id, string $value, ...$flags) { - $this->text_array[$id] = $this->converter->convertDialogCompressed($value, ...$flags); + * + * @return void + */ + public function setString(string $id, string $value, ...$flags) + { + $this->text_array[$id] = $this->converter->convertDialogCompressed($value, ...$flags); } - /** - * Updates a specific string in the table, given the + /** + * Updates a specific string in the table, given the * raw bytes - * - * @param string $id The ID of the string to update - * @param int[] $rawvalue The raw bytes to add to the table - * - * @return void - */ - public function setStringRaw(string $id, array $rawvalue) { + * + * @param string $id The ID of the string to update + * @param array $rawvalue The raw bytes to add to the table + * + * @return void + */ + public function setStringRaw(string $id, array $rawvalue) + { $this->text_array[$id] = $rawvalue; - } + } - function writeBinary() { - $bin = fopen(sprintf('i18n_%s.bin', $translation), "w"); + public function getByteArray(bool $pad = false) + { + $data = array_merge(...array_values($this->text_array)); - $result = $this->getByteArray($translation); + Log::debug(sprintf('Localization free space: %s', 0x7355 - count($data))); - fwrite($bin, pack('C*', ...$result)); + if (count($data) > 0x7355) { + throw new \Exception("Too BIG", 1); + } + if ($pad) { + return array_pad($data, 0x7355, 0xFF); + } else { + return $data; + } + } + + public function en() + { + $converter = $this->converter; + // php all arrays are ordered - fclose($bin); - } + // Numbers in comments refer to US text numbers. Except for + // the first few entries, JP1.0 text numbers are smaller by 2 + return [ + 'set_cursor' => [0xFB, 0xFC, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xE4, 0xFE, 0x68], + 'set_cursor2' => [0xFB, 0xFC, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xE4, 0xFE, 0x68], - function getByteArray(bool $pad=false) { - $data = array_merge(...array_values($this->text_array)); + 'game_over_menu' => $converter->convertDialogCompressed("{SPEED0}\nSave-Continue\nSave-Quit\nContinue", false), - Log::debug(sprintf('Localization free space: %s', 0x7355 - count($data))); + 'var_test' => $converter->convertDialogCompressed("0= ᚋ, 1= ᚌ\n2= ᚍ, 3= ᚎ", false), - if (count($data) > 0x7355) { - throw new \Exception("Too BIG", 1); - } - if($pad){ - return array_pad($data, 0x7355, 0xFF); - } else { - return $data; - } - } + 'follower_no_enter' => $converter->convertDialogCompressed("Can't you take me some place nice."), - function getByteString() { - $data = array_merge(...array_values($text_array)); + 'choice_1_3' => [0xFB, 0xFC, 0x00, 0xF7, 0xE4, 0xF8, 0xFF, 0xF9, 0xFF, 0xFE, 0x71], + 'choice_2_3' => [0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xE4, 0xF9, 0xFF, 0xFE, 0x71], + 'choice_3_3' => [0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xFF, 0xF9, 0xE4, 0xFE, 0x71], + 'choice_1_2' => [0xFB, 0xFC, 0x00, 0xF7, 0xE4, 0xF8, 0xFF, 0xFE, 0x72], + 'choice_2_2' => [0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xE4, 0xFE, 0x72], - Log::debug(sprintf('Localization free space: %s', 0x7355 - count($data))); + 'uncle_leaving_text' => $converter->convertDialogCompressed("I'm just going out for a pack of smokes."), - if (count($data) > 0x7355) { - throw new \Exception("Too BIG", 1); - } + 'uncle_dying_sewer' => $converter->convertDialogCompressed("I've fallen and I can't get up, take this."), + // 0x10 + 'tutorial_guard_1' => $converter->convertDialogCompressed("Only adults should travel at night."), - return pack('C*', ...array_pad($data, 0x7355, 0xFF)); - } + 'tutorial_guard_2' => $converter->convertDialogCompressed("You can press X to see the Map."), - function en() { - $converter = $this->converter; - // php all arrays are ordered + 'tutorial_guard_3' => $converter->convertDialogCompressed("Press the A button to lift things by you."), - // Numbers in comments refer to US text numbers. Except for - // the first few entries, JP1.0 text numbers are smaller by 2 - return [ - 'set_cursor' => [0xFB, 0xFC, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xE4, 0xFE, 0x68], - 'set_cursor2' => [0xFB, 0xFC, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xE4, 0xFE, 0x68], + 'tutorial_guard_4' => $converter->convertDialogCompressed("When you has a sword, press B to slash it."), - 'game_over_menu' => $converter->convertDialogCompressed("{SPEED0}\nSave-Continue\nSave-Quit\nContinue", false), + 'tutorial_guard_5' => $converter->convertDialogCompressed("このメッセージはニホンゴでそのまま"), // on purpose - 'var_test' => $converter->convertDialogCompressed("0= ᚋ, 1= ᚌ\n2= ᚍ, 3= ᚎ", false), + 'tutorial_guard_6' => $converter->convertDialogCompressed("Are we really still reading these?"), - 'follower_no_enter' => $converter->convertDialogCompressed("Can't you take me some place nice."), + 'tutorial_guard_7' => $converter->convertDialogCompressed("Jeeze! There really are a lot of things."), - 'choice_1_3' => [0xFB, 0xFC, 0x00, 0xF7, 0xE4, 0xF8, 0xFF, 0xF9, 0xFF, 0xFE, 0x71], - 'choice_2_3' => [0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xE4, 0xF9, 0xFF, 0xFE, 0x71], - 'choice_3_3' => [0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xFF, 0xF9, 0xE4, 0xFE, 0x71], - 'choice_1_2' => [0xFB, 0xFC, 0x00, 0xF7, 0xE4, 0xF8, 0xFF, 0xFE, 0x72], - 'choice_2_2' => [0xFB, 0xFC, 0x00, 0xF7, 0xFF, 0xF8, 0xE4, 0xFE, 0x72], + 'priest_sanctuary_before_leave' => $converter->convertDialogCompressed("Go be a hero!"), - 'uncle_leaving_text' => $converter->convertDialogCompressed("I'm just going out for a pack of smokes."), + 'sanctuary_enter' => $converter->convertDialogCompressed("YAY!\nYou saved Zelda!"), - 'uncle_dying_sewer' => $converter->convertDialogCompressed("I've fallen and I can't get up, take this."), - // 0x10 - 'tutorial_guard_1' => $converter->convertDialogCompressed("Only adults should travel at night."), + 'zelda_sanctuary_story' => $converter->convertDialogCompressed("Do you want to hear me say this again?\n{HARP}\n ≥ no\n yes\n{CHOICE}"), - 'tutorial_guard_2' => $converter->convertDialogCompressed("You can press X to see the Map."), + 'priest_sanctuary_before_pendants' => $converter->convertDialogCompressed("Go'on and get them pendants so you can beat up Agahnim."), - 'tutorial_guard_3' => $converter->convertDialogCompressed("Press the A button to lift things by you."), + 'priest_sanctuary_after_pendants_before_master_sword' => $converter->convertDialogCompressed("Kudos! But seriously, you should be getting the master sword, not having a kegger in here."), - 'tutorial_guard_4' => $converter->convertDialogCompressed("When you has a sword, press B to slash it."), + 'priest_sanctuary_dying' => $converter->convertDialogCompressed("They took her to the castle! Take your sword and save her!"), - 'tutorial_guard_5' => $converter->convertDialogCompressed("このメッセージはニホンゴでそのまま"), // on purpose + 'zelda_save_sewers' => $converter->convertDialogCompressed("You saved me!"), - 'tutorial_guard_6' => $converter->convertDialogCompressed("Are we really still reading these?"), + 'priest_info' => $converter->convertDialogCompressed("So, I'm the dude that will protect Zelda. Don't worry, I got this covered."), - 'tutorial_guard_7' => $converter->convertDialogCompressed("Jeeze! There really are a lot of things."), + 'zelda_sanctuary_before_leave' => $converter->convertDialogCompressed("Be careful!"), - 'priest_sanctuary_before_leave' => $converter->convertDialogCompressed("Go be a hero!"), + 'telepathic_intro' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nHey, come find me and help me!"), + // 0x20 + 'telepathic_reminder' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nI'm in the castle basement."), - 'sanctuary_enter' => $converter->convertDialogCompressed("YAY!\nYou saved Zelda!"), + 'zelda_go_to_throne' => $converter->convertDialogCompressed("Go north to the throne."), - 'zelda_sanctuary_story' => $converter->convertDialogCompressed("Do you want to hear me say this again?\n{HARP}\n ≥ no\n yes\n{CHOICE}"), + 'zelda_push_throne' => $converter->convertDialogCompressed("Let's push it from the left!"), - 'priest_sanctuary_before_pendants' => $converter->convertDialogCompressed("Go'on and get them pendants so you can beat up Agahnim."), + 'zelda_switch_room_pull' => $converter->convertDialogCompressed("Pull this lever using A."), - 'priest_sanctuary_after_pendants_before_master_sword' => $converter->convertDialogCompressed("Kudos! But seriously, you should be getting the master sword, not having a kegger in here."), + 'zelda_save_lets_go' => $converter->convertDialogCompressed("Let's get out of here!"), - 'priest_sanctuary_dying' => $converter->convertDialogCompressed("They took her to the castle! Take your sword and save her!"), + 'zelda_save_repeat' => $converter->convertDialogCompressed("I like talking, do you?\n ≥ no\n yes\n{CHOICE}"), - 'zelda_save_sewers' => $converter->convertDialogCompressed("You saved me!"), + 'zelda_before_pendants' => $converter->convertDialogCompressed("You need to find all the pendants…\n\n\nNumpty."), - 'priest_info' => $converter->convertDialogCompressed("So, I'm the dude that will protect Zelda. Don't worry, I got this covered."), + 'zelda_after_pendants_before_master_sword' => $converter->convertDialogCompressed("Very pretty pendants, but really you should be getting that sword in the forest!"), - 'zelda_sanctuary_before_leave' => $converter->convertDialogCompressed("Be careful!"), + 'telepathic_zelda_right_after_master_sword' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nHi @,\nHave you been thinking about me?\narrrrrgghh…\n… … …"), - 'telepathic_intro' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nHey, come find me and help me!"), - // 0x20 - 'telepathic_reminder' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nI'm in the castle basement."), + 'zelda_sewers' => $converter->convertDialogCompressed("Just a little further to the Sanctuary."), - 'zelda_go_to_throne' => $converter->convertDialogCompressed("Go north to the throne."), + 'zelda_switch_room' => $converter->convertDialogCompressed("The Sanctuary!\n\nPull my finger"), - 'zelda_push_throne' => $converter->convertDialogCompressed("Let's push it from the left!"), + 'kakariko_saharalasa_wife' => $converter->convertDialogCompressed("Heya, @!\nLong time no see.\nYou want a master sword?\n\nWell good luck with that."), - 'zelda_switch_room_pull' => $converter->convertDialogCompressed("Pull this lever using A."), + 'kakariko_saharalasa_wife_sword_story' => $converter->convertDialogCompressed("It occurs to me that I like toast and jam, but cheese and crackers is better.\nYou like?\n ≥ cheese\n jam\n{CHOICE}"), - 'zelda_save_lets_go' => $converter->convertDialogCompressed("Let's get out of here!"), + 'kakariko_saharalasa_wife_closing' => $converter->convertDialogCompressed("Anywho, I have things to do. You see those 2 ovens?\n\nYeah, 2!\nWho has 2 ovens nowadays?!"), - 'zelda_save_repeat' => $converter->convertDialogCompressed("I like talking, do you?\n ≥ no\n yes\n{CHOICE}"), + 'kakariko_saharalasa_after_master_sword' => $converter->convertDialogCompressed("Cool sword!\n\n\n…\n\n\n…\n\n\nPlease save us"), - 'zelda_before_pendants' => $converter->convertDialogCompressed("You need to find all the pendants…\n\n\nNumpty."), + 'kakariko_alert_guards' => $converter->convertDialogCompressed("GUARDS! HELP!\nThe creeper\n@ is here!"), + // 0x30 + 'sahasrahla_quest_have_pendants' => $converter->convertDialogCompressed("{BOTTOM}\nCool beans, but I think you should mosey on over to the lost woods."), - 'zelda_after_pendants_before_master_sword' => $converter->convertDialogCompressed("Very pretty pendants, but really you should be getting that sword in the forest!"), + 'sahasrahla_quest_have_master_sword' => $converter->convertDialogCompressed("{BOTTOM}\nThat's a pretty sword, but I'm old, forgetful, and old. Why don't you go do all the hard work while I hang out in this hut."), - 'telepathic_zelda_right_after_master_sword' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nHi @,\nHave you been thinking about me?\narrrrrgghh…\n… … …"), + 'sahasrahla_quest_information' => $converter->convertDialogCompressed("{BOTTOM}\n" + . "Sahasrahla, I am. You would do well to find the 3 pendants from the 3 dungeons in the Light World.\n" + . "Understand?\n ≥ yes\n no\n{CHOICE}"), - 'zelda_sewers' => $converter->convertDialogCompressed("Just a little further to the Sanctuary."), + 'sahasrahla_bring_courage' => $converter->convertDialogCompressed("{BOTTOM}\n" + . "While you're here, could you do me a solid and get the green pendant from that dungeon?\n" + . "{HARP}\nI'll give you a present if you do."), - 'zelda_switch_room' => $converter->convertDialogCompressed("The Sanctuary!\n\nPull my finger"), + 'sahasrahla_have_ice_rod' => $converter->convertDialogCompressed("{BOTTOM}\nLike, I sit here, and tell you what to do?\n\n\nAlright, go and find all the maidens, there are, like, maybe 7 of them. I dunno anymore. I'm old."), - 'kakariko_saharalasa_wife' => $converter->convertDialogCompressed("Heya, @!\nLong time no see.\nYou want a master sword?\n\nWell good luck with that."), + 'telepathic_sahasrahla_beat_agahnim' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nNice, so you beat Agahnim. Now you must beat Ganon. Good Luck!"), - 'kakariko_saharalasa_wife_sword_story' => $converter->convertDialogCompressed("It occurs to me that I like toast and jam, but cheese and crackers is better.\nYou like?\n ≥ cheese\n jam\n{CHOICE}"), + 'telepathic_sahasrahla_beat_agahnim_no_pearl' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nOh, also you forgot the Moon Pearl, dingus. Go back and find it!"), - 'kakariko_saharalasa_wife_closing' => $converter->convertDialogCompressed("Anywho, I have things to do. You see those 2 ovens?\n\nYeah, 2!\nWho has 2 ovens nowadays?!"), + 'sahasrahla_have_boots_no_icerod' => $converter->convertDialogCompressed("{BOTTOM}\nCave in South East has a cool item."), - 'kakariko_saharalasa_after_master_sword' => $converter->convertDialogCompressed("Cool sword!\n\n\n…\n\n\n…\n\n\nPlease save us"), + 'sahasrahla_have_courage' => $converter->convertDialogCompressed("{BOTTOM}\nLook, you have the green pendant! I'll give you something. Go kill the other two bosses for more pendant fun!"), - 'kakariko_alert_guards' => $converter->convertDialogCompressed("GUARDS! HELP!\nThe creeper\n@ is here!"), - // 0x30 - 'sahasrahla_quest_have_pendants' => $converter->convertDialogCompressed("{BOTTOM}\nCool beans, but I think you should mosey on over to the lost woods."), + 'sahasrahla_found' => $converter->convertDialogCompressed("{BOTTOM}\nYup!\n\nI'm the old man you are looking for. I'll keep it short and sweet: Go into that dungeon, then bring me the green pendant and talk to me again."), - 'sahasrahla_quest_have_master_sword' => $converter->convertDialogCompressed("{BOTTOM}\nThat's a pretty sword, but I'm old, forgetful, and old. Why don't you go do all the hard work while I hang out in this hut."), + 'sign_rain_north_of_links_house' => $converter->convertDialogCompressed("↑ Dying Uncle\n This way…"), - 'sahasrahla_quest_information' => $converter->convertDialogCompressed("{BOTTOM}\n" - . "Sahasrahla, I am. You would do well to find the 3 pendants from the 3 dungeons in the Light World.\n" - . "Understand?\n ≥ yes\n no\n{CHOICE}"), + 'sign_north_of_links_house' => $converter->convertDialogCompressed("> Randomizer The telepathic tiles can have hints!"), - 'sahasrahla_bring_courage' => $converter->convertDialogCompressed("{BOTTOM}\n" - . "While you're here, could you do me a solid and get the green pendant from that dungeon?\n" - . "{HARP}\nI'll give you a present if you do."), + 'sign_path_to_death_mountain' => $converter->convertDialogCompressed("Cave to lost, old man.\nGood luck."), - 'sahasrahla_have_ice_rod' => $converter->convertDialogCompressed("{BOTTOM}\nLike, I sit here, and tell you what to do?\n\n\nAlright, go and find all the maidens, there are, like, maybe 7 of them. I dunno anymore. I'm old."), + 'sign_lost_woods' => $converter->convertDialogCompressed("\n↑ Lost Woods"), - 'telepathic_sahasrahla_beat_agahnim' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nNice, so you beat Agahnim. Now you must beat Ganon. Good Luck!"), + 'sign_zoras' => $converter->convertDialogCompressed("Danger!\nDeep water!\nZoras!"), - 'telepathic_sahasrahla_beat_agahnim_no_pearl' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\nOh, also you forgot the Moon Pearl, dingus. Go back and find it!"), + 'sign_outside_magic_shop' => $converter->convertDialogCompressed("Welcome to the Magic Shoppe"), + // 0x40 + 'sign_death_mountain_cave_back' => $converter->convertDialogCompressed("Cave away from sky cabbages"), - 'sahasrahla_have_boots_no_icerod' => $converter->convertDialogCompressed("{BOTTOM}\nCave in South East has a cool item."), + 'sign_east_of_links_house' => $converter->convertDialogCompressed("↓ Lake Hylia\n\n Also, a shop"), - 'sahasrahla_have_courage' => $converter->convertDialogCompressed("{BOTTOM}\nLook, you have the green pendant! I'll give you something. Go kill the other two bosses for more pendant fun!"), + 'sign_south_of_lumberjacks' => $converter->convertDialogCompressed("← Kakariko\n Village"), - 'sahasrahla_found' => $converter->convertDialogCompressed("{BOTTOM}\nYup!\n\nI'm the old man you are looking for. I'll keep it short and sweet: Go into that dungeon, then bring me the green pendant and talk to me again."), + 'sign_east_of_desert' => $converter->convertDialogCompressed("← Desert\n\n It's hot."), - 'sign_rain_north_of_links_house' => $converter->convertDialogCompressed("↑ Dying Uncle\n This way…"), + 'sign_east_of_sanctuary' => $converter->convertDialogCompressed("↑→ Potions!\n\nWish Waterfall"), - 'sign_north_of_links_house' => $converter->convertDialogCompressed("> Randomizer The telepathic tiles can have hints!"), + 'sign_east_of_castle' => $converter->convertDialogCompressed("→ East Palace\n\n← Castle"), - 'sign_path_to_death_mountain' => $converter->convertDialogCompressed("Cave to lost, old man.\nGood luck."), + 'sign_north_of_lake' => $converter->convertDialogCompressed("\n Lake Hiriah"), - 'sign_lost_woods' => $converter->convertDialogCompressed("\n↑ Lost Woods"), + 'sign_desert_thief' => $converter->convertDialogCompressed("Don't talk to me or touch my sign!"), - 'sign_zoras' => $converter->convertDialogCompressed("Danger!\nDeep water!\nZoras!"), + 'sign_lumberjacks_house' => $converter->convertDialogCompressed("Lumberjacks, Inc.\nYou see 'em, we saw 'em."), - 'sign_outside_magic_shop' => $converter->convertDialogCompressed("Welcome to the Magic Shoppe"), - // 0x40 - 'sign_death_mountain_cave_back' => $converter->convertDialogCompressed("Cave away from sky cabbages"), + 'sign_north_kakariko' => $converter->convertDialogCompressed("↓ Kakariko\n Village"), - 'sign_east_of_links_house' => $converter->convertDialogCompressed("↓ Lake Hylia\n\n Also, a shop"), + 'witch_bring_mushroom' => $converter->convertDialogCompressed("Double, double toil and trouble!\nBring me a mushroom!"), - 'sign_south_of_lumberjacks' => $converter->convertDialogCompressed("← Kakariko\n Village"), + 'witch_brewing_the_item' => $converter->convertDialogCompressed("This mushroom is busy brewing. Come back later."), - 'sign_east_of_desert' => $converter->convertDialogCompressed("← Desert\n\n It's hot."), + 'witch_assistant_no_bottle' => $converter->convertDialogCompressed("You got to give me the mushroom, Numpty."), - 'sign_east_of_sanctuary' => $converter->convertDialogCompressed("↑→ Potions!\n\nWish Waterfall"), + 'witch_assistant_no_empty_bottle' => $converter->convertDialogCompressed("Gotta use your stuff before you can get more."), - 'sign_east_of_castle' => $converter->convertDialogCompressed("→ East Palace\n\n← Castle"), + 'witch_assistant_informational' => $converter->convertDialogCompressed("Red is life\nGreen is magic\nBlue is both\nI'll heal you for free, though."), - 'sign_north_of_lake' => $converter->convertDialogCompressed("\n Lake Hiriah"), + 'witch_assistant_no_bottle_buying' => $converter->convertDialogCompressed("If only you had something to put that in, like a bottle…"), + // 0x50 + 'potion_shop_no_empty_bottles' => $converter->convertDialogCompressed("Whoa, bucko!\nNo empty bottles."), - 'sign_desert_thief' => $converter->convertDialogCompressed("Don't talk to me or touch my sign!"), + 'item_get_lamp' => $converter->convertDialogCompressed("Lamp! You can see in the dark, and light torches."), - 'sign_lumberjacks_house' => $converter->convertDialogCompressed("Lumberjacks, Inc.\nYou see 'em, we saw 'em."), + 'item_get_boomerang' => $converter->convertDialogCompressed("Boomerang! Press START to select it."), - 'sign_north_kakariko' => $converter->convertDialogCompressed("↓ Kakariko\n Village"), + 'item_get_bow' => $converter->convertDialogCompressed("You're in bow mode now!"), - 'witch_bring_mushroom' => $converter->convertDialogCompressed("Double, double toil and trouble!\nBring me a mushroom!"), + 'item_get_shovel' => $converter->convertDialogCompressed("This is my new mop. My friend George, he gave me this mop. It's a pretty good mop. It's not as good as my old mop. I miss my old mop. But it's still a good mop."), - 'witch_brewing_the_item' => $converter->convertDialogCompressed("This mushroom is busy brewing. Come back later."), + 'item_get_magic_cape' => $converter->convertDialogCompressed("Finally! We get to play Invisible Man!"), - 'witch_assistant_no_bottle' => $converter->convertDialogCompressed("You got to give me the mushroom, Numpty."), + 'item_get_powder' => $converter->convertDialogCompressed("It's the powder. Let's cause some mischief!"), - 'witch_assistant_no_empty_bottle' => $converter->convertDialogCompressed("Gotta use your stuff before you can get more."), + 'item_get_flippers' => $converter->convertDialogCompressed("Splish! Splash! Let's go take a bath!"), - 'witch_assistant_informational' => $converter->convertDialogCompressed("Red is life\nGreen is magic\nBlue is both\nI'll heal you for free, though."), + 'item_get_power_gloves' => $converter->convertDialogCompressed("Feel the power! You can now lift light rocks! Rock on!"), - 'witch_assistant_no_bottle_buying' => $converter->convertDialogCompressed("If only you had something to put that in, like a bottle…"), - // 0x50 - 'potion_shop_no_empty_bottles' => $converter->convertDialogCompressed("Whoa, bucko!\nNo empty bottles."), + 'item_get_pendant_courage' => $converter->convertDialogCompressed("We have the Pendant of Courage! How brave!"), - 'item_get_lamp' => $converter->convertDialogCompressed("Lamp! You can see in the dark, and light torches."), + 'item_get_pendant_power' => $converter->convertDialogCompressed("We have the Pendant of Power! How robust!"), - 'item_get_boomerang' => $converter->convertDialogCompressed("Boomerang! Press START to select it."), + 'item_get_pendant_wisdom' => $converter->convertDialogCompressed("We have the Pendant of Wisdom! How astute!"), - 'item_get_bow' => $converter->convertDialogCompressed("You're in bow mode now!"), + 'item_get_mushroom' => $converter->convertDialogCompressed("A Mushroom! Don't eat it. Find a witch."), - 'item_get_shovel' => $converter->convertDialogCompressed("This is my new mop. My friend George, he gave me this mop. It's a pretty good mop. It's not as good as my old mop. I miss my old mop. But it's still a good mop."), + 'item_get_book' => $converter->convertDialogCompressed("It book! U R now litterit!"), - 'item_get_magic_cape' => $converter->convertDialogCompressed("Finally! We get to play Invisible Man!"), + 'item_get_moonpearl' => $converter->convertDialogCompressed("I found a shiny marble! No more hops!"), - 'item_get_powder' => $converter->convertDialogCompressed("It's the powder. Let's cause some mischief!"), + 'item_get_compass' => $converter->convertDialogCompressed("A compass! I can now find the boss."), + // 0x60 + 'item_get_map' => $converter->convertDialogCompressed("Yo! You found a MAP! Press X to see it."), - 'item_get_flippers' => $converter->convertDialogCompressed("Splish! Splash! Let's go take a bath!"), + 'item_get_ice_rod' => $converter->convertDialogCompressed("It's the Ice Rod! Freeze Ray time."), - 'item_get_power_gloves' => $converter->convertDialogCompressed("Feel the power! You can now lift light rocks! Rock on!"), + 'item_get_fire_rod' => $converter->convertDialogCompressed("A Rod that shoots fire? Let's burn all the things!"), - 'item_get_pendant_courage' => $converter->convertDialogCompressed("We have the Pendant of Courage! How brave!"), + 'item_get_ether' => $converter->convertDialogCompressed("We can chill out with this!"), - 'item_get_pendant_power' => $converter->convertDialogCompressed("We have the Pendant of Power! How robust!"), + 'item_get_bombos' => $converter->convertDialogCompressed("Let's set everything on fire, and melt things!"), - 'item_get_pendant_wisdom' => $converter->convertDialogCompressed("We have the Pendant of Wisdom! How astute!"), + 'item_get_quake' => $converter->convertDialogCompressed("Time to make the earth shake, rattle, and roll!"), - 'item_get_mushroom' => $converter->convertDialogCompressed("A Mushroom! Don't eat it. Find a witch."), + 'item_get_hammer' => $converter->convertDialogCompressed("STOP!\n\nHammer Time!"), // 66 - 'item_get_book' => $converter->convertDialogCompressed("It book! U R now litterit!"), + 'item_get_ocarina' => $converter->convertDialogCompressed("Finally! We can play the Song of Time!"), - 'item_get_moonpearl' => $converter->convertDialogCompressed("I found a shiny marble! No more hops!"), + 'item_get_cane_of_somaria' => $converter->convertDialogCompressed("Make blocks!\nThrow blocks!\nSplode Blocks!"), - 'item_get_compass' => $converter->convertDialogCompressed("A compass! I can now find the boss."), - // 0x60 - 'item_get_map' => $converter->convertDialogCompressed("Yo! You found a MAP! Press X to see it."), + 'item_get_hookshot' => $converter->convertDialogCompressed("BOING!!!\nBOING!!!\nSay no more…"), - 'item_get_ice_rod' => $converter->convertDialogCompressed("It's the Ice Rod! Freeze Ray time."), + 'item_get_bombs' => $converter->convertDialogCompressed("BOMBS! Use A to pick 'em up, throw 'em, get hurt!"), - 'item_get_fire_rod' => $converter->convertDialogCompressed("A Rod that shoots fire? Let's burn all the things!"), + 'item_get_bottle' => $converter->convertDialogCompressed("It's a terrarium. I hope we find a lizard!"), - 'item_get_ether' => $converter->convertDialogCompressed("We can chill out with this!"), + 'item_get_big_key' => $converter->convertDialogCompressed("Yo! You got a Big Key!"), - 'item_get_bombos' => $converter->convertDialogCompressed("Let's set everything on fire, and melt things!"), + 'item_get_titans_mitts' => $converter->convertDialogCompressed("So, like, you can now lift anything.\nANYTHING!"), - 'item_get_quake' => $converter->convertDialogCompressed("Time to make the earth shake, rattle, and roll!"), + 'item_get_magic_mirror' => $converter->convertDialogCompressed("We could stare at this all day or, you know, beat Ganon…"), - 'item_get_hammer' => $converter->convertDialogCompressed("STOP!\n\nHammer Time!"), // 66 + 'item_get_fake_mastersword' => $converter->convertDialogCompressed("It's the Master Sword! …or not…\n\n FOOL!"), + // 0x70 + 'post_item_get_mastersword' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\n@, you got the sword!\n{CHANGEMUSIC}\nNow let's go beat up Agahnim!"), - 'item_get_ocarina' => $converter->convertDialogCompressed("Finally! We can play the Song of Time!"), + 'item_get_red_potion' => $converter->convertDialogCompressed("Red goo to go! Nice!"), - 'item_get_cane_of_somaria' => $converter->convertDialogCompressed("Make blocks!\nThrow blocks!\nSplode Blocks!"), + 'item_get_green_potion' => $converter->convertDialogCompressed("Green goo to go! Nice!"), - 'item_get_hookshot' => $converter->convertDialogCompressed("BOING!!!\nBOING!!!\nSay no more…"), + 'item_get_blue_potion' => $converter->convertDialogCompressed("Blue goo to go! Nice!"), - 'item_get_bombs' => $converter->convertDialogCompressed("BOMBS! Use A to pick 'em up, throw 'em, get hurt!"), + 'item_get_bug_net' => $converter->convertDialogCompressed("Surprise Net! Let's catch stuff!"), - 'item_get_bottle' => $converter->convertDialogCompressed("It's a terrarium. I hope we find a lizard!"), + 'item_get_blue_mail' => $converter->convertDialogCompressed("Blue threads? Less damage activated!"), - 'item_get_big_key' => $converter->convertDialogCompressed("Yo! You got a Big Key!"), + 'item_get_red_mail' => $converter->convertDialogCompressed("You feel the power of the eggplant on your head."), - 'item_get_titans_mitts' => $converter->convertDialogCompressed("So, like, you can now lift anything.\nANYTHING!"), + 'item_get_temperedsword' => $converter->convertDialogCompressed("Nice… I now have a craving for Cheetos."), - 'item_get_magic_mirror' => $converter->convertDialogCompressed("We could stare at this all day or, you know, beat Ganon…"), + 'item_get_mirror_shield' => $converter->convertDialogCompressed("Pit would be proud!"), - 'item_get_fake_mastersword' => $converter->convertDialogCompressed("It's the Master Sword! …or not…\n\n FOOL!"), - // 0x70 - 'post_item_get_mastersword' => $converter->convertDialogCompressed("{NOBORDER}\n{SPEED6}\n@, you got the sword!\n{CHANGEMUSIC}\nNow let's go beat up Agahnim!"), + 'item_get_cane_of_byrna' => $converter->convertDialogCompressed("It's the Blue Cane. You can now protect yourself with lag!"), - 'item_get_red_potion' => $converter->convertDialogCompressed("Red goo to go! Nice!"), + 'missing_big_key' => $converter->convertDialogCompressed("Something is missing…\nThe Big Key?"), - 'item_get_green_potion' => $converter->convertDialogCompressed("Green goo to go! Nice!"), + 'missing_magic' => $converter->convertDialogCompressed("Something is missing…\nMagic meter?"), - 'item_get_blue_potion' => $converter->convertDialogCompressed("Blue goo to go! Nice!"), + 'item_get_pegasus_boots' => $converter->convertDialogCompressed("Finally, it's bonking time!\nHold A to dash"), - 'item_get_bug_net' => $converter->convertDialogCompressed("Surprise Net! Let's catch stuff!"), + 'talking_tree_info_start' => $converter->convertDialogCompressed("Whoa! I can talk again!"), - 'item_get_blue_mail' => $converter->convertDialogCompressed("Blue threads? Less damage activated!"), + 'talking_tree_info_1' => $converter->convertDialogCompressed("Yank on the pitchfork in the center of town, ya heard it here."), - 'item_get_red_mail' => $converter->convertDialogCompressed("You feel the power of the eggplant on your head."), + 'talking_tree_info_2' => $converter->convertDialogCompressed("Ganon is such a dingus, no one likes him, ya heard it here."), + // 0x80 + 'talking_tree_info_3' => $converter->convertDialogCompressed("There is a portal near the Lost Woods, ya heard it here."), - 'item_get_temperedsword' => $converter->convertDialogCompressed("Nice… I now have a craving for Cheetos."), + 'talking_tree_info_4' => $converter->convertDialogCompressed("Use bombs to quickly kill the Hinox, ya heard it here."), - 'item_get_mirror_shield' => $converter->convertDialogCompressed("Pit would be proud!"), + 'talking_tree_other' => $converter->convertDialogCompressed("I can breathe!"), - 'item_get_cane_of_byrna' => $converter->convertDialogCompressed("It's the Blue Cane. You can now protect yourself with lag!"), + 'item_get_pendant_power_alt' => $converter->convertDialogCompressed("We have the Pendant of Power! How robust!"), - 'missing_big_key' => $converter->convertDialogCompressed("Something is missing…\nThe Big Key?"), + 'item_get_pendant_wisdom_alt' => $converter->convertDialogCompressed("We have the Pendant of Wisdom! How astute!"), - 'missing_magic' => $converter->convertDialogCompressed("Something is missing…\nMagic meter?"), + 'game_shooting_choice' => $converter->convertDialogCompressed("20 rupees.\n5 arrows.\nWin rupees!\nWant to play?\n ≥ yes\n no\n{CHOICE}"), - 'item_get_pegasus_boots' => $converter->convertDialogCompressed("Finally, it's bonking time!\nHold A to dash"), + 'game_shooting_yes' => $converter->convertDialogCompressed("Let's do this!"), - 'talking_tree_info_start' => $converter->convertDialogCompressed("Whoa! I can talk again!"), + 'game_shooting_no' => $converter->convertDialogCompressed("Where are you going? Straight up!"), - 'talking_tree_info_1' => $converter->convertDialogCompressed("Yank on the pitchfork in the center of town, ya heard it here."), + 'game_shooting_continue' => $converter->convertDialogCompressed("Keep playing?\n ≥ yes\n no\n{CHOICE}"), - 'talking_tree_info_2' => $converter->convertDialogCompressed("Ganon is such a dingus, no one likes him, ya heard it here."), - // 0x80 - 'talking_tree_info_3' => $converter->convertDialogCompressed("There is a portal near the Lost Woods, ya heard it here."), + 'pond_of_wishing' => $converter->convertDialogCompressed("-Wishing Pond-\n\n On Vacation"), - 'talking_tree_info_4' => $converter->convertDialogCompressed("Use bombs to quickly kill the Hinox, ya heard it here."), + 'pond_item_select' => $converter->convertDialogCompressed("Pick something\nto throw in.\n{ITEMSELECT}"), - 'talking_tree_other' => $converter->convertDialogCompressed("I can breathe!"), + 'pond_item_test' => $converter->convertDialogCompressed("You toss this?\n ≥ yup\n wrong\n{CHOICE}"), - 'item_get_pendant_power_alt' => $converter->convertDialogCompressed("We have the Pendant of Power! How robust!"), + 'pond_will_upgrade' => $converter->convertDialogCompressed("You're honest, so I'll give you a present."), - 'item_get_pendant_wisdom_alt' => $converter->convertDialogCompressed("We have the Pendant of Wisdom! How astute!"), + 'pond_item_test_no' => $converter->convertDialogCompressed("You sure?\n ≥ oh yeah\n um\n{CHOICE}"), - 'game_shooting_choice' => $converter->convertDialogCompressed("20 rupees.\n5 arrows.\nWin rupees!\nWant to play?\n ≥ yes\n no\n{CHOICE}"), + 'pond_item_test_no_no' => $converter->convertDialogCompressed("Well, I don't want it, so take it back."), - 'game_shooting_yes' => $converter->convertDialogCompressed("Let's do this!"), + 'pond_item_boomerang' => $converter->convertDialogCompressed("I don't much like you, so have this worse Boomerang."), + // 0x90 + 'pond_item_shield' => $converter->convertDialogCompressed("I grant you the ability to block fireballs. Don't lose this to a Pikit!"), - 'game_shooting_no' => $converter->convertDialogCompressed("Where are you going? Straight up!"), + 'pond_item_silvers' => $converter->convertDialogCompressed("So, wouldn't it be nice to kill Ganon? These should help in the final phase."), - 'game_shooting_continue' => $converter->convertDialogCompressed("Keep playing?\n ≥ yes\n no\n{CHOICE}"), + 'pond_item_bottle_filled' => $converter->convertDialogCompressed("Bottle Filled!\nMoney Saved!"), - 'pond_of_wishing' => $converter->convertDialogCompressed("-Wishing Pond-\n\n On Vacation"), + 'pond_item_sword' => $converter->convertDialogCompressed("Thank you for the sword, here is a stick of butter."), - 'pond_item_select' => $converter->convertDialogCompressed("Pick something\nto throw in.\n{ITEMSELECT}"), + 'pond_of_wishing_happiness' => $converter->convertDialogCompressed("Happiness up!\nYou are now\nᚌᚋ happy!"), - 'pond_item_test' => $converter->convertDialogCompressed("You toss this?\n ≥ yup\n wrong\n{CHOICE}"), + 'pond_of_wishing_choice' => $converter->convertDialogCompressed("Your wish?\n ≥more bombs\n more arrows\n{CHOICE}"), - 'pond_will_upgrade' => $converter->convertDialogCompressed("You're honest, so I'll give you a present."), + 'pond_of_wishing_bombs' => $converter->convertDialogCompressed("Woo-hoo!\nYou can now\ncarry ᚌᚋ bombs"), - 'pond_item_test_no' => $converter->convertDialogCompressed("You sure?\n ≥ oh yeah\n um\n{CHOICE}"), + 'pond_of_wishing_arrows' => $converter->convertDialogCompressed("Woo-hoo!\nYou can now\nhold ᚌᚋ arrows"), - 'pond_item_test_no_no' => $converter->convertDialogCompressed("Well, I don't want it, so take it back."), + 'pond_of_wishing_full_upgrades' => $converter->convertDialogCompressed("You have all I can give you, here are your rupees back."), - 'pond_item_boomerang' => $converter->convertDialogCompressed("I don't much like you, so have this worse Boomerang."), - // 0x90 - 'pond_item_shield' => $converter->convertDialogCompressed("I grant you the ability to block fireballs. Don't lose this to a Pikit!"), + 'mountain_old_man_first' => $converter->convertDialogCompressed("Look out for holes, and monsters."), - 'pond_item_silvers' => $converter->convertDialogCompressed("So, wouldn't it be nice to kill Ganon? These should help in the final phase."), + 'mountain_old_man_deadend' => $converter->convertDialogCompressed("Oh, goody, hearts in jars! This place is creepy."), - 'pond_item_bottle_filled' => $converter->convertDialogCompressed("Bottle Filled!\nMoney Saved!"), + 'mountain_old_man_turn_right' => $converter->convertDialogCompressed("Turn right. Let's get out of this place."), - 'pond_item_sword' => $converter->convertDialogCompressed("Thank you for the sword, here is a stick of butter."), + 'mountain_old_man_lost_and_alone' => $converter->convertDialogCompressed("Hello. I can't see anything. Take me with you."), - 'pond_of_wishing_happiness' => $converter->convertDialogCompressed("Happiness up!\nYou are now\nᚌᚋ happy!"), + 'mountain_old_man_drop_off' => $converter->convertDialogCompressed("Here's a thing to help you, good luck!"), - 'pond_of_wishing_choice' => $converter->convertDialogCompressed("Your wish?\n ≥more bombs\n more arrows\n{CHOICE}"), + 'mountain_old_man_in_his_cave_pre_agahnim' => $converter->convertDialogCompressed("You need to beat the tower at the top of the mountain."), - 'pond_of_wishing_bombs' => $converter->convertDialogCompressed("Woo-hoo!\nYou can now\ncarry ᚌᚋ bombs"), + 'mountain_old_man_in_his_cave' => $converter->convertDialogCompressed("You can find stuff in the tower at the top of this mountain.\nCome see me if you'd like to be healed."), + // 0xA0 + 'mountain_old_man_in_his_cave_post_agahnim' => $converter->convertDialogCompressed("You should be heading to the castle… you have a portal there now.\nSay hi anytime you like."), - 'pond_of_wishing_arrows' => $converter->convertDialogCompressed("Woo-hoo!\nYou can now\nhold ᚌᚋ arrows"), + 'tavern_old_man_awake' => $converter->convertDialogCompressed("Life? Love? Happiness? The question you should really ask is: Was this generated by Stoops Alu or Stoops Jet?"), - 'pond_of_wishing_full_upgrades' => $converter->convertDialogCompressed("You have all I can give you, here are your rupees back."), + 'tavern_old_man_unactivated_flute' => $converter->convertDialogCompressed("You should play that flute for the weathervane, cause reasons."), - 'mountain_old_man_first' => $converter->convertDialogCompressed("Look out for holes, and monsters."), + 'tavern_old_man_know_tree_unactivated_flute' => $converter->convertDialogCompressed("You should play that flute for the weathervane, cause reasons."), - 'mountain_old_man_deadend' => $converter->convertDialogCompressed("Oh, goody, hearts in jars! This place is creepy."), + 'tavern_old_man_have_flute' => $converter->convertDialogCompressed("Life? Love? Happiness? The question you should really ask is: Was this generated by Stoops Alu or Stoops Jet?"), - 'mountain_old_man_turn_right' => $converter->convertDialogCompressed("Turn right. Let's get out of this place."), + 'chicken_hut_lady' => $converter->convertDialogCompressed("This is\nChristos' hut.\n\nHe's out, searching for a bow."), - 'mountain_old_man_lost_and_alone' => $converter->convertDialogCompressed("Hello. I can't see anything. Take me with you."), + 'running_man' => $converter->convertDialogCompressed("Hi, Do you\nknow Veetorp?\n\nYou really\nshould. And\nall the other great guys who made this possible.\nGo thank them.\n\n\nIf you can catch them…"), - 'mountain_old_man_drop_off' => $converter->convertDialogCompressed("Here's a thing to help you, good luck!"), + 'game_race_sign' => $converter->convertDialogCompressed("Why are you reading this sign? Run!!!"), - 'mountain_old_man_in_his_cave_pre_agahnim' => $converter->convertDialogCompressed("You need to beat the tower at the top of the mountain."), + 'sign_bumper_cave' => $converter->convertDialogCompressed("You need Cape, but not Hookshot"), - 'mountain_old_man_in_his_cave' => $converter->convertDialogCompressed("You can find stuff in the tower at the top of this mountain.\nCome see me if you'd like to be healed."), - // 0xA0 - 'mountain_old_man_in_his_cave_post_agahnim' => $converter->convertDialogCompressed("You should be heading to the castle… you have a portal there now.\nSay hi anytime you like."), + 'sign_catfish' => $converter->convertDialogCompressed("toss rocks\ntoss items\ntoss cookies"), - 'tavern_old_man_awake' => $converter->convertDialogCompressed("Life? Love? Happiness? The question you should really ask is: Was this generated by Stoops Alu or Stoops Jet?"), + 'sign_north_village_of_outcasts' => $converter->convertDialogCompressed("↑ Skull Woods\n\n↓ Steve's Town"), - 'tavern_old_man_unactivated_flute' => $converter->convertDialogCompressed("You should play that flute for the weathervane, cause reasons."), + 'sign_south_of_bumper_cave' => $converter->convertDialogCompressed("\n→ Karkats cave"), - 'tavern_old_man_know_tree_unactivated_flute' => $converter->convertDialogCompressed("You should play that flute for the weathervane, cause reasons."), + 'sign_east_of_pyramid' => $converter->convertDialogCompressed("\n→ Dark Palace"), - 'tavern_old_man_have_flute' => $converter->convertDialogCompressed("Life? Love? Happiness? The question you should really ask is: Was this generated by Stoops Alu or Stoops Jet?"), + 'sign_east_of_bomb_shop' => $converter->convertDialogCompressed("\n← Bomb Shoppe"), - 'chicken_hut_lady' => $converter->convertDialogCompressed("This is\nChristos' hut.\n\nHe's out, searching for a bow."), + 'sign_east_of_mire' => $converter->convertDialogCompressed("\n← Misery Mire\n no way in.\n no way out."), - 'running_man' => $converter->convertDialogCompressed("Hi, Do you\nknow Veetorp?\n\nYou really\nshould. And\nall the other great guys who made this possible.\nGo thank them.\n\n\nIf you can catch them…"), + 'sign_village_of_outcasts' => $converter->convertDialogCompressed("Have a Trulie Awesome Day!"), + // 0xB0 + 'sign_before_wishing_pond' => $converter->convertDialogCompressed("waterfall\nup ahead\nmake wishes"), - 'game_race_sign' => $converter->convertDialogCompressed("Why are you reading this sign? Run!!!"), + 'sign_before_catfish_area' => $converter->convertDialogCompressed("→↑ Have you met Woeful Ike?"), - 'sign_bumper_cave' => $converter->convertDialogCompressed("You need Cape, but not Hookshot"), + 'castle_wall_guard' => $converter->convertDialogCompressed("Looking for a Princess? Look downstairs."), - 'sign_catfish' => $converter->convertDialogCompressed("toss rocks\ntoss items\ntoss cookies"), + 'gate_guard' => $converter->convertDialogCompressed("No Lonks Allowed!"), - 'sign_north_village_of_outcasts' => $converter->convertDialogCompressed("↑ Skull Woods\n\n↓ Steve's Town"), + 'telepathic_tile_eastern_palace' => $converter->convertDialogCompressed("{NOBORDER}\nYou need a Bow to get past the red Eyegore. derpy"), - 'sign_south_of_bumper_cave' => $converter->convertDialogCompressed("\n→ Karkats cave"), + 'telepathic_tile_tower_of_hera_floor_4' => $converter->convertDialogCompressed("{NOBORDER}\nIf you find a shiny ball, you can be you in the Dark World."), - 'sign_east_of_pyramid' => $converter->convertDialogCompressed("\n→ Dark Palace"), + 'hylian_text_1' => $converter->convertDialogCompressed("%== %== %==\n ^ %==% ^\n%== ^%%^ ==^"), - 'sign_east_of_bomb_shop' => $converter->convertDialogCompressed("\n← Bomb Shoppe"), + 'mastersword_pedestal_translated' => $converter->convertDialogCompressed("A test of strength: If you have 3 pendants, I'm yours."), - 'sign_east_of_mire' => $converter->convertDialogCompressed("\n← Misery Mire\n no way in.\n no way out."), + 'telepathic_tile_spectacle_rock' => $converter->convertDialogCompressed("{NOBORDER}\nUse the Mirror, or the Hookshot and Hammer, to get to Tower of Hera!"), - 'sign_village_of_outcasts' => $converter->convertDialogCompressed("Have a Trulie Awesome Day!"), - // 0xB0 - 'sign_before_wishing_pond' => $converter->convertDialogCompressed("waterfall\nup ahead\nmake wishes"), + 'telepathic_tile_swamp_entrance' => $converter->convertDialogCompressed("{NOBORDER}\nDrain the floodgate to raise the water here!"), - 'sign_before_catfish_area' => $converter->convertDialogCompressed("→↑ Have you met Woeful Ike?"), + 'telepathic_tile_thieves_town_upstairs' => $converter->convertDialogCompressed("{NOBORDER}\nBlind hate's bright light."), - 'castle_wall_guard' => $converter->convertDialogCompressed("Looking for a Princess? Look downstairs."), + 'telepathic_tile_misery_mire' => $converter->convertDialogCompressed("{NOBORDER}\nLighting 4 torches will open your way forward!"), - 'gate_guard' => $converter->convertDialogCompressed("No Lonks Allowed!"), + 'hylian_text_2' => $converter->convertDialogCompressed("%%^= %==%\n ^ =%^=\n==%= ^^%^"), - 'telepathic_tile_eastern_palace' => $converter->convertDialogCompressed("{NOBORDER}\nYou need a Bow to get past the red Eyegore. derpy"), + 'desert_entry_translated' => $converter->convertDialogCompressed("Kneel before this stone, and magic will move around you."), - 'telepathic_tile_tower_of_hera_floor_4' => $converter->convertDialogCompressed("{NOBORDER}\nIf you find a shiny ball, you can be you in the Dark World."), + 'telepathic_tile_under_ganon' => $converter->convertDialogCompressed("Secondary tournament winners\n{HARP}\n ~~~2017~~~\nA: Zaen"), - 'hylian_text_1' => $converter->convertDialogCompressed("%== %== %==\n ^ %==% ^\n%== ^%%^ ==^"), + 'telepathic_tile_palace_of_darkness' => $converter->convertDialogCompressed("{NOBORDER}\nThis is a funny looking Enemizer"), + // 0xC0 + 'telepathic_tile_desert_bonk_torch_room' => $converter->convertDialogCompressed("{NOBORDER}\nThings can be knocked down, if you fancy yourself a dashing dude."), - 'mastersword_pedestal_translated' => $converter->convertDialogCompressed("A test of strength: If you have 3 pendants, I'm yours."), + 'telepathic_tile_castle_tower' => $converter->convertDialogCompressed("{NOBORDER}\nYou can reflect Agahnim's energy with Sword, Bug-net or Hammer."), - 'telepathic_tile_spectacle_rock' => $converter->convertDialogCompressed("{NOBORDER}\nUse the Mirror, or the Hookshot and Hammer, to get to Tower of Hera!"), + 'telepathic_tile_ice_large_room' => $converter->convertDialogCompressed("{NOBORDER}\nAll right stop collaborate and listen\nIce is back with my brand new invention."), - 'telepathic_tile_swamp_entrance' => $converter->convertDialogCompressed("{NOBORDER}\nDrain the floodgate to raise the water here!"), + 'telepathic_tile_turtle_rock' => $converter->convertDialogCompressed("{NOBORDER}\nYou Shall not pass… without the red cane."), - 'telepathic_tile_thieves_town_upstairs' => $converter->convertDialogCompressed("{NOBORDER}\nBlind hate's bright light."), + 'telepathic_tile_ice_entrace' => $converter->convertDialogCompressed("{NOBORDER}\nYou can use Fire Rod or Bombos to pass."), - 'telepathic_tile_misery_mire' => $converter->convertDialogCompressed("{NOBORDER}\nLighting 4 torches will open your way forward!"), + 'telepathic_tile_ice_stalfos_knights_room' => $converter->convertDialogCompressed("{NOBORDER}\nKnock 'em down and then bomb them dead."), - 'hylian_text_2' => $converter->convertDialogCompressed("%%^= %==%\n ^ =%^=\n==%= ^^%^"), + 'telepathic_tile_tower_of_hera_entrance' => $converter->convertDialogCompressed("{NOBORDER}\nThis is a bad place, with a guy who will make you fall…\n\n\na lot."), - 'desert_entry_translated' => $converter->convertDialogCompressed("Kneel before this stone, and magic will move around you."), + 'houlihan_room' => $converter->convertDialogCompressed("Randomizer tournament winners\n{HARP}\n ~~~2018~~~\nS: Andy\n\n ~~~2017~~~\nA: ajneb174\nS: ajneb174"), - 'telepathic_tile_under_ganon' => $converter->convertDialogCompressed("Secondary tournament winners\n{HARP}\n ~~~2017~~~\nA: Zaen"), + 'caught_a_bee' => $converter->convertDialogCompressed("Caught a Bee\n ≥ keep\n release\n{CHOICE}"), - 'telepathic_tile_palace_of_darkness' => $converter->convertDialogCompressed("{NOBORDER}\nThis is a funny looking Enemizer"), - // 0xC0 - 'telepathic_tile_desert_bonk_torch_room' => $converter->convertDialogCompressed("{NOBORDER}\nThings can be knocked down, if you fancy yourself a dashing dude."), + 'caught_a_fairy' => $converter->convertDialogCompressed("Caught Fairy!\n ≥ keep\n release\n{CHOICE}"), - 'telepathic_tile_castle_tower' => $converter->convertDialogCompressed("{NOBORDER}\nYou can reflect Agahnim's energy with Sword, Bug-net or Hammer."), + 'no_empty_bottles' => $converter->convertDialogCompressed("Whoa, bucko!\nNo empty bottles."), - 'telepathic_tile_ice_large_room' => $converter->convertDialogCompressed("{NOBORDER}\nAll right stop collaborate and listen\nIce is back with my brand new invention."), + 'game_race_boy_time' => $converter->convertDialogCompressed("Your time was\nᚎᚍ min ᚌᚋ sec."), - 'telepathic_tile_turtle_rock' => $converter->convertDialogCompressed("{NOBORDER}\nYou Shall not pass… without the red cane."), + 'game_race_girl' => $converter->convertDialogCompressed("You have 15 seconds,\nGo… Go… Go…"), - 'telepathic_tile_ice_entrace' => $converter->convertDialogCompressed("{NOBORDER}\nYou can use Fire Rod or Bombos to pass."), + 'game_race_boy_success' => $converter->convertDialogCompressed("Nice!\nYou can have this trash!"), - 'telepathic_tile_ice_stalfos_knights_room' => $converter->convertDialogCompressed("{NOBORDER}\nKnock 'em down and then bomb them dead."), + 'game_race_boy_failure' => $converter->convertDialogCompressed("Too slow!\nI keep my\nprecious!"), - 'telepathic_tile_tower_of_hera_entrance' => $converter->convertDialogCompressed("{NOBORDER}\nThis is a bad place, with a guy who will make you fall…\n\n\na lot."), + 'game_race_boy_already_won' => $converter->convertDialogCompressed("You already have your prize, dingus!"), + // 0xD0 + 'game_race_boy_sneaky' => $converter->convertDialogCompressed("Thought you could sneak in, eh?"), - 'houlihan_room' => $converter->convertDialogCompressed("Randomizer tournament winners\n{HARP}\n ~~~2018~~~\nS: Andy\n\n ~~~2017~~~\nA: ajneb174\nS: ajneb174"), + 'bottle_vendor_choice' => $converter->convertDialogCompressed("I gots bottles.\nYous gots 100 rupees?\n ≥ I want\n no way!"), - 'caught_a_bee' => $converter->convertDialogCompressed("Caught a Bee\n ≥ keep\n release\n{CHOICE}"), + 'bottle_vendor_get' => $converter->convertDialogCompressed("Nice! Hold it up son! Show the world what you got!"), - 'caught_a_fairy' => $converter->convertDialogCompressed("Caught Fairy!\n ≥ keep\n release\n{CHOICE}"), + 'bottle_vendor_no' => $converter->convertDialogCompressed("Fine! I didn't want your money anyway."), - 'no_empty_bottles' => $converter->convertDialogCompressed("Whoa, bucko!\nNo empty bottles."), + 'bottle_vendor_already_collected' => $converter->convertDialogCompressed("Dude! You already have it."), - 'game_race_boy_time' => $converter->convertDialogCompressed("Your time was\nᚎᚍ min ᚌᚋ sec."), + 'bottle_vendor_bee' => $converter->convertDialogCompressed("Cool! A bee! Here's 100 rupees."), - 'game_race_girl' => $converter->convertDialogCompressed("You have 15 seconds,\nGo… Go… Go…"), + 'bottle_vendor_fish' => $converter->convertDialogCompressed("Whoa! A fish! You walked this all the way here?"), - 'game_race_boy_success' => $converter->convertDialogCompressed("Nice!\nYou can have this trash!"), + 'hobo_item_get_bottle' => $converter->convertDialogCompressed("You think life is rough? I guess you can take my last item. Except this tent. That's MY tent!"), - 'game_race_boy_failure' => $converter->convertDialogCompressed("Too slow!\nI keep my\nprecious!"), + 'blacksmiths_what_you_want' => $converter->convertDialogCompressed("Nice of you to come back!\nWould you like us mess with your sword?\n ≥ Temper\n It's fine\n{CHOICE}"), - 'game_race_boy_already_won' => $converter->convertDialogCompressed("You already have your prize, dingus!"), - // 0xD0 - 'game_race_boy_sneaky' => $converter->convertDialogCompressed("Thought you could sneak in, eh?"), + 'blacksmiths_paywall' => $converter->convertDialogCompressed("It's 10 rupees\n ≥ Easy\n Hang on…\n{CHOICE}"), - 'bottle_vendor_choice' => $converter->convertDialogCompressed("I gots bottles.\nYous gots 100 rupees?\n ≥ I want\n no way!"), + 'blacksmiths_extra_okay' => $converter->convertDialogCompressed("Are you sure you're sure?\n ≥ Ah, yup\n Hang on…\n{CHOICE}"), - 'bottle_vendor_get' => $converter->convertDialogCompressed("Nice! Hold it up son! Show the world what you got!"), + 'blacksmiths_tempered_already' => $converter->convertDialogCompressed("Whelp… We can't make this any better."), - 'bottle_vendor_no' => $converter->convertDialogCompressed("Fine! I didn't want your money anyway."), + 'blacksmiths_temper_no' => $converter->convertDialogCompressed("Oh, come by any time!"), - 'bottle_vendor_already_collected' => $converter->convertDialogCompressed("Dude! You already have it."), + 'blacksmiths_bogart_sword' => $converter->convertDialogCompressed("We're going to have to take it to work on it."), - 'bottle_vendor_bee' => $converter->convertDialogCompressed("Cool! A bee! Here's 100 rupees."), + 'blacksmiths_get_sword' => $converter->convertDialogCompressed("Sword is done. Now, back to our bread!"), - 'bottle_vendor_fish' => $converter->convertDialogCompressed("Whoa! A fish! You walked this all the way here?"), + 'blacksmiths_shop_before_saving' => $converter->convertDialogCompressed("I lost my friend. Help me find him!"), + // 0xE0 + 'blacksmiths_shop_saving' => $converter->convertDialogCompressed("You found him! Colour me happy! Come back right away and we will bang on your sword."), - 'hobo_item_get_bottle' => $converter->convertDialogCompressed("You think life is rough? I guess you can take my last item. Except this tent. That's MY tent!"), + 'blacksmiths_collect_frog' => $converter->convertDialogCompressed("Ribbit! Ribbit! Let's find my partner. To the shop!"), - 'blacksmiths_what_you_want' => $converter->convertDialogCompressed("Nice of you to come back!\nWould you like us mess with your sword?\n ≥ Temper\n It's fine\n{CHOICE}"), + 'blacksmiths_still_working' => $converter->convertDialogCompressed("Something this precious takes time… Come back later."), - 'blacksmiths_paywall' => $converter->convertDialogCompressed("It's 10 rupees\n ≥ Easy\n Hang on…\n{CHOICE}"), + 'blacksmiths_saving_bows' => $converter->convertDialogCompressed("Thanks!\n\nThanks!"), - 'blacksmiths_extra_okay' => $converter->convertDialogCompressed("Are you sure you're sure?\n ≥ Ah, yup\n Hang on…\n{CHOICE}"), + 'blacksmiths_hammer_anvil' => $converter->convertDialogCompressed("Dernt Take Er Jerbs!"), - 'blacksmiths_tempered_already' => $converter->convertDialogCompressed("Whelp… We can't make this any better."), + 'dark_flute_boy_storytime' => $converter->convertDialogCompressed("Hi!\nI'm Stumpy!\nI've been chillin' in this world for a while now, but I miss my flute. If I gave you a shovel, would you go digging for it?\n ≥ sure\n nahh\n{CHOICE}"), - 'blacksmiths_temper_no' => $converter->convertDialogCompressed("Oh, come by any time!"), + 'dark_flute_boy_get_shovel' => $converter->convertDialogCompressed("Schaweet! Here you go. Happy digging!"), - 'blacksmiths_bogart_sword' => $converter->convertDialogCompressed("We're going to have to take it to work on it."), + 'dark_flute_boy_no_get_shovel' => $converter->convertDialogCompressed("Oh I see, not good enough for you… FINE!"), - 'blacksmiths_get_sword' => $converter->convertDialogCompressed("Sword is done. Now, back to our bread!"), + 'dark_flute_boy_flute_not_found' => $converter->convertDialogCompressed("Still haven't found the item? Dig in the Light World around here, dingus!"), - 'blacksmiths_shop_before_saving' => $converter->convertDialogCompressed("I lost my friend. Help me find him!"), - // 0xE0 - 'blacksmiths_shop_saving' => $converter->convertDialogCompressed("You found him! Colour me happy! Come back right away and we will bang on your sword."), + 'dark_flute_boy_after_shovel_get' => $converter->convertDialogCompressed("So I gave you an item, and you're still here.\n\n\n\n\n\nI mean, we can sit here and stare at each other, if you like…\n\n\n\n\n\n\n\nFine, I guess you should just go."), - 'blacksmiths_collect_frog' => $converter->convertDialogCompressed("Ribbit! Ribbit! Let's find my partner. To the shop!"), + 'shop_fortune_teller_lw_hint_0' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, the book opens the desert"), - 'blacksmiths_still_working' => $converter->convertDialogCompressed("Something this precious takes time… Come back later."), + 'shop_fortune_teller_lw_hint_1' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, nothing doing"), - 'blacksmiths_saving_bows' => $converter->convertDialogCompressed("Thanks!\n\nThanks!"), + 'shop_fortune_teller_lw_hint_2' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, I'm cheap"), - 'blacksmiths_hammer_anvil' => $converter->convertDialogCompressed("Dernt Take Er Jerbs!"), + 'shop_fortune_teller_lw_hint_3' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, am I cheap?"), - 'dark_flute_boy_storytime' => $converter->convertDialogCompressed("Hi!\nI'm Stumpy!\nI've been chillin' in this world for a while now, but I miss my flute. If I gave you a shovel, would you go digging for it?\n ≥ sure\n nahh\n{CHOICE}"), + 'shop_fortune_teller_lw_hint_4' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, Zora lives at the end of the river"), - 'dark_flute_boy_get_shovel' => $converter->convertDialogCompressed("Schaweet! Here you go. Happy digging!"), + 'shop_fortune_teller_lw_hint_5' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, The Cape can pass through the barrier"), + // 0xF0 + 'shop_fortune_teller_lw_hint_6' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, Spin, Hammer, or Net to hurt Agahnim"), - 'dark_flute_boy_no_get_shovel' => $converter->convertDialogCompressed("Oh I see, not good enough for you… FINE!"), + 'shop_fortune_teller_lw_hint_7' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, You can jump in the well by the blacksmiths"), - 'dark_flute_boy_flute_not_found' => $converter->convertDialogCompressed("Still haven't found the item? Dig in the Light World around here, dingus!"), + 'shop_fortune_teller_lw_no_rupees' => $converter->convertDialogCompressed("{BOTTOM}\nThe black cats are hungry, come back with rupees"), - 'dark_flute_boy_after_shovel_get' => $converter->convertDialogCompressed("So I gave you an item, and you're still here.\n\n\n\n\n\nI mean, we can sit here and stare at each other, if you like…\n\n\n\n\n\n\n\nFine, I guess you should just go."), + 'shop_fortune_teller_lw' => $converter->convertDialogCompressed("{BOTTOM}\nWelcome to the Fortune Shoppe!\nFancy a read?\n ≥I must know\n negative\n{CHOICE}"), - 'shop_fortune_teller_lw_hint_0' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, the book opens the desert"), + 'shop_fortune_teller_lw_post_hint' => $converter->convertDialogCompressed("{BOTTOM}\nFor ᚋᚌ rupees\nIt is done.\nBe gone!"), - 'shop_fortune_teller_lw_hint_1' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, nothing doing"), + 'shop_fortune_teller_lw_no' => $converter->convertDialogCompressed("{BOTTOM}\nWell then, why did you even come in here?"), - 'shop_fortune_teller_lw_hint_2' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, I'm cheap"), + 'shop_fortune_teller_lw_hint_8' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, why you do?"), - 'shop_fortune_teller_lw_hint_3' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, am I cheap?"), + 'shop_fortune_teller_lw_hint_9' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, panda crackers"), - 'shop_fortune_teller_lw_hint_4' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, Zora lives at the end of the river"), + 'shop_fortune_teller_lw_hint_10' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, the missing blacksmith is south of the Village of Outcasts"), - 'shop_fortune_teller_lw_hint_5' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, The Cape can pass through the barrier"), - // 0xF0 - 'shop_fortune_teller_lw_hint_6' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, Spin, Hammer, or Net to hurt Agahnim"), + 'shop_fortune_teller_lw_hint_11' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, open chests to get stuff"), - 'shop_fortune_teller_lw_hint_7' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, You can jump in the well by the blacksmiths"), + 'shop_fortune_teller_lw_hint_12' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, you can buy a new bomb at the Bomb Shoppe"), - 'shop_fortune_teller_lw_no_rupees' => $converter->convertDialogCompressed("{BOTTOM}\nThe black cats are hungry, come back with rupees"), + 'shop_fortune_teller_lw_hint_13' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, big bombs blow up cracked walls in pyramids"), - 'shop_fortune_teller_lw' => $converter->convertDialogCompressed("{BOTTOM}\nWelcome to the Fortune Shoppe!\nFancy a read?\n ≥I must know\n negative\n{CHOICE}"), + 'shop_fortune_teller_lw_hint_14' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, you need all the crystals to open Ganon's Tower"), - 'shop_fortune_teller_lw_post_hint' => $converter->convertDialogCompressed("{BOTTOM}\nFor ᚋᚌ rupees\nIt is done.\nBe gone!"), + 'shop_fortune_teller_lw_hint_15' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, Silver Arrows will defeat Ganon in his final phase"), - 'shop_fortune_teller_lw_no' => $converter->convertDialogCompressed("{BOTTOM}\nWell then, why did you even come in here?"), + 'dark_sanctuary' => $converter->convertDialogCompressed("For 20 rupees I'll tell you something?\nHow about it?\n ≥ yes\n no\n{CHOICE}"), - 'shop_fortune_teller_lw_hint_8' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, why you do?"), + 'dark_sanctuary_hint_0' => $converter->convertDialogCompressed("I once was a tea kettle, but then I moved up in the world, and now you can see me as this. Makes you wonder. What I could be next time."), + // 0x100 + 'dark_sanctuary_no' => $converter->convertDialogCompressed("Then go away!"), - 'shop_fortune_teller_lw_hint_9' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, panda crackers"), + 'dark_sanctuary_hint_1' => $converter->convertDialogCompressed("There is a thief in the desert, he can open creepy chests that follow you. But now that we have that out of the way, do you like my hair? I've spent eons getting it this way."), - 'shop_fortune_teller_lw_hint_10' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, the missing blacksmith is south of the Village of Outcasts"), + 'dark_sanctuary_yes' => $converter->convertDialogCompressed("With Crystals 5&6, you can find a great fairy in the pyramid.\n\nFlomp Flomp, Whizzle Whomp"), - 'shop_fortune_teller_lw_hint_11' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, open chests to get stuff"), + 'dark_sanctuary_hint_2' => $converter->convertDialogCompressed("All I can say is that my life is pretty plain,\n" + . "I like watchin' the puddles gather rain,\n" + . "And all I can do is just pour some tea for two,\n" + . "And speak my point of view but it's not sane,\n" + . "It's not sane"), - 'shop_fortune_teller_lw_hint_12' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, you can buy a new bomb at the Bomb Shoppe"), + 'sick_kid_no_bottle' => $converter->convertDialogCompressed("{BOTTOM}\nI'm sick! Show me a bottle, get something!"), - 'shop_fortune_teller_lw_hint_13' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, big bombs blow up cracked walls in pyramids"), + 'sick_kid_trade' => $converter->convertDialogCompressed("{BOTTOM}\nCool Bottle! Here's something for you."), - 'shop_fortune_teller_lw_hint_14' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, you need all the crystals to open Ganon's Tower"), + 'sick_kid_post_trade' => $converter->convertDialogCompressed("{BOTTOM}\nLeave me alone\nI'm sick. You have my item."), - 'shop_fortune_teller_lw_hint_15' => $converter->convertDialogCompressed("{BOTTOM}\nBy the black cats, Silver Arrows will defeat Ganon in his final phase"), + 'desert_thief_sitting' => $converter->convertDialogCompressed("………………………"), - 'dark_sanctuary' => $converter->convertDialogCompressed("For 20 rupees I'll tell you something?\nHow about it?\n ≥ yes\n no\n{CHOICE}"), + 'desert_thief_following' => $converter->convertDialogCompressed("why……………"), - 'dark_sanctuary_hint_0' => $converter->convertDialogCompressed("I once was a tea kettle, but then I moved up in the world, and now you can see me as this. Makes you wonder. What I could be next time."), - // 0x100 - 'dark_sanctuary_no' => $converter->convertDialogCompressed("Then go away!"), + 'desert_thief_question' => $converter->convertDialogCompressed("I was a thief. I open purple chests!\nKeep secret?\n ≥ sure thing\n never!\n{CHOICE}"), - 'dark_sanctuary_hint_1' => $converter->convertDialogCompressed("There is a thief in the desert, he can open creepy chests that follow you. But now that we have that out of the way, do you like my hair? I've spent eons getting it this way."), + 'desert_thief_question_yes' => $converter->convertDialogCompressed("Cool, bring me any purple chests you find."), - 'dark_sanctuary_yes' => $converter->convertDialogCompressed("With Crystals 5&6, you can find a great fairy in the pyramid.\n\nFlomp Flomp, Whizzle Whomp"), + 'desert_thief_after_item_get' => $converter->convertDialogCompressed("You tell anyone and I will give you such a pinch!"), - 'dark_sanctuary_hint_2' => $converter->convertDialogCompressed("All I can say is that my life is pretty plain,\n" - . "I like watchin' the puddles gather rain,\n" - . "And all I can do is just pour some tea for two,\n" - . "And speak my point of view but it's not sane,\n" - . "It's not sane"), + 'desert_thief_reassure' => $converter->convertDialogCompressed("Bring chests. It's a secret to everyone."), - 'sick_kid_no_bottle' => $converter->convertDialogCompressed("{BOTTOM}\nI'm sick! Show me a bottle, get something!"), + 'hylian_text_3' => $converter->convertDialogCompressed("^^ ^%=^= =%=\n=%% =%%=^\n==%^= %=^^%"), - 'sick_kid_trade' => $converter->convertDialogCompressed("{BOTTOM}\nCool Bottle! Here's something for you."), + 'tablet_ether_book' => $converter->convertDialogCompressed("Can you make things fall out of the sky? With the Master Sword, you can!"), - 'sick_kid_post_trade' => $converter->convertDialogCompressed("{BOTTOM}\nLeave me alone\nI'm sick. You have my item."), + 'tablet_bombos_book' => $converter->convertDialogCompressed("Can you make things fall out of the sky? With the Master Sword, you can!"), + // 0x110 + 'magic_bat_wake' => $converter->convertDialogCompressed("You bum! I was sleeping! Where's my magic bolts?"), - 'desert_thief_sitting' => $converter->convertDialogCompressed("………………………"), + 'magic_bat_give_half_magic' => $converter->convertDialogCompressed("How you like me now?"), - 'desert_thief_following' => $converter->convertDialogCompressed("why……………"), + 'intro_main' => $converter->convertDialogCompressed("{INTRO}\n Episode III\n{PAUSE3}\n A Link to\n the Past\n" + . "{PAUSE3}\n Randomizer\n{PAUSE3}\nAfter mostly disregarding what happened in the first two games.\n" + . "{PAUSE3}\nLink awakens to his uncle leaving the house.\n{PAUSE3}\nHe just runs out the door,\n" + . "{PAUSE3}\ninto the rainy night.\n{PAUSE3}\n{CHANGEPIC}\nGanon has moved around all the items in Hyrule.\n" + . "{PAUSE7}\nYou will have to find all the items necessary to beat Ganon.\n" + . "{PAUSE7}\nThis is your chance to be a hero.\n{PAUSE3}\n{CHANGEPIC}\n" + . "You must get enough crystals to beat Ganon.\n{PAUSE9}\n{CHANGEPIC}", false), - 'desert_thief_question' => $converter->convertDialogCompressed("I was a thief. I open purple chests!\nKeep secret?\n ≥ sure thing\n never!\n{CHOICE}"), + 'intro_throne_room' => $converter->convertDialogCompressed("{IBOX}\nLook at this Stalfos on the throne.", false), - 'desert_thief_question_yes' => $converter->convertDialogCompressed("Cool, bring me any purple chests you find."), + 'intro_zelda_cell' => $converter->convertDialogCompressed("{IBOX}\nIt is your time to shine!", false), - 'desert_thief_after_item_get' => $converter->convertDialogCompressed("You tell anyone and I will give you such a pinch!"), + 'intro_agahnim' => $converter->convertDialogCompressed("{IBOX}\nAlso, you need to defeat this guy!", false), - 'desert_thief_reassure' => $converter->convertDialogCompressed("Bring chests. It's a secret to everyone."), + 'pickup_purple_chest' => $converter->convertDialogCompressed("A curious box. Let's take it with us!"), - 'hylian_text_3' => $converter->convertDialogCompressed("^^ ^%=^= =%=\n=%% =%%=^\n==%^= %=^^%"), + 'bomb_shop' => $converter->convertDialogCompressed("30 bombs for 100 rupees. Good deals all day!"), - 'tablet_ether_book' => $converter->convertDialogCompressed("Can you make things fall out of the sky? With the Master Sword, you can!"), + 'bomb_shop_big_bomb' => $converter->convertDialogCompressed("30 bombs for 100 rupees, 100 rupees 1 BIG bomb. Good deals all day!"), - 'tablet_bombos_book' => $converter->convertDialogCompressed("Can you make things fall out of the sky? With the Master Sword, you can!"), - // 0x110 - 'magic_bat_wake' => $converter->convertDialogCompressed("You bum! I was sleeping! Where's my magic bolts?"), + 'bomb_shop_big_bomb_buy' => $converter->convertDialogCompressed("Thanks!\nBoom goes the dynamite!"), - 'magic_bat_give_half_magic' => $converter->convertDialogCompressed("How you like me now?"), + 'item_get_big_bomb' => $converter->convertDialogCompressed("YAY! press A to splode it!"), - 'intro_main' => $converter->convertDialogCompressed("{INTRO}\n Episode III\n{PAUSE3}\n A Link to\n the Past\n" - . "{PAUSE3}\n Randomizer\n{PAUSE3}\nAfter mostly disregarding what happened in the first two games.\n" - . "{PAUSE3}\nLink awakens to his uncle leaving the house.\n{PAUSE3}\nHe just runs out the door,\n" - . "{PAUSE3}\ninto the rainy night.\n{PAUSE3}\n{CHANGEPIC}\nGanon has moved around all the items in Hyrule.\n" - . "{PAUSE7}\nYou will have to find all the items necessary to beat Ganon.\n" - . "{PAUSE7}\nThis is your chance to be a hero.\n{PAUSE3}\n{CHANGEPIC}\n" - . "You must get the 7 crystals to beat Ganon.\n{PAUSE9}\n{CHANGEPIC}", false), + 'kiki_second_extortion' => $converter->convertDialogCompressed("For 100 more, I'll open this place.\nHow about it?\n ≥ open\n nah\n{CHOICE}"), - 'intro_throne_room' => $converter->convertDialogCompressed("{IBOX}\nLook at this Stalfos on the throne.", false), + 'kiki_second_extortion_no' => $converter->convertDialogCompressed("Heh, good luck getting in."), - 'intro_zelda_cell' => $converter->convertDialogCompressed("{IBOX}\nIt is your time to shine!", false), + 'kiki_second_extortion_yes' => $converter->convertDialogCompressed("Yay! Rupees!\nOkay, let's do this!"), - 'intro_agahnim' => $converter->convertDialogCompressed("{IBOX}\nAlso, you need to defeat this guy!", false), + 'kiki_first_extortion' => $converter->convertDialogCompressed("I'm Kiki. I like rupees, may I have 10?\nHow about it?\n ≥ yes\n no\n{CHOICE}"), - 'pickup_purple_chest' => $converter->convertDialogCompressed("A curious box. Let's take it with us!"), + 'kiki_first_extortion_yes' => $converter->convertDialogCompressed("Nice. I'll tag along with you for a bit."), + // 0x120 + 'kiki_first_extortion_no' => $converter->convertDialogCompressed("Pfft. I have no reason to hang. See ya!"), - 'bomb_shop' => $converter->convertDialogCompressed("30 bombs for 100 rupees. Good deals all day!"), + 'kiki_leaving_screen' => $converter->convertDialogCompressed("No no no no no! We should play by my rules! Goodbye…"), - 'bomb_shop_big_bomb' => $converter->convertDialogCompressed("30 bombs for 100 rupees, 100 rupees 1 BIG bomb. Good deals all day!"), + 'blind_in_the_cell' => $converter->convertDialogCompressed("You saved me!\nPlease get me out of here!"), - 'bomb_shop_big_bomb_buy' => $converter->convertDialogCompressed("Thanks!\nBoom goes the dynamite!"), + 'blind_by_the_light' => $converter->convertDialogCompressed("Aaaahhhh~!\nS-so bright~!"), - 'item_get_big_bomb' => $converter->convertDialogCompressed("YAY! press A to splode it!"), + 'blind_not_that_way' => $converter->convertDialogCompressed("No! Don't go that way!"), - 'kiki_second_extortion' => $converter->convertDialogCompressed("For 100 more, I'll open this place.\nHow about it?\n ≥ open\n nah\n{CHOICE}"), + 'aginah_l1sword_no_book' => $converter->convertDialogCompressed("I once had a fish dinner. I still remember it to this day."), - 'kiki_second_extortion_no' => $converter->convertDialogCompressed("Heh, good luck getting in."), + 'aginah_l1sword_with_pendants' => $converter->convertDialogCompressed("Do you remember when I was young?\n\nI sure don't."), - 'kiki_second_extortion_yes' => $converter->convertDialogCompressed("Yay! Rupees!\nOkay, let's do this!"), + 'aginah' => $converter->convertDialogCompressed("So, I've been living in this cave for years, and you think you can just come along and bomb open walls?"), - 'kiki_first_extortion' => $converter->convertDialogCompressed("I'm Kiki. I like rupees, may I have 10?\nHow about it?\n ≥ yes\n no\n{CHOICE}"), + 'aginah_need_better_sword' => $converter->convertDialogCompressed("Once, I farted in this cave so bad all the jazz hands guys ran away and hid in the sand."), - 'kiki_first_extortion_yes' => $converter->convertDialogCompressed("Nice. I'll tag along with you for a bit."), - // 0x120 - 'kiki_first_extortion_no' => $converter->convertDialogCompressed("Pfft. I have no reason to hang. See ya!"), + 'aginah_have_better_sword' => $converter->convertDialogCompressed("Pandas are very vicious animals. Never forget…\n\n\n\n\nI never will…"), - 'kiki_leaving_screen' => $converter->convertDialogCompressed("No no no no no! We should play by my rules! Goodbye…"), + 'catfish' => $converter->convertDialogCompressed("You woke me from my nap! Take this, and get out!"), - 'blind_in_the_cell' => $converter->convertDialogCompressed("You saved me!\nPlease get me out of here!"), + 'catfish_after_item' => $converter->convertDialogCompressed("I don't have anything else for you!\nTake this!"), + // 12C + 'lumberjack_right' => $converter->convertDialogCompressed("One of us always lies."), - 'blind_by_the_light' => $converter->convertDialogCompressed("Aaaahhhh~!\nS-so bright~!"), + 'lumberjack_left' => $converter->convertDialogCompressed("One of us always tells the truth."), - 'blind_not_that_way' => $converter->convertDialogCompressed("No! Don't go that way!"), + 'lumberjack_left_post_agahnim' => $converter->convertDialogCompressed("One of us likes peanut butter."), - 'aginah_l1sword_no_book' => $converter->convertDialogCompressed("I once had a fish dinner. I still remember it to this day."), + 'fighting_brothers_right' => $converter->convertDialogCompressed("I walled off my brother Leo\n\nWhat a dingus."), + // 0x130 + 'fighting_brothers_right_opened' => $converter->convertDialogCompressed("Now I should probably talk to him…"), - 'aginah_l1sword_with_pendants' => $converter->convertDialogCompressed("Do you remember when I was young?\n\nI sure don't."), + 'fighting_brothers_left' => $converter->convertDialogCompressed("Did you come from my brothers room?\n\nAre we cool?"), - 'aginah' => $converter->convertDialogCompressed("So, I've been living in this cave for years, and you think you can just come along and bomb open walls?"), + 'maiden_crystal_1' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty red dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), - 'aginah_need_better_sword' => $converter->convertDialogCompressed("Once, I farted in this cave so bad all the jazz hands guys ran away and hid in the sand."), + 'maiden_crystal_2' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty blue dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), - 'aginah_have_better_sword' => $converter->convertDialogCompressed("Pandas are very vicious animals. Never forget…\n\n\n\n\nI never will…"), + 'maiden_crystal_3' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty gold dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), - 'catfish' => $converter->convertDialogCompressed("You woke me from my nap! Take this, and get out!"), + 'maiden_crystal_4' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty redder dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), - 'catfish_after_item' => $converter->convertDialogCompressed("I don't have anything else for you!\nTake this!"), - // 12C - 'lumberjack_right' => $converter->convertDialogCompressed("One of us always lies."), + 'maiden_crystal_5' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty green dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), - 'lumberjack_left' => $converter->convertDialogCompressed("One of us always tells the truth."), + 'maiden_crystal_6' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty green dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), - 'lumberjack_left_post_agahnim' => $converter->convertDialogCompressed("One of us likes peanut butter."), + 'maiden_crystal_7' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nIt's about friggin time.\n{SPEED1}\n{SPEED2}Do you know how long I've been waiting?!"), - 'fighting_brothers_right' => $converter->convertDialogCompressed("I walled off my brother Leo\n\nWhat a dingus."), - // 0x130 - 'fighting_brothers_right_opened' => $converter->convertDialogCompressed("Now I should probably talk to him…"), + 'maiden_ending' => $converter->convertDialogCompressed("May the way of the hero lead to the Triforce"), - 'fighting_brothers_left' => $converter->convertDialogCompressed("Did you come from my brothers room?\n\nAre we cool?"), + 'maiden_confirm_undersood' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nCapisce?\n ≥ Yes\n No\n{CHOICE}"), - 'maiden_crystal_1' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty red dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), + 'barrier_breaking' => $converter->convertDialogCompressed("What did the seven crystals say to Ganon's Tower?"), - 'maiden_crystal_2' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty blue dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), + 'maiden_crystal_7_again' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nIt's about friggin time.\n{SPEED1}\n{SPEED2}Do you know how long I've been waiting?!"), - 'maiden_crystal_3' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty gold dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), + 'agahnim_zelda_teleport' => $converter->convertDialogCompressed("I am a magician, and this is my act. Watch as I make this girl disappear"), - 'maiden_crystal_4' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty redder dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), + 'agahnim_magic_running_away' => $converter->convertDialogCompressed("And now, the end is near\nAnd so I face the final curtain\nMy friend, I'll say it clear\nI'll state my case, of which I'm certain\nI've lived a life that's full\nI've traveled each and every highway\nBut more, much more than this\nI did it my way"), - 'maiden_crystal_5' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty green dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), + 'agahnim_hide_and_seek_found' => $converter->convertDialogCompressed("Peek-a-boo!"), + // 0x140 + 'agahnim_defeated' => $converter->convertDialogCompressed("Arrrgggghhh. Well you're coming with me!"), - 'maiden_crystal_6' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nI have a pretty green dress.\n{SPEED1}\n{SPEED2}Just thought I would tell you."), + 'agahnim_final_meeting' => $converter->convertDialogCompressed("You have done well to come this far. Now, die!"), + // 0x142 + 'zora_meeting' => $converter->convertDialogCompressed("What do you want?\n ≥ Flippers\n Nothin'\n{CHOICE}"), - 'maiden_crystal_7' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nIt's about friggin time.\n{SPEED1}\n{SPEED2}Do you know how long I've been waiting?!"), + 'zora_tells_cost' => $converter->convertDialogCompressed("Fine! But they aren't cheap. You got 500 rupees?\n ≥ Duh\n Oh carp\n{CHOICE}"), - 'maiden_ending' => $converter->convertDialogCompressed("May the way of the hero lead to the Triforce"), + 'zora_get_flippers' => $converter->convertDialogCompressed("Here's some Flippers for you! Swim little fish, swim."), - 'maiden_confirm_undersood' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nCapisce?\n ≥ Yes\n No\n{CHOICE}"), + 'zora_no_cash' => $converter->convertDialogCompressed("Fine!\nGo get some more money first."), - 'barrier_breaking' => $converter->convertDialogCompressed("What did the seven crystals say to Ganon's Tower?"), + 'zora_no_buy_item' => $converter->convertDialogCompressed("Wah hoo! Well, whenever you want to see these gills, stop on by."), - 'maiden_crystal_7_again' => $converter->convertDialogCompressed("{SPEED2}\n{BOTTOM}\n{NOBORDER}\nIt's about friggin time.\n{SPEED1}\n{SPEED2}Do you know how long I've been waiting?!"), + 'kakariko_saharalasa_grandson' => $converter->convertDialogCompressed("My grandpa is over in the East. I'm bad with directions. I'll mark your map. Best of luck!\n{HARP}"), - 'agahnim_zelda_teleport' => $converter->convertDialogCompressed("I am a magician, and this is my act. Watch as I make this girl disappear"), + 'kakariko_saharalasa_grandson_next' => $converter->convertDialogCompressed("Someday I'll be in a high school band!"), - 'agahnim_magic_running_away' => $converter->convertDialogCompressed("And now, the end is near\nAnd so I face the final curtain\nMy friend, I'll say it clear\nI'll state my case, of which I'm certain\nI've lived a life that's full\nI've traveled each and every highway\nBut more, much more than this\nI did it my way"), + 'dark_palace_tree_dude' => $converter->convertDialogCompressed("Did you know…\n\n\nA tree typically has many secondary branches supported clear of the ground by the trunk. This trunk typically contains woody tissue for strength, and vascular tissue to carry materials from one part of the tree to another."), - 'agahnim_hide_and_seek_found' => $converter->convertDialogCompressed("Peek-a-boo!"), - // 0x140 - 'agahnim_defeated' => $converter->convertDialogCompressed("Arrrgggghhh. Well you're coming with me!"), + 'fairy_wishing_ponds' => $converter->convertDialogCompressed("\n-wishing pond-\n\nThrow item in?\n ≥ Yesh\n No\n{CHOICE}"), - 'agahnim_final_meeting' => $converter->convertDialogCompressed("You have done well to come this far. Now, die!"), - // 0x142 - 'zora_meeting' => $converter->convertDialogCompressed("What do you want?\n ≥ Flippers\n Nothin'\n{CHOICE}"), + 'fairy_wishing_ponds_no' => $converter->convertDialogCompressed("\n stop it!"), - 'zora_tells_cost' => $converter->convertDialogCompressed("Fine! But they aren't cheap. You got 500 rupees?\n ≥ Duh\n Oh carp\n{CHOICE}"), + 'pond_of_wishing_no' => $converter->convertDialogCompressed("\n fine then!"), - 'zora_get_flippers' => $converter->convertDialogCompressed("Here's some Flippers for you! Swim little fish, swim."), + 'pond_of_wishing_return_item' => $converter->convertDialogCompressed("Okay. Here's your item back, cause I can't use it. I'm stuck in this fountain."), - 'zora_no_cash' => $converter->convertDialogCompressed("Fine!\nGo get some more money first."), + 'pond_of_wishing_throw' => $converter->convertDialogCompressed("How many?\n ≥ᚌᚋ rupees\n ᚎᚍ rupees\n{CHOICE}"), - 'zora_no_buy_item' => $converter->convertDialogCompressed("Wah hoo! Well, whenever you want to see these gills, stop on by."), + 'pond_pre_item_silvers' => $converter->convertDialogCompressed("I like you, so here's a thing you can use to beat up Ganon."), + // 0x150 + 'pond_of_wishing_great_luck' => $converter->convertDialogCompressed("\nis great luck"), - 'kakariko_saharalasa_grandson' => $converter->convertDialogCompressed("My grandpa is over in the East. I'm bad with directions. I'll mark your map. Best of luck!\n{HARP}"), + 'pond_of_wishing_good_luck' => $converter->convertDialogCompressed("\n is good luck"), - 'kakariko_saharalasa_grandson_next' => $converter->convertDialogCompressed("Someday I'll be in a high school band!"), + 'pond_of_wishing_meh_luck' => $converter->convertDialogCompressed("\n is meh luck"), + // Repurposed to no items in Randomizer + 'pond_of_wishing_bad_luck' => $converter->convertDialogCompressed("Why you come in here and pretend like you have something this fountain wants? Come back with bottles!"), - 'dark_palace_tree_dude' => $converter->convertDialogCompressed("Did you know…\n\n\nA tree typically has many secondary branches supported clear of the ground by the trunk. This trunk typically contains woody tissue for strength, and vascular tissue to carry materials from one part of the tree to another."), + 'pond_of_wishing_fortune' => $converter->convertDialogCompressed("by the way, your fortune,"), - 'fairy_wishing_ponds' => $converter->convertDialogCompressed("\n-wishing pond-\n\nThrow item in?\n ≥ Yesh\n No\n{CHOICE}"), + 'item_get_14_heart' => $converter->convertDialogCompressed("3 more to go\n ¼\nYay!"), - 'fairy_wishing_ponds_no' => $converter->convertDialogCompressed("\n stop it!"), + 'item_get_24_heart' => $converter->convertDialogCompressed("2 more to go\n ½\nWhee!"), - 'pond_of_wishing_no' => $converter->convertDialogCompressed("\n fine then!"), + 'item_get_34_heart' => $converter->convertDialogCompressed("1 more to go\n ¾\nGood job!"), - 'pond_of_wishing_return_item' => $converter->convertDialogCompressed("Okay. Here's your item back, cause I can't use it. I'm stuck in this fountain."), + 'item_get_whole_heart' => $converter->convertDialogCompressed("You got a whole ♥!!\nGo you!"), - 'pond_of_wishing_throw' => $converter->convertDialogCompressed("How many?\n ≥ᚌᚋ rupees\n ᚎᚍ rupees\n{CHOICE}"), + 'item_get_sanc_heart' => $converter->convertDialogCompressed("You got a whole ♥!\nGo you!"), - 'pond_pre_item_silvers' => $converter->convertDialogCompressed("I like you, so here's a thing you can use to beat up Ganon."), - // 0x150 - 'pond_of_wishing_great_luck' => $converter->convertDialogCompressed("\nis great luck"), + 'fairy_fountain_refill' => $converter->convertDialogCompressed("Well done, lettuce have a cup of tea…"), - 'pond_of_wishing_good_luck' => $converter->convertDialogCompressed("\n is good luck"), + 'death_mountain_bullied_no_pearl' => $converter->convertDialogCompressed("I wrote a word. Just one. On a stone and threw it into the ocean. It was my word. It was what would save me. I hope someday someone finds that word and brings it to me. The word is the beginning of my song."), - 'pond_of_wishing_meh_luck' => $converter->convertDialogCompressed("\n is meh luck"), - // Repurposed to no items in Randomizer - 'pond_of_wishing_bad_luck' => $converter->convertDialogCompressed("Why you come in here and pretend like you have something this fountain wants? Come back with bottles!"), + 'death_mountain_bullied_with_pearl' => $converter->convertDialogCompressed("I wrote a song. Just one. On a guitar and threw it into the sky. It was my song. It could tame beasts and free minds. It flitters on the wind and lurks in our minds. It is the song of nature, of humanity, of dreams and dreamers."), - 'pond_of_wishing_fortune' => $converter->convertDialogCompressed("by the way, your fortune,"), + 'death_mountain_bully_no_pearl' => $converter->convertDialogCompressed("Add garlic, ginger and apple and cook for 2 minutes. Add carrots, potatoes, garam masala and curry powder and stir well. Add tomato paste, stir well and slowly add red wine and bring to a boil. Add sugar, soy sauce and water, stir and bring to a boil again."), - 'item_get_14_heart' => $converter->convertDialogCompressed("3 more to go\n ¼\nYay!"), + 'death_mountain_bully_with_pearl' => $converter->convertDialogCompressed("I think I forgot how to smile…"), - 'item_get_24_heart' => $converter->convertDialogCompressed("2 more to go\n ½\nWhee!"), + 'shop_darkworld_enter' => $converter->convertDialogCompressed("It's dangerous outside, buy my crap for safety."), + // 0x160 + 'game_chest_village_of_outcasts' => $converter->convertDialogCompressed("Pay 30 rupees, open 2 chests. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}"), - 'item_get_34_heart' => $converter->convertDialogCompressed("1 more to go\n ¾\nGood job!"), + 'game_chest_no_cash' => $converter->convertDialogCompressed("So, like, you need 30 rupees.\nSilly!"), - 'item_get_whole_heart' => $converter->convertDialogCompressed("You got a whole ♥!!\nGo you!"), + 'game_chest_not_played' => $converter->convertDialogCompressed("You want to play a game?\nTalk to me."), - 'item_get_sanc_heart' => $converter->convertDialogCompressed("You got a whole ♥!\nGo you!"), + 'game_chest_played' => $converter->convertDialogCompressed("You've opened the chests!\nTime to go."), - 'fairy_fountain_refill' => $converter->convertDialogCompressed("Well done, lettuce have a cup of tea…"), + 'game_chest_village_of_outcasts_play' => $converter->convertDialogCompressed("Alright, brother!\nGo play!"), - 'death_mountain_bullied_no_pearl' => $converter->convertDialogCompressed("I wrote a word. Just one. On a stone and threw it into the ocean. It was my word. It was what would save me. I hope someday someone finds that word and brings it to me. The word is the beginning of my song."), + 'shop_first_time' => $converter->convertDialogCompressed("Welcome to my shop! Select stuff with A.\nDO IT NOW!"), - 'death_mountain_bullied_with_pearl' => $converter->convertDialogCompressed("I wrote a song. Just one. On a guitar and threw it into the sky. It was my song. It could tame beasts and free minds. It flitters on the wind and lurks in our minds. It is the song of nature, of humanity, of dreams and dreamers."), + 'shop_already_have' => $converter->convertDialogCompressed("So, like, you already have one of those."), - 'death_mountain_bully_no_pearl' => $converter->convertDialogCompressed("Add garlic, ginger and apple and cook for 2 minutes. Add carrots, potatoes, garam masala and curry powder and stir well. Add tomato paste, stir well and slowly add red wine and bring to a boil. Add sugar, soy sauce and water, stir and bring to a boil again."), + 'shop_buy_shield' => $converter->convertDialogCompressed("Thanks! Now you can block fire balls."), - 'death_mountain_bully_with_pearl' => $converter->convertDialogCompressed("I think I forgot how to smile…"), + 'shop_buy_red_potion' => $converter->convertDialogCompressed("Red goo, so good! It's like a fairy in a bottle, except you have to activate it yourself."), - 'shop_darkworld_enter' => $converter->convertDialogCompressed("It's dangerous outside, buy my crap for safety."), - // 0x160 - 'game_chest_village_of_outcasts' => $converter->convertDialogCompressed("Pay 30 rupees, open 2 chests. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}"), + 'shop_buy_arrows' => $converter->convertDialogCompressed("Arrows! Cause you were too lazy to look under some pots!"), - 'game_chest_no_cash' => $converter->convertDialogCompressed("So, like, you need 30 rupees.\nSilly!"), + 'shop_buy_bombs' => $converter->convertDialogCompressed("You bought bombs. What, couldn't find any under bushes?"), - 'game_chest_not_played' => $converter->convertDialogCompressed("You want to play a game?\nTalk to me."), + 'shop_buy_bee' => $converter->convertDialogCompressed("He's my best friend. Please take care of him, and never lose him."), - 'game_chest_played' => $converter->convertDialogCompressed("You've opened the chests!\nTime to go."), + 'shop_buy_heart' => $converter->convertDialogCompressed("You really just bought this?"), - 'game_chest_village_of_outcasts_play' => $converter->convertDialogCompressed("Alright, brother!\nGo play!"), + 'shop_first_no_bottle_buy' => $converter->convertDialogCompressed("Why does no one own bottles? Go find one first!"), - 'shop_first_time' => $converter->convertDialogCompressed("Welcome to my shop! Select stuff with A.\nDO IT NOW!"), + 'shop_buy_no_space' => $converter->convertDialogCompressed("You are carrying to much crap, go use some of it first!"), - 'shop_already_have' => $converter->convertDialogCompressed("So, like, you already have one of those."), + 'ganon_fall_in' => $converter->convertDialogCompressed("You drove\naway my other\nself, Agahnim,\ntwo times…\nBut, I won't\ngive you the\nTriforce.\nI'll defeat\nyou!"), + // 0x170 + 'ganon_phase_3' => $converter->convertDialogCompressed("Can you beat\nmy darkness\ntechnique?"), - 'shop_buy_shield' => $converter->convertDialogCompressed("Thanks! Now you can block fire balls."), + 'lost_woods_thief' => $converter->convertDialogCompressed("Have you seen Andy?\n\nHe was out looking for our prized Ether medallion.\nI wonder when he will be back?"), - 'shop_buy_red_potion' => $converter->convertDialogCompressed("Red goo, so good! It's like a fairy in a bottle, except you have to activate it yourself."), + 'blinds_hut_dude' => $converter->convertDialogCompressed("I'm just some dude. This is Blind's hut."), - 'shop_buy_arrows' => $converter->convertDialogCompressed("Arrows! Cause you were too lazy to look under some pots!"), + 'end_triforce' => $converter->convertDialogCompressed("{SPEED2}\n{MENU}\n{NOBORDER}\n G G"), + // 0x174 + 'toppi_fallen' => $converter->convertDialogCompressed("Ouch!\n\nYou Jerk!"), - 'shop_buy_bombs' => $converter->convertDialogCompressed("You bought bombs. What, couldn't find any under bushes?"), + 'kakariko_tavern_fisherman' => $converter->convertDialogCompressed("Don't argue\nwith a frozen\nDeadrock.\nHe'll never\nchange his\nposition!"), - 'shop_buy_bee' => $converter->convertDialogCompressed("He's my best friend. Please take care of him, and never lose him."), + 'thief_money' => $converter->convertDialogCompressed("It's a secret to everyone."), - 'shop_buy_heart' => $converter->convertDialogCompressed("You really just bought this?"), + 'thief_desert_rupee_cave' => $converter->convertDialogCompressed("So you, like, busted down my door, and are being a jerk by talking to me? Normally I would be angry and make you pay for it, but I bet you're just going to break all my pots and steal my 50 rupees."), - 'shop_first_no_bottle_buy' => $converter->convertDialogCompressed("Why does no one own bottles? Go find one first!"), + 'thief_ice_rupee_cave' => $converter->convertDialogCompressed("I'm a rupee pot farmer. One day I will take over the world with my skillz. Have you met my brother in the desert? He's way richer than I am."), - 'shop_buy_no_space' => $converter->convertDialogCompressed("You are carrying to much crap, go use some of it first!"), + 'telepathic_tile_south_east_darkworld_cave' => $converter->convertDialogCompressed("~~ dev cave ~~\n no farming\n required"), + // 0x17A + 'cukeman' => $converter->convertDialogCompressed("Did you hear that Veetorp beat ajneb174 in a 1 on 1 race at AGDQ?"), - 'ganon_fall_in' => $converter->convertDialogCompressed("You drove\naway my other\nself, Agahnim,\ntwo times…\nBut, I won't\ngive you the\nTriforce.\nI'll defeat\nyou!"), - // 0x170 - 'ganon_phase_3' => $converter->convertDialogCompressed("Can you beat\nmy darkness\ntechnique?"), + 'cukeman_2' => $converter->convertDialogCompressed("You found Shabadoo, huh?\nNiiiiice."), - 'lost_woods_thief' => $converter->convertDialogCompressed("Have you seen Andy?\n\nHe was out looking for our prized Ether medallion.\nI wonder when he will be back?"), + 'potion_shop_no_cash' => $converter->convertDialogCompressed("Yo! I'm not running a charity here."), - 'blinds_hut_dude' => $converter->convertDialogCompressed("I'm just some dude. This is Blind's hut."), + 'kakariko_powdered_chicken' => $converter->convertDialogCompressed("Smallhacker…\n\n\nWas hiding, you found me!\n\n\nOkay, you can leave now."), - 'end_triforce' => $converter->convertDialogCompressed("{SPEED2}\n{MENU}\n{NOBORDER}\n G G"), - // 0x174 - 'toppi_fallen' => $converter->convertDialogCompressed("Ouch!\n\nYou Jerk!"), + 'game_chest_south_of_kakariko' => $converter->convertDialogCompressed("Pay 20 rupees, open 1 chest. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}"), - 'kakariko_tavern_fisherman' => $converter->convertDialogCompressed("Don't argue\nwith a frozen\nDeadrock.\nHe'll never\nchange his\nposition!"), + 'game_chest_play_yes' => $converter->convertDialogCompressed("Good luck then"), + // 0x180 + 'game_chest_play_no' => $converter->convertDialogCompressed("Well fine, I didn't want your rupees."), - 'thief_money' => $converter->convertDialogCompressed("It's a secret to everyone."), + 'game_chest_lost_woods' => $converter->convertDialogCompressed("Pay 100 rupees open 1 chest. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}"), - 'thief_desert_rupee_cave' => $converter->convertDialogCompressed("So you, like, busted down my door, and are being a jerk by talking to me? Normally I would be angry and make you pay for it, but I bet you're just going to break all my pots and steal my 50 rupees."), + 'kakariko_flophouse_man_no_flippers' => $converter->convertDialogCompressed("I sure do have a lot of beds.\n\nZora is a cheapskate and will try to sell you his trash for 500 rupees…"), - 'thief_ice_rupee_cave' => $converter->convertDialogCompressed("I'm a rupee pot farmer. One day I will take over the world with my skillz. Have you met my brother in the desert? He's way richer than I am."), + 'kakariko_flophouse_man' => $converter->convertDialogCompressed("I sure do have a lot of beds.\n\nDid you know if you played the flute in the center of town things could happen?"), - 'telepathic_tile_south_east_darkworld_cave' => $converter->convertDialogCompressed("~~ dev cave ~~\n no farming\n required"), - // 0x17A - 'cukeman' => $converter->convertDialogCompressed("Did you hear that Veetorp beat ajneb174 in a 1 on 1 race at AGDQ?"), + 'menu_start_2' => $converter->convertDialogCompressed("{MENU}\n{SPEED0}\n≥@'s house\n Sanctuary\n{CHOICE3}", false), - 'cukeman_2' => $converter->convertDialogCompressed("You found Shabadoo, huh?\nNiiiiice."), + 'menu_start_3' => $converter->convertDialogCompressed("{MENU}\n{SPEED0}\n≥@'s house\n Sanctuary\n Mountain Cave\n{CHOICE2}", false), - 'potion_shop_no_cash' => $converter->convertDialogCompressed("Yo! I'm not running a charity here."), + 'menu_pause' => $converter->convertDialogCompressed("{SPEED0}\n≥continue\n save and quit\n{CHOICE3}", false), - 'kakariko_powdered_chicken' => $converter->convertDialogCompressed("Smallhacker…\n\n\nWas hiding, you found me!\n\n\nOkay, you can leave now."), + 'game_digging_choice' => $converter->convertDialogCompressed("Have 80 Rupees? Want to play digging game?\n ≥yes\n no\n{CHOICE}"), - 'game_chest_south_of_kakariko' => $converter->convertDialogCompressed("Pay 20 rupees, open 1 chest. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}"), + 'game_digging_start' => $converter->convertDialogCompressed("Okay, use the shovel with Y!"), - 'game_chest_play_yes' => $converter->convertDialogCompressed("Good luck then"), - // 0x180 - 'game_chest_play_no' => $converter->convertDialogCompressed("Well fine, I didn't want your rupees."), + 'game_digging_no_cash' => $converter->convertDialogCompressed("Shovel rental is 80 rupees.\nI have all day"), - 'game_chest_lost_woods' => $converter->convertDialogCompressed("Pay 100 rupees open 1 chest. Are you lucky?\nSo, Play game?\n ≥ play\n never!\n{CHOICE}"), + 'game_digging_end_time' => $converter->convertDialogCompressed("Time's up!\nTime for you to go."), - 'kakariko_flophouse_man_no_flippers' => $converter->convertDialogCompressed("I sure do have a lot of beds.\n\nZora is a cheapskate and will try to sell you his trash for 500 rupees…"), + 'game_digging_come_back_later' => $converter->convertDialogCompressed("Come back later, I have to bury things."), - 'kakariko_flophouse_man' => $converter->convertDialogCompressed("I sure do have a lot of beds.\n\nDid you know if you played the flute in the center of town things could happen?"), + 'game_digging_no_follower' => $converter->convertDialogCompressed("Something is following you. I don't like."), - 'menu_start_2' => $converter->convertDialogCompressed("{MENU}\n{SPEED0}\n≥@'s house\n Sanctuary\n{CHOICE3}", false), + 'menu_start_4' => $converter->convertDialogCompressed("{MENU}\n{SPEED0}\n≥@'s house\n Mountain Cave\n{CHOICE3}", false), - 'menu_start_3' => $converter->convertDialogCompressed("{MENU}\n{SPEED0}\n≥@'s house\n Sanctuary\n Mountain Cave\n{CHOICE2}", false), + 'ganon_fall_in_alt' => $converter->convertDialogCompressed("You think you\nare ready to\nface me?\n\nI will not die\n\nunless you\ncomplete your\ngoals. Dingus!"), - 'menu_pause' => $converter->convertDialogCompressed("{SPEED0}\n≥continue\n save and quit\n{CHOICE3}", false), + 'ganon_phase_3_alt' => $converter->convertDialogCompressed("Got wax in your ears? I cannot die!"), + // 0x190 + 'sign_east_death_mountain_bridge' => $converter->convertDialogCompressed("How did you get up here?"), - 'game_digging_choice' => $converter->convertDialogCompressed("Have 80 Rupees? Want to play digging game?\n ≥yes\n no\n{CHOICE}"), + 'fish_money' => $converter->convertDialogCompressed("It's a secret to everyone."), - 'game_digging_start' => $converter->convertDialogCompressed("Okay, use the shovel with Y!"), + 'sign_ganons_tower' => $converter->convertDialogCompressed("You need all 7 crystals to enter."), - 'game_digging_no_cash' => $converter->convertDialogCompressed("Shovel rental is 80 rupees.\nI have all day"), + 'sign_ganon' => $converter->convertDialogCompressed("You need all 7 crystals to beat Ganon."), - 'game_digging_end_time' => $converter->convertDialogCompressed("Time's up!\nTime for you to go."), + 'ganon_phase_3_no_bow' => $converter->convertDialogCompressed("You have no bow. Dingus!"), - 'game_digging_come_back_later' => $converter->convertDialogCompressed("Come back later, I have to bury things."), + 'ganon_phase_3_no_silvers_alt' => $converter->convertDialogCompressed("You can't best me without silver arrows!"), - 'game_digging_no_follower' => $converter->convertDialogCompressed("Something is following you. I don't like."), + 'ganon_phase_3_no_silvers' => $converter->convertDialogCompressed("You can't best me without silver arrows!"), - 'menu_start_4' => $converter->convertDialogCompressed("{MENU}\n{SPEED0}\n≥@'s house\n Mountain Cave\n{CHOICE3}", false), + 'ganon_phase_3_silvers' => $converter->convertDialogCompressed("Oh no! Silver! My one true weakness!"), - 'ganon_fall_in_alt' => $converter->convertDialogCompressed("You think you\nare ready to\nface me?\n\nI will not die\n\nunless you\ncomplete your\ngoals. Dingus!"), + 'murahdahla' => $converter->convertDialogCompressed("Hello @. I\nam Murahdahla, brother of\nSahasrahla and Aginah. Behold the power of\ninvisibility.\n{PAUSE3}\n… … …\nWait! you can see me? I knew I should have\nhidden in a hollow tree."), - 'ganon_phase_3_alt' => $converter->convertDialogCompressed("Got wax in your ears? I cannot die!"), - // 0x190 - 'sign_east_death_mountain_bridge' => $converter->convertDialogCompressed("How did you get up here?"), + 'end_pad_data' => $converter->convertDialogCompressed(""), + 'terminator' => [0xFF, 0xFF] + ]; + } - 'fish_money' => $converter->convertDialogCompressed("It's a secret to everyone."), - - 'end_pad_data' => $converter->convertDialogCompressed(""), - 'terminator' => [0xFF, 0xFF] - ]; - } - - /** - * Removing the various string that we don't want to actually - * appear in the randomizer. - */ - public function removeUnwanted() { - $messages_to_zero = [ - // escort Messages - 'zelda_go_to_throne', - 'zelda_push_throne', - 'zelda_switch_room_pull', - 'zelda_switch_room', - 'zelda_sewers', - 'mountain_old_man_first', - 'mountain_old_man_deadend', - 'mountain_old_man_turn_right', - 'blind_not_that_way', - - // Note: Maiden text gets skipped by a change we will keep, so technically we don't need to replace them - // Replacing them anyway to make more room in translation table - 'maiden_crystal_1', - 'maiden_crystal_2', - 'maiden_crystal_3', - 'maiden_crystal_4', - 'maiden_crystal_5', - 'maiden_crystal_6', - 'maiden_crystal_7', - 'maiden_ending', - 'maiden_confirm_undersood', - 'maiden_crystal_7_again', - - // Note: Item pickup text is skipped by a change we will keep, so technically we don't need to replace them - // Replacing them anyway to make more room in translation table - 'item_get_lamp', - 'item_get_boomerang', - 'item_get_bow', - 'item_get_shovel', - 'item_get_magic_cape', - 'item_get_powder', - 'item_get_flippers', - 'item_get_power_gloves', - 'item_get_pendant_courage', - 'item_get_pendant_power', - 'item_get_pendant_wisdom', - 'item_get_mushroom', - 'item_get_book', - 'item_get_moonpearl', - 'item_get_compass', - 'item_get_map', - 'item_get_ice_rod', - 'item_get_fire_rod', - 'item_get_ether', - 'item_get_bombos', - 'item_get_quake', - 'item_get_hammer', - 'item_get_ocarina', - 'item_get_cane_of_somaria', - 'item_get_hookshot', - 'item_get_bombs', - 'item_get_bottle', - 'item_get_big_key', - 'item_get_titans_mitts', - 'item_get_magic_mirror', - 'item_get_fake_mastersword', - 'post_item_get_mastersword', - 'item_get_red_potion', - 'item_get_green_potion', - 'item_get_blue_potion', - 'item_get_bug_net', - 'item_get_blue_mail', - 'item_get_red_mail', - 'item_get_temperedsword', - 'item_get_mirror_shield', - 'item_get_cane_of_byrna', - 'item_get_pegasus_boots', - 'item_get_pendant_wisdom_alt', - 'item_get_pendant_power_alt', - 'pond_item_boomerang', - 'blacksmiths_tempered_already', - 'item_get_whole_heart', - 'item_get_sanc_heart', - 'item_get_14_heart', - 'item_get_24_heart', - 'item_get_34_heart', - 'pond_item_test', - 'pond_will_upgrade', - - // misc - 'agahnim_final_meeting', - 'agahnim_hide_and_seek_found', - 'telepathic_sahasrahla_beat_agahnim', - 'telepathic_sahasrahla_beat_agahnim_no_pearl', - 'magic_bat_wake', - 'magic_bat_give_half_magic', - 'mountain_old_man_in_his_cave_pre_agahnim', - 'mountain_old_man_in_his_cave', - 'mountain_old_man_in_his_cave_post_agahnim', - 'priest_sanctuary_before_leave', - 'priest_sanctuary_before_pendants', - 'priest_sanctuary_after_pendants_before_master_sword', - 'zelda_sanctuary_before_leave', - 'zelda_before_pendants', - 'zelda_after_pendants_before_master_sword', - 'zelda_save_sewers', - 'zelda_save_lets_go', - 'zelda_save_repeat', - 'priest_info', - 'sanctuary_enter', - 'zelda_sanctuary_story', - 'sick_kid_trade', - 'hobo_item_get_bottle', - 'sahasrahla_have_courage', - 'sahasrahla_found', - 'sahasrahla_have_boots_no_icerod', - 'sahasrahla_bring_courage', - 'sahasrahla_quest_have_master_sword', - 'shop_darkworld_enter', - 'shop_first_time', - 'shop_buy_shield', - 'shop_buy_red_potion', - 'shop_buy_arrows', - 'shop_buy_bombs', - 'shop_buy_bee', - 'shop_buy_heart', - 'bomb_shop_big_bomb_buy', - 'item_get_big_bomb', - 'catfish', - 'catfish_after_item', - 'zora_meeting', - 'zora_tells_cost', - 'zora_get_flippers', - //'zora_no_cash', - 'zora_no_buy_item', - 'agahnim_zelda_teleport', - 'agahnim_magic_running_away', - 'blind_in_the_cell', - 'kiki_first_extortion', - 'kiki_first_extortion_yes', - 'kiki_second_extortion', - 'kiki_second_extortion_yes', - 'witch_brewing_the_item', - 'barrier_breaking', - 'mountain_old_man_lost_and_alone', - 'mountain_old_man_drop_off', - 'pickup_purple_chest', - 'agahnim_defeated', - 'blacksmiths_collect_frog', - 'blacksmiths_what_you_want', - 'blacksmiths_get_sword', - 'blacksmiths_shop_saving', - 'blacksmiths_paywall', - 'blacksmiths_extra_okay', - 'blacksmiths_bogart_sword', - 'blacksmiths_tempered_already', - 'missing_magic', - 'witch_assistant_no_empty_bottle', - 'witch_assistant_informational', - 'bottle_vendor_choice', - 'bottle_vendor_get', - 'game_digging_choice', - 'game_digging_start', - 'dark_flute_boy_storytime', - 'dark_flute_boy_get_shovel', - 'thief_money', - 'game_chest_village_of_outcasts', - 'game_chest_village_of_outcasts_play', - 'hylian_text_2', - 'desert_entry_translated', - 'uncle_dying_sewer', - 'telepathic_intro', - 'desert_thief_sitting', - 'desert_thief_following', - 'desert_thief_question', - 'desert_thief_question_yes', - 'desert_thief_after_item_get', - 'desert_thief_reassure' - ]; - - foreach ($messages_to_zero as $msg) { - $this->text_array[$msg] = $this->converter->convertDialogCompressed("{NOTEXT}", False); - } - } + /** + * Removing the various string that we don't want to actually + * appear in the randomizer. + */ + public function removeUnwanted() + { + $messages_to_zero = [ + // escort Messages + 'zelda_go_to_throne', + 'zelda_push_throne', + 'zelda_switch_room_pull', + 'zelda_switch_room', + 'zelda_sewers', + 'mountain_old_man_first', + 'mountain_old_man_deadend', + 'mountain_old_man_turn_right', + 'blind_not_that_way', + + // Note: Maiden text gets skipped by a change we will keep, so technically we don't need to replace them + // Replacing them anyway to make more room in translation table + 'maiden_crystal_1', + 'maiden_crystal_2', + 'maiden_crystal_3', + 'maiden_crystal_4', + 'maiden_crystal_5', + 'maiden_crystal_6', + 'maiden_crystal_7', + 'maiden_ending', + 'maiden_confirm_undersood', + 'maiden_crystal_7_again', + + // Note: Item pickup text is skipped by a change we will keep, so technically we don't need to replace them + // Replacing them anyway to make more room in translation table + 'item_get_lamp', + 'item_get_boomerang', + 'item_get_bow', + 'item_get_shovel', + 'item_get_magic_cape', + 'item_get_powder', + 'item_get_flippers', + 'item_get_power_gloves', + 'item_get_pendant_courage', + 'item_get_pendant_power', + 'item_get_pendant_wisdom', + 'item_get_mushroom', + 'item_get_book', + 'item_get_moonpearl', + 'item_get_compass', + 'item_get_map', + 'item_get_ice_rod', + 'item_get_fire_rod', + 'item_get_ether', + 'item_get_bombos', + 'item_get_quake', + 'item_get_hammer', + 'item_get_ocarina', + 'item_get_cane_of_somaria', + 'item_get_hookshot', + 'item_get_bombs', + 'item_get_bottle', + 'item_get_big_key', + 'item_get_titans_mitts', + 'item_get_magic_mirror', + 'item_get_fake_mastersword', + 'post_item_get_mastersword', + 'item_get_red_potion', + 'item_get_green_potion', + 'item_get_blue_potion', + 'item_get_bug_net', + 'item_get_blue_mail', + 'item_get_red_mail', + 'item_get_temperedsword', + 'item_get_mirror_shield', + 'item_get_cane_of_byrna', + 'item_get_pegasus_boots', + 'item_get_pendant_wisdom_alt', + 'item_get_pendant_power_alt', + 'pond_item_boomerang', + 'pond_item_bottle_filled', + 'blacksmiths_tempered_already', + 'item_get_whole_heart', + 'item_get_sanc_heart', + 'item_get_14_heart', + 'item_get_24_heart', + 'item_get_34_heart', + 'pond_item_test', + 'pond_will_upgrade', + + // misc + 'agahnim_final_meeting', + 'agahnim_hide_and_seek_found', + 'telepathic_sahasrahla_beat_agahnim', + 'telepathic_sahasrahla_beat_agahnim_no_pearl', + 'magic_bat_wake', + 'magic_bat_give_half_magic', + 'mountain_old_man_in_his_cave_pre_agahnim', + 'mountain_old_man_in_his_cave', + 'mountain_old_man_in_his_cave_post_agahnim', + 'priest_sanctuary_before_leave', + 'priest_sanctuary_before_pendants', + 'priest_sanctuary_after_pendants_before_master_sword', + 'zelda_sanctuary_before_leave', + 'zelda_before_pendants', + 'zelda_after_pendants_before_master_sword', + 'zelda_save_sewers', + 'zelda_save_lets_go', + 'zelda_save_repeat', + 'priest_info', + 'sanctuary_enter', + 'zelda_sanctuary_story', + 'sick_kid_trade', + 'hobo_item_get_bottle', + 'sahasrahla_have_courage', + 'sahasrahla_found', + 'sahasrahla_have_boots_no_icerod', + 'sahasrahla_bring_courage', + 'sahasrahla_quest_have_master_sword', + 'shop_darkworld_enter', + 'shop_first_time', + 'shop_buy_shield', + 'shop_buy_red_potion', + 'shop_buy_arrows', + 'shop_buy_bombs', + 'shop_buy_bee', + 'shop_buy_heart', + 'bomb_shop_big_bomb_buy', + 'item_get_big_bomb', + 'catfish', + 'catfish_after_item', + 'zora_meeting', + 'zora_tells_cost', + 'zora_get_flippers', + //'zora_no_cash', + 'zora_no_buy_item', + 'agahnim_zelda_teleport', + 'agahnim_magic_running_away', + 'blind_in_the_cell', + 'kiki_first_extortion', + 'kiki_first_extortion_yes', + 'kiki_second_extortion', + 'kiki_second_extortion_yes', + 'witch_brewing_the_item', + 'barrier_breaking', + 'mountain_old_man_lost_and_alone', + 'mountain_old_man_drop_off', + 'pickup_purple_chest', + 'agahnim_defeated', + 'blacksmiths_collect_frog', + 'blacksmiths_what_you_want', + 'blacksmiths_get_sword', + 'blacksmiths_shop_saving', + 'blacksmiths_paywall', + 'blacksmiths_extra_okay', + 'blacksmiths_bogart_sword', + 'blacksmiths_tempered_already', + 'missing_magic', + 'witch_assistant_no_empty_bottle', + 'witch_assistant_informational', + 'bottle_vendor_choice', + 'bottle_vendor_get', + 'game_digging_choice', + 'game_digging_start', + 'dark_flute_boy_storytime', + 'dark_flute_boy_get_shovel', + 'thief_money', + 'game_chest_village_of_outcasts', + 'game_chest_village_of_outcasts_play', + 'hylian_text_2', + 'desert_entry_translated', + 'uncle_dying_sewer', + 'telepathic_intro', + 'desert_thief_sitting', + 'desert_thief_following', + 'desert_thief_question', + 'desert_thief_question_yes', + 'desert_thief_after_item_get', + 'desert_thief_reassure' + ]; + + foreach ($messages_to_zero as $msg) { + $this->text_array[$msg] = $this->converter->convertDialogCompressed("{NOTEXT}", false); + } + } } diff --git a/app/User.php b/app/User.php index d57427614..e99a4f715 100644 --- a/app/User.php +++ b/app/User.php @@ -1,26 +1,29 @@ -difficulty = $difficulty; - $this->variation = $variation; - $this->logic = $logic; - $this->goal = $goal; - $this->pre_collected_items = new ItemCollection([], $this); - - $this->locations = new LocationCollection; - $this->shops = new ShopCollection; - - $this->prizepacks = [ - '0' => new Drops\PrizePack('0', 8), - '1' => new Drops\PrizePack('1', 8), - '2' => new Drops\PrizePack('2', 8), - '3' => new Drops\PrizePack('3', 8), - '4' => new Drops\PrizePack('4', 8), - '5' => new Drops\PrizePack('5', 8), - '6' => new Drops\PrizePack('6', 8), - 'pull' => new Drops\PrizePack('pull', 3), - 'crab' => new Drops\PrizePack('crab', 2), - 'stun' => new Drops\PrizePack('stun', 1), - 'fish' => new Drops\PrizePack('fish', 1), - ]; - - // Initialize the Logic and Prizes for each Region that has them and fill our LocationsCollection - foreach ($this->regions as $name => $region) { - $region->init($logic); - $this->locations = $this->locations->merge($region->getLocations()); - $this->shops = $this->shops->merge($region->getShops()); - } - - $this->win_condition = function($collected_items) { - return $collected_items->has('Triforce') - || $collected_items->has('TriforcePiece', $this->config('item.Goal.Required')); - }; - } - - static public function factory(string $type = null, $difficulty = 'normal', $logic = 'NoGlitches', $goal = 'ganon', $variation = 'none') { - switch ($type) { - case 'open': - return new World\Open($difficulty, $logic, $goal, $variation); - case 'inverted': - return new World\Inverted($difficulty, $logic, $goal, $variation); - case 'standard': - default: - return new World\Standard($difficulty, $logic, $goal, $variation); - } - } - - /** - * Set the world to the vanilla game. - * - * @return $this - */ - public function setVanilla() { - foreach ($this->regions as $name => $region) { - $region->setVanilla(); - } - - return $this; - } - - /** - * Get the collection of items left to be filled in this world - * - * @return ItemCollection - */ - public function getCurrentlyFillingItems() : ItemCollection { - return $this->currently_filling_items ?? new ItemCollection([], $this); - } - - /** - * Set the collection of items left to be filled in this world - * - * @param ItemCollection $items collection of items that are being filled - * - * @return $this - */ - public function setCurrentlyFillingItems(ItemCollection $items = null) : self { - $this->currently_filling_items = $items; - - return $this; - } - - /** - * Get the collection for pre-collected items - * - * @return ItemCollection - */ - public function getPreCollectedItems() : ItemCollection { - return $this->pre_collected_items; - } - - /** - * Set the collection for pre-collected items - * - * @param ItemCollection $items collection of items that have been pre-collected - * - * @return $this - */ - public function setPreCollectedItems(ItemCollection $items) : self { - $this->pre_collected_items = $items; - - return $this; - } - - /** - * Add a pre-collected Item - * - * @param Item $item item to add - * - * @return $this - */ - public function addPreCollectedItem(Item $item) : self { - $this->pre_collected_items->addItem($item); - - return $this; - } - - /** - * Remove a pre-collected Item - * - * @param Item $item item to remove - * - * @return $this - */ - public function removePreCollectedItem(Item $item) : self { - $this->pre_collected_items->removeItem($item->getName()); - - return $this; - } - - /** - * Get a copy of this world with items in locations. - * - * @return static - */ - public function copy() { - $copy = new static($this->difficulty, $this->logic, $this->goal, $this->variation); - foreach ($this->locations as $name => $location) { - $copy->locations[$name]->setItem($location->getItem()); - } - foreach ($this->shops as $name => $shop) { - $copy->shops[$name] = $shop->copy(); - } - - $copy->setPreCollectedItems($this->pre_collected_items->copy()); - - return $copy; - } - - /** - * Return an array of Locations to collect all Advancement Items in the game in order. This works by cloning the - * current world (new Locations and all). Then it groups the locations into collection spheres (all reachable - * locations based on the items in the previous sphere). It then attempts to remove each item (starting from the - * outer most sphere [latest game locations]), checking the win condition after each removal. If the removed item - * makes it impossile to achieve the win condition, it is placed back at the location (and marked as a required - * location). If the item is safe to remove, we then take all the items out of the higher spheres and see if we can - * still access them with the items available in the lower spheres. If we cannot reach a required item from a higher - * sphere we put it back (and mark the location as required). We repeat this process until all spheres have been - * pruned. We then take that list of locations with items and run a playthrough of them so we know collection order. - * - * @param bool $walkthrough include the play order - * - * @return array - */ - public function getPlayThrough($walkthrough = true) { - $shadow_world = $this->copy(); - $junk_items = [ - Item::get('BlueShield'), - Item::get('ProgressiveArmor'), - Item::get('BlueMail'), - Item::get('Boomerang'), - Item::get('MirrorShield'), - Item::get('PieceOfHeart'), - Item::get('HeartContainer'), - Item::get('BossHeartContainer'), - Item::get('RedBoomerang'), - Item::get('RedShield'), - Item::get('RedMail'), - Item::get('BombUpgrade5'), - Item::get('BombUpgrade10'), - Item::get('BombUpgrade50'), - Item::get('ArrowUpgrade5'), - Item::get('ArrowUpgrade10'), - Item::get('ArrowUpgrade70'), - Item::get('RedPotion'), - Item::get('Bee'), - Item::get('TenArrows'), - Item::get('Bomb'), - Item::get('ThreeBombs'), - Item::get('OneRupee'), - Item::get('FiveRupees'), - Item::get('TwentyRupees'), - Item::get('FiftyRupees'), - Item::get('OneHundredRupees'), - Item::get('ThreeHundredRupees'), - Item::get('Heart'), - Item::get('Rupoor'), - ]; - - // remove junk locations for filtering later - $shadow_world->getLocations()->each(function($location) use ($junk_items) { - $location_item = $location->getItem(); - if ($location_item && in_array($location_item, $junk_items)) { - $location->setItem(); - } - }); - - $location_sphere = $shadow_world->getLocationSpheres(); - $collectable_locations = new LocationCollection(array_flatten(array_map(function($collection) { - return $collection->values(); - }, $location_sphere))); - $required_locations = new LocationCollection; - $required_locations_sphere = []; - $reverse_location_sphere = array_reverse($location_sphere, true); - - foreach ($reverse_location_sphere as $sphere_level => $sphere) { - if ($sphere_level == 0) { - continue; - } - Log::debug("playthrough SPHERE: $sphere_level"); - foreach ($sphere as $location) { - Log::debug(sprintf("playthrough Check: %s :: %s", $location->getName(), - $location->getItem() ? $location->getItem()->getNiceName() : 'Nothing')); - // pull item out (we have to pull keys as well :( as they are used in calcs for big keys see DP) - $pulled_item = $location->getItem(); - if ($pulled_item === null) { - continue; - } - $location->setItem(); - if ((!$this->config('region.wildMaps', false) && $pulled_item instanceof Item\Map) - || (!$this->config('region.wildCompasses', false) && $pulled_item instanceof Item\Compass) - || in_array($pulled_item, $junk_items)) { - continue; - } - - if (!$shadow_world->getWinCondition()($collectable_locations->getItems($shadow_world)->copy())) { - // put item back - $location->setItem($this->getCollectableLocations()[$location->getName()]->getItem()); - $required_locations->addItem($location); - $required_locations_sphere[$sphere_level][] = $location; - Log::debug(sprintf("playthrough Keep: %s :: %s", $location->getName(), $location->getItem()->getNiceName())); - continue; - } - - // Itterate all spheres bubbling up -_- - foreach (array_reverse(array_keys($required_locations_sphere)) as $check_sphere) { - // don't check the current sphere (thats a waste of time). - if ($check_sphere == $sphere_level || $required_locations->has($location->getName())) { - continue; - } - - // remove all higher sphere items from their locations - foreach ($required_locations_sphere as $higher_sphere => $higher_locations) { - if ($higher_sphere < $check_sphere) { - continue; - } - foreach ($higher_locations as $higher_location) { - $higher_location->setItem(); - } - } - - // test access of items in the outer sphere - foreach ($required_locations_sphere as $higher_sphere => $higher_locations) { - if ($higher_sphere != $check_sphere) { - continue; - } - foreach ($higher_locations as $higher_location) { - // remove the item we are trying to get - $temp_pull = $higher_location->getItem(); - $higher_location->setItem(); - $current_items = $collectable_locations->getItems($shadow_world)->copy(); - - if (!$higher_location->canAccess($current_items, $this->getLocations())) { - // put item back - $location->setItem($this->getCollectableLocations()[$location->getName()]->getItem()); - Log::debug(sprintf("playthrough Higher Location: %s :: %s", $higher_location->getName(), - $this->getCollectableLocations()[$higher_location->getName()]->getItem()->getNiceName())); - $required_locations->addItem($location); - $required_locations_sphere[$sphere_level][] = $location; - Log::debug(sprintf("playthrough Readd: %s :: %s", $location->getName(), - $location->getItem()->getNiceName())); - break 2; - } - $higher_location->setItem($temp_pull); - } - } - // put all higher items back - foreach ($required_locations as $higher_location) { - $higher_location->setItem($this->getCollectableLocations()[$higher_location->getName()]->getItem()); - } - } - } - } - - foreach ($required_locations as $higher_location) { - Log::debug(sprintf("playthrough REQ: %s :: %s", $higher_location->getName(), - $this->getCollectableLocations()[$higher_location->getName()]->getItem()->getNiceName())); - } - if (!$walkthrough) { - return $required_locations->values(); - } - - // RUN PLAYTHROUGH of locations found above - $my_items = $shadow_world->pre_collected_items; - $location_order = []; - $location_round = []; - $longest_item_chain = 1; - do { - // make sure we had something before going to the next round - if (!empty($location_round[$longest_item_chain])) { - $longest_item_chain++; - } - $location_round[$longest_item_chain] = []; - $available_locations = $shadow_world->getCollectableLocations()->filter(function($location) use ($my_items, $location_order) { - return !in_array($location, $location_order) - && $location->canAccess($my_items, $this->getLocations()); - }); - - $found_items = $available_locations->getItems(); - - $available_locations->each(function($location) use (&$location_order, &$location_round, $longest_item_chain) { - $item = $location->getItem(); - if (in_array($location, $location_order) - || !$location->hasItem()) { - return; - } - Log::debug(sprintf("Pushing: %s from %s", $item->getNiceName(), $location->getName())); - array_push($location_order, $location); - if ((($this->config('rom.genericKeys', false) || !$this->config('region.wildKeys', false)) && $item instanceof Item\Key) - || $item instanceof Item\Map - || $item instanceof Item\Compass - || $item == Item::get('RescueZelda')) { - return; - } - array_push($location_round[$longest_item_chain], $location); - }); - $my_items = $my_items->merge($found_items); - } while ($found_items->count() > 0); - - $ret = ['longest_item_chain' => count($location_round)]; - if (count($shadow_world->pre_collected_items)) { - $i = 0; - foreach ($shadow_world->pre_collected_items as $item) { - if ($item instanceof Item\Upgrade\Arrow - || $item instanceof Item\Upgrade\Bomb - || $item instanceof Item\Event) { - continue; - } - - $location = sprintf("Equipment Slot %s", ++$i); - $ret[0]['Equipped'][$location] = $item->getName(); - } - } - foreach ($location_round as $round => $locations) { - $locations = array_filter($locations, function($location) { - return !$location instanceof Location\Trade; - }); - if (!count($locations)) { - $ret['longest_item_chain']--; - } - foreach ($locations as $location) { - $ret[$round][$location->getRegion()->getName()][$location->getName()] = $location->getItem()->getName(); - } - } - - $ret['regions_visited'] = array_reduce($ret, function($carry, $item) { - return (is_array($item)) ? $carry + count($item) : $carry; - }); - - return $ret; - } - - /** - * Get the function that determines the win condition for this world. - * - * @return Closure - */ - public function getWinCondition() { - return $this->win_condition; - } - - /** - * Determine if this World is beatable - * - * @param ItemCollection $collected precollected items for consideration - * - * @return bool - */ - public function checkWinCondition(ItemCollection $collected = null) { - return $this->getWinCondition()($this->collectItems($collected)); - } - - /** - * Get config value based on the currently set rules - * - * @param string $key dot notation key of config - * @param mixed|null $default value to return if $key is not found - * - * @return mixed - */ - public function config(string $key, $default = null) { - if (!array_key_exists($key, $this->config)) { - $this->config[$key] = config("alttp.{$this->difficulty}.variations.{$this->variation}.$key", - config("alttp.{$this->difficulty}.$key", - config("alttp.goals.{$this->goal}.$key", - config("alttp.$key", null)))); - } - - return $this->config[$key] ?? $default; - } - - /** - * Get a region by Key name - * - * @param string $name Name of region to return - * - * @return Region|null - */ - public function getRegion(string $name) { - return $this->regions[$name] ?? null; - } - - /** - * Get all the Regions in this world - * - * @return array - */ - public function getRegions() { - return $this->regions; - } - - /** - * Get all the Locations in all Regions in this world - * - * @return LocationCollection - */ - public function getLocations() { - return $this->locations; - } - - /** - * Get all the prizes for the prize packs in this world - * - * @return array - */ - public function getPrizePacks() : array { - return $this->prizepacks; - } - - /** - * Set the prize packs ? - * - * @return $this - */ - public function setPrizePacks($prizes) : self { - if ($prizes == null) { - return $this; - } - if (count($prizes) != 63) { - return $this; - } - if (array_diff($prizes, [ - 'heart', - 'greenRupee', - 'blueRupee', - 'redRupee', - 'bomb1', - 'bomb4', - 'bomb8', - 'smallMagic', - 'largeMagic', - 'arrow5', - 'arrow10', - 'faerie', - ])) { - return $this; - } - $this->prizepacks = $prizepacks; - - return $this; - } - - /** - * Get Locations considered collectable. I.E. can contain items that Link can have. - * This is cached for faster retrevial - * - * @return LocationCollection - */ - public function getCollectableLocations() { - if (!$this->collectable_locations) { - $this->collectable_locations = $this->locations->filter(function($location) { - return !$location instanceof Location\Medallion - && !$location instanceof Location\Fountain; - })->merge($this->shops->getLocations()); - } - - return $this->collectable_locations; - } - - /** - * Collect the items in the world, you may pass in a set of pre-collected items. - * This also checks for shop items. - * - * @param ItemCollection $collected precollected items for consideration in out collecting - * - * @return ItemCollection - */ - public function collectItems(ItemCollection $collected = null) { - $my_items = $collected ?? new ItemCollection([], $this); - $my_items = $my_items->merge($this->pre_collected_items); - $available_locations = $this->getCollectableLocations()->filter(function($location) { - return $location->hasItem(); - }); - - do { - $search_locations = $available_locations->filter(function($location) use ($my_items) { - return $location->canAccess($my_items); - }); - - $available_locations = $available_locations->diff($search_locations); - - $found_items = $search_locations->getItems(); - $my_items = $my_items->merge($found_items); - } while ($found_items->count() > 0); - - return $my_items; - } - - /** - * Determine the spheres that locations are in based on the items in the world - * - * @TODO: consider a re-factor to match the collectItems method of reducing the available_locations instead of - * using found_locations. - * - * @return array - */ - public function getLocationSpheres() { - $sphere = 0; - $location_sphere = [0 => new LocationCollection]; - $my_items = $this->pre_collected_items; - $i = 0; - foreach ($my_items as $item) { - $location = new Location(sprintf("Equipment Slot %s", ++$i), null, null); - $location->setItem($item); - $location_sphere[0]->addItem($location); - } - $found_locations = new LocationCollection; - do { - $sphere++; - $available_locations = $this->getCollectableLocations()->filter(function($location) use ($my_items, $found_locations) { - return $location->hasItem() - && !$found_locations->contains($location) - && $location->canAccess($my_items); - }); - $location_sphere[$sphere] = $available_locations; - - $found_items = $available_locations->getItems(); - $found_locations = $found_locations->merge($available_locations); - - $my_items = $my_items->merge($found_items); - } while ($found_items->count() > 0); - - return $location_sphere; - } - - /** - * Get Logic in this world - * - * @return string - */ - public function getLogic() : string { - return $this->logic; - } - - /** - * Get Difficulty in this world - * - * @return string - */ - public function getDifficulty() : string { - return $this->difficulty; - } - - /** - * Get Varation in this world - * - * @return string - */ - public function getVariation() : string { - return $this->variation; - } - - /** - * Get Goal in this world - * - * @return string - */ - public function getGoal() : string { - return $this->goal; - } - - /** - * Get Location in this world by name - * - * @param string $name name of the Location - * - * @return Location - */ - public function getLocation(string $name) { - return $this->locations[$name]; - } - - /** - * Get all the Locations in this Region that do not have an Item assigned - * - * @return Support\LocationCollection - */ - public function getEmptyLocations() { - return $this->locations->filter(function($location) { - return !$location->hasItem(); - }); - } - - /** - * Get all the Locations that contain the requested Item - * - * @param Item|null $item item we are looking for - * - * @return LocationCollection - */ - public function getLocationsWithItem(Item $item = null) { - return $this->locations->locationsWithItem($item); - } - - /** - * Get all the Regions that contain the requested Item - * - * @param Item|null $item item we are looking for - * - * @return array - */ - public function getRegionsWithItem(Item $item = null) { - return $this->getLocationsWithItem($item)->getRegions(); - } - - /** - * Set a drop in a PrizePackSlot in a given PrizePack - * - * @param String the prize pack to set the drop in - * @param int the index of the drop to set - * @param String the name of the drop to set - */ - public function setDrop($pack, $ind, $drop) { - $this->prizepacks[$pack]->getDrops()[$ind]->setDrop($drop); - } - - /** - * Get all the drops in the prize packs as an array - * - * @return array - */ - public function getAllDrops() { - $drops = []; - foreach ($this->prizepacks as $pack) { - $drops = array_merge($drops, $pack->getDrops()); - } - return $drops; - } - - /** - * Get all the drops that are empty in the prize packs as an array - * - * @return array - */ - public function getEmptyDropSlots() { - $emptyDrops = []; - foreach ($this->prizepacks as $pack) { - $emptyDrops = array_merge($emptyDrops, $pack->getEmptyDrops()); - } - return $emptyDrops; - } - - /** - * Get all the Shops in all Regions in this world - * - * @return ShopCollection - */ - public function getShops() { - return $this->shops; - } - - /** - * Get Shop in this world by name - * - * @param string $name name of the Shop - * - * @return Shop - */ - public function getShop(string $name) { - return $this->shops[$name]; - } +abstract class World +{ + /** @var int */ + protected static $max_world = 1; + /** @var int */ + public $id = 0; + /** @var \ALttP\Seed */ + protected $seed; + /** @var array */ + protected $regions = []; + /** @var \ALttP\Support\LocationCollection */ + protected $locations; + /** @var \ALttP\Support\ShopCollection */ + protected $shops; + /** @var callable */ + protected $win_condition; + /** @var \ALttP\Support\LocationCollection */ + protected $collectable_locations; + /** @var \ALttP\Support\ItemCollection */ + protected $pre_collected_items; + /** @var array */ + protected $prizepacks; + /** @var \ALttP\Region */ + protected $equipped_region; + /** @var array */ + protected $texts = []; + /** @var array */ + protected $credits = []; + /** @var array */ + protected $config = []; + /** @var array */ + private $collected_locations = []; + /** @var array|null */ + protected $override_patch = null; + /** @var array */ + protected $spoiler = []; + + /** + * Create a new world and initialize all of the Regions within it + * + * @param int $id Id of this world + * @param array $config config for this world + * + * @return void + */ + public function __construct(int $id = 0, array $config = []) + { + $this->id = $id; + $this->config = array_merge([ + 'difficulty' => 'normal', + 'logic' => 'NoGlitches', + 'goal' => 'ganon', + ], $config); + + $this->pre_collected_items = new ItemCollection; + $this->equipped_region = new Region($this); + $this->seed = new Seed; + $this->locations = new LocationCollection; + $this->shops = new ShopCollection; + + $this->prizepacks = [ + '0' => new Drops\PrizePack('0', 8), + '1' => new Drops\PrizePack('1', 8), + '2' => new Drops\PrizePack('2', 8), + '3' => new Drops\PrizePack('3', 8), + '4' => new Drops\PrizePack('4', 8), + '5' => new Drops\PrizePack('5', 8), + '6' => new Drops\PrizePack('6', 8), + 'pull' => new Drops\PrizePack('pull', 3), + 'crab' => new Drops\PrizePack('crab', 2), + 'stun' => new Drops\PrizePack('stun', 1), + 'fish' => new Drops\PrizePack('fish', 1), + ]; + + // Initialize the Logic and Prizes for each Region that has them and + // fill our LocationsCollection + foreach ($this->regions as $region) { + if ($this->config('logic') !== 'None') { + $region->initalize(); + } + $this->locations = $this->locations->merge($region->getLocations()); + $this->shops = $this->shops->merge($region->getShops()); + } + $this->locations->setChecksForWorld($this->id); + + $this->win_condition = function ($collected_items) { + $collected_items->setChecksForWorld($this->id); + return $collected_items->has('Triforce') + || ($this->regions['North East Light World']->canEnter($this->locations, $collected_items) && + $collected_items->has('TriforcePiece', $this->config('item.Goal.Required'))); + }; + + // Handle configuration options that map to switches. + $free_item_text = 0x00; + $free_item_menu = 0x00; + switch ($this->config('dungeonItems')) { + case 'full': + $this->config['region.wildBigKeys'] = true; + $free_item_text |= 0x18; + $free_item_menu |= 0x02; + // no break + case 'mcs': + $this->config['region.wildKeys'] = true; + $free_item_text |= 0x11; + $free_item_menu |= 0x01; + // no break + case 'mc': + $this->config['region.wildMaps'] = true; + $this->config['rom.mapOnPickup'] = true; + $this->config['region.wildCompasses'] = true; + $this->config['rom.dungeonCount'] = 'pickup'; + $free_item_text |= 0x16; + $free_item_menu |= 0x0C; + } + $this->config['rom.freeItemText'] = $free_item_text; + $this->config['rom.freeItemMenu'] = $free_item_menu; + + switch ($this->config('item.pool')) { + case 'expert': + $this->config['item.overflow.count.Sword'] = 2; + $this->config['item.overflow.count.Armor'] = 0; + $this->config['item.overflow.count.Shield'] = 1; + $this->config['item.overflow.count.Bow'] = 1; + $this->config['item.overflow.count.BossHeartContainer'] = 2; + $this->config['item.overflow.count.PieceOfHeart'] = 8; + + break; + case 'hard': + $this->config['item.overflow.count.Sword'] = 3; + $this->config['item.overflow.count.Armor'] = 0; + $this->config['item.overflow.count.Shield'] = 2; + $this->config['item.overflow.count.Bow'] = 1; + $this->config['item.overflow.count.BossHeartContainer'] = 6; + $this->config['item.overflow.count.PieceOfHeart'] = 16; + + break; + case 'crowd_control': + $this->config['item.overflow.count.Sword'] = 4; + $this->config['item.overflow.count.Armor'] = 0; + $this->config['item.overflow.count.Shield'] = 0; + $this->config['item.overflow.count.Bow'] = 1; + $this->config['item.overflow.count.BossHeartContainer'] = 1; + $this->config['item.overflow.count.PieceOfHeart'] = 20; + $this->config['item.count.BugNet'] = 0; + $this->config['item.count.HalfMagic'] = 0; + $this->config['item.count.CaneOfByrna'] = 0; + $this->config['item.count.Cape'] = 0; + $this->config['item.count.TwentyRupees2'] = 4; + } + + $this->config['region.requireBetterBow'] = false; + $this->config['region.requireBetterSword'] = false; + + if ($this->config('itemPlacement') === 'basic') { + $this->config['region.requireBetterBow'] = true; + $this->config['region.requireBetterSword'] = true; + } + + switch ($this->config('item.functionality')) { + case 'expert': + $this->config['rom.HardMode'] = 2; + + break; + case 'hard': + $this->config['rom.HardMode'] = 1; + } + + // In swordless mode silvers are 100% required + if ($this->config('mode.weapons') === 'swordless') { + $this->config['region.requireBetterBow'] = true; + } + + if ($this->config('itemPlacement') === 'basic') { + $this->config['region.forceSkullWoodsKey'] = true; + } + } + + /** + * Create a new World class with the given requirements. + * + * @param string $type type of world to create + * @param array $config config options for this world + * + * @return \ALttP\World + */ + public static function factory(string $type = 'standard', array $config = []): World + { + $config = array_merge($config, [ + 'mode.state' => $type, + ]); + + switch ($type) { + case 'open': + return new World\Open(static::$max_world++, $config); + case 'inverted': + return new World\Inverted(static::$max_world++, $config); + case 'retro': + return new World\Retro(static::$max_world++, $config); + case 'standard': + default: + return new World\Standard(static::$max_world++, $config); + } + } + + /** + * Get the collection for pre-collected items. + * + * @return \ALttP\Support\ItemCollection + */ + public function getPreCollectedItems(): ItemCollection + { + return $this->pre_collected_items; + } + + /** + * Set the collection for pre-collected items. + * + * @param \ALttP\Support\ItemCollection $items collection of items that have been pre-collected + * + * @return $this + */ + public function setPreCollectedItems(ItemCollection $items): self + { + $this->pre_collected_items = $items; + $this->pre_collected_items->setChecksForWorld($this->id); + + return $this; + } + + /** + * Add a pre-collected Item + * + * @param \ALttP\Item $item item to add + * + * @return $this + */ + public function addPreCollectedItem(Item $item): self + { + $this->pre_collected_items->addItem($item); + + return $this; + } + + /** + * Get a copy of this world with items in locations. + * + * @return static + */ + public function copy() + { + $copy = new static($this->id, $this->config); + $copy->locations->setChecksForWorld($this->id); + + foreach ($this->locations as $name => $location) { + $copy->locations[$name]->setItem($location->getItem()); + } + foreach ($this->shops as $name => $shop) { + $copy->shops[$name] = $shop->copy(); + } + + $copy->setPreCollectedItems($this->pre_collected_items->copy()); + + return $copy; + } + + /** + * Determine the junk fill range of Ganon's Tower for this world. This + * accounts for the number of crystals needed to enter. + * + * @return array + */ + public function getGanonsTowerJunkFillRange(): array + { + if (in_array($this->config['logic'], ['OverworldGlitches', 'MajorGlitches', 'None'])) { + return [0, 0]; + } + + if ($this->config['goal'] == 'triforce-hunt' || $this->config['goal'] == 'pedestal') { + return [ + floor(15 * $this->config('crystals.tower') / 7), + floor(25 * $this->config('crystals.tower') / 7), + ]; + } + + return [0, floor(15 * $this->config('crystals.tower') / 7)]; + } + + /** + * Get the function that determines the win condition for this world. + * + * @return callable + */ + public function getWinCondition() + { + return $this->win_condition; + } + + /** + * Determine if this World is beatable + * + * @param \ALttP\Support\ItemCollection $collected precollected items for consideration + * + * @return bool + */ + public function checkWinCondition(ItemCollection $collected = null) + { + return $this->getWinCondition()($this->collectItems($collected)); + } + + /** + * Get config value based on the currently set rules + * + * @todo we need to stop relying on the Laravel global config and have per world configs + * + * @param string $key dot notation key of config + * @param mixed|null $default value to return if $key is not found + * + * @return mixed + */ + public function config(string $key, $default = null) + { + if (!array_key_exists($key, $this->config)) { + $this->config[$key] = config( + "alttp.goals.{$this->config['goal']}.$key", + config( + "alttp.$key", + config( + "logic.{$this->config['logic']}.$key", + config($key, null) + ) + ) + ); + } + + return $this->config[$key] ?? $default; + } + + /** + * Get a region by Key name + * + * @param string $name Name of region to return + * + * @throws ErrorException + * + * @return Region + */ + public function getRegion(string $name) + { + return $this->regions[$name]; + } + + /** + * Get all the Regions in this world + * + * @return array + */ + public function getRegions(): array + { + return $this->regions; + } + + /** + * Get all the Locations in all Regions in this world + * + * @return \ALttP\Support\LocationCollection + */ + public function getLocations(): LocationCollection + { + return $this->locations; + } + + /** + * Get all the prizes for the prize packs in this world + * + * @return array + */ + public function getPrizePacks(): array + { + return $this->prizepacks; + } + + /** + * Get Locations considered collectable. I.E. can contain items that Link can have. + * This is cached for faster retrevial + * + * @return \ALttP\Support\LocationCollection + */ + public function getCollectableLocations(): LocationCollection + { + if ($this->collectable_locations === null) { + $this->collectable_locations = $this->locations->filter(function ($location) { + return !$location instanceof Location\Medallion + && !$location instanceof Location\Fountain + && !($this->collected_locations[$location->getName()] ?? false); + })->merge($this->shops->getLocations()); + } + + return $this->collectable_locations; + } + + /** + * Collect the items in the world, you may pass in a set of pre-collected items. + * This also checks for shop items. + * + * @todo this is collecting multiple events? like 2x Triforices. + * + * @param \ALttP\Support\ItemCollection|null $collected precollected items for consideration in out collecting + * + * @return \ALttP\Support\ItemCollection + */ + public function collectItems(?ItemCollection $collected = null): ItemCollection + { + $my_items = $collected ?? new ItemCollection; + $my_items = $my_items->merge($this->pre_collected_items); + $my_items->setChecksForWorld($this->id); + $available_locations = $this->getCollectableLocations()->filter(function ($location) { + return $location->hasItem(); + }); + + do { + $search_locations = $available_locations->filter(function ($location) use ($my_items) { + return !($this->collected_locations[$location->getName()] ?? false) && $location->canAccess($my_items); + }); + + foreach ($search_locations as $location) { + $this->collected_locations[$location->getName()] = true; + } + + $available_locations = $available_locations->diff($search_locations); + + $found_items = $search_locations->getItems(); + $my_items = $my_items->merge($found_items); + } while ($found_items->count() > 0); + + return $my_items; + } + + /** + * Collect the items in the world, you may pass in a set of pre-collected items. + * This also checks for shop items. + * + * @param \ALttP\Support\ItemCollection $collected precollected items for consideration in out collecting + * + * @return \ALttP\Support\ItemCollection + */ + public function collectOtherItems(ItemCollection $collected): ItemCollection + { + $my_items = $collected ?? new ItemCollection(); + $found = new ItemCollection($this->pre_collected_items); + $my_items = $my_items->merge($this->pre_collected_items); + $my_items->setChecksForWorld($this->id); + $available_locations = $this->getCollectableLocations()->filter(function ($location) { + return $location->hasItem(); + }); + + do { + $search_locations = $available_locations->filter(function ($location) use ($my_items) { + return !($this->collected_locations[$location->getName()] ?? false) && $location->canAccess($my_items); + }); + + foreach ($search_locations as $location) { + $this->collected_locations[$location->getName()] = true; + } + + $available_locations = $available_locations->diff($search_locations); + + $found_items = $search_locations->getItems(); + $my_items = $my_items->merge($found_items); + $found = $found->merge($found_items); + } while ($found_items->count() > 0); + + return $found; + } + + /** + * Get the count of currently touched locations in search. + * + * @todo thinking we should move this out to a collect items service for SOC + * + * @return int + */ + public function getCollectedLocationsCount(): int + { + return count($this->collected_locations); + } + + public function getCollectedLocations() + { + return $this->collected_locations; + } + + /** + * Reset the locations considered collected. + * + * @return void + */ + public function resetCollectedLocations(): void + { + $this->collected_locations = []; + } + + /** + * Determine the spheres that locations are in based on the items in the + * world. + * + * @todo consider a re-factor to match the collectItems method of reducing + * the available_locations instead of using found_locations. + * + * @return array + */ + public function getLocationSpheres(): array + { + $sphere = 0; + $location_sphere = [0 => new LocationCollection()]; + $my_items = $this->pre_collected_items; + $i = 0; + foreach ($my_items as $item) { + $location = new Location(sprintf("Equipment Slot %s", ++$i), [], null, $this->equipped_region); + $location->setItem($item); + $location_sphere[0]->addItem($location); + } + $found_locations = new LocationCollection(); + do { + $sphere++; + $available_locations = $this->getCollectableLocations()->filter(function ($location) use ($my_items, $found_locations) { + return $location->hasItem() + && !$found_locations->contains($location) + && $location->canAccess($my_items); + }); + $location_sphere[$sphere] = $available_locations; + + $found_items = $available_locations->getItems(); + $found_locations = $found_locations->merge($available_locations); + + $my_items = $my_items->merge($found_items); + } while ($found_items->count() > 0); + + return $location_sphere; + } + + /** + * Get Location in this world by name + * + * @param string $name name of the Location + * + * @return \ALttP\Location + */ + public function getLocation(string $name): Location + { + return $this->locations[$name]; + } + + /** + * Get all the Locations in this Region that do not have an Item assigned + * + * @return \ALttP\Support\LocationCollection + */ + public function getEmptyLocations(): LocationCollection + { + return $this->locations->filter(function ($location) { + return !$location->hasItem(); + }); + } + + /** + * Get all the Locations that contain the requested Item + * + * @param \ALttP\Item|null $item item we are looking for + * + * @return \ALttP\Support\LocationCollection + */ + public function getLocationsWithItem(?Item $item = null): LocationCollection + { + return $this->locations->locationsWithItem($item); + } + + /** + * Get all the Regions that contain the requested Item + * + * @param \ALttP\Item|null $item item we are looking for + * + * @return array + */ + public function getRegionsWithItem(?Item $item = null): array + { + return $this->getLocationsWithItem($item)->getRegions(); + } + + /** + * Set a drop in a PrizePackSlot in a given PrizePack. + * + * @param string $pack the prize pack to set the drop in + * @param int $ind the index of the drop to set + * @param \ALttP\Sprite\Droppable $drop the name of the drop to set + * + * @return void + */ + public function setDrop(string $pack, int $ind, Droppable $drop): void + { + $this->prizepacks[$pack]->getDrops()[$ind]->setDrop($drop); + } + + /** + * Get all the drops in the prize packs as an array. + * + * @return array + */ + public function getAllDrops(): array + { + $drops = []; + foreach ($this->prizepacks as $pack) { + $drops = array_merge($drops, $pack->getDrops()); + } + return $drops; + } + + /** + * Get all the drops that are empty in the prize packs as an array. + * + * @return array + */ + public function getEmptyDropSlots(): array + { + $emptyDrops = []; + foreach ($this->prizepacks as $pack) { + $emptyDrops = array_merge($emptyDrops, $pack->getEmptyDrops()); + } + return $emptyDrops; + } + + /** + * Get all the Shops in all Regions in this world. + * + * @return \ALttP\Support\ShopCollection + */ + public function getShops(): ShopCollection + { + return $this->shops; + } + + /** + * Get Shop in this world by name + * + * @param string $name name of the Shop + * + * @return \ALttP\Shop + */ + public function getShop(string $name): Shop + { + return $this->shops[$name]; + } + + /** + * Get an array of Item's necessary for giving access to more locations as + * well as completing the game. + * + * @return array + */ + public function getAdvancementItems(): array + { + $items = []; + + $max_items = 216 - array_sum($this->config('item.advancement')); + foreach ($this->config('item.advancement') as $item_name => $count) { + $loop = min($this->config('item.count.' . $item_name, $count), $max_items); + for ($i = 0; $i < $loop; ++$i) { + $items[] = $item_name == 'BottleWithRandom' ? $this->getBottle() : Item::get($item_name, $this); + } + } + + return $items; + } + + /** + * Get all the Items to insert into the Locations Available. + * + * @return array + */ + public function getNiceItems(): array + { + $items = []; + + foreach ($this->config('item.nice') as $item_name => $count) { + $loop = min($this->config('item.count.' . $item_name, $count), 216); + for ($i = 0; $i < $loop; ++$i) { + $items[] = $item_name == 'BottleWithRandom' ? $this->getBottle() : Item::get($item_name, $this); + } + } + + return $items; + } + + /** + * Get all the Items to insert into the Locations Available. + * + * @return array + */ + public function getItemPool(): array + { + $items = []; + + foreach ($this->config('item.junk') as $item_name => $count) { + $loop = min($this->config('item.count.' . $item_name, $count), 216); + for ($i = 0; $i < $loop; ++$i) { + $items[] = $item_name == 'BottleWithRandom' ? $this->getBottle() : Item::get($item_name, $this); + } + } + + return $items; + } + + /** + * Get all the Items to insert into the Locations Available. + * + * @return array + */ + public function getDungeonPool(): array + { + $items = []; + + foreach ($this->config('item.dungeon') as $item_name => $count) { + $loop = min($this->config('item.count.' . $item_name, $count), 216); + for ($i = 0; $i < $loop; ++$i) { + $items[] = $item_name === 'BottleWithRandom' ? $this->getBottle() : Item::get($item_name, $this); + } + } + + return $items; + } + + /** + * Get all the drops to insert into the PrizePackSlots Available, should be + * randomly shuffled. + * + * @return array + */ + public function getDropsPool(): array + { + $drops = []; + + foreach ($this->config('item.drop') as $sprite_name => $count) { + $loop = min($this->config('drop.count.' . $sprite_name, $count), 63); + for ($i = 0; $i < $loop; ++$i) { + $drops[] = Sprite::get($sprite_name); + } + } + + return fy_shuffle($drops); + } + + /** + * Get a random bottle item. + * + * @param bool $filled return only a filled bottle + * + * @return \ALttP\Item + */ + public function getBottle(bool $filled = false): Item + { + $bottles = [ + Item::get('Bottle', $this), + Item::get('BottleWithRedPotion', $this), + Item::get('BottleWithGreenPotion', $this), + Item::get('BottleWithBluePotion', $this), + Item::get('BottleWithBee', $this), + Item::get('BottleWithGoldBee', $this), + Item::get('BottleWithFairy', $this), + ]; + + return $bottles[get_random_int($filled ? 1 : 0, count($bottles) - (($this->config('rom.HardMode', 0) > 0) ? 2 : 1))]; + } + + /** + * Set a specific spoiler for this world. + * + * @param array $spoiler spoiler to use + * + * @return void + */ + public function setSpoiler(array $spoiler): void + { + $this->spoiler = $spoiler; + } + + /** + * Get the current spoiler for this seed. + * + * @param array $meta passthrough data to add to meta + * + * @return array + */ + public function getSpoiler(array $meta = []): array + { + if ($this->config('entrances') === 'none') { + if (count($this->pre_collected_items)) { + $i = 0; + foreach ($this->pre_collected_items as $item) { + if ( + $item instanceof Item\Upgrade\Arrow + || $item instanceof Item\Upgrade\Bomb + || $item instanceof Item\Event + ) { + continue; + } + + $location = sprintf("Equipment Slot %s", ++$i); + $this->spoiler['Equipped'][$location] = $item->getTarget()->getName(); + } + } + + foreach ($this->getRegions() as $region) { + $name = $region->getName(); + if (!isset($this->spoiler[$name])) { + $this->spoiler[$name] = []; + } + $region->getLocations()->each(function ($location) use ($name) { + if ( + $location instanceof Location\Prize\Event + || $location instanceof Location\Trade + ) { + return; + } + if ($location->hasItem()) { + $item = $location->getItem(); + $this->spoiler[$name][$location->getName()] = $this->config('rom.genericKeys', false) && $item instanceof Item\Key + ? 'Key' + : $item->getTarget()->getName(); + } else { + $this->spoiler[$name][$location->getName()] = 'Nothing'; + } + }); + } + foreach ($this->getShops() as $shop) { + if ($shop->getActive()) { + $shop_data = [ + 'location' => $shop->getName(), + 'type' => $shop instanceof Shop\TakeAny ? 'Take Any' : 'Shop', + ]; + foreach ($shop->getInventory() as $slot => $item) { + $shop_data["item_$slot"] = [ + 'item' => $item['item']->getName(), + 'price' => $item['price'], + ]; + } + $this->spoiler['Shops'][] = $shop_data; + } + } + $this->spoiler['playthrough'] = (new PlaythroughService)->getPlayThrough($this); + } + + $this->spoiler['meta'] = array_merge($this->spoiler['meta'] ?? [], $meta, [ + 'item_placement' => $this->config('itemPlacement'), + 'item_pool' => $this->config('item.pool'), + 'item_functionality' => $this->config('item.functionality'), + 'dungeon_items' => $this->config('dungeonItems'), + 'logic' => $this->config('logic'), + 'accessibility' => $this->config('accessibility'), + 'rom_mode' => $this->config('rom.logicMode', $this->config('logic')), + 'goal' => $this->config('goal'), + 'build' => Rom::BUILD, + 'mode' => $this->config('mode.state'), + 'weapons' => $this->config('mode.weapons'), + 'world_id' => $this->id, + 'crystals_ganon' => $this->config('crystals.ganon'), + 'crystals_tower' => $this->config('crystals.tower'), + 'tournament' => $this->config('tournament', false), + 'size' => $this->isEnemized() ? 4 : 2, + 'hints' => $this->config('spoil.Hints'), + 'spoilers' => $this->config('spoilers', false), + 'spoilers_ongen' => $this->config('spoilers_ongen', false), + 'enemizer.boss_shuffle' => $this->config('enemizer.bossShuffle'), + 'enemizer.enemy_shuffle' => $this->config('enemizer.enemyShuffle'), + 'enemizer.enemy_damage' => $this->config('enemizer.enemyDamage'), + 'enemizer.enemy_health' => $this->config('enemizer.enemyHealth'), + ]); + + $this->spoiler['Bosses'] = [ + "Eastern Palace" => $this->getRegion('Eastern Palace')->getBoss('')->getName(), + "Desert Palace" => $this->getRegion('Desert Palace')->getBoss('')->getName(), + "Tower Of Hera" => $this->getRegion('Tower of Hera')->getBoss('')->getName(), + "Hyrule Castle" => "Agahnim", + "Palace Of Darkness" => $this->getRegion('Palace of Darkness')->getBoss('')->getName(), + "Swamp Palace" => $this->getRegion('Swamp Palace')->getBoss('')->getName(), + "Skull Woods" => $this->getRegion('Skull Woods')->getBoss('')->getName(), + "Thieves Town" => $this->getRegion('Thieves Town')->getBoss('')->getName(), + "Ice Palace" => $this->getRegion('Ice Palace')->getBoss('')->getName(), + "Misery Mire" => $this->getRegion('Misery Mire')->getBoss('')->getName(), + "Turtle Rock" => $this->getRegion('Turtle Rock')->getBoss('')->getName(), + "Ganons Tower Basement" => $this->getRegion('Ganons Tower')->getBoss('bottom')->getName(), + "Ganons Tower Middle" => $this->getRegion('Ganons Tower')->getBoss('middle')->getName(), + "Ganons Tower Top" => $this->getRegion('Ganons Tower')->getBoss('top')->getName(), + "Ganons Tower" => "Agahnim 2", + "Ganon" => "Ganon" + ]; + + if ($this->config('rom.HardMode') !== null) { + $this->spoiler['meta']['difficulty_mode'] = $this->config('rom.HardMode', 0); + } + + $this->seed->spoiler = json_encode($this->spoiler); + + return $this->spoiler; + } + + /** + * Set an override patch to write to the rom, in case randomization was done + * in an alternate fashion. + * + * @param array $patch patch data to overwrite with + * + * @return void + */ + public function setOverridePatch(array $patch): void + { + $this->override_patch = $patch; + } + + /** + * write the current generated data to the Rom. If an override patch is set + * it will use that instead. + * + * @param \ALttP\Rom $rom Rom to write data to + * @param bool $save save seed record + * + * @return \ALttP\Rom + */ + public function writeToRom(Rom $rom, bool $save = false): Rom + { + if ($this->override_patch !== null) { + foreach ($this->override_patch as $writes) { + foreach ($writes as $address => $bytes) { + $rom->write($address, pack('C*', ...$bytes)); + } + } + + if ($save) { + $this->saveSeedRecord(); + + $this->seed->patch = json_encode($rom->getWriteLog()); + $this->seed->save(); + } + + return $rom; + } + + foreach ($this->texts as $key => $value) { + $rom->setText($key, $value); + } + foreach ($this->credits as $key => $value) { + $rom->setCredit($key, $value); + } + + foreach ($this->getRegions() as $name => $region) { + $region->getLocations()->getNonEmptyLocations()->each(function ($location) use ($rom) { + $location->writeItem($rom); + }); + // Clear out remaining locations if the pool was smaller than number of locations + $region->getLocations()->getEmptyLocations()->each(function ($location) use ($rom) { + $location->setItem(Item::get('Nothing', $this)); + $location->writeItem($rom); + }); + } + + $rom->setGoalRequiredCount($this->config('item.Goal.Required', 0) ?: 0); + $rom->setGoalIcon($this->config('item.Goal.Icon', 'triforce')); + + $rom->setHardMode($this->config('rom.HardMode', 0)); + + $rom->setRupoorValue($this->config('item.value.Rupoor', 0) ?: 0); + + $rom->setGanonAgahnimRng($this->config('rom.GanonAgRNG', 'table')); + + $rom->setTowerCrystalRequirement($this->config('crystals.tower', 7)); + $rom->setGanonCrystalRequirement($this->config('crystals.ganon', 7)); + + // testing features + $rom->setGenericKeys($this->config('rom.genericKeys', false)); + $rom->setupCustomShops($this->getShops()); + $rom->setRupeeArrow($this->config('rom.rupeeBow', false)); + $rom->setLockAgahnimDoorInEscape(true); + $rom->setWishingWellChests(true); + $rom->setWishingWellUpgrade(false); + $rom->setHyliaFairyShop(true); + $rom->setRestrictFairyPonds(true); + $rom->setLimitProgressiveSword( + $this->config('item.overflow.count.Sword', 4), + Item::get($this->config('item.overflow.replacement.Sword', 'TwentyRupees2'), $this)->getBytes()[0] + ); + $rom->setLimitProgressiveShield( + $this->config('item.overflow.count.Shield', 3), + Item::get($this->config('item.overflow.replacement.Shield', 'TwentyRupees2'), $this)->getBytes()[0] + ); + $rom->setLimitProgressiveArmor( + $this->config('item.overflow.count.Armor', 2), + Item::get($this->config('item.overflow.replacement.Armor', 'TwentyRupees2'), $this)->getBytes()[0] + ); + $rom->setLimitBottle( + $this->config('item.overflow.count.Bottle', 4), + Item::get($this->config('item.overflow.replacement.Bottle', 'TwentyRupees2'), $this)->getBytes()[0] + ); + $rom->setLimitProgressiveBow( + $this->config('item.overflow.count.Bow', 2), + Item::get($this->config('item.overflow.replacement.Bow', 'TwentyRupees2'), $this)->getBytes()[0] + ); + + $rom->setSilversEquip('collection'); + $rom->setSubstitutions([ + 0x12, 0x01, 0x35, 0xFF, // lamp -> 5 rupees + 0x51, 0x06, 0x52, 0xFF, // 6 +5 bomb upgrades -> +10 bomb upgrade + 0x53, 0x06, 0x54, 0xFF, // 6 +5 arrow upgrades -> +10 arrow upgrade + 0x58, 0x01, $this->config('rom.rupeeBow', false) ? 0x36 : 0x43, 0xFF, // silver arrows -> 1 arrow + 0x3E, $this->config('item.overflow.count.BossHeartContainer', 10), 0x47, 0xFF, // boss heart -> 20 rupees + 0x17, $this->config('item.overflow.count.PieceOfHeart', 24), 0x47, 0xFF, // piece of heart -> 20 rupees + ]); + + switch ($this->config['goal']) { + case 'triforce-hunt': + $rom->enableTriforceTurnIn(true); + + // no break + case 'pedestal': + $rom->setPyramidHoleOpen(false); + $rom->setGanonInvincible('yes'); + break; + case 'dungeons': + $rom->setPyramidHoleOpen(false); + $rom->setGanonInvincible('dungeons'); + break; + case 'fast_ganon': + $rom->setPyramidHoleOpen(true); + + // no break + default: + $rom->setGanonInvincible('custom'); + } + + if ($this->config('rom.mapOnPickup', false)) { + $green_pendant_region = $this->getLocationsWithItem(Item::get('PendantOfCourage', $this))->first()->getRegion(); + + $rom->setMapRevealSahasrahla($green_pendant_region->getMapReveal()); + + $crystal5_region = $this->getLocationsWithItem(Item::get('Crystal5', $this))->first()->getRegion(); + $crystal6_region = $this->getLocationsWithItem(Item::get('Crystal6', $this))->first()->getRegion(); + + $rom->setMapRevealBombShop($crystal5_region->getMapReveal() | $crystal6_region->getMapReveal()); + } + + $rom->setMapMode($this->config('rom.mapOnPickup', false)); + $rom->setCompassMode($this->config('rom.dungeonCount', 'off')); + $rom->setFreeItemTextMode($this->config('rom.freeItemText', 0x00)); + $rom->setFreeItemMenu($this->config('rom.freeItemMenu', 0x00)); + $rom->setDiggingGameRng(get_random_int(1, 30)); + + $rom->writeRNGBlock(function () { + return get_random_int(0, 0x100); + }); + + $this->writePrizePacksToRom($rom); + + $rom->setPyramidFairyChests($this->config('region.swordsInPool', true)); + $rom->setSmithyQuickItemGive($this->config('region.swordsInPool', true)); + + $rom->setGameState($this->config('mode.state')); + $rom->setSwordlessMode($this->config('mode.weapons') === 'swordless'); + + if (!$this->getLocation("Link's Uncle")->getItem() instanceof Item\Sword) { + $rom->removeUnclesSword(); + } + if ( + !$this->getLocation("Link's Uncle")->getItem() instanceof Item\Shield + || !$this->getLocation("Link's Uncle")->hasItem(Item::get('L1SwordAndShield', $this)) + ) { + $rom->removeUnclesShield(); + } + + $rom->setStartingEquipment($this->pre_collected_items); + $rom->setCapacityUpgradeFills([ + $this->config('item.value.BombUpgrade5', 50), + $this->config('item.value.BombUpgrade10', 50), + $this->config('item.value.ArrowUpgrade5', 70), + $this->config('item.value.ArrowUpgrade10', 70), + ]); + + // currently has to be after compass mode, as this will override compass mode. + $rom->setClockMode($this->config('rom.timerMode', 'off')); + + $rom->setBlueClock($this->config('item.value.BlueClock', 0) ?: 0); + $rom->setRedClock($this->config('item.value.RedClock', 0) ?: 0); + $rom->setGreenClock($this->config('item.value.GreenClock', 0) ?: 0); + $rom->setStartingTime($this->config('rom.timerStart', 0) ?: 0); + + switch ($this->config('rom.logicMode', $this->config['logic'])) { + case 'MajorGlitches': + case 'None': + $type_flag = 'G'; + $rom->setSwampWaterLevel(false); + $rom->setPreAgahnimDarkWorldDeathInDungeon(false); + $rom->setSaveAndQuitFromBossRoom(true); + $rom->setWorldOnAgahnimDeath(false); + $rom->setRandomizerSeedType('MajorGlitches'); + $rom->setWarningFlags(bindec('01100000')); + $rom->setPODEGfix(false); + break; + case 'OverworldGlitches': + $type_flag = 'S'; + $rom->setPreAgahnimDarkWorldDeathInDungeon(false); + $rom->setSaveAndQuitFromBossRoom(true); + $rom->setWorldOnAgahnimDeath(true); + $rom->setRandomizerSeedType('OverworldGlitches'); + $rom->setWarningFlags(bindec('01000000')); + $rom->setPODEGfix(false); + break; + case 'NoGlitches': + default: + $type_flag = 'C'; + $rom->setSaveAndQuitFromBossRoom(true); + $rom->setWorldOnAgahnimDeath(true); + $rom->setPODEGfix(true); + break; + } + + $rom->setGanonsTowerOpen($this->config('crystals.tower') === 0); + + $rom->setGameType('item'); + + $rom->writeCredits(); + $rom->writeText(); + + if ($save) { + $hash = $this->saveSeedRecord(); + + $rom->setSeedString(str_pad(sprintf("VT %s", $hash), 21, ' ')); + + $rom->setStartScreenHash($this->seed->hashArray()); + + $this->seed->patch = json_encode($rom->getWriteLog()); + $this->seed->save(); + } + + return $rom; + } + + /** + * This is a quick hack to get prizes shuffled, will adjust later when we model sprites. + * this now also handles prize pull trees. + * + * @param \ALttP\Rom $rom Rom to write data to + * + * @return void + */ + public function writePrizePacksToRom(Rom $rom): void + { + $emptyDrops = $this->getEmptyDropSlots(); + $drop_pool = $this->getDropsPool(); + + for ($i = 0; $i < count($emptyDrops); $i++) { + $curDrop = $drop_pool[$i]; + $emptyDrops[$i]->setDrop($curDrop); + } + + $drop_bytes = array_map(function ($prize) { + return $prize->getDrop()->getBytes()[0]; + }, $this->getAllDrops()); + + // hard+ does not allow fairies/full magics + if ($this->config('rom.HardMode', 0) >= 2) { + $drop_bytes = str_replace([0xE0, 0xE3], [0xDF, 0xD8], $drop_bytes); + } + + if ($this->config('rom.rupeeBow', false)) { + $drop_bytes = str_replace([0xE1, 0xE2], [0xDA, 0xDB], $drop_bytes); + $rom->setOverworldDigPrizes([ + 0xB2, 0xD8, 0xD8, 0xD8, + 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, + 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, + 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, + 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, + 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, + 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, + 0xDE, 0xDE, 0xDE, 0xDE, 0xDE, + 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, + 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, + 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, + 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, + 0xE3, 0xE3, 0xE3, 0xE3, 0xE3, + ]); + } + + // write to prize packs + $rom->write(0x37A78, pack('C*', ...array_slice($drop_bytes, 0, 56))); + + // write to trees + $rom->setPullTreePrizes($drop_bytes[56], $drop_bytes[57], $drop_bytes[58]); + + // write to prize crab + $rom->setRupeeCrabPrizes($drop_bytes[59], $drop_bytes[60]); + + // write to stunned + $rom->setStunnedSpritePrize($drop_bytes[61]); + + // write to saved fish + $rom->setFishSavePrize($drop_bytes[62]); + } + + /** + * Update the Texts array for writing. + * + * @param string $key where to write the text + * @param string $value the text to write + * + * @return void + */ + public function setText(string $key, string $value): void + { + $this->texts[$key] = $value; + } + + /** + * Update the Credits array for writing. + * + * @param string $key where to write the text + * @param string $value the text to write + * + * @return void + */ + public function setCredit(string $key, string $value): void + { + $this->credits[$key] = $value; + } + + /** + * Save a seed record to DB. + * + * @return string hash of record + */ + public function saveSeedRecord(): string + { + $this->seed->logic = Randomizer::LOGIC; + $this->seed->game_mode = $this->config['logic']; + $this->seed->build = Rom::BUILD; + $this->seed->save(); + + return $this->seed->hash; + } + + /** + * Get the current Seed record. + * + * @return \ALttP\Seed + */ + public function getSeedRecord(): Seed + { + return $this->seed; + } + + /** + * Update patch of seed record to DB. + * + * @param array $patch new patch that will be applies + * + * @return void + */ + public function updateSeedRecordPatch(array $patch): void + { + $this->seed->patch = json_encode($patch); + $this->seed->save(); + } + + /** + * Determine if this world requires Enemizer. + * + * @return bool + */ + public function isEnemized(): bool + { + return $this->config('enemizer.bossShuffle') != 'none' + || $this->config('enemizer.enemyShuffle') != 'none' + || $this->config('enemizer.enemyDamage') != 'default' + || $this->config('enemizer.enemyHealth') != 'default'; + } } diff --git a/app/World/Inverted.php b/app/World/Inverted.php index 5ce051b41..df936c616 100644 --- a/app/World/Inverted.php +++ b/app/World/Inverted.php @@ -1,54 +1,62 @@ -difficulty = $difficulty; - $this->variation = $variation; - $this->logic = in_array($logic, ['None', 'OverworldGlitches', 'NoGlitches']) ? $logic : 'NoGlitches'; // currently only support for No Glicthes and None logic - $this->goal = $goal; +class Inverted extends World +{ + /** + * Create a new world and initialize all of the Regions within it + * + * @param int $id Id of this world + * @param array $config config for this world + * + * @return void + */ + public function __construct(int $id = 0, array $config = []) + { + $config['logic'] = in_array($config['logic'], ['None', 'OverworldGlitches', 'NoGlitches']) + ? $config['logic'] + : 'NoGlitches'; + $this->config = array_merge([ + 'difficulty' => 'normal', + 'logic' => 'NoGlitches', + 'goal' => 'ganon', + ], $config); + + $this->id = $id; - $this->regions = [ - 'North East Light World' => new Region\Inverted\LightWorld\NorthEast($this), - 'North West Light World' => new Region\Inverted\LightWorld\NorthWest($this), - 'South Light World' => new Region\Inverted\LightWorld\South($this), - 'Escape' => new Region\Inverted\HyruleCastleEscape($this), - 'Eastern Palace' => new Region\Inverted\EasternPalace($this), - 'Desert Palace' => new Region\Inverted\DesertPalace($this), - 'West Death Mountain' => new Region\Inverted\LightWorld\DeathMountain\West($this), - 'East Death Mountain' => new Region\Inverted\LightWorld\DeathMountain\East($this), - 'Tower of Hera' => new Region\Inverted\TowerOfHera($this), - 'Hyrule Castle Tower' => new Region\Inverted\HyruleCastleTower($this), - 'East Dark World Death Mountain' => new Region\Inverted\DarkWorld\DeathMountain\East($this), - 'West Dark World Death Mountain' => new Region\Inverted\DarkWorld\DeathMountain\West($this), - 'North East Dark World' => new Region\Inverted\DarkWorld\NorthEast($this), - 'North West Dark World' => new Region\Inverted\DarkWorld\NorthWest($this), - 'South Dark World' => new Region\Inverted\DarkWorld\South($this), - 'Mire' => new Region\Inverted\DarkWorld\Mire($this), - 'Palace of Darkness' => new Region\Inverted\PalaceOfDarkness($this), - 'Swamp Palace' => new Region\Inverted\SwampPalace($this), - 'Skull Woods' => new Region\Inverted\SkullWoods($this), - 'Thieves Town' => new Region\Inverted\ThievesTown($this), - 'Ice Palace' => new Region\Inverted\IcePalace($this), - 'Misery Mire' => new Region\Inverted\MiseryMire($this), - 'Turtle Rock' => new Region\Inverted\TurtleRock($this), - 'Ganons Tower' => new Region\Inverted\GanonsTower($this), - 'Medallions' => new Region\Standard\Medallions($this), - 'Fountains' => new Region\Standard\Fountains($this), - ]; + $this->regions = [ + 'North East Light World' => new Region\Inverted\LightWorld\NorthEast($this), + 'North West Light World' => new Region\Inverted\LightWorld\NorthWest($this), + 'South Light World' => new Region\Inverted\LightWorld\South($this), + 'Escape' => new Region\Inverted\HyruleCastleEscape($this), + 'Eastern Palace' => new Region\Inverted\EasternPalace($this), + 'Desert Palace' => new Region\Inverted\DesertPalace($this), + 'West Death Mountain' => new Region\Inverted\LightWorld\DeathMountain\West($this), + 'East Death Mountain' => new Region\Inverted\LightWorld\DeathMountain\East($this), + 'Tower of Hera' => new Region\Inverted\TowerOfHera($this), + 'Hyrule Castle Tower' => new Region\Inverted\HyruleCastleTower($this), + 'East Dark World Death Mountain' => new Region\Inverted\DarkWorld\DeathMountain\East($this), + 'West Dark World Death Mountain' => new Region\Inverted\DarkWorld\DeathMountain\West($this), + 'North East Dark World' => new Region\Inverted\DarkWorld\NorthEast($this), + 'North West Dark World' => new Region\Inverted\DarkWorld\NorthWest($this), + 'South Dark World' => new Region\Inverted\DarkWorld\South($this), + 'Mire' => new Region\Inverted\DarkWorld\Mire($this), + 'Palace of Darkness' => new Region\Inverted\PalaceOfDarkness($this), + 'Swamp Palace' => new Region\Inverted\SwampPalace($this), + 'Skull Woods' => new Region\Inverted\SkullWoods($this), + 'Thieves Town' => new Region\Inverted\ThievesTown($this), + 'Ice Palace' => new Region\Inverted\IcePalace($this), + 'Misery Mire' => new Region\Inverted\MiseryMire($this), + 'Turtle Rock' => new Region\Inverted\TurtleRock($this), + 'Ganons Tower' => new Region\Inverted\GanonsTower($this), + 'Medallions' => new Region\Standard\Medallions($this), + 'Fountains' => new Region\Standard\Fountains($this), + ]; - parent::__construct($difficulty, $this->logic, $goal, $variation); - } + parent::__construct($id, $config); + } } diff --git a/app/World/Open.php b/app/World/Open.php index 116370bfe..1b605e323 100644 --- a/app/World/Open.php +++ b/app/World/Open.php @@ -1,54 +1,58 @@ -difficulty = $difficulty; - $this->variation = $variation; - $this->logic = $logic; - $this->goal = $goal; +class Open extends World +{ + /** + * Create a new world and initialize all of the Regions within it + * + * @param int $id Id of this world + * @param array $config config for this world + * + * @return void + */ + public function __construct(int $id = 0, array $config = []) + { + $this->id = $id; + $this->config = array_merge([ + 'difficulty' => 'normal', + 'logic' => 'NoGlitches', + 'goal' => 'ganon', + ], $config); - $this->regions = [ - 'North East Light World' => new Region\Standard\LightWorld\NorthEast($this), - 'North West Light World' => new Region\Standard\LightWorld\NorthWest($this), - 'South Light World' => new Region\Standard\LightWorld\South($this), - 'Escape' => new Region\Open\HyruleCastleEscape($this), - 'Eastern Palace' => new Region\Standard\EasternPalace($this), - 'Desert Palace' => new Region\Standard\DesertPalace($this), - 'West Death Mountain' => new Region\Standard\LightWorld\DeathMountain\West($this), - 'East Death Mountain' => new Region\Standard\LightWorld\DeathMountain\East($this), - 'Tower of Hera' => new Region\Standard\TowerOfHera($this), - 'Hyrule Castle Tower' => new Region\Standard\HyruleCastleTower($this), - 'East Dark World Death Mountain' => new Region\Standard\DarkWorld\DeathMountain\East($this), - 'West Dark World Death Mountain' => new Region\Standard\DarkWorld\DeathMountain\West($this), - 'North East Dark World' => new Region\Standard\DarkWorld\NorthEast($this), - 'North West Dark World' => new Region\Standard\DarkWorld\NorthWest($this), - 'South Dark World' => new Region\Standard\DarkWorld\South($this), - 'Mire' => new Region\Standard\DarkWorld\Mire($this), - 'Palace of Darkness' => new Region\Standard\PalaceOfDarkness($this), - 'Swamp Palace' => new Region\Standard\SwampPalace($this), - 'Skull Woods' => new Region\Standard\SkullWoods($this), - 'Thieves Town' => new Region\Standard\ThievesTown($this), - 'Ice Palace' => new Region\Standard\IcePalace($this), - 'Misery Mire' => new Region\Standard\MiseryMire($this), - 'Turtle Rock' => new Region\Standard\TurtleRock($this), - 'Ganons Tower' => new Region\Standard\GanonsTower($this), - 'Medallions' => new Region\Standard\Medallions($this), - 'Fountains' => new Region\Standard\Fountains($this), - ]; + $this->regions = [ + 'North East Light World' => new Region\Standard\LightWorld\NorthEast($this), + 'North West Light World' => new Region\Standard\LightWorld\NorthWest($this), + 'South Light World' => new Region\Standard\LightWorld\South($this), + 'Escape' => new Region\Open\HyruleCastleEscape($this), + 'Eastern Palace' => new Region\Standard\EasternPalace($this), + 'Desert Palace' => new Region\Standard\DesertPalace($this), + 'West Death Mountain' => new Region\Standard\LightWorld\DeathMountain\West($this), + 'East Death Mountain' => new Region\Standard\LightWorld\DeathMountain\East($this), + 'Tower of Hera' => new Region\Standard\TowerOfHera($this), + 'Hyrule Castle Tower' => new Region\Standard\HyruleCastleTower($this), + 'East Dark World Death Mountain' => new Region\Standard\DarkWorld\DeathMountain\East($this), + 'West Dark World Death Mountain' => new Region\Standard\DarkWorld\DeathMountain\West($this), + 'North East Dark World' => new Region\Standard\DarkWorld\NorthEast($this), + 'North West Dark World' => new Region\Standard\DarkWorld\NorthWest($this), + 'South Dark World' => new Region\Standard\DarkWorld\South($this), + 'Mire' => new Region\Standard\DarkWorld\Mire($this), + 'Palace of Darkness' => new Region\Standard\PalaceOfDarkness($this), + 'Swamp Palace' => new Region\Standard\SwampPalace($this), + 'Skull Woods' => new Region\Standard\SkullWoods($this), + 'Thieves Town' => new Region\Standard\ThievesTown($this), + 'Ice Palace' => new Region\Standard\IcePalace($this), + 'Misery Mire' => new Region\Standard\MiseryMire($this), + 'Turtle Rock' => new Region\Standard\TurtleRock($this), + 'Ganons Tower' => new Region\Standard\GanonsTower($this), + 'Medallions' => new Region\Standard\Medallions($this), + 'Fountains' => new Region\Standard\Fountains($this), + ]; - parent::__construct($difficulty, $logic, $goal, $variation); - } + parent::__construct($id, $config); + } } diff --git a/app/World/Retro.php b/app/World/Retro.php new file mode 100644 index 000000000..36acca1ad --- /dev/null +++ b/app/World/Retro.php @@ -0,0 +1,25 @@ + true, + 'rom.genericKeys' => true, + 'region.takeAnys' => true, + 'region.wildKeys' => true, + ])); + } +} diff --git a/app/World/Standard.php b/app/World/Standard.php index ce6257957..7530ecba0 100644 --- a/app/World/Standard.php +++ b/app/World/Standard.php @@ -1,54 +1,58 @@ -difficulty = $difficulty; - $this->variation = $variation; - $this->logic = $logic; - $this->goal = $goal; +class Standard extends World +{ + /** + * Create a new world and initialize all of the Regions within it + * + * @param int $id Id of this world + * @param array $config config for this world + * + * @return void + */ + public function __construct(int $id = 0, array $config = []) + { + $this->id = $id; + $this->config = array_merge([ + 'difficulty' => 'normal', + 'logic' => 'NoGlitches', + 'goal' => 'ganon', + ], $config); - $this->regions = [ - 'North East Light World' => new Region\Standard\LightWorld\NorthEast($this), - 'North West Light World' => new Region\Standard\LightWorld\NorthWest($this), - 'South Light World' => new Region\Standard\LightWorld\South($this), - 'Escape' => new Region\Standard\HyruleCastleEscape($this), - 'Eastern Palace' => new Region\Standard\EasternPalace($this), - 'Desert Palace' => new Region\Standard\DesertPalace($this), - 'West Death Mountain' => new Region\Standard\LightWorld\DeathMountain\West($this), - 'East Death Mountain' => new Region\Standard\LightWorld\DeathMountain\East($this), - 'Tower of Hera' => new Region\Standard\TowerOfHera($this), - 'Hyrule Castle Tower' => new Region\Standard\HyruleCastleTower($this), - 'East Dark World Death Mountain' => new Region\Standard\DarkWorld\DeathMountain\East($this), - 'West Dark World Death Mountain' => new Region\Standard\DarkWorld\DeathMountain\West($this), - 'North East Dark World' => new Region\Standard\DarkWorld\NorthEast($this), - 'North West Dark World' => new Region\Standard\DarkWorld\NorthWest($this), - 'South Dark World' => new Region\Standard\DarkWorld\South($this), - 'Mire' => new Region\Standard\DarkWorld\Mire($this), - 'Palace of Darkness' => new Region\Standard\PalaceOfDarkness($this), - 'Swamp Palace' => new Region\Standard\SwampPalace($this), - 'Skull Woods' => new Region\Standard\SkullWoods($this), - 'Thieves Town' => new Region\Standard\ThievesTown($this), - 'Ice Palace' => new Region\Standard\IcePalace($this), - 'Misery Mire' => new Region\Standard\MiseryMire($this), - 'Turtle Rock' => new Region\Standard\TurtleRock($this), - 'Ganons Tower' => new Region\Standard\GanonsTower($this), - 'Medallions' => new Region\Standard\Medallions($this), - 'Fountains' => new Region\Standard\Fountains($this), - ]; + $this->regions = [ + 'North East Light World' => new Region\Standard\LightWorld\NorthEast($this), + 'North West Light World' => new Region\Standard\LightWorld\NorthWest($this), + 'South Light World' => new Region\Standard\LightWorld\South($this), + 'Escape' => new Region\Standard\HyruleCastleEscape($this), + 'Eastern Palace' => new Region\Standard\EasternPalace($this), + 'Desert Palace' => new Region\Standard\DesertPalace($this), + 'West Death Mountain' => new Region\Standard\LightWorld\DeathMountain\West($this), + 'East Death Mountain' => new Region\Standard\LightWorld\DeathMountain\East($this), + 'Tower of Hera' => new Region\Standard\TowerOfHera($this), + 'Hyrule Castle Tower' => new Region\Standard\HyruleCastleTower($this), + 'East Dark World Death Mountain' => new Region\Standard\DarkWorld\DeathMountain\East($this), + 'West Dark World Death Mountain' => new Region\Standard\DarkWorld\DeathMountain\West($this), + 'North East Dark World' => new Region\Standard\DarkWorld\NorthEast($this), + 'North West Dark World' => new Region\Standard\DarkWorld\NorthWest($this), + 'South Dark World' => new Region\Standard\DarkWorld\South($this), + 'Mire' => new Region\Standard\DarkWorld\Mire($this), + 'Palace of Darkness' => new Region\Standard\PalaceOfDarkness($this), + 'Swamp Palace' => new Region\Standard\SwampPalace($this), + 'Skull Woods' => new Region\Standard\SkullWoods($this), + 'Thieves Town' => new Region\Standard\ThievesTown($this), + 'Ice Palace' => new Region\Standard\IcePalace($this), + 'Misery Mire' => new Region\Standard\MiseryMire($this), + 'Turtle Rock' => new Region\Standard\TurtleRock($this), + 'Ganons Tower' => new Region\Standard\GanonsTower($this), + 'Medallions' => new Region\Standard\Medallions($this), + 'Fountains' => new Region\Standard\Fountains($this), + ]; - parent::__construct($difficulty, $logic, $goal, $variation); - } + parent::__construct($id, $config); + } } diff --git a/artisan b/artisan index df630d0d6..013cacbdd 100644 --- a/artisan +++ b/artisan @@ -13,7 +13,7 @@ | */ -require __DIR__.'/bootstrap/autoload.php'; +require __DIR__.'/vendor/autoload.php'; $app = require_once __DIR__.'/bootstrap/app.php'; diff --git a/bootstrap/app.php b/bootstrap/app.php index 2cf7e7ff5..a423c920d 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -12,7 +12,7 @@ */ $app = new Illuminate\Foundation\Application( - realpath(__DIR__.'/../') + dirname(__DIR__) ); /* @@ -27,18 +27,18 @@ */ $app->singleton( - Illuminate\Contracts\Http\Kernel::class, - ALttP\Http\Kernel::class + Illuminate\Contracts\Http\Kernel::class, + ALttP\Http\Kernel::class ); $app->singleton( - Illuminate\Contracts\Console\Kernel::class, - ALttP\Console\Kernel::class + Illuminate\Contracts\Console\Kernel::class, + ALttP\Console\Kernel::class ); $app->singleton( - Illuminate\Contracts\Debug\ExceptionHandler::class, - ALttP\Exceptions\Handler::class + Illuminate\Contracts\Debug\ExceptionHandler::class, + ALttP\Exceptions\Handler::class ); /* diff --git a/bootstrap/autoload.php b/bootstrap/autoload.php deleted file mode 100644 index d6faad76a..000000000 --- a/bootstrap/autoload.php +++ /dev/null @@ -1,34 +0,0 @@ -=7.2.18", + "ext-bcmath": "*", + "doctrine/dbal": "^2.5", + "ezyang/htmlpurifier": "^4.9", + "graham-campbell/markdown": "^11.0", + "hashids/hashids": "^4.0", + "laravel/framework": "^5.8", + "laravel/horizon": "^3.1", + "laravel/passport": "^7.2", + "laravel/tinker": "^1.0", + "league/flysystem-aws-s3-v3": "^1.0", + "league/flysystem-cached-adapter": "^1.0", + "martinlindhe/laravel-vue-i18n-generator": "^0.1.35", + "sentry/sentry": "^2.0", + "sentry/sentry-laravel": "^1.0", + "z3/enemizer": "6.0.29", + "z3/entrancerandomizer": "^0.6.3" + }, + "require-dev": { + "beyondcode/laravel-dump-server": "^1.0", + "filp/whoops": "~2.0", + "fzaninotto/faker": "~1.4", + "mockery/mockery": "^1.2", + "mohammedmanssour/form-request-tester": "dev-master", + "nunomaduro/collision": "^3.0", + "nunomaduro/larastan": "^0.3.16", + "nunomaduro/phpinsights": "^1.3", + "phpunit/phpunit": "^8.1", + "symfony/css-selector": "^4.2", + "symfony/dom-crawler": "^4.2" + }, + "repositories": [ + { + "type": "package", + "package": { + "name": "z3/enemizer", + "version": "6.0.29", + "source": { + "url": "https://github.com/Zarby89/Enemizer", + "type": "git", + "reference": "tags/6.0.29" } - ], - "minimum-stability": "dev", - "prefer-stable": true, - "require": { - "php": ">=7.2.0", - "ext-bcmath": "*", - "codedungeon/phpunit-result-printer": "^0.20.1", - "doctrine/dbal": "^2.5", - "ezyang/htmlpurifier": "^4.9", - "graham-campbell/markdown": "^10.0", - "hashids/hashids": "^2.0", - "laravel/dusk": "^3.0", - "laravel/framework": "5.6.*", - "laravel/horizon": "^1.4", - "laravel/tinker": "^1.0", - "league/flysystem-aws-s3-v3": "^1.0", - "league/flysystem-cached-adapter": "^1.0", - "league/flysystem-rackspace": "^1.0", - "martinlindhe/laravel-vue-i18n-generator": "0.1.28.1", - "sentry/sentry": "^1.8", - "sentry/sentry-laravel": "^0.8.0", - "wnx/laravel-stats": "^1.7", - "z3/enemizer": "6.0.29", - "z3/entrancerandomizer": "^0.6.2" - }, - "require-dev": { - "filp/whoops": "~2.0", - "fzaninotto/faker": "~1.4", - "mockery/mockery": "0.9.*", - "nunomaduro/collision": "^2.0", - "phpunit/phpunit": "~7.0", - "symfony/css-selector": "3.1.*", - "symfony/dom-crawler": "3.1.*" + } }, - "repositories": [ - { - "type": "package", - "package": { - "name": "z3/enemizer", - "version": "6.0.29", - "source": { - "url": "https://github.com/Zarby89/Enemizer", - "type": "git", - "reference": "tags/6.0.29" - } - } - }, - { - "type": "package", - "package": { - "name": "z3/entrancerandomizer", - "version": "0.6.2", - "source": { - "url": "https://github.com/AmazingAmpharos/ALttPEntranceRandomizer", - "type": "git", - "reference": "tags/0.6.2" - } - } - }, - { - "type": "package", - "package": { - "name": "martinlindhe/laravel-vue-i18n-generator", - "version": "0.1.28.1", - "source": { - "url": "https://github.com/sporchia/laravel-vue-i18n-generator", - "type": "git", - "reference": "tags/0.1.28.1" - }, - "autoload": { - "psr-4": { - "MartinLindhe\\VueInternationalizationGenerator\\": "src/" - } - }, - "extra": { - "laravel": { - "providers": [ - "MartinLindhe\\VueInternationalizationGenerator\\GeneratorProvider" - ] - } - } - } + { + "type": "package", + "package": { + "name": "z3/entrancerandomizer", + "version": "0.6.3", + "source": { + "url": "https://github.com/AmazingAmpharos/ALttPEntranceRandomizer", + "type": "git", + "reference": "tags/0.6.3-pre5" } + } + } + ], + "autoload": { + "classmap": [ + "database" ], - "autoload": { - "classmap": [ - "database" - ], - "psr-4": { - "ALttP\\": "app/" - } - }, - "autoload-dev": { - "classmap": [ - "tests/TestCase.php" - ], - "psr-4": { - "Tests\\": "tests/" - } - }, - "scripts": { - "post-root-package-install": [ - "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" - ], - "post-create-project-cmd": [ - "php artisan key:generate" - ], - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover" - ] - }, - "config": { - "optimize-autoloader": true, - "preferred-install": "dist", - "sort-packages": true - }, - "extra": { - "laravel": { - "dont-discover": [ - "laravel/dusk" - ] - } + "psr-4": { + "ALttP\\": "app/" + } + }, + "autoload-dev": { + "classmap": [ + "tests/TestCase.php" + ], + "psr-4": { + "Tests\\": "tests/" } + }, + "scripts": { + "post-root-package-install": [ + "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "php artisan key:generate" + ], + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover" + ], + "test": [ + "phpunit --colors=always --coverage-clover=./report/coverage.clover --coverage-html=./report" + ], + "cloc": [ + "cloc --exclude-dir=node_modules,vendor,report,storage,bin,public --not-match-f=\"(lock|generated)\" ." + ] + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + } } diff --git a/composer.lock b/composer.lock index 4096292d8..54b5c23d2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,73 +4,27 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9ee915857c74f23d4b28c3e7513e8f11", + "content-hash": "67f26b55affe5ef9d56603435ff3a654", "packages": [ - { - "name": "2bj/phanybar", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/2bj/Phanybar.git", - "reference": "88ff671e18f30c2047a34f8cf2465a7ff93c819b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/2bj/Phanybar/zipball/88ff671e18f30c2047a34f8cf2465a7ff93c819b", - "reference": "88ff671e18f30c2047a34f8cf2465a7ff93c819b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "bin": [ - "bin/phanybar" - ], - "type": "library", - "autoload": { - "psr-4": { - "Bakyt\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bakyt Turgumbaev", - "email": "dev2bj@gmail.com" - } - ], - "description": "Control AnyBar from your php", - "keywords": [ - "anybar", - "phanybar" - ], - "time": "2015-03-06T12:14:28+00:00" - }, { "name": "aws/aws-sdk-php", - "version": "3.68.1", + "version": "3.111.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "2986beb07a14bcde94608e940ee7e5cba1ed4e38" + "reference": "5e80d4bec17e197be494af4f38e1fcd17f728138" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2986beb07a14bcde94608e940ee7e5cba1ed4e38", - "reference": "2986beb07a14bcde94608e940ee7e5cba1ed4e38", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/5e80d4bec17e197be494af4f38e1fcd17f728138", + "reference": "5e80d4bec17e197be494af4f38e1fcd17f728138", "shasum": "" }, "require": { "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "ext-spl": "*", - "guzzlehttp/guzzle": "^5.3.1|^6.2.1", + "guzzlehttp/guzzle": "^5.3.3|^6.2.1", "guzzlehttp/promises": "~1.0", "guzzlehttp/psr7": "^1.4.1", "mtdowling/jmespath.php": "~2.2", @@ -83,15 +37,19 @@ "doctrine/cache": "~1.4", "ext-dom": "*", "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", "nette/neon": "^2.3", "phpunit/phpunit": "^4.8.35|^5.4.3", - "psr/cache": "^1.0" + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", "doctrine/cache": "To use the DoctrineCacheAdapter", "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages" + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" }, "type": "library", "extra": { @@ -129,20 +87,20 @@ "s3", "sdk" ], - "time": "2018-10-02T21:11:29+00:00" + "time": "2019-09-11T18:16:47+00:00" }, { "name": "cakephp/chronos", - "version": "1.2.2", + "version": "1.2.8", "source": { "type": "git", "url": "https://github.com/cakephp/chronos.git", - "reference": "30f5b26bcf76a5e53ecc274700ad1ec49dc05567" + "reference": "0292f06e8cc23fc82f0574889da2d8bf27b613c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/chronos/zipball/30f5b26bcf76a5e53ecc274700ad1ec49dc05567", - "reference": "30f5b26bcf76a5e53ecc274700ad1ec49dc05567", + "url": "https://api.github.com/repos/cakephp/chronos/zipball/0292f06e8cc23fc82f0574889da2d8bf27b613c1", + "reference": "0292f06e8cc23fc82f0574889da2d8bf27b613c1", "shasum": "" }, "require": { @@ -186,30 +144,36 @@ "datetime", "time" ], - "time": "2018-07-11T18:51:56+00:00" + "time": "2019-06-17T15:19:18+00:00" }, { - "name": "codedungeon/php-cli-colors", - "version": "1.10.7", + "name": "clue/stream-filter", + "version": "v1.4.1", "source": { "type": "git", - "url": "https://github.com/mikeerickson/php-cli-colors.git", - "reference": "5649ef76ec0c9ed626e95bf40fdfaf4b8efcf79b" + "url": "https://github.com/clue/php-stream-filter.git", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mikeerickson/php-cli-colors/zipball/5649ef76ec0c9ed626e95bf40fdfaf4b8efcf79b", - "reference": "5649ef76ec0c9ed626e95bf40fdfaf4b8efcf79b", + "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", + "reference": "5a58cc30a8bd6a4eb8f856adf61dd3e013f53f71", "shasum": "" }, + "require": { + "php": ">=5.3" + }, "require-dev": { - "phpunit/phpunit": ">=5.2" + "phpunit/phpunit": "^5.0 || ^4.8" }, "type": "library", "autoload": { "psr-4": { - "Codedungeon\\PHPCliColors\\": "src/" - } + "Clue\\StreamFilter\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -217,50 +181,53 @@ ], "authors": [ { - "name": "Mike Erickson", - "email": "codedungeon@gmail.com" + "name": "Christian Lück", + "email": "christian@lueck.tv" } ], - "description": "PHP Package for using color output in CLI commands", - "homepage": "https://github.com/mikeerickson/php-cli-colors", + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/php-stream-filter", "keywords": [ - "color", - "colors", - "composer", - "package", - "php" + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" ], - "time": "2018-05-17T01:34:14+00:00" + "time": "2019-04-09T12:31:48+00:00" }, { - "name": "codedungeon/phpunit-result-printer", - "version": "0.20.3", + "name": "defuse/php-encryption", + "version": "v2.2.1", "source": { "type": "git", - "url": "https://github.com/mikeerickson/phpunit-pretty-result-printer.git", - "reference": "3d5773927969ab71ba5acd8bb90c3a183c406118" + "url": "https://github.com/defuse/php-encryption.git", + "reference": "0f407c43b953d571421e0020ba92082ed5fb7620" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mikeerickson/phpunit-pretty-result-printer/zipball/3d5773927969ab71ba5acd8bb90c3a183c406118", - "reference": "3d5773927969ab71ba5acd8bb90c3a183c406118", + "url": "https://api.github.com/repos/defuse/php-encryption/zipball/0f407c43b953d571421e0020ba92082ed5fb7620", + "reference": "0f407c43b953d571421e0020ba92082ed5fb7620", "shasum": "" }, "require": { - "2bj/phanybar": "^1.0", - "codedungeon/php-cli-colors": "^1.10.2", - "hassankhan/config": "^0.11.2", - "php": "^7.1", - "symfony/yaml": "^2.7|^3.0|^4.0" + "ext-openssl": "*", + "paragonie/random_compat": ">= 2", + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "7.1.1", - "spatie/phpunit-watcher": "^1.6" + "nikic/php-parser": "^2.0|^3.0|^4.0", + "phpunit/phpunit": "^4|^5" }, + "bin": [ + "bin/generate-defuse-key" + ], "type": "library", "autoload": { "psr-4": { - "Codedungeon\\PHPUnitPrettyResultPrinter\\": "src/" + "Defuse\\Crypto\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -269,21 +236,30 @@ ], "authors": [ { - "name": "Mike Erickson", - "email": "codedungeon@gmail.com" + "name": "Taylor Hornby", + "email": "taylor@defuse.ca", + "homepage": "https://defuse.ca/" + }, + { + "name": "Scott Arciszewski", + "email": "info@paragonie.com", + "homepage": "https://paragonie.com" } ], - "description": "PHPUnit Pretty Result Printer", + "description": "Secure PHP Encryption Library", "keywords": [ - "TDD", - "composer", - "package", - "phpunit", - "printer", - "result-printer", - "testing" - ], - "time": "2018-09-20T03:43:34+00:00" + "aes", + "authenticated encryption", + "cipher", + "crypto", + "cryptography", + "encrypt", + "encryption", + "openssl", + "security", + "symmetric key cryptography" + ], + "time": "2018-07-24T23:27:56+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -395,16 +371,16 @@ }, { "name": "doctrine/dbal", - "version": "v2.8.0", + "version": "v2.9.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "5140a64c08b4b607b9bedaae0cedd26f04a0e621" + "reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5140a64c08b4b607b9bedaae0cedd26f04a0e621", - "reference": "5140a64c08b4b607b9bedaae0cedd26f04a0e621", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9", + "reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9", "shasum": "" }, "require": { @@ -414,11 +390,10 @@ "php": "^7.1" }, "require-dev": { - "doctrine/coding-standard": "^4.0", + "doctrine/coding-standard": "^5.0", "jetbrains/phpstorm-stubs": "^2018.1.2", "phpstan/phpstan": "^0.10.1", - "phpunit/phpunit": "^7.1.2", - "phpunit/phpunit-mock-objects": "!=3.2.4,!=3.2.5", + "phpunit/phpunit": "^7.4", "symfony/console": "^2.0.5|^3.0|^4.0", "symfony/phpunit-bridge": "^3.4.5|^4.0.5" }, @@ -431,13 +406,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8.x-dev", + "dev-master": "2.9.x-dev", "dev-develop": "3.0.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\DBAL\\": "lib/" + "psr-4": { + "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" } }, "notification-url": "https://packagist.org/downloads/", @@ -462,15 +437,19 @@ "email": "jonwage@gmail.com" } ], - "description": "Database Abstraction Layer", - "homepage": "http://www.doctrine-project.org", + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", "keywords": [ + "abstraction", "database", "dbal", + "mysql", "persistence", + "pgsql", + "php", "queryobject" ], - "time": "2018-07-13T03:16:35+00:00" + "time": "2018-12-31T03:27:51+00:00" }, { "name": "doctrine/event-manager", @@ -615,30 +594,35 @@ }, { "name": "doctrine/lexer", - "version": "v1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + "reference": "e17f069ede36f7534b95adec71910ed1b49c74ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e17f069ede36f7534b95adec71910ed1b49c74ea", + "reference": "e17f069ede36f7534b95adec71910ed1b49c74ea", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.2" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } }, "notification-url": "https://packagist.org/downloads/", @@ -646,48 +630,56 @@ "MIT" ], "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, { "name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com" }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" } ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ + "annotations", + "docblock", "lexer", - "parser" + "parser", + "php" ], - "time": "2014-09-09T13:34:57+00:00" + "time": "2019-07-30T19:33:28+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5" + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/92a2c3768d50e21a1f26a53cb795ce72806266c5", - "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/72b6fbf76adb3cf5bc0db68559b33d41219aba27", + "reference": "72b6fbf76adb3cf5bc0db68559b33d41219aba27", "shasum": "" }, "require": { - "php": ">=7.0.0" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~6.4" + "phpunit/phpunit": "^6.4|^7.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -714,20 +706,20 @@ "cron", "schedule" ], - "time": "2018-06-06T03:12:17+00:00" + "time": "2019-03-31T00:38:28+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.6", + "version": "2.1.11", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0578b32b30b22de3e8664f797cf846fc9246f786" + "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0578b32b30b22de3e8664f797cf846fc9246f786", - "reference": "0578b32b30b22de3e8664f797cf846fc9246f786", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/92dd169c32f6f55ba570c309d83f5209cefb5e23", + "reference": "92dd169c32f6f55ba570c309d83f5209cefb5e23", "shasum": "" }, "require": { @@ -737,7 +729,8 @@ "require-dev": { "dominicsayers/isemail": "dev-master", "phpunit/phpunit": "^4.8.35||^5.7||^6.0", - "satooshi/php-coveralls": "^1.0.1" + "satooshi/php-coveralls": "^1.0.1", + "symfony/phpunit-bridge": "^4.4@dev" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -745,7 +738,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -771,20 +764,20 @@ "validation", "validator" ], - "time": "2018-09-25T20:47:26+00:00" + "time": "2019-08-13T17:33:27+00:00" }, { "name": "erusev/parsedown", - "version": "1.7.1", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", - "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7", + "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7", "shasum": "" }, "require": { @@ -817,27 +810,27 @@ "markdown", "parser" ], - "time": "2018-03-08T01:11:30+00:00" + "time": "2019-03-17T18:48:37+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.10.0", + "version": "v4.11.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "d85d39da4576a6934b72480be6978fb10c860021" + "reference": "83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d85d39da4576a6934b72480be6978fb10c860021", - "reference": "d85d39da4576a6934b72480be6978fb10c860021", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7", + "reference": "83ab08bc1af7d808a9e0fbf024f1c24bfd73c0a7", "shasum": "" }, "require": { "php": ">=5.2" }, "require-dev": { - "simpletest/simpletest": "^1.1" + "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" }, "type": "library", "autoload": { @@ -850,7 +843,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL" + "LGPL-2.1-or-later" ], "authors": [ { @@ -864,100 +857,86 @@ "keywords": [ "html" ], - "time": "2018-02-23T01:58:20+00:00" + "time": "2019-07-14T18:58:38+00:00" }, { - "name": "facebook/webdriver", - "version": "1.6.0", + "name": "firebase/php-jwt", + "version": "v5.0.0", "source": { "type": "git", - "url": "https://github.com/facebook/php-webdriver.git", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e" + "url": "https://github.com/firebase/php-jwt.git", + "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/bd8c740097eb9f2fc3735250fc1912bc811a954e", - "reference": "bd8c740097eb9f2fc3735250fc1912bc811a954e", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", + "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", "shasum": "" }, "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-zip": "*", - "php": "^5.6 || ~7.0", - "symfony/process": "^2.8 || ^3.1 || ^4.0" + "php": ">=5.3.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.0", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "php-coveralls/php-coveralls": "^2.0", - "php-mock/php-mock-phpunit": "^1.1", - "phpunit/phpunit": "^5.7", - "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", - "squizlabs/php_codesniffer": "^2.6", - "symfony/var-dumper": "^3.3 || ^4.0" - }, - "suggest": { - "ext-SimpleXML": "For Firefox profile creation" + "phpunit/phpunit": " 4.8.35" }, "type": "library", - "extra": { - "branch-alias": { - "dev-community": "1.5-dev" - } - }, "autoload": { "psr-4": { - "Facebook\\WebDriver\\": "lib/" + "Firebase\\JWT\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "BSD-3-Clause" ], - "description": "A PHP client for Selenium WebDriver", - "homepage": "https://github.com/facebook/php-webdriver", - "keywords": [ - "facebook", - "php", - "selenium", - "webdriver" + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } ], - "time": "2018-05-16T17:37:13+00:00" + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "time": "2017-06-27T22:17:23+00:00" }, { "name": "graham-campbell/markdown", - "version": "v10.2.0", + "version": "v11.1.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-Markdown.git", - "reference": "fdb55c7953c85c60f742294a9cd2b3b010bca0b6" + "reference": "80f545b417db2103122c7f094bfa5bb2444b28e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/fdb55c7953c85c60f742294a9cd2b3b010bca0b6", - "reference": "fdb55c7953c85c60f742294a9cd2b3b010bca0b6", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Markdown/zipball/80f545b417db2103122c7f094bfa5bb2444b28e1", + "reference": "80f545b417db2103122c7f094bfa5bb2444b28e1", "shasum": "" }, "require": { - "illuminate/contracts": "5.5.*|5.6.*|5.7.*", - "illuminate/support": "5.5.*|5.6.*|5.7.*", - "illuminate/view": "5.5.*|5.6.*|5.7.*", - "league/commonmark": "^0.18", + "illuminate/contracts": "^5.5|^6.0", + "illuminate/support": "^5.5|^6.0", + "illuminate/view": "^5.5|^6.0", + "league/commonmark": "^1.0", "php": "^7.1.3" }, "require-dev": { "graham-campbell/analyzer": "^2.1", - "graham-campbell/testbench": "^5.1", - "league/commonmark-extras": "^0.1.5", + "graham-campbell/testbench": "^5.2", + "league/commonmark-extras": "^1.0", "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.5|^7.0" + "phpunit/phpunit": "^6.5|^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "10.2-dev" + "dev-master": "11.1-dev" }, "laravel": { "providers": [ @@ -992,100 +971,7 @@ "laravel", "markdown" ], - "time": "2018-09-29T10:19:14+00:00" - }, - { - "name": "guzzle/guzzle", - "version": "v3.8.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": ">=2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" - }, - "require-dev": { - "doctrine/cache": "*", - "monolog/monolog": "1.*", - "phpunit/phpunit": "3.7.*", - "psr/log": "1.0.*", - "symfony/class-loader": "*", - "zendframework/zend-cache": "<2.3", - "zendframework/zend-log": "<2.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.8-dev" - } - }, - "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" - } - ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "abandoned": "guzzlehttp/guzzle", - "time": "2014-01-28T22:29:15+00:00" + "time": "2019-08-26T16:31:24+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1205,32 +1091,37 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.4.2", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", - "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", "shasum": "" }, "require": { "php": ">=5.4.0", - "psr/http-message": "~1.0" + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" }, "provide": { "psr/http-message-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1260,42 +1151,44 @@ "keywords": [ "http", "message", + "psr-7", "request", "response", "stream", "uri", "url" ], - "time": "2017-03-20T17:10:46+00:00" + "time": "2019-07-01T23:21:34+00:00" }, { "name": "hashids/hashids", - "version": "2.0.4", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/ivanakimov/hashids.php.git", - "reference": "7a945a5192d4a5c8888364970feece9bc26179df" + "url": "https://github.com/vinkla/hashids.git", + "reference": "43bb2407f16a631f0128f47bcb67ff986c63dde2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ivanakimov/hashids.php/zipball/7a945a5192d4a5c8888364970feece9bc26179df", - "reference": "7a945a5192d4a5c8888364970feece9bc26179df", + "url": "https://api.github.com/repos/vinkla/hashids/zipball/43bb2407f16a631f0128f47bcb67ff986c63dde2", + "reference": "43bb2407f16a631f0128f47bcb67ff986c63dde2", "shasum": "" }, "require": { - "php": "^5.6.4 || ^7.0" + "ext-mbstring": "*", + "php": "^7.2" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.3" + "phpunit/phpunit": "^8.0" }, "suggest": { - "ext-bcmatch": "Required to use BC Math arbitrary precision mathematics (*).", + "ext-bcmath": "Required to use BC Math arbitrary precision mathematics (*).", "ext-gmp": "Required to use GNU multiple precision mathematics (*)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1315,8 +1208,8 @@ }, { "name": "Vincent Klaiber", - "email": "hello@vinkla.com", - "homepage": "https://vinkla.com" + "email": "hello@doubledip.se", + "homepage": "https://doubledip.se" } ], "description": "Generate short, unique, non-sequential ids (like YouTube and Bitly) from numbers", @@ -1332,37 +1225,37 @@ "obfuscate", "youtube" ], - "time": "2017-10-28T11:24:20+00:00" + "time": "2019-04-03T13:40:29+00:00" }, { - "name": "hassankhan/config", - "version": "0.11.2", + "name": "http-interop/http-factory-guzzle", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/hassankhan/config.git", - "reference": "7fbc236c32dc6cc53a7b00992a2739cf8b41c085" + "url": "https://github.com/http-interop/http-factory-guzzle.git", + "reference": "34861658efb9899a6618cef03de46e2a52c80fc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hassankhan/config/zipball/7fbc236c32dc6cc53a7b00992a2739cf8b41c085", - "reference": "7fbc236c32dc6cc53a7b00992a2739cf8b41c085", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/34861658efb9899a6618cef03de46e2a52c80fc0", + "reference": "34861658efb9899a6618cef03de46e2a52c80fc0", "shasum": "" }, "require": { - "php": ">=5.3.0" + "guzzlehttp/psr7": "^1.4.2", + "psr/http-factory": "^1.0" }, - "require-dev": { - "phpunit/phpunit": "~4.0", - "scrutinizer/ocular": "~1.1", - "squizlabs/php_codesniffer": "~2.2" + "provide": { + "psr/http-factory-implementation": "^1.0" }, - "suggest": { - "symfony/yaml": "~2.5" + "require-dev": { + "http-interop/http-factory-tests": "^0.5", + "phpunit/phpunit": "^6.5" }, "type": "library", "autoload": { "psr-4": { - "Noodlehaus\\": "src" + "Http\\Factory\\Guzzle\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1371,25 +1264,18 @@ ], "authors": [ { - "name": "Hassan Khan", - "homepage": "http://hassankhan.me/", - "role": "Developer" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Lightweight configuration file loader that supports PHP, INI, XML, JSON, and YAML files", - "homepage": "http://hassankhan.me/config/", + "description": "An HTTP Factory using Guzzle PSR7", "keywords": [ - "config", - "configuration", - "ini", - "json", - "microphp", - "unframework", - "xml", - "yaml", - "yml" + "factory", + "http", + "psr-17", + "psr-7" ], - "time": "2017-11-07T22:49:43+00:00" + "time": "2018-07-31T19:32:56+00:00" }, { "name": "jakub-onderka/php-console-color", @@ -1435,33 +1321,34 @@ }, { "name": "jakub-onderka/php-console-highlighter", - "version": "v0.3.2", + "version": "v0.4", "source": { "type": "git", "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", - "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", + "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", "shasum": "" }, "require": { - "jakub-onderka/php-console-color": "~0.1", - "php": ">=5.3.0" + "ext-tokenizer": "*", + "jakub-onderka/php-console-color": "~0.2", + "php": ">=5.4.0" }, "require-dev": { "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~0.5", + "jakub-onderka/php-parallel-lint": "~1.0", "jakub-onderka/php-var-dump-check": "~0.1", "phpunit/phpunit": "~4.0", "squizlabs/php_codesniffer": "~1.5" }, "type": "library", "autoload": { - "psr-0": { - "JakubOnderka\\PhpConsoleHighlighter": "src/" + "psr-4": { + "JakubOnderka\\PhpConsoleHighlighter\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1475,49 +1362,39 @@ "homepage": "http://www.acci.cz/" } ], - "time": "2015-04-20T18:58:01+00:00" + "description": "Highlight PHP code in terminal", + "time": "2018-09-29T18:48:56+00:00" }, { - "name": "laravel/dusk", - "version": "v3.0.10", + "name": "jean85/pretty-package-versions", + "version": "1.2", "source": { "type": "git", - "url": "https://github.com/laravel/dusk.git", - "reference": "8bfb9f01ae09d1d9ca3ce53e36b1f020c0f8dc8f" + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/dusk/zipball/8bfb9f01ae09d1d9ca3ce53e36b1f020c0f8dc8f", - "reference": "8bfb9f01ae09d1d9ca3ce53e36b1f020c0f8dc8f", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/75c7effcf3f77501d0e0caa75111aff4daa0dd48", + "reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48", "shasum": "" }, "require": { - "facebook/webdriver": "~1.3", - "illuminate/console": "~5.6", - "illuminate/support": "~5.6", - "nesbot/carbon": "~1.20", - "php": ">=7.1.0", - "symfony/console": "~4.0", - "symfony/process": "~4.0" + "ocramius/package-versions": "^1.2.0", + "php": "^7.0" }, "require-dev": { - "mockery/mockery": "~1.0", - "phpunit/phpunit": "~7.0" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Dusk\\DuskServiceProvider" - ] + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Laravel\\Dusk\\": "src/" + "Jean85\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1526,56 +1403,60 @@ ], "authors": [ { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" } ], - "description": "Laravel Dusk provides simple end-to-end testing and browser automation.", + "description": "A wrapper for ocramius/package-versions to get pretty versions strings", "keywords": [ - "laravel", - "testing", - "webdriver" + "composer", + "package", + "release", + "versions" ], - "time": "2018-08-06T20:22:46+00:00" + "time": "2018-06-13T13:22:40+00:00" }, { "name": "laravel/framework", - "version": "v5.6.38", + "version": "v5.8.35", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "38d838bab9434af79e8ab274ae63f52f7ed45d6e" + "reference": "5a9e4d241a8b815e16c9d2151e908992c38db197" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/38d838bab9434af79e8ab274ae63f52f7ed45d6e", - "reference": "38d838bab9434af79e8ab274ae63f52f7ed45d6e", + "url": "https://api.github.com/repos/laravel/framework/zipball/5a9e4d241a8b815e16c9d2151e908992c38db197", + "reference": "5a9e4d241a8b815e16c9d2151e908992c38db197", "shasum": "" }, "require": { - "doctrine/inflector": "~1.1", - "dragonmantank/cron-expression": "~2.0", - "erusev/parsedown": "~1.7", + "doctrine/inflector": "^1.1", + "dragonmantank/cron-expression": "^2.0", + "egulias/email-validator": "^2.0", + "erusev/parsedown": "^1.7", + "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", "league/flysystem": "^1.0.8", - "monolog/monolog": "~1.12", - "nesbot/carbon": "1.25.*", + "monolog/monolog": "^1.12", + "nesbot/carbon": "^1.26.3 || ^2.0", + "opis/closure": "^3.1", "php": "^7.1.3", - "psr/container": "~1.0", + "psr/container": "^1.0", "psr/simple-cache": "^1.0", "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "~6.0", - "symfony/console": "~4.0", - "symfony/debug": "~4.0", - "symfony/finder": "~4.0", - "symfony/http-foundation": "~4.0", - "symfony/http-kernel": "~4.0", - "symfony/process": "~4.0", - "symfony/routing": "~4.0", - "symfony/var-dumper": "~4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^4.2", + "symfony/debug": "^4.2", + "symfony/finder": "^4.2", + "symfony/http-foundation": "^4.2", + "symfony/http-kernel": "^4.2", + "symfony/process": "^4.2", + "symfony/routing": "^4.2", + "symfony/var-dumper": "^4.2", "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "~2.2" + "vlucas/phpdotenv": "^3.3" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -1611,43 +1492,49 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "~3.0", - "doctrine/dbal": "~2.6", + "aws/aws-sdk-php": "^3.0", + "doctrine/dbal": "^2.6", "filp/whoops": "^2.1.4", - "league/flysystem-cached-adapter": "~1.0", - "mockery/mockery": "~1.0", + "guzzlehttp/guzzle": "^6.3", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "^1.0", "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.6.*", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~7.0", + "orchestra/testbench-core": "3.8.*", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^7.5|^8.0", "predis/predis": "^1.1.1", - "symfony/css-selector": "~4.0", - "symfony/dom-crawler": "~4.0" + "symfony/css-selector": "^4.2", + "symfony/dom-crawler": "^4.2", + "true/punycode": "^2.1" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.6).", + "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", - "laravel/tinker": "Required to use the tinker console command (~1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (~1.0).", - "nexmo/client": "Required to use the Nexmo transport (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (~4.0).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~4.0).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." + "filp/whoops": "Required for friendly error pages in development (^2.1.4).", + "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", + "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", + "laravel/tinker": "Required to use the tinker console command (^1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.2).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.1).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6-dev" + "dev-master": "5.8-dev" } }, "autoload": { @@ -1675,44 +1562,45 @@ "framework", "laravel" ], - "time": "2018-09-04T13:15:09+00:00" + "time": "2019-09-03T16:44:30+00:00" }, { "name": "laravel/horizon", - "version": "v1.4.0", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "0fb52858974e08e26fc214441a90aec652bc1204" + "reference": "692d3649a9c1bd13a3340ecc10036c1d3b55155b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/0fb52858974e08e26fc214441a90aec652bc1204", - "reference": "0fb52858974e08e26fc214441a90aec652bc1204", + "url": "https://api.github.com/repos/laravel/horizon/zipball/692d3649a9c1bd13a3340ecc10036c1d3b55155b", + "reference": "692d3649a9c1bd13a3340ecc10036c1d3b55155b", "shasum": "" }, "require": { "cakephp/chronos": "^1.0", + "ext-json": "*", "ext-pcntl": "*", "ext-posix": "*", - "illuminate/contracts": "~5.5", - "illuminate/queue": "~5.5", - "illuminate/support": "~5.5", + "illuminate/contracts": "~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/queue": "~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/support": "~5.7.0|~5.8.0|^6.0|^7.0", "php": ">=7.1.0", "predis/predis": "^1.1", "ramsey/uuid": "^3.5", - "symfony/debug": "~3.3|~4.0" + "symfony/debug": "^4.2", + "symfony/process": "^4.2" }, "require-dev": { - "mockery/mockery": "~1.0", - "orchestra/database": "~3.5", - "orchestra/testbench": "~3.5", - "phpunit/phpunit": "~6.0" + "mockery/mockery": "^1.0", + "orchestra/testbench": "^3.7|^4.0|^5.0", + "phpunit/phpunit": "^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "3.0-dev" }, "laravel": { "providers": [ @@ -1743,26 +1631,97 @@ "laravel", "queue" ], - "time": "2018-09-07T11:08:22+00:00" + "time": "2019-08-27T14:30:05+00:00" + }, + { + "name": "laravel/passport", + "version": "v7.4.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/passport.git", + "reference": "cc39dc6a36ebf5926906eb5ad3c62dba50c9bbd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/passport/zipball/cc39dc6a36ebf5926906eb5ad3c62dba50c9bbd0", + "reference": "cc39dc6a36ebf5926906eb5ad3c62dba50c9bbd0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "firebase/php-jwt": "~3.0|~4.0|~5.0", + "guzzlehttp/guzzle": "~6.0", + "illuminate/auth": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/console": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/container": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/contracts": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/cookie": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/database": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/encryption": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/http": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "illuminate/support": "~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0", + "league/oauth2-server": "^7.0", + "php": ">=7.1", + "phpseclib/phpseclib": "^2.0", + "symfony/psr-http-message-bridge": "~1.0", + "zendframework/zend-diactoros": "~1.0|~2.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.4|^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Passport\\PassportServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Passport\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Passport provides OAuth2 server support to Laravel.", + "keywords": [ + "laravel", + "oauth", + "passport" + ], + "time": "2019-09-10T19:55:34+00:00" }, { "name": "laravel/tinker", - "version": "v1.0.7", + "version": "v1.0.10", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "e3086ee8cb1f54a39ae8dcb72d1c37d10128997d" + "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/e3086ee8cb1f54a39ae8dcb72d1c37d10128997d", - "reference": "e3086ee8cb1f54a39ae8dcb72d1c37d10128997d", + "url": "https://api.github.com/repos/laravel/tinker/zipball/ad571aacbac1539c30d480908f9d0c9614eaf1a7", + "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7", "shasum": "" }, "require": { - "illuminate/console": "~5.1", - "illuminate/contracts": "~5.1", - "illuminate/support": "~5.1", + "illuminate/console": "~5.1|^6.0", + "illuminate/contracts": "~5.1|^6.0", + "illuminate/support": "~5.1|^6.0", "php": ">=5.5.9", "psy/psysh": "0.7.*|0.8.*|0.9.*", "symfony/var-dumper": "~3.0|~4.0" @@ -1806,38 +1765,94 @@ "laravel", "psysh" ], - "time": "2018-05-17T13:42:07+00:00" + "time": "2019-08-07T15:10:45+00:00" }, { - "name": "league/commonmark", - "version": "0.18.0", + "name": "lcobucci/jwt", + "version": "3.3.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "006af077d4b1b7eb1d9760964f9f984ba188632c" + "url": "https://github.com/lcobucci/jwt.git", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/006af077d4b1b7eb1d9760964f9f984ba188632c", - "reference": "006af077d4b1b7eb1d9760964f9f984ba188632c", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", + "reference": "a11ec5f4b4d75d1fcd04e133dede4c317aac9e18", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=5.6.5" + "ext-openssl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpmd/phpmd": "~2.2", + "phpunit/php-invoker": "~1.1", + "phpunit/phpunit": "^5.7 || ^7.3", + "squizlabs/php_codesniffer": "~2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Lcobucci\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Luís Otávio Cobucci Oblonczyk", + "email": "lcobucci@gmail.com", + "role": "Developer" + } + ], + "description": "A simple library to work with JSON Web Token and JSON Web Signature", + "keywords": [ + "JWS", + "jwt" + ], + "time": "2019-05-24T18:30:49+00:00" + }, + { + "name": "league/commonmark", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "7a40f2b0931602c504c2a9692d9f1e33635fd5ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/7a40f2b0931602c504c2a9692d9f1e33635fd5ef", + "reference": "7a40f2b0931602c504c2a9692d9f1e33635fd5ef", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1" }, "replace": { "colinodell/commonmark-php": "*" }, "require-dev": { "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.28", + "commonmark/commonmark.js": "0.29.0", "erusev/parsedown": "~1.0", "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "^1.2", - "phpunit/phpunit": "^5.7|^6.5", - "scrutinizer/ocular": "^1.1", - "symfony/finder": "^3.0|^4.0" + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan-shim": "^0.11.5", + "phpunit/phpunit": "^7.5", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" }, "suggest": { "league/commonmark-extras": "Library of useful extensions including smart punctuation" @@ -1848,12 +1863,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "0.19-dev" + "dev-master": "1.1-dev" } }, "autoload": { "psr-4": { - "League\\CommonMark\\": "src/" + "League\\CommonMark\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1868,27 +1883,77 @@ "role": "Lead Developer" } ], - "description": "Markdown parser for PHP based on the CommonMark spec", - "homepage": "https://github.com/thephpleague/commonmark", + "description": "PHP Markdown parser based on the CommonMark spec", + "homepage": "https://commonmark.thephpleague.com", "keywords": [ "commonmark", "markdown", "parser" ], - "time": "2018-09-18T13:13:55+00:00" + "time": "2019-06-29T11:19:01+00:00" + }, + { + "name": "league/event", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/event.git", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/event/zipball/d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "~1.0.1", + "phpspec/phpspec": "^2.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Event\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Event package", + "keywords": [ + "emitter", + "event", + "listener" + ], + "time": "2018-11-26T11:52:41+00:00" }, { "name": "league/flysystem", - "version": "1.0.47", + "version": "1.0.55", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "a11e4a75f256bdacf99d20780ce42d3b8272975c" + "reference": "33c91155537c6dc899eacdc54a13ac6303f156e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a11e4a75f256bdacf99d20780ce42d3b8272975c", - "reference": "a11e4a75f256bdacf99d20780ce42d3b8272975c", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/33c91155537c6dc899eacdc54a13ac6303f156e6", + "reference": "33c91155537c6dc899eacdc54a13ac6303f156e6", "shasum": "" }, "require": { @@ -1959,20 +2024,20 @@ "sftp", "storage" ], - "time": "2018-09-14T15:30:29+00:00" + "time": "2019-08-24T11:17:19+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "1.0.20", + "version": "1.0.23", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "398c56027e49653712a8fba1eb12600d2a83f3b7" + "reference": "15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/398c56027e49653712a8fba1eb12600d2a83f3b7", - "reference": "398c56027e49653712a8fba1eb12600d2a83f3b7", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4", + "reference": "15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4", "shasum": "" }, "require": { @@ -2006,7 +2071,7 @@ } ], "description": "Flysystem adapter for the AWS S3 SDK v3.x", - "time": "2018-09-25T12:02:44+00:00" + "time": "2019-06-05T17:18:29+00:00" }, { "name": "league/flysystem-cached-adapter", @@ -2056,37 +2121,43 @@ "time": "2018-07-09T20:51:04+00:00" }, { - "name": "league/flysystem-rackspace", - "version": "1.0.5", + "name": "league/oauth2-server", + "version": "7.4.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem-rackspace.git", - "reference": "ba877e837f5dce60e78a0555de37eb9bfc7dd6b9" + "url": "https://github.com/thephpleague/oauth2-server.git", + "reference": "2eb1cf79e59d807d89c256e7ac5e2bf8bdbd4acf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-rackspace/zipball/ba877e837f5dce60e78a0555de37eb9bfc7dd6b9", - "reference": "ba877e837f5dce60e78a0555de37eb9bfc7dd6b9", + "url": "https://api.github.com/repos/thephpleague/oauth2-server/zipball/2eb1cf79e59d807d89c256e7ac5e2bf8bdbd4acf", + "reference": "2eb1cf79e59d807d89c256e7ac5e2bf8bdbd4acf", "shasum": "" }, "require": { - "league/flysystem": "~1.0", - "php": ">=5.4.0", - "rackspace/php-opencloud": "~1.16" + "defuse/php-encryption": "^2.1", + "ext-openssl": "*", + "lcobucci/jwt": "^3.2.2", + "league/event": "^2.1", + "php": ">=7.0.0", + "psr/http-message": "^1.0.1" + }, + "replace": { + "league/oauth2server": "*", + "lncd/oauth2": "*" }, "require-dev": { - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "~4.0" + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-phpunit": "^0.9.4", + "phpstan/phpstan-strict-rules": "^0.9.0", + "phpunit/phpunit": "^6.3 || ^7.0", + "roave/security-advisories": "dev-master", + "zendframework/zend-diactoros": "^1.3.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { - "League\\Flysystem\\Rackspace\\": "src/" + "League\\OAuth2\\Server\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2095,20 +2166,58 @@ ], "authors": [ { - "name": "Frank de Jonge", - "email": "info@frenky.net" + "name": "Alex Bilbie", + "email": "hello@alexbilbie.com", + "homepage": "http://www.alexbilbie.com", + "role": "Developer" + }, + { + "name": "Andy Millington", + "email": "andrew@noexceptions.io", + "homepage": "https://www.noexceptions.io", + "role": "Developer" } ], - "description": "Flysystem adapter for Rackspace", - "time": "2016-03-11T12:13:42+00:00" + "description": "A lightweight and powerful OAuth 2.0 authorization and resource server library with support for all the core specification grants. This library will allow you to secure your API with OAuth and allow your applications users to approve apps that want to access their data from your API.", + "homepage": "https://oauth2.thephpleague.com/", + "keywords": [ + "Authentication", + "api", + "auth", + "authorisation", + "authorization", + "oauth", + "oauth 2", + "oauth 2.0", + "oauth2", + "protect", + "resource", + "secure", + "server" + ], + "time": "2019-05-05T09:22:01+00:00" }, { "name": "martinlindhe/laravel-vue-i18n-generator", - "version": "0.1.28.1", + "version": "0.1.40", "source": { "type": "git", - "url": "https://github.com/sporchia/laravel-vue-i18n-generator", - "reference": "tags/0.1.28.1" + "url": "https://github.com/martinlindhe/laravel-vue-i18n-generator.git", + "reference": "0da6b5b7782bf0a79e47f6c02d39115550638e1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/martinlindhe/laravel-vue-i18n-generator/zipball/0da6b5b7782bf0a79e47f6c02d39115550638e1e", + "reference": "0da6b5b7782bf0a79e47f6c02d39115550638e1e", + "shasum": "" + }, + "require": { + "illuminate/console": "~5.1.0|~5.2.0|~5.3.0|~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|~6.0", + "illuminate/support": "~5.1.0|~5.2.0|~5.3.0|~5.4.0|~5.5.0|~5.6.0|~5.7.0|~5.8.0|~6.0", + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.7" }, "type": "library", "extra": { @@ -2122,47 +2231,37 @@ "psr-4": { "MartinLindhe\\VueInternationalizationGenerator\\": "src/" } - } - }, - { - "name": "mikemccabe/json-patch-php", - "version": "0.1.0", - "source": { - "type": "git", - "url": "https://github.com/mikemccabe/json-patch-php.git", - "reference": "b3af30a6aec7f6467c773cd49b2d974a70f7c0d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mikemccabe/json-patch-php/zipball/b3af30a6aec7f6467c773cd49b2d974a70f7c0d4", - "reference": "b3af30a6aec7f6467c773cd49b2d974a70f7c0d4", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "mikemccabe\\JsonPatch\\": "src" - } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "MIT" + ], + "authors": [ + { + "name": "Martin Lindhe", + "email": "martin@ubique.se" + } + ], + "description": "Generates a vue-i18n compatible include file from your Laravel translations.", + "homepage": "http://github.com/martinlindhe/laravel-vue-i18n-generator", + "keywords": [ + "laravel", + "vue-i18n" ], - "description": "Produce and apply json-patch objects", - "time": "2015-01-05T21:19:54+00:00" + "time": "2019-09-03T16:59:43+00:00" }, { "name": "monolog/monolog", - "version": "1.23.0", + "version": "1.25.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", - "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/70e65a5470a42cfec1a7da00d30edb6e617e8dcf", + "reference": "70e65a5470a42cfec1a7da00d30edb6e617e8dcf", "shasum": "" }, "require": { @@ -2227,7 +2326,7 @@ "logging", "psr-3" ], - "time": "2017-06-19T01:22:40+00:00" + "time": "2019-09-06T13:49:17+00:00" }, { "name": "mtdowling/jmespath.php", @@ -2286,30 +2385,40 @@ }, { "name": "nesbot/carbon", - "version": "1.25.0", + "version": "2.24.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4" + "reference": "934459c5ac0658bc765ad1e53512c7c77adcac29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cbcf13da0b531767e39eb86e9687f5deba9857b4", - "reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/934459c5ac0658bc765ad1e53512c7c77adcac29", + "reference": "934459c5ac0658bc765ad1e53512c7c77adcac29", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/translation": "~2.6 || ~3.0 || ~4.0" + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/translation": "^3.4 || ^4.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2", - "phpunit/phpunit": "^4.8.35 || ^5.7" + "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "kylekatarnls/multi-tester": "^1.1", + "phpmd/phpmd": "dev-php-7.1-compatibility", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "^7.5 || ^8.0", + "squizlabs/php_codesniffer": "^3.4" }, + "bin": [ + "bin/carbon" + ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.23-dev" + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] } }, "autoload": { @@ -2326,29 +2435,33 @@ "name": "Brian Nesbitt", "email": "brian@nesbot.com", "homepage": "http://nesbot.com" + }, + { + "name": "kylekatarnls", + "homepage": "http://github.com/kylekatarnls" } ], - "description": "A simple API extension for DateTime.", + "description": "A API extension for DateTime that supports 281 different languages.", "homepage": "http://carbon.nesbot.com", "keywords": [ "date", "datetime", "time" ], - "time": "2018-03-19T15:50:49+00:00" + "time": "2019-08-31T16:37:55+00:00" }, { "name": "nikic/php-parser", - "version": "v4.0.4", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "fa6ee28600d21d49b2b4e1006b48426cec8e579c" + "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/fa6ee28600d21d49b2b4e1006b48426cec8e579c", - "reference": "fa6ee28600d21d49b2b4e1006b48426cec8e579c", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/97e59c7a16464196a8b9c77c47df68e4a39a45c4", + "reference": "97e59c7a16464196a8b9c77c47df68e4a39a45c4", "shasum": "" }, "require": { @@ -2356,7 +2469,7 @@ "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^6.5 || ^7.0" + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" }, "bin": [ "bin/php-parse" @@ -2364,7 +2477,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -2386,178 +2499,208 @@ "parser", "php" ], - "time": "2018-09-18T07:03:24+00:00" + "time": "2019-09-01T07:51:21+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.99", + "name": "ocramius/package-versions", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "url": "https://github.com/Ocramius/PackageVersions.git", + "reference": "a4d4b60d0e60da2487bd21a2c6ac089f85570dbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/a4d4b60d0e60da2487bd21a2c6ac089f85570dbb", + "reference": "a4d4b60d0e60da2487bd21a2c6ac089f85570dbb", "shasum": "" }, "require": { - "php": "^7" + "composer-plugin-api": "^1.0.0", + "php": "^7.1.0" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" + "composer/composer": "^1.6.3", + "doctrine/coding-standard": "^5.0.1", + "ext-zip": "*", + "infection/infection": "^0.7.1", + "phpunit/phpunit": "^7.0.0" }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } }, - "type": "library", "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "time": "2018-07-02T15:55:56+00:00" + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "time": "2019-02-21T12:16:21+00:00" }, { - "name": "phploc/phploc", - "version": "4.0.1", + "name": "opis/closure", + "version": "3.4.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phploc.git", - "reference": "6a8a9416517b82d6326ac9c2d040ad53c13654eb" + "url": "https://github.com/opis/closure.git", + "reference": "60a97fff133b1669a5b1776aa8ab06db3f3962b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phploc/zipball/6a8a9416517b82d6326ac9c2d040ad53c13654eb", - "reference": "6a8a9416517b82d6326ac9c2d040ad53c13654eb", + "url": "https://api.github.com/repos/opis/closure/zipball/60a97fff133b1669a5b1776aa8ab06db3f3962b7", + "reference": "60a97fff133b1669a5b1776aa8ab06db3f3962b7", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "sebastian/finder-facade": "^1.1", - "sebastian/version": "^2.0", - "symfony/console": "^2.7|^3.0|^4.0" + "php": "^5.4 || ^7.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, - "bin": [ - "phploc" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "3.3.x-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" } ], - "description": "A tool for quickly measuring the size of a PHP project.", - "homepage": "https://github.com/sebastianbergmann/phploc", - "time": "2017-11-18T17:35:43+00:00" + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "time": "2019-09-02T21:07:33+00:00" }, { - "name": "predis/predis", - "version": "v1.1.1", + "name": "paragonie/random_compat", + "version": "v9.99.99", "source": { "type": "git", - "url": "https://github.com/nrk/predis.git", - "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1" + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1", - "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, "suggest": { - "ext-curl": "Allows access to Webdis when paired with phpiredis", - "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Daniele Alessandri", - "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net" + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" } ], - "description": "Flexible and feature-complete Redis client for PHP and HHVM", - "homepage": "http://github.com/nrk/predis", + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", "keywords": [ - "nosql", - "predis", - "redis" + "csprng", + "polyfill", + "pseudorandom", + "random" ], - "time": "2016-06-16T16:22:20+00:00" + "time": "2018-07-02T15:55:56+00:00" }, { - "name": "psr/cache", - "version": "1.0.1", + "name": "php-http/client-common", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "url": "https://github.com/php-http/client-common.git", + "reference": "2b8aa3c4910afc21146a9c8f96adb266e869517a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-http/client-common/zipball/2b8aa3c4910afc21146a9c8f96adb266e869517a", + "reference": "2b8aa3c4910afc21146a9c8f96adb266e869517a", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.1", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", + "symfony/options-resolver": " ^3.4.20 || ^4.0.15 || ^4.1.9 || ^4.2.1" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "phpspec/phpspec": "^5.1", + "phpspec/prophecy": "^1.8", + "sebastian/comparator": "^3.0" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Cache\\": "src/" + "Http\\Client\\Common\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2566,44 +2709,63 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "Common interface for caching libraries", + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", "keywords": [ - "cache", - "psr", - "psr-6" + "client", + "common", + "http", + "httplug" ], - "time": "2016-08-06T20:24:11+00:00" + "time": "2019-02-03T16:49:09+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "php-http/curl-client", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/php-http/curl-client.git", + "reference": "e7a2a5ebcce1ff7d75eaf02b7c85634a6fac00da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-http/curl-client/zipball/e7a2a5ebcce1ff7d75eaf02b7c85634a6fac00da", + "reference": "e7a2a5ebcce1ff7d75eaf02b7c85634a6fac00da", "shasum": "" }, "require": { - "php": ">=5.3.0" + "ext-curl": "*", + "php": "^7.1", + "php-http/discovery": "^1.6", + "php-http/httplug": "^2.0", + "php-http/message": "^1.2", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "symfony/options-resolver": "^3.4 || ^4.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0" + }, + "require-dev": { + "guzzlehttp/psr7": "^1.0", + "php-http/client-integration-tests": "^2.0", + "phpunit/phpunit": "^7.5", + "zendframework/zend-diactoros": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Http\\Client\\Curl\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2612,47 +2774,59 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Михаил Красильников", + "email": "m.krasilnikov@yandex.ru" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "PSR-18 and HTTPlug Async client with cURL", + "homepage": "http://php-http.org", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "curl", + "http", + "psr-18" ], - "time": "2017-02-14T16:28:37+00:00" + "time": "2019-03-05T19:59:23+00:00" }, { - "name": "psr/http-message", - "version": "1.0.1", + "name": "php-http/discovery", + "version": "1.7.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "url": "https://github.com/php-http/discovery.git", + "reference": "e822f86a6983790aa17ab13aa7e69631e86806b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-http/discovery/zipball/e822f86a6983790aa17ab13aa7e69631e86806b6", + "reference": "e822f86a6983790aa17ab13aa7e69631e86806b6", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.1" + }, + "conflict": { + "nyholm/psr7": "<1.0" + }, + "require-dev": { + "akeneo/phpspec-skip-example-extension": "^4.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1", + "puli/composer-plugin": "1.0.0-beta10" + }, + "suggest": { + "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories", + "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.7-dev" } }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "Http\\Discovery\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2661,48 +2835,56 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "homepage": "http://php-http.org", "keywords": [ + "adapter", + "client", + "discovery", + "factory", "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "message", + "psr7" ], - "time": "2016-08-06T14:39:51+00:00" + "time": "2019-06-30T09:04:27+00:00" }, { - "name": "psr/log", - "version": "1.0.2", + "name": "php-http/httplug", + "version": "v2.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "url": "https://github.com/php-http/httplug.git", + "reference": "b3842537338c949f2469557ef4ad4bdc47b58603" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-http/httplug/zipball/b3842537338c949f2469557ef4ad4bdc47b58603", + "reference": "b3842537338c949f2469557ef4ad4bdc47b58603", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.0", + "php-http/promise": "^1.0", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Http\\Client\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2711,46 +2893,74 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", "keywords": [ - "log", - "psr", - "psr-3" + "client", + "http" ], - "time": "2016-10-10T12:19:37+00:00" + "time": "2018-10-31T09:14:44+00:00" }, { - "name": "psr/simple-cache", - "version": "1.0.1", + "name": "php-http/message", + "version": "1.8.0", "source": { "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "url": "https://github.com/php-http/message.git", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-http/message/zipball/ce8f43ac1e294b54aabf5808515c3554a19c1e1c", + "reference": "ce8f43ac1e294b54aabf5808515c3554a19c1e1c", "shasum": "" }, "require": { - "php": ">=5.3.0" + "clue/stream-filter": "^1.4", + "php": "^7.1", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "akeneo/phpspec-skip-example-extension": "^1.0", + "coduo/phpspec-data-provider-extension": "^1.0", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0", + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4", + "slim/slim": "^3.0", + "zendframework/zend-diactoros": "^1.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation", + "zendframework/zend-diactoros": "Used with Diactoros Factories" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.8-dev" } }, "autoload": { "psr-4": { - "Psr\\SimpleCache\\": "src/" - } + "Http\\Message\\": "src/" + }, + "files": [ + "src/filters.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2758,71 +2968,46 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "Common interfaces for simple caching", + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" + "http", + "message", + "psr-7" ], - "time": "2017-10-23T01:57:42+00:00" + "time": "2019-08-05T06:55:08+00:00" }, { - "name": "psy/psysh", - "version": "v0.9.8", + "name": "php-http/message-factory", + "version": "v1.0.2", "source": { "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "ed3c32c4304e1a678a6e0f9dc11dd2d927d89555" + "url": "https://github.com/php-http/message-factory.git", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ed3c32c4304e1a678a6e0f9dc11dd2d927d89555", - "reference": "ed3c32c4304e1a678a6e0f9dc11dd2d927d89555", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", "shasum": "" }, "require": { - "dnoegel/php-xdg-base-dir": "0.1", - "ext-json": "*", - "ext-tokenizer": "*", - "jakub-onderka/php-console-highlighter": "0.3.*", - "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", - "php": ">=5.4.0", - "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0", - "symfony/var-dumper": "~2.7|~3.0|~4.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "~2.15|~3.16", - "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + "php": ">=5.4", + "psr/http-message": "^1.0" }, - "bin": [ - "bin/psysh" - ], "type": "library", "extra": { "branch-alias": { - "dev-develop": "0.9.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "files": [ - "src/functions.php" - ], "psr-4": { - "Psy\\": "src/" + "Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2831,405 +3016,386 @@ ], "authors": [ { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" } ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", "keywords": [ - "REPL", - "console", - "interactive", - "shell" + "factory", + "http", + "message", + "stream", + "uri" ], - "time": "2018-09-05T11:40:09+00:00" + "time": "2015-12-19T14:08:53+00:00" }, { - "name": "rackspace/php-opencloud", - "version": "v1.16.0", + "name": "php-http/promise", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/rackspace/php-opencloud.git", - "reference": "d6b71feed7f9e7a4b52e0240a79f06473ba69c8c" + "url": "https://github.com/php-http/promise.git", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rackspace/php-opencloud/zipball/d6b71feed7f9e7a4b52e0240a79f06473ba69c8c", - "reference": "d6b71feed7f9e7a4b52e0240a79f06473ba69c8c", + "url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980", + "reference": "dc494cdc9d7160b9a09bd5573272195242ce7980", "shasum": "" }, - "require": { - "guzzle/guzzle": "~3.8", - "mikemccabe/json-patch-php": "~0.1", - "php": ">=5.4", - "psr/log": "~1.0" - }, "require-dev": { - "apigen/apigen": "~4.0", - "fabpot/php-cs-fixer": "1.0.*@dev", - "jakub-onderka/php-parallel-lint": "0.*", - "phpspec/prophecy": "~1.4", - "phpunit/phpunit": "4.3.*", - "satooshi/php-coveralls": "0.6.*@dev" + "henrikbjorn/phpspec-code-coverage": "^1.0", + "phpspec/phpspec": "^2.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "autoload": { - "psr-0": { - "OpenCloud": [ - "lib/" - ] + "psr-4": { + "Http\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { - "name": "Jamie Hannaford", - "email": "jamie.hannaford@rackspace.com", - "homepage": "https://github.com/jamiehannaford" + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" } ], - "description": "PHP SDK for Rackspace/OpenStack APIs", + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", "keywords": [ - "Openstack", - "nova", - "opencloud", - "rackspace", - "swift" + "promise" ], - "time": "2016-01-29T10:34:57+00:00" + "time": "2016-01-26T13:27:02+00:00" }, { - "name": "ramsey/uuid", - "version": "3.8.0", + "name": "phpoption/phpoption", + "version": "1.5.0", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", - "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", "shasum": "" }, "require": { - "paragonie/random_compat": "^1.0|^2.0|9.99.99", - "php": "^5.4 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" + "php": ">=5.3.0" }, "require-dev": { - "codeception/aspect-mock": "^1.0 | ~2.0.0", - "doctrine/annotations": "~1.2.0", - "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", - "ircmaxell/random-lib": "^1.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.9", - "moontoast/math": "^1.1", - "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|^5.0|^6.5", - "squizlabs/php_codesniffer": "^2.3" - }, - "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "phpunit/phpunit": "4.7.*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "1.3-dev" } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" + "psr-0": { + "PhpOption\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache2" ], "authors": [ { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - }, - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", + "description": "Option Type for PHP", "keywords": [ - "guid", - "identifier", - "uuid" + "language", + "option", + "php", + "type" ], - "time": "2018-07-19T23:38:55+00:00" + "time": "2015-07-25T16:39:46+00:00" }, { - "name": "sebastian/finder-facade", - "version": "1.2.2", + "name": "phpseclib/phpseclib", + "version": "2.0.21", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/finder-facade.git", - "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f" + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "9f1287e68b3f283339a9f98f67515dd619e5bf9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", - "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9f1287e68b3f283339a9f98f67515dd619e5bf9d", + "reference": "9f1287e68b3f283339a9f98f67515dd619e5bf9d", "shasum": "" }, "require": { - "symfony/finder": "~2.3|~3.0|~4.0", - "theseer/fdomdocument": "~1.3" + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" } ], - "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", - "homepage": "https://github.com/sebastianbergmann/finder-facade", - "time": "2017-11-18T17:31:49+00:00" + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2019-07-12T12:53:49+00:00" }, { - "name": "sebastian/version", - "version": "2.0.1", + "name": "predis/predis", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "url": "https://github.com/nrk/predis.git", + "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1", + "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=5.3.9" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" }, + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Predis\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "description": "Flexible and feature-complete Redis client for PHP and HHVM", + "homepage": "http://github.com/nrk/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "time": "2016-06-16T16:22:20+00:00" }, { - "name": "sentry/sentry", - "version": "1.9.2", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/getsentry/sentry-php.git", - "reference": "6b4c80ee1f5d9d5ab5bae949f4eb5d758a0bf64b" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/6b4c80ee1f5d9d5ab5bae949f4eb5d758a0bf64b", - "reference": "6b4c80ee1f5d9d5ab5bae949f4eb5d758a0bf64b", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "ext-curl": "*", - "php": "^5.3|^7.0" - }, - "conflict": { - "raven/raven": "*" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.8.0", - "monolog/monolog": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7" - }, - "suggest": { - "ext-hash": "*", - "ext-json": "*", - "ext-mbstring": "*", - "monolog/monolog": "Automatically capture Monolog events as breadcrumbs" + "php": ">=5.3.0" }, - "bin": [ - "bin/sentry" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-0": { - "Raven_": "lib/" + "psr-4": { + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "David Cramer", - "email": "dcramer@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A PHP client for Sentry (http://getsentry.com)", - "homepage": "http://getsentry.com", + "description": "Common interface for caching libraries", "keywords": [ - "log", - "logging" + "cache", + "psr", + "psr-6" ], - "time": "2018-08-18T19:41:03+00:00" + "time": "2016-08-06T20:24:11+00:00" }, { - "name": "sentry/sentry-laravel", - "version": "0.8.0", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "4ca94ed3ba6d79ad049957be574a738a3478f94c" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/4ca94ed3ba6d79ad049957be574a738a3478f94c", - "reference": "4ca94ed3ba6d79ad049957be574a738a3478f94c", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "illuminate/support": "4.*|5.*", - "php": ">=5.3.0", - "sentry/sentry": ">=1.7.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.8.0", - "orchestra/testbench": "3.*", - "phpunit/phpunit": "^4.6.6" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.8.x-dev" - }, - "laravel": { - "providers": [ - "Sentry\\SentryLaravel\\SentryLaravelServiceProvider" - ], - "aliases": { - "Sentry": "Sentry\\SentryLaravel\\SentryFacade" - } + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-0": { - "Sentry\\SentryLaravel\\": "src/" + "psr-4": { + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { - "name": "David Cramer", - "email": "dcramer@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Laravel integration for Sentry (https://sentry.io)", - "homepage": "https://sentry.io", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "errors", - "laravel", - "logging", - "sentry" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], - "time": "2017-08-11T17:29:14+00:00" + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "v6.1.3", + "name": "psr/http-client", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4" + "url": "https://github.com/php-fig/http-client.git", + "reference": "496a823ef742b632934724bf769560c2a5c7c44e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8ddcb66ac10c392d3beb54829eef8ac1438595f4", - "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/496a823ef742b632934724bf769560c2a5c7c44e", + "reference": "496a823ef742b632934724bf769560c2a5c7c44e", "shasum": "" }, "require": { - "egulias/email-validator": "~2.0", - "php": ">=7.0.0" - }, - "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.3@dev" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + "php": "^7.0", + "psr/http-message": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "files": [ - "lib/swift_required.php" - ] + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3237,71 +3403,48 @@ ], "authors": [ { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "email", - "mail", - "mailer" + "http", + "http-client", + "psr", + "psr-18" ], - "time": "2018-09-11T07:12:52+00:00" + "time": "2018-10-30T23:29:13+00:00" }, { - "name": "symfony/console", - "version": "v4.1.5", + "name": "psr/http-factory", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "d3dbe91fd5b8b11ecb73508c844bc6a490de15b4" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/d3dbe91fd5b8b11ecb73508c844bc6a490de15b4", - "reference": "d3dbe91fd5b8b11ecb73508c844bc6a490de15b4", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "php": ">=7.0.0", + "psr/http-message": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Psr\\Http\\Message\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3309,171 +3452,4322 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2018-09-30T03:38:13+00:00" + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "time": "2019-04-30T12:38:16+00:00" }, { - "name": "symfony/css-selector", - "version": "v3.1.10", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d", - "reference": "722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2018-11-20T15:27:04+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.9.9", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e", + "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e", + "shasum": "" + }, + "require": { + "dnoegel/php-xdg-base-dir": "0.1", + "ext-json": "*", + "ext-tokenizer": "*", + "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", + "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", + "php": ">=5.4.0", + "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0", + "symfony/var-dumper": "~2.7|~3.0|~4.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "hoa/console": "~2.15|~3.16", + "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.9.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "time": "2018-10-13T15:16:03+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/uuid", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "^1.0|^2.0|9.99.99", + "php": "^5.4 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^1.0 | ~2.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.9", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|^5.0|^6.5", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-ctype": "Provides support for PHP Ctype functions", + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "time": "2018-07-19T23:38:55+00:00" + }, + { + "name": "sentry/sdk", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php-sdk.git", + "reference": "4c115873c86ad5bd0ac6d962db70ca53bf8fb874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/4c115873c86ad5bd0ac6d962db70ca53bf8fb874", + "reference": "4c115873c86ad5bd0ac6d962db70ca53bf8fb874", + "shasum": "" + }, + "require": { + "http-interop/http-factory-guzzle": "^1.0", + "php-http/curl-client": "^1.0|^2.0", + "sentry/sentry": "^2.1.3" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "This is a metapackage shipping sentry/sentry with a recommended http client.", + "time": "2019-09-09T19:54:44+00:00" + }, + { + "name": "sentry/sentry", + "version": "2.1.3", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "41ef3b66c2a06e3510d6e128eec28acac388f770" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/41ef3b66c2a06e3510d6e128eec28acac388f770", + "reference": "41ef3b66c2a06e3510d6e128eec28acac388f770", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "jean85/pretty-package-versions": "^1.2", + "php": "^7.1", + "php-http/async-client-implementation": "^1.0", + "php-http/client-common": "^1.5|^2.0", + "php-http/discovery": "^1.6.1", + "php-http/httplug": "^1.1|^2.0", + "php-http/message": "^1.5", + "psr/http-message-implementation": "^1.0", + "ramsey/uuid": "^3.3", + "symfony/options-resolver": "^2.7|^3.0|^4.0", + "zendframework/zend-diactoros": "^1.4|^2.0" + }, + "conflict": { + "php-http/client-common": "1.8.0", + "raven/raven": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.13", + "monolog/monolog": "^1.3|^2.0", + "php-http/mock-client": "^1.0", + "phpstan/phpstan": "^0.10.3", + "phpstan/phpstan-phpunit": "^0.10", + "phpunit/phpunit": "^7.0", + "symfony/phpunit-bridge": "^4.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/Sdk.php" + ], + "psr-4": { + "Sentry\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "A PHP SDK for Sentry (http://sentry.io)", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], + "time": "2019-09-06T16:10:38+00:00" + }, + { + "name": "sentry/sentry-laravel", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-laravel.git", + "reference": "1e351d2257de312dfa3bdb5544b55e587bd4c00a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1e351d2257de312dfa3bdb5544b55e587bd4c00a", + "reference": "1e351d2257de312dfa3bdb5544b55e587bd4c00a", + "shasum": "" + }, + "require": { + "illuminate/support": "5.0 - 5.8 | ^6.0", + "php": "^7.1", + "sentry/sdk": "^2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.14.*", + "laravel/framework": "^6.0", + "orchestra/testbench": "^3.9", + "phpunit/phpunit": "^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + }, + "laravel": { + "providers": [ + "Sentry\\Laravel\\ServiceProvider" + ], + "aliases": { + "Sentry": "Sentry\\Laravel\\Facade" + } + } + }, + "autoload": { + "psr-0": { + "Sentry\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "Laravel SDK for Sentry (https://sentry.io)", + "homepage": "https://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "laravel", + "log", + "logging", + "sentry" + ], + "time": "2019-09-03T07:39:44+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.1", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a", + "shasum": "" + }, + "require": { + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "time": "2019-04-21T09:21:45+00:00" + }, + { + "name": "symfony/console", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "de63799239b3881b8a08f8481b22348f77ed7b36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/de63799239b3881b8a08f8481b22348f77ed7b36", + "reference": "de63799239b3881b8a08f8481b22348f77ed7b36", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", + "symfony/var-dumper": "^4.3" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T08:26:39+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "c6e5e2a00db768c92c3ae131532af4e1acc7bd03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/c6e5e2a00db768c92c3ae131532af4e1acc7bd03", + "reference": "c6e5e2a00db768c92c3ae131532af4e1acc7bd03", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2019-08-20T14:07:54+00:00" + }, + { + "name": "symfony/debug", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "afcdea44a2e399c1e4b52246ec8d54c715393ced" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/afcdea44a2e399c1e4b52246ec8d54c715393ced", + "reference": "afcdea44a2e399c1e4b52246ec8d54c715393ced", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": "<3.4" + }, + "require-dev": { + "symfony/http-kernel": "~3.4|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2019-08-20T14:27:59+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "429d0a1451d4c9c4abe1959b2986b88794b9b7d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/429d0a1451d4c9c4abe1959b2986b88794b9b7d2", + "reference": "429d0a1451d4c9c4abe1959b2986b88794b9b7d2", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "^3.4|^4.0", + "symfony/service-contracts": "^1.1", + "symfony/stopwatch": "~3.4|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T08:55:16+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", + "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-20T06:46:26+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/86c1c929f0a4b24812e1eb109262fc3372c8e9f2", + "reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2019-08-14T12:26:46+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "d804bea118ff340a12e22a79f9c7e7eb56b35adc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d804bea118ff340a12e22a79f9c7e7eb56b35adc", + "reference": "d804bea118ff340a12e22a79f9c7e7eb56b35adc", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/mime": "^4.3", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/expression-language": "~3.4|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T08:55:16+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "5e0fc71be03d52cd00c423061cfd300bd6f92a52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5e0fc71be03d52cd00c423061cfd300bd6f92a52", + "reference": "5e0fc71be03d52cd00c423061cfd300bd6f92a52", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/log": "~1.0", + "symfony/debug": "~3.4|~4.0", + "symfony/event-dispatcher": "^4.3", + "symfony/http-foundation": "^4.1.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php73": "^1.9" + }, + "conflict": { + "symfony/browser-kit": "<4.3", + "symfony/config": "<3.4", + "symfony/dependency-injection": "<4.3", + "symfony/translation": "<4.2", + "symfony/var-dumper": "<4.1.1", + "twig/twig": "<1.34|<2.4,>=2" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "^4.3", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/css-selector": "~3.4|~4.0", + "symfony/dependency-injection": "^4.3", + "symfony/dom-crawler": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", + "symfony/routing": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0", + "symfony/templating": "~3.4|~4.0", + "symfony/translation": "~4.2", + "symfony/translation-contracts": "^1.1", + "symfony/var-dumper": "^4.1.1", + "twig/twig": "^1.34|^2.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "", + "symfony/var-dumper": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T16:47:42+00:00" + }, + { + "name": "symfony/mime", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "987a05df1c6ac259b34008b932551353f4f408df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/987a05df1c6ac259b34008b932551353f4f408df", + "reference": "987a05df1c6ac259b34008b932551353f4f408df", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/dependency-injection": "~3.4|^4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2019-08-22T08:16:11+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "81c2e120522a42f623233968244baebd6b36cb6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/81c2e120522a42f623233968244baebd6b36cb6a", + "reference": "81c2e120522a42f623233968244baebd6b36cb6a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2019-08-08T09:29:19+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", + "reference": "550ebaac289296ce228a706d0867afc34687e3f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "685968b11e61a347c18bf25db32effa478be610f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/685968b11e61a347c18bf25db32effa478be610f", + "reference": "685968b11e61a347c18bf25db32effa478be610f", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6af626ae6fa37d396dc90a399c0ff08e5cfc45b2", + "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "04ce3335667451138df4307d6a9b61565560199e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e", + "reference": "04ce3335667451138df4307d6a9b61565560199e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.12.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188", + "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2019-08-06T08:03:45+00:00" + }, + { + "name": "symfony/process", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "e89969c00d762349f078db1128506f7f3dcc0d4a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/e89969c00d762349f078db1128506f7f3dcc0d4a", + "reference": "e89969c00d762349f078db1128506f7f3dcc0d4a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T08:26:39+00:00" + }, + { + "name": "symfony/psr-http-message-bridge", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/psr-http-message-bridge.git", + "reference": "9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad", + "reference": "9ab9d71f97d5c7d35a121a7fb69f74fee95cd0ad", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/http-message": "^1.0", + "symfony/http-foundation": "^3.4 || ^4.0" + }, + "require-dev": { + "nyholm/psr7": "^1.1", + "symfony/phpunit-bridge": "^3.4.20 || ^4.0", + "zendframework/zend-diactoros": "^1.4.1 || ^2.0" + }, + "suggest": { + "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\PsrHttpMessage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "PSR HTTP message bridge", + "homepage": "http://symfony.com", + "keywords": [ + "http", + "http-message", + "psr-17", + "psr-7" + ], + "time": "2019-03-11T18:22:33+00:00" + }, + { + "name": "symfony/routing", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "ff1049f6232dc5b6023b1ff1c6de56f82bcd264f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/ff1049f6232dc5b6023b1ff1c6de56f82bcd264f", + "reference": "ff1049f6232dc5b6023b1ff1c6de56f82bcd264f", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/config": "<4.2", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" + }, + "require-dev": { + "doctrine/annotations": "~1.2", + "psr/log": "~1.0", + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/http-foundation": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "time": "2019-08-26T08:26:39+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v1.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "ea7263d6b6d5f798b56a45a5b8d686725f2719a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ea7263d6b6d5f798b56a45a5b8d686725f2719a3", + "reference": "ea7263d6b6d5f798b56a45a5b8d686725f2719a3", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-08-20T14:44:19+00:00" + }, + { + "name": "symfony/translation", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "28498169dd334095fa981827992f3a24d50fed0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/28498169dd334095fa981827992f3a24d50fed0f", + "reference": "28498169dd334095fa981827992f3a24d50fed0f", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^1.1.6" + }, + "conflict": { + "symfony/config": "<3.4", + "symfony/dependency-injection": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "symfony/translation-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/console": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/finder": "~2.8|~3.0|~4.0", + "symfony/http-kernel": "~3.4|~4.0", + "symfony/intl": "~3.4|~4.0", + "symfony/service-contracts": "^1.1.2", + "symfony/var-dumper": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T08:55:16+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v1.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/325b17c24f3ee23cbecfa63ba809c6d89b5fa04a", + "reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-08-02T12:15:04+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v4.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "641043e0f3e615990a0f29479f9c117e8a6698c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/641043e0f3e615990a0f29479f9c117e8a6698c6", + "reference": "641043e0f3e615990a0f29479f9c117e8a6698c6", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.5" + }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", + "symfony/console": "<3.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0", + "twig/twig": "~1.34|~2.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "time": "2019-08-26T08:26:39+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.1", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "time": "2017-11-27T11:13:29+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1bdf24f065975594f6a117f0f1f6cabf1333b156", + "reference": "1bdf24f065975594f6a117f0f1f6cabf1333b156", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0", + "phpoption/phpoption": "^1.5", + "symfony/polyfill-ctype": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "time": "2019-09-10T21:37:39+00:00" + }, + { + "name": "z3/enemizer", + "version": "6.0.29", + "source": { + "type": "git", + "url": "https://github.com/Zarby89/Enemizer", + "reference": "tags/6.0.29" + }, + "type": "library" + }, + { + "name": "z3/entrancerandomizer", + "version": "0.6.3", + "source": { + "type": "git", + "url": "https://github.com/KevinCathcart/ALttPEntranceRandomizer", + "reference": "tags/0.6.3-pre5" + }, + "type": "library" + }, + { + "name": "zendframework/zend-diactoros", + "version": "2.1.3", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-diactoros.git", + "reference": "279723778c40164bcf984a2df12ff2c6ec5e61c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/279723778c40164bcf984a2df12ff2c6ec5e61c1", + "reference": "279723778c40164bcf984a2df12ff2c6ec5e61c1", + "shasum": "" + }, + "require": { + "php": "^7.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-dom": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^0.5.0", + "php-http/psr7-integration-tests": "dev-master", + "phpunit/phpunit": "^7.0.2", + "zendframework/zend-coding-standard": "~1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev", + "dev-develop": "2.2.x-dev", + "dev-release-1.8": "1.8.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/marshal_uri_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" + ], + "psr-4": { + "Zend\\Diactoros\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR HTTP Message implementations", + "keywords": [ + "http", + "psr", + "psr-7" + ], + "time": "2019-07-10T16:13:25+00:00" + } + ], + "packages-dev": [ + { + "name": "beyondcode/laravel-dump-server", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/beyondcode/laravel-dump-server.git", + "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a", + "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a", + "shasum": "" + }, + "require": { + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0", + "php": "^7.1", + "symfony/var-dumper": "^4.1.1" + }, + "require-dev": { + "larapack/dd": "^1.0", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BeyondCode\\DumpServer\\DumpServerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "BeyondCode\\DumpServer\\": "src" + }, + "files": [ + "helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marcel Pociot", + "role": "Developer", + "email": "marcel@beyondco.de", + "homepage": "https://beyondco.de" + } + ], + "description": "Symfony Var-Dump Server for Laravel", + "homepage": "https://github.com/beyondcode/laravel-dump-server", + "keywords": [ + "beyondcode", + "laravel-dump-server" + ], + "time": "2019-08-11T13:17:40+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2019-08-30T08:44:50+00:00" + }, + { + "name": "composer/composer", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0" + }, + "conflict": { + "symfony/console": "2.8.38" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7", + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2019-08-02T18:55:33+00:00" + }, + { + "name": "composer/semver", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "reference": "46d9139568ccb8d9e7cdd4539cab7347568a5e2e", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2019-03-19T17:25:45+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7ac1e6aec371357df067f8a688c3d6974df68fa5", + "reference": "7ac1e6aec371357df067f8a688c3d6974df68fa5", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], + "time": "2019-07-29T10:31:59+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.3.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f", + "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2019-05-27T17:52:04+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "fa4c4e861e809d6a1103bd620cce63ed91aedfeb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fa4c4e861e809d6a1103bd620cce63ed91aedfeb", + "reference": "fa4c4e861e809d6a1103bd620cce63ed91aedfeb", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^7.5@dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2019-08-08T18:11:40+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "a2c590166b2133a4633738648b6b064edae0814a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", + "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2019-03-17T17:37:11+00:00" + }, + { + "name": "filp/whoops", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "cde50e6720a39fdacb240159d3eea6865d51fd96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/cde50e6720a39fdacb240159d3eea6865d51fd96", + "reference": "cde50e6720a39fdacb240159d3eea6865d51fd96", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "role": "Developer", + "homepage": "https://github.com/filp" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "time": "2019-08-07T09:00:00+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v2.15.3", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "705490b0f282f21017d73561e9498d2b622ee34c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/705490b0f282f21017d73561e9498d2b622ee34c", + "reference": "705490b0f282f21017d73561e9498d2b622ee34c", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || ^7.0", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^4.1.6", + "symfony/event-dispatcher": "^3.0 || ^4.0", + "symfony/filesystem": "^3.0 || ^4.0", + "symfony/finder": "^3.0 || ^4.0", + "symfony/options-resolver": "^3.0 || ^4.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0", + "symfony/stopwatch": "^3.0 || ^4.0" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", + "phpunitgoodpractices/traits": "^1.8", + "symfony/phpunit-bridge": "^4.3", + "symfony/yaml": "^3.0 || ^4.0" + }, + "suggest": { + "ext-mbstring": "For handling non-UTF8 characters in cache signature.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "time": "2019-08-31T12:51:54+00:00" + }, + { + "name": "fzaninotto/faker", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", + "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^1.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "time": "2018-07-12T10:23:15+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", + "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "1.3.3", + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "time": "2016-01-20T08:20:44+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.8", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2019-01-14T23:55:14+00:00" + }, + { + "name": "league/container", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/container.git", + "reference": "235cc528636833fbf0d771ad0e2410d345e1096e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/container/zipball/235cc528636833fbf0d771ad0e2410d345e1096e", + "reference": "235cc528636833fbf0d771ad0e2410d345e1096e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "psr/container": "^1.0" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "replace": { + "orno/di": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0", + "squizlabs/php_codesniffer": "^3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Container\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" + } + ], + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", + "keywords": [ + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" + ], + "time": "2019-06-30T10:51:38+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "4eff936d83eb809bde2c57a3cea0ee9643769031" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/4eff936d83eb809bde2c57a3cea0ee9643769031", + "reference": "4eff936d83eb809bde2c57a3cea0ee9643769031", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "~2.0", + "lib-pcre": ">=7.0", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "time": "2019-08-07T15:01:07+00:00" + }, + { + "name": "mohammedmanssour/form-request-tester", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/mohammedmanssour/form-request-tester.git", + "reference": "af75375c68606f7b8a8b6377c493781cf995a4b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mohammedmanssour/form-request-tester/zipball/af75375c68606f7b8a8b6377c493781cf995a4b4", + "reference": "af75375c68606f7b8a8b6377c493781cf995a4b4", + "shasum": "" + }, + "require-dev": { + "orchestra/testbench": "~3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "MohammedManssour\\FormRequestTester\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mohammed Manssour", + "email": "manssour.mohammed@gmail.com", + "homepage": "https://mohammedmanssour.me" + } + ], + "description": "a collection of test helpers that help test form requests", + "time": "2019-02-07T21:23:23+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.9.3", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2019-08-09T12:45:53+00:00" + }, + { + "name": "nette/bootstrap", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/nette/bootstrap.git", + "reference": "e1075af05c211915e03e0c86542f3ba5433df4a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/bootstrap/zipball/e1075af05c211915e03e0c86542f3ba5433df4a3", + "reference": "e1075af05c211915e03e0c86542f3ba5433df4a3", + "shasum": "" + }, + "require": { + "nette/di": "^3.0", + "nette/utils": "^3.0", + "php": ">=7.1" + }, + "require-dev": { + "latte/latte": "^2.2", + "nette/application": "^3.0", + "nette/caching": "^3.0", + "nette/database": "^3.0", + "nette/forms": "^3.0", + "nette/http": "^3.0", + "nette/mail": "^3.0", + "nette/robot-loader": "^3.0", + "nette/safe-stream": "^2.2", + "nette/security": "^3.0", + "nette/tester": "^2.0", + "tracy/tracy": "^2.6" + }, + "suggest": { + "nette/robot-loader": "to use Configurator::createRobotLoader()", + "tracy/tracy": "to use Configurator::enableTracy()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🅱 Nette Bootstrap: the simple way to configure and bootstrap your Nette application.", + "homepage": "https://nette.org", + "keywords": [ + "bootstrapping", + "configurator", + "nette" + ], + "time": "2019-03-26T12:59:07+00:00" + }, + { + "name": "nette/di", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/nette/di.git", + "reference": "4aff517a1c6bb5c36fa09733d4cea089f529de6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/di/zipball/4aff517a1c6bb5c36fa09733d4cea089f529de6d", + "reference": "4aff517a1c6bb5c36fa09733d4cea089f529de6d", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "nette/neon": "^3.0", + "nette/php-generator": "^3.2.2", + "nette/robot-loader": "^3.2", + "nette/schema": "^1.0", + "nette/utils": "^3.0", + "php": ">=7.1" + }, + "conflict": { + "nette/bootstrap": "<3.0" + }, + "require-dev": { + "nette/tester": "^2.2", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/compatibility.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "💎 Nette Dependency Injection Container: Flexible, compiled and full-featured DIC with perfectly usable autowiring and support for all new PHP 7.1 features.", + "homepage": "https://nette.org", + "keywords": [ + "compiled", + "di", + "dic", + "factory", + "ioc", + "nette", + "static" + ], + "time": "2019-08-07T12:11:33+00:00" + }, + { + "name": "nette/finder", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/6be1b83ea68ac558aff189d640abe242e0306fe2", + "reference": "6be1b83ea68ac558aff189d640abe242e0306fe2", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4 || ~3.0.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "? Nette Finder: find files and directories with an intuitive API.", + "homepage": "https://nette.org", + "keywords": [ + "filesystem", + "glob", + "iterator", + "nette" + ], + "time": "2019-02-28T18:13:25+00:00" + }, + { + "name": "nette/neon", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/nette/neon.git", + "reference": "cbff32059cbdd8720deccf9e9eace6ee516f02eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/neon/zipball/cbff32059cbdd8720deccf9e9eace6ee516f02eb", + "reference": "cbff32059cbdd8720deccf9e9eace6ee516f02eb", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "ext-json": "*", + "php": ">=7.0" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "? Nette NEON: encodes and decodes NEON file format.", + "homepage": "http://ne-on.org", + "keywords": [ + "export", + "import", + "neon", + "nette", + "yaml" + ], + "time": "2019-02-05T21:30:40+00:00" + }, + { + "name": "nette/php-generator", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/php-generator.git", + "reference": "aea6e81437bb238e5f0e5b5ce06337433908e63b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/php-generator/zipball/aea6e81437bb238e5f0e5b5ce06337433908e63b", + "reference": "aea6e81437bb238e5f0e5b5ce06337433908e63b", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4.2 || ~3.0.0", + "php": ">=7.1" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 7.3 features.", + "homepage": "https://nette.org", + "keywords": [ + "code", + "nette", + "php", + "scaffolding" + ], + "time": "2019-07-05T13:01:56+00:00" + }, + { + "name": "nette/robot-loader", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/nette/robot-loader.git", + "reference": "0712a0e39ae7956d6a94c0ab6ad41aa842544b5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/robot-loader/zipball/0712a0e39ae7956d6a94c0ab6ad41aa842544b5c", + "reference": "0712a0e39ae7956d6a94c0ab6ad41aa842544b5c", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "nette/finder": "^2.5", + "nette/utils": "^3.0", + "php": ">=7.1" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "? Nette RobotLoader: high performance and comfortable autoloader that will search and autoload classes within your application.", + "homepage": "https://nette.org", + "keywords": [ + "autoload", + "class", + "interface", + "nette", + "trait" + ], + "time": "2019-03-08T21:57:24+00:00" + }, + { + "name": "nette/schema", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d", + "reference": "6241d8d4da39e825dd6cb5bfbe4242912f4d7e4d", + "shasum": "" + }, + "require": { + "nette/utils": "^3.0.1", + "php": ">=7.1" + }, + "require-dev": { + "nette/tester": "^2.2", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "time": "2019-04-03T15:53:25+00:00" + }, + { + "name": "nette/utils", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "bd961f49b211997202bda1d0fbc410905be370d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/bd961f49b211997202bda1d0fbc410905be370d4", + "reference": "bd961f49b211997202bda1d0fbc410905be370d4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "nette/tester": "~2.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize() and toAscii()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "time": "2019-03-22T01:00:30+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "af42d339fe2742295a54f6fdd42aaa6f8c4aca68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/af42d339fe2742295a54f6fdd42aaa6f8c4aca68", + "reference": "af42d339fe2742295a54f6fdd42aaa6f8c4aca68", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.1.4", + "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", + "php": "^7.1", + "symfony/console": "~2.8|~3.3|~4.0" + }, + "require-dev": { + "laravel/framework": "5.8.*", + "nunomaduro/larastan": "^0.3.0", + "phpstan/phpstan": "^0.11", + "phpunit/phpunit": "~8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "time": "2019-03-07T21:35:13+00:00" + }, + { + "name": "nunomaduro/larastan", + "version": "v0.3.21", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/larastan.git", + "reference": "4dca6af24373eb83aa7fcc1018495ef2680838c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/4dca6af24373eb83aa7fcc1018495ef2680838c2", + "reference": "4dca6af24373eb83aa7fcc1018495ef2680838c2", + "shasum": "" + }, + "require": { + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/container": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/contracts": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/database": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/pipeline": "5.6.*|5.7.*|5.8.*|^6.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0", + "mockery/mockery": "^1.0|0.9.*", + "orchestra/testbench": "^3.6", + "php": "^7.1.3", + "phpstan/phpstan": "^0.11.15", + "symfony/process": "^4.2" + }, + "require-dev": { + "phpunit/phpunit": "^7.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Larastan\\LarastanServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Larastan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "keywords": [ + "PHPStan", + "code analyse", + "code analysis", + "larastan", + "laravel", + "package", + "php", + "static analysis" + ], + "time": "2019-08-18T21:52:50+00:00" + }, + { + "name": "nunomaduro/phpinsights", + "version": "v1.9.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/phpinsights.git", + "reference": "7453929847df79aeaacddc2753186aa6b16cbdb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/phpinsights/zipball/7453929847df79aeaacddc2753186aa6b16cbdb4", + "reference": "7453929847df79aeaacddc2753186aa6b16cbdb4", + "shasum": "" + }, + "require": { + "composer/composer": "^1.7", + "ext-iconv": "*", + "ext-json": "*", + "league/container": "^3.2", + "object-calisthenics/phpcs-calisthenics-rules": "^3.5", + "php": "^7.2", + "phploc/phploc": "^5.0", + "sensiolabs/security-checker": "^6.0", + "symfony/console": "^4.2", + "symfony/finder": "^4.2", + "symplify/coding-standard": "^6.0.4", + "symplify/easy-coding-standard": "^6.0.4", + "symplify/package-builder": "^6.0.4" + }, + "require-dev": { + "illuminate/console": "^5.8", + "illuminate/support": "^5.8", + "localheinz/phpstan-rules": "^0.10.0", + "mockery/mockery": "^1.0", + "phpstan/phpstan": "^0.11.5", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^8.0", + "roave/no-floaters": "^1.1", + "symfony/var-dumper": "^4.2", + "thecodingmachine/phpstan-strict-rules": "^0.11.0" + }, + "bin": [ + "bin/phpinsights" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\PhpInsights\\Application\\Adapters\\Laravel\\InsightsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\PhpInsights\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Instant PHP quality checks from your console.", + "keywords": [ + "Insights", + "code", + "console", + "php", + "quality", + "source" + ], + "time": "2019-08-20T14:41:42+00:00" + }, + { + "name": "object-calisthenics/phpcs-calisthenics-rules", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/object-calisthenics/phpcs-calisthenics-rules.git", + "reference": "e4599d8c2a4a916007f57043de13bca910f8954d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/object-calisthenics/phpcs-calisthenics-rules/zipball/e4599d8c2a4a916007f57043de13bca910f8954d", + "reference": "e4599d8c2a4a916007f57043de13bca910f8954d", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5|^3.0", + "php": "^7.1", + "slevomat/coding-standard": "^5.0", + "squizlabs/php_codesniffer": "^3.4" + }, + "require-dev": { + "phpstan/phpstan": "^0.11.4", + "phpunit/phpunit": "^7.5|^8.0", + "symplify/changelog-linker": "^5.4", + "symplify/coding-standard": "^5.4", + "symplify/easy-coding-standard-tester": "^5.4", + "tracy/tracy": "^2.5" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "ObjectCalisthenics\\": "src/ObjectCalisthenics" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP CodeSniffer Object Calisthenics rules/sniffs", + "time": "2019-05-15T17:09:16+00:00" + }, + { + "name": "orchestra/testbench", + "version": "v3.8.5", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench.git", + "reference": "c53429b04669b76bf764f4f8f9ba53bbe2d2a292" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/c53429b04669b76bf764f4f8f9ba53bbe2d2a292", + "reference": "c53429b04669b76bf764f4f8f9ba53bbe2d2a292", + "shasum": "" + }, + "require": { + "laravel/framework": "~5.8.35", + "mockery/mockery": "^1.0", + "orchestra/testbench-core": "~3.8.7", + "php": ">=7.1", + "phpunit/phpunit": "^7.5 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.8-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Laravel Testing Helper for Packages Development", + "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", + "keywords": [ + "BDD", + "TDD", + "laravel", + "orchestra-platform", + "orchestral", + "testing" + ], + "time": "2019-09-11T07:44:11+00:00" + }, + { + "name": "orchestra/testbench-core", + "version": "v3.8.7", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "2122fc0c3c4e592ab142786b27d5bd6c60ca7a3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/2122fc0c3c4e592ab142786b27d5bd6c60ca7a3c", + "reference": "2122fc0c3c4e592ab142786b27d5bd6c60ca7a3c", + "shasum": "" + }, + "require": { + "fzaninotto/faker": "^1.4", + "php": ">=7.1" + }, + "require-dev": { + "laravel/framework": "~5.8.35", + "laravel/laravel": "5.8.x-dev", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.0" + }, + "suggest": { + "laravel/framework": "Required for testing (~5.8.35).", + "mockery/mockery": "Allow to use Mockery for testing (^1.0).", + "orchestra/testbench-browser-kit": "Allow to use legacy Laravel BrowserKit for testing (^3.8).", + "orchestra/testbench-dusk": "Allow to use Laravel Dusk for testing (^3.8).", + "phpunit/phpunit": "Allow to use PHPUnit for testing (^7.5 || ^8.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.8-dev" + } + }, + "autoload": { + "psr-4": { + "Orchestra\\Testbench\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Testing Helper for Laravel Development", + "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", + "keywords": [ + "BDD", + "TDD", + "laravel", + "orchestra-platform", + "orchestral", + "testing" + ], + "time": "2019-09-11T07:07:58+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" ], "authors": [ { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com", - "time": "2017-01-02T20:31:54+00:00" + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" }, { - "name": "symfony/debug", - "version": "v4.1.5", + "name": "php-cs-fixer/diff", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "b4a0b67dee59e2cae4449a8f8eabc508d622fd33" + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/b4a0b67dee59e2cae4449a8f8eabc508d622fd33", - "reference": "b4a0b67dee59e2cae4449a8f8eabc508d622fd33", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": "<3.4" + "php": "^5.6 || ^7.0" }, "require-dev": { - "symfony/http-kernel": "~3.4|~4.0" + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "symfony/process": "^3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1-dev" - } - }, "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "SpacePossum" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2018-09-22T19:04:12+00:00" + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "time": "2018-02-15T16:58:55+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v4.1.5", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/bfb30c2ad377615a463ebbc875eba64a99f6aa3e", - "reference": "bfb30c2ad377615a463ebbc875eba64a99f6aa3e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "php": "^7.1.3" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" + "php": ">=5.5" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "phpDocumentor\\Reflection\\": [ + "src" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3481,48 +7775,58 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2018-07-26T09:10:45+00:00" + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" }, { - "name": "symfony/finder", - "version": "v4.1.5", + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.1", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "f0b042d445c155501793e7b8007457f9f5bb1c8c" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/f0b042d445c155501793e7b8007457f9f5bb1c8c", - "reference": "f0b042d445c155501793e7b8007457f9f5bb1c8c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3530,53 +7834,47 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2018-09-21T12:49:42+00:00" + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2019-04-30T17:48:53+00:00" }, { - "name": "symfony/http-foundation", - "version": "v4.1.5", + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "2ce66353d0a6ea96bc54bc9ecf8bcea4eaf5896c" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/2ce66353d0a6ea96bc54bc9ecf8bcea4eaf5896c", - "reference": "2ce66353d0a6ea96bc54bc9ecf8bcea4eaf5896c", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.1" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { - "predis/predis": "~1.0", - "symfony/expression-language": "~3.4|~4.0" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3584,138 +7882,96 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "Symfony HttpFoundation Component", - "homepage": "https://symfony.com", - "time": "2018-09-30T03:47:35+00:00" + "time": "2017-07-14T14:27:02+00:00" }, { - "name": "symfony/http-kernel", - "version": "v4.1.5", + "name": "phploc/phploc", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "74b1d37bf9a1cddc38093530c0a931a310994ea5" + "url": "https://github.com/sebastianbergmann/phploc.git", + "reference": "5b714ccb7cb8ca29ccf9caf6eb1aed0131d3a884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/74b1d37bf9a1cddc38093530c0a931a310994ea5", - "reference": "74b1d37bf9a1cddc38093530c0a931a310994ea5", + "url": "https://api.github.com/repos/sebastianbergmann/phploc/zipball/5b714ccb7cb8ca29ccf9caf6eb1aed0131d3a884", + "reference": "5b714ccb7cb8ca29ccf9caf6eb1aed0131d3a884", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0", - "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "~4.1", - "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.1", - "symfony/var-dumper": "<4.1.1", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "~3.4|~4.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.1", - "symfony/dom-crawler": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~3.4|~4.0", - "symfony/var-dumper": "^4.1.1" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/var-dumper": "" + "php": "^7.2", + "sebastian/finder-facade": "^1.1", + "sebastian/version": "^2.0", + "symfony/console": "^4.0" }, + "bin": [ + "phploc" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "5.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony HttpKernel Component", - "homepage": "https://symfony.com", - "time": "2018-09-30T05:05:39+00:00" + "description": "A tool for quickly measuring the size of a PHP project.", + "homepage": "https://github.com/sebastianbergmann/phploc", + "time": "2019-03-16T10:41:19+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.9.0", + "name": "phpspec/prophecy", + "version": "1.8.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", - "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", "shasum": "" }, "require": { - "php": ">=5.3.3" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Prophecy\\": "src/Prophecy" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3723,487 +7979,510 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" }, { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-06-13T12:50:23+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.9.0", + "name": "phpstan/phpdoc-parser", + "version": "0.3.5", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "8c4ef2aefd9788238897b678a985e1d5c8df6db4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d0cd638f4634c16d8df4508e847f14e9e43168b8", - "reference": "d0cd638f4634c16d8df4508e847f14e9e43168b8", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/8c4ef2aefd9788238897b678a985e1d5c8df6db4", + "reference": "8c4ef2aefd9788238897b678a985e1d5c8df6db4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "~7.1" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "consistence/coding-standard": "^3.5", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "phing/phing": "^2.16.0", + "phpstan/phpstan": "^0.10", + "phpunit/phpunit": "^6.3", + "slevomat/coding-standard": "^4.7.2", + "squizlabs/php_codesniffer": "^3.3.2", + "symfony/process": "^3.4 || ^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "0.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "time": "2019-06-07T19:13:52+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "0.11.15", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "1be5b3a706db16ac472a4c40ec03cf4c810b118d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1be5b3a706db16ac472a4c40ec03cf4c810b118d", + "reference": "1be5b3a706db16ac472a4c40ec03cf4c810b118d", + "shasum": "" + }, + "require": { + "composer/xdebug-handler": "^1.3.0", + "jean85/pretty-package-versions": "^1.0.3", + "nette/bootstrap": "^2.4 || ^3.0", + "nette/di": "^2.4.7 || ^3.0", + "nette/robot-loader": "^3.0.1", + "nette/schema": "^1.0", + "nette/utils": "^2.4.5 || ^3.0", + "nikic/php-parser": "^4.2.3", + "php": "~7.1", + "phpstan/phpdoc-parser": "^0.3.5", + "symfony/console": "~3.2 || ~4.0", + "symfony/finder": "~3.2 || ~4.0" + }, + "conflict": { + "symfony/console": "3.4.16 || 4.1.5" + }, + "require-dev": { + "brianium/paratest": "^2.0 || ^3.0", + "consistence/coding-standard": "^3.5", + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4", + "ext-intl": "*", + "ext-mysqli": "*", + "ext-simplexml": "*", + "ext-soap": "*", + "ext-zip": "*", + "jakub-onderka/php-parallel-lint": "^1.0", + "localheinz/composer-normalize": "^1.1.0", + "phing/phing": "^2.16.0", + "phpstan/phpstan-deprecation-rules": "^0.11", + "phpstan/phpstan-php-parser": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.5.14 || ^8.0", + "slevomat/coding-standard": "^4.7.2", + "squizlabs/php_codesniffer": "^3.3.2" + }, + "bin": [ + "bin/phpstan" ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.11-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": [ + "src/", + "build/PHPStan" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" ], - "time": "2018-08-06T14:22:27+00:00" + "description": "PHPStan - PHP Static Analysis Tool", + "time": "2019-08-18T20:51:53+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "v1.9.0", + "name": "phpunit/php-code-coverage", + "version": "7.0.7", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7743bbcfff2a907e9ee4a25be13d0f8ec5e73800" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/95c50420b0baed23852452a7f0c7b527303ed5ae", - "reference": "95c50420b0baed23852452a7f0c7b527303ed5ae", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7743bbcfff2a907e9ee4a25be13d0f8ec5e73800", + "reference": "7743bbcfff2a907e9ee4a25be13d0f8ec5e73800", "shasum": "" }, "require": { - "php": ">=5.3.3" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.1.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.2.2", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.2.2" + }, + "suggest": { + "ext-xdebug": "^2.7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "7.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "role": "lead", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "coverage", + "testing", + "xunit" ], - "time": "2018-08-06T14:22:27+00:00" + "time": "2019-07-25T05:31:54+00:00" }, { - "name": "symfony/process", - "version": "v4.1.5", + "name": "phpunit/php-file-iterator", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "c64647828bc7733ba9427f1eeb1b542588635427" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c64647828bc7733ba9427f1eeb1b542588635427", - "reference": "c64647828bc7733ba9427f1eeb1b542588635427", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2018-09-08T13:24:10+00:00" + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" }, { - "name": "symfony/routing", - "version": "v4.1.5", + "name": "phpunit/php-text-template", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "d998113cf6db1e8262fdd8d5db9774c9a7be33b0" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/d998113cf6db1e8262fdd8d5db9774c9a7be33b0", - "reference": "d998113cf6db1e8262fdd8d5db9774c9a7be33b0", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, - "require": { - "php": "^7.1.3" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1-dev" - } + "require": { + "php": ">=5.3.3" }, + "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Routing Component", - "homepage": "https://symfony.com", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "router", - "routing", - "uri", - "url" + "template" ], - "time": "2018-09-08T13:24:10+00:00" + "time": "2015-06-21T13:50:34+00:00" }, { - "name": "symfony/translation", - "version": "v4.1.5", + "name": "phpunit/php-timer", + "version": "2.1.2", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "6e49130ddf150b7bfe9e34edb2f3f698aa1aa43b" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/6e49130ddf150b7bfe9e34edb2f3f698aa1aa43b", - "reference": "6e49130ddf150b7bfe9e34edb2f3f698aa1aa43b", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" + "php": "^7.1" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/intl": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "2.1-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Translation Component", - "homepage": "https://symfony.com", - "time": "2018-09-21T12:49:42+00:00" + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-06-07T04:22:29+00:00" }, { - "name": "symfony/var-dumper", - "version": "v4.1.5", + "name": "phpunit/php-token-stream", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "1509020968321c1d46408c11c142a2388b1c9b0c" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1509020968321c1d46408c11c142a2388b1c9b0c", - "reference": "1509020968321c1d46408c11c142a2388b1c9b0c", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e899757bb3df5ff6e95089132f32cd59aac2220a", + "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" + "ext-tokenizer": "*", + "php": "^7.1" }, "require-dev": { - "ext-iconv": "*", - "symfony/process": "~3.4|~4.0", - "twig/twig": "~1.34|~2.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + "phpunit/phpunit": "^7.0" }, - "bin": [ - "Resources/bin/var-dump-server" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "3.1-dev" } }, "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ - "debug", - "dump" + "tokenizer" ], - "time": "2018-09-18T12:45:12+00:00" + "time": "2019-07-25T05:29:42+00:00" }, { - "name": "symfony/yaml", - "version": "v4.1.5", + "name": "phpunit/phpunit", + "version": "8.3.4", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "ac5af7c14c4f8abf0f77419e8397eff7a370df19" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "e31cce0cf4499c0ccdbbb211a3280d36ab341e36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ac5af7c14c4f8abf0f77419e8397eff7a370df19", - "reference": "ac5af7c14c4f8abf0f77419e8397eff7a370df19", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e31cce0cf4499c0ccdbbb211a3280d36ab341e36", + "reference": "e31cce0cf4499c0ccdbbb211a3280d36ab341e36", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" + "doctrine/instantiator": "^1.2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.2", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^7.0.7", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.2", + "sebastian/exporter": "^3.1.0", + "sebastian/global-state": "^3.0.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", + "sebastian/version": "^2.0.1" }, "require-dev": { - "symfony/console": "~3.4|~4.0" + "ext-pdo": "*" }, "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0.0" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "4.1-dev" + "dev-master": "8.3-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "role": "lead", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2018-09-30T03:38:13+00:00" + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2019-08-11T06:56:55+00:00" }, { - "name": "theseer/fdomdocument", - "version": "1.6.6", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/theseer/fDOMDocument.git", - "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca", - "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "ext-dom": "*", - "lib-libxml": "*", - "php": ">=5.3.3" + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -4215,46 +8494,46 @@ ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "lead" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", - "homepage": "https://github.com/theseer/fDOMDocument", - "time": "2017-06-30T11:53:12+00:00" + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" }, { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.1", + "name": "sebastian/comparator", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4262,45 +8541,62 @@ ], "authors": [ { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2017-11-27T11:13:29+00:00" + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" }, { - "name": "vlucas/phpdotenv", - "version": "v2.5.1", + "name": "sebastian/diff", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", - "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", "shasum": "" }, "require": { - "php": ">=5.3.9" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.0" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4308,345 +8604,314 @@ ], "authors": [ { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "dotenv", - "env", - "environment" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2018-07-29T20:33:41+00:00" + "time": "2019-02-04T06:01:07+00:00" }, { - "name": "wnx/laravel-stats", - "version": "v1.7.2", + "name": "sebastian/environment", + "version": "4.2.2", "source": { "type": "git", - "url": "https://github.com/stefanzweifel/laravel-stats.git", - "reference": "d6916ba256754329277919ab9fceeaca3c9e99f7" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stefanzweifel/laravel-stats/zipball/d6916ba256754329277919ab9fceeaca3c9e99f7", - "reference": "d6916ba256754329277919ab9fceeaca3c9e99f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", + "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", "shasum": "" }, "require": { - "illuminate/console": "~5.5.0|~5.6.0|~5.7.0", - "illuminate/support": "~5.5.0|~5.6.0|~5.7.0", - "php": ">=7.0.0", - "phploc/phploc": "~4.0", - "symfony/finder": "~3.3|~4.0" + "php": "^7.1" }, "require-dev": { - "laravel/browser-kit-testing": "~2.0|~3.0|~4.0", - "laravel/dusk": "~2.0|~3.0|~4.0", - "orchestra/testbench": "~3.5", - "phpunit/phpunit": "6.*|7.*" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Wnx\\LaravelStats\\StatsServiceProvider" - ] + "branch-alias": { + "dev-master": "4.2-dev" } }, "autoload": { - "psr-4": { - "Wnx\\LaravelStats\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Stefan Zweifel", - "email": "hello@stefanzweifel.io", - "homepage": "https://stefanzweifel.io", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Get insights about your Laravel Project", - "homepage": "https://github.com/stefanzweifel/laravel-stats", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "laravel", - "statistics", - "stats", - "wnx" + "Xdebug", + "environment", + "hhvm" ], - "time": "2018-08-24T20:06:06+00:00" - }, - { - "name": "z3/enemizer", - "version": "6.0.29", - "source": { - "type": "git", - "url": "https://github.com/Zarby89/Enemizer", - "reference": "tags/6.0.29" - }, - "type": "library" + "time": "2019-05-05T09:05:15+00:00" }, { - "name": "z3/entrancerandomizer", - "version": "0.6.2", - "source": { - "type": "git", - "url": "https://github.com/AmazingAmpharos/ALttPEntranceRandomizer", - "reference": "tags/0.6.2" - }, - "type": "library" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.1.0", + "name": "sebastian/exporter", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "06a9a5947f47b3029d76118eb5c22802e5869687" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/06a9a5947f47b3029d76118eb5c22802e5869687", + "reference": "06a9a5947f47b3029d76118eb5c22802e5869687", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "^6.2.3", - "squizlabs/php_codesniffer": "^3.0.2" + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "constructor", - "instantiate" + "export", + "exporter" ], - "time": "2017-07-22T11:58:36+00:00" + "time": "2019-08-11T12:43:14+00:00" }, { - "name": "filp/whoops", - "version": "2.2.1", + "name": "sebastian/finder-facade", + "version": "1.2.2", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "e79cd403fb77fc8963a99ecc30e80ddd885b3311" + "url": "https://github.com/sebastianbergmann/finder-facade.git", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/e79cd403fb77fc8963a99ecc30e80ddd885b3311", - "reference": "e79cd403fb77fc8963a99ecc30e80ddd885b3311", + "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", + "reference": "4a3174709c2dc565fe5fb26fcf827f6a1fc7b09f", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0", - "psr/log": "^1.0.1" - }, - "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" + "symfony/finder": "~2.3|~3.0|~4.0", + "theseer/fdomdocument": "~1.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ], - "time": "2018-06-30T13:14:06+00:00" + "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.", + "homepage": "https://github.com/sebastianbergmann/finder-facade", + "time": "2017-11-18T17:31:49+00:00" }, { - "name": "fzaninotto/faker", - "version": "v1.8.0", + "name": "sebastian/global-state", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de", - "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^1.5" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "3.0-dev" } }, "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "François Zaninotto" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "data", - "faker", - "fixtures" + "global state" ], - "time": "2018-07-12T10:23:15+00:00" + "time": "2019-02-01T05:30:01+00:00" }, { - "name": "hamcrest/hamcrest-php", - "version": "v1.2.2", + "name": "sebastian/object-enumerator", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.3.2" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, "autoload": { "classmap": [ - "hamcrest" - ], - "files": [ - "hamcrest/Hamcrest.php" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD" + "BSD-3-Clause" ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } ], - "time": "2015-05-11T14:41:42+00:00" + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" }, { - "name": "mockery/mockery", - "version": "0.9.9", + "name": "sebastian/object-reflector", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "6fdb61243844dc924071d3404bb23994ea0b6856" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/6fdb61243844dc924071d3404bb23994ea0b6856", - "reference": "6fdb61243844dc924071d3404bb23994ea0b6856", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~1.1", - "lib-pcre": ">=7.0", - "php": ">=5.3.2" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.9.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { - "psr-0": { - "Mockery": "library/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4654,167 +8919,133 @@ ], "authors": [ { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", - "homepage": "http://github.com/padraic/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "time": "2017-02-28T12:52:32+00:00" + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.8.1", + "name": "sebastian/recursion-context", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", - "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": "^7.1" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "php": "^7.0" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } ], - "time": "2018-06-11T23:09:50+00:00" + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" }, { - "name": "nunomaduro/collision", - "version": "v2.0.3", + "name": "sebastian/resource-operations", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "b1f606399ae77e9479b5597cd1aa3d8ea0078176" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/b1f606399ae77e9479b5597cd1aa3d8ea0078176", - "reference": "b1f606399ae77e9479b5597cd1aa3d8ea0078176", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", "shasum": "" }, "require": { - "filp/whoops": "^2.1.4", - "jakub-onderka/php-console-highlighter": "0.3.*", - "php": "^7.1", - "symfony/console": "~2.8|~3.3|~4.0" - }, - "require-dev": { - "laravel/framework": "5.6.*", - "phpstan/phpstan": "^0.9.2", - "phpunit/phpunit": "~7.2" + "php": "^7.1" }, "type": "library", "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] + "branch-alias": { + "dev-master": "2.0-dev" } }, "autoload": { - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ], - "time": "2018-06-16T22:05:52+00:00" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" }, { - "name": "phar-io/manifest", - "version": "1.0.3", + "name": "sebastian/type", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", + "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "php": "^7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1-dev" } }, "autoload": { @@ -4827,43 +9058,39 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "lead" } ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "time": "2019-07-02T08:10:15+00:00" }, { - "name": "phar-io/version", + "name": "sebastian/version", "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=5.6" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -4874,56 +9101,43 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", - "role": "Developer" + "role": "lead" } ], - "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "name": "seld/jsonlint", + "version": "1.7.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", + "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^5.3 || ^7.0" }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "Seld\\JsonLint\\": "src/Seld/JsonLint/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4932,57 +9146,46 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "JSON Linter", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "json", + "linter", + "parser", + "validator" ], - "time": "2017-09-11T18:02:19+00:00" + "time": "2018-01-24T12:46:19+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", + "name": "seld/phar-utils", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "php": ">=5.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "Seld\\PharUtils\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4991,46 +9194,49 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13T18:44:15+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "name": "sensiolabs/security-checker", + "version": "v6.0.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "url": "https://github.com/sensiolabs/security-checker.git", + "reference": "ce8d0552dcb8d3677ab9adb6d19a5837949bfec4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/ce8d0552dcb8d3677ab9adb6d19a5837949bfec4", + "reference": "ce8d0552dcb8d3677ab9adb6d19a5837949bfec4", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "php": ">=7.1.3", + "symfony/console": "^2.8|^3.4|^4.2", + "symfony/http-client": "^4.3", + "symfony/mime": "^4.3", + "symfony/polyfill-ctype": "^1.11" }, + "bin": [ + "security-checker" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "6.0-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "SensioLabs\\Security\\": "SensioLabs/Security" } }, "notification-url": "https://packagist.org/downloads/", @@ -5039,999 +9245,1046 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A security checker for your composer.lock", + "time": "2019-06-08T06:46:26+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.8.0", + "name": "slevomat/coding-standard", + "version": "5.0.4", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "287ac3347c47918c0bf5e10335e36197ea10894c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", - "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/287ac3347c47918c0bf5e10335e36197ea10894c", + "reference": "287ac3347c47918c0bf5e10335e36197ea10894c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "php": "^7.1", + "phpstan/phpdoc-parser": "^0.3.1", + "squizlabs/php_codesniffer": "^3.4.1" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8.x-dev" - } - }, + "jakub-onderka/php-parallel-lint": "1.0.0", + "phing/phing": "2.16.1", + "phpstan/phpstan": "0.11.4", + "phpstan/phpstan-phpunit": "0.11", + "phpstan/phpstan-strict-rules": "0.11", + "phpunit/phpunit": "8.0.5" + }, + "type": "phpcodesniffer-standard", "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2018-08-05T17:53:17+00:00" + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "time": "2019-03-22T19:10:53+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "6.0.7", + "name": "squizlabs/php_codesniffer", + "version": "3.4.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a", - "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", "shasum": "" }, "require": { - "ext-dom": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "suggest": { - "ext-xdebug": "^2.6.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "6.0-dev" + "dev-master": "3.x-dev" } }, - "autoload": { - "classmap": [ - "src/" - ] - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", + "name": "Greg Sherwood", "role": "lead" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ - "coverage", - "testing", - "xunit" + "phpcs", + "standards" ], - "time": "2018-06-01T07:51:50+00:00" + "time": "2019-04-10T23:49:02+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "name": "symfony/cache", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "url": "https://github.com/symfony/cache.git", + "reference": "1d8f7fee990c586f275cde1a9fc883d6b1e2d43e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/symfony/cache/zipball/1d8f7fee990c586f275cde1a9fc883d6b1e2d43e", + "reference": "1d8f7fee990c586f275cde1a9fc883d6b1e2d43e", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1.3", + "psr/cache": "~1.0", + "psr/log": "~1.0", + "symfony/cache-contracts": "^1.1", + "symfony/service-contracts": "^1.1", + "symfony/var-exporter": "^4.2" + }, + "conflict": { + "doctrine/dbal": "<2.5", + "symfony/dependency-injection": "<3.4", + "symfony/var-dumper": "<3.4" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "cache/integration-tests": "dev-master", + "doctrine/cache": "~1.6", + "doctrine/dbal": "~2.5", + "predis/predis": "~1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "~4.2", + "symfony/dependency-injection": "~3.4|~4.1", + "symfony/var-dumper": "^4.1.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "description": "Symfony Cache component with PSR-6, PSR-16, and tags", + "homepage": "https://symfony.com", "keywords": [ - "filesystem", - "iterator" + "caching", + "psr6" ], - "time": "2018-09-13T20:33:42+00:00" + "time": "2019-08-26T08:26:39+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "symfony/cache-contracts", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "ec5524b669744b5f1dc9c66d3c2b091eb7e7f0db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ec5524b669744b5f1dc9c66d3c2b091eb7e7f0db", + "reference": "ec5524b669744b5f1dc9c66d3c2b091eb7e7f0db", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1.3", + "psr/cache": "^1.0" + }, + "suggest": { + "symfony/cache-implementation": "" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-06-13T11:15:36+00:00" }, { - "name": "phpunit/php-timer", - "version": "2.0.0", + "name": "symfony/config", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" + "url": "https://github.com/symfony/config.git", + "reference": "07d49c0f823e0bc367c6d84e35b61419188a5ece" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", - "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", + "url": "https://api.github.com/repos/symfony/config/zipball/07d49c0f823e0bc367c6d84e35b61419188a5ece", + "reference": "07d49c0f823e0bc367c6d84e35b61419188a5ece", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/finder": "~3.4|~4.0", + "symfony/messenger": "~4.1", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } ], - "time": "2018-02-01T13:07:23+00:00" + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T08:26:39+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "3.0.0", + "name": "symfony/dependency-injection", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "d3ad14b66ac773ba6123622eb9b5b010165fe3d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", - "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d3ad14b66ac773ba6123622eb9b5b010165fe3d9", + "reference": "d3ad14b66ac773ba6123622eb9b5b010165fe3d9", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.1" + "php": "^7.1.3", + "psr/container": "^1.0", + "symfony/service-contracts": "^1.1.6" + }, + "conflict": { + "symfony/config": "<4.3", + "symfony/finder": "<3.4", + "symfony/proxy-manager-bridge": "<3.4", + "symfony/yaml": "<3.4" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "symfony/config": "^4.3", + "symfony/expression-language": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2018-02-01T13:16:43+00:00" + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T16:27:33+00:00" }, { - "name": "phpunit/phpunit", - "version": "7.3.5", + "name": "symfony/dom-crawler", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "7b331efabbb628c518c408fdfcaf571156775de2" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "cc686552948d627528c0e2e759186dff67c2610e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7b331efabbb628c518c408fdfcaf571156775de2", - "reference": "7b331efabbb628c518c408fdfcaf571156775de2", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/cc686552948d627528c0e2e759186dff67c2610e", + "reference": "cc686552948d627528c0e2e759186dff67c2610e", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.0", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", - "sebastian/version": "^2.0.1" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit-mock-objects": "*" + "masterminds/html5": "<2.6" }, "require-dev": { - "ext-pdo": "*" + "masterminds/html5": "^2.6", + "symfony/css-selector": "~3.4|~4.0" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "symfony/css-selector": "" }, - "bin": [ - "phpunit" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "7.3-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2018-09-08T15:14:29+00:00" + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2019-08-26T08:26:39+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "name": "symfony/filesystem", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "url": "https://github.com/symfony/filesystem.git", + "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/9abbb7ef96a51f4d7e69627bc6f63307994e4263", + "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2019-08-20T14:07:54+00:00" }, { - "name": "sebastian/comparator", - "version": "3.0.2", + "name": "symfony/http-client", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "url": "https://github.com/symfony/http-client.git", + "reference": "9a4fa769269ed730196a5c52c742b30600cf1e87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/symfony/http-client/zipball/9a4fa769269ed730196a5c52c742b30600cf1e87", + "reference": "9a4fa769269ed730196a5c52c742b30600cf1e87", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" + "php": "^7.1.3", + "psr/log": "^1.0", + "symfony/http-client-contracts": "^1.1.6", + "symfony/polyfill-php73": "^1.11" + }, + "provide": { + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "1.1" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "nyholm/psr7": "^1.0", + "psr/http-client": "^1.0", + "symfony/http-kernel": "^4.3", + "symfony/process": "^4.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2018-07-12T15:12:46+00:00" + "description": "Symfony HttpClient component", + "homepage": "https://symfony.com", + "time": "2019-08-20T14:27:59+00:00" }, { - "name": "sebastian/diff", - "version": "3.0.1", + "name": "symfony/http-client-contracts", + "version": "v1.1.6", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "366541b989927187c4ca70490a35615d3fef2dce" + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "6005fe61a33724405d56eb5b055d5d370192a1bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce", - "reference": "366541b989927187c4ca70490a35615d3fef2dce", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/6005fe61a33724405d56eb5b055d5d370192a1bd", + "reference": "6005fe61a33724405d56eb5b055d5d370192a1bd", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1.3" }, - "require-dev": { - "phpunit/phpunit": "^7.0", - "symfony/process": "^2 || ^3.3 || ^4" + "suggest": { + "symfony/http-client-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.1-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "time": "2018-06-10T07:54:39+00:00" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-08-08T10:05:21+00:00" }, { - "name": "sebastian/environment", - "version": "3.1.0", + "name": "symfony/polyfill-php70", + "version": "v1.12.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "54b4c428a0054e254223797d2713c31e08610831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/54b4c428a0054e254223797d2713c31e08610831", + "reference": "54b4c428a0054e254223797d2713c31e08610831", "shasum": "" }, "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.1" + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "1.12-dev" } }, "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], "classmap": [ - "src/" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "compatibility", + "polyfill", + "portable", + "shim" ], - "time": "2017-07-01T08:51:00+00:00" + "time": "2019-08-06T08:03:45+00:00" }, { - "name": "sebastian/exporter", - "version": "3.1.0", + "name": "symfony/stopwatch", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "1e4ff456bd625be5032fac9be4294e60442e9b71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e4ff456bd625be5032fac9be4294e60442e9b71", + "reference": "1e4ff456bd625be5032fac9be4294e60442e9b71", "shasum": "" }, - "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, + "require": { + "php": "^7.1.3", + "symfony/service-contracts": "^1.0" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2017-04-03T13:19:02+00:00" + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2019-08-07T11:52:19+00:00" }, { - "name": "sebastian/global-state", - "version": "2.0.0", + "name": "symfony/var-exporter", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "d5b4e2d334c1d80e42876c7d489896cfd37562f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/d5b4e2d334c1d80e42876c7d489896cfd37562f2", + "reference": "d5b4e2d334c1d80e42876c7d489896cfd37562f2", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" + "symfony/var-dumper": "^4.1.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "A blend of var_export() + serialize() to turn any serializable data structure to plain PHP code", + "homepage": "https://symfony.com", "keywords": [ - "global state" + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" ], - "time": "2017-04-27T15:39:26+00:00" + "time": "2019-08-22T07:33:08+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "3.0.3", + "name": "symfony/yaml", + "version": "v4.3.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "url": "https://github.com/symfony/yaml.git", + "reference": "5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/symfony/yaml/zipball/5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686", + "reference": "5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.1.3", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.3-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2019-08-20T14:27:59+00:00" }, { - "name": "sebastian/object-reflector", - "version": "1.1.1", + "name": "symplify/coding-standard", + "version": "v6.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "url": "https://github.com/Symplify/CodingStandard.git", + "reference": "d16273e5e71960f49e448300fbe44d6f5292aeee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/Symplify/CodingStandard/zipball/d16273e5e71960f49e448300fbe44d6f5292aeee", + "reference": "d16273e5e71960f49e448300fbe44d6f5292aeee", "shasum": "" }, "require": { - "php": "^7.0" + "friendsofphp/php-cs-fixer": "^2.15", + "nette/finder": "^2.4", + "nette/utils": "^2.5|^3.0", + "php": "^7.1", + "phpstan/phpdoc-parser": "^0.3.4", + "squizlabs/php_codesniffer": "^3.4", + "symplify/package-builder": "^6.0.5" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "nette/application": "^2.4|^3.0", + "phpunit/phpunit": "^7.5|^8.0", + "symplify/easy-coding-standard-tester": "^6.0.5", + "symplify/package-builder": "^6.0.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "6.1-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symplify\\CodingStandard\\": "src", + "Symplify\\CodingStandard\\TokenRunner\\": "packages/TokenRunner/src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } + "MIT" ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "description": "Set of Symplify rules for PHP_CodeSniffer and PHP CS Fixer.", + "time": "2019-07-26T14:48:44+00:00" }, { - "name": "sebastian/recursion-context", - "version": "3.0.0", + "name": "symplify/easy-coding-standard", + "version": "v6.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "url": "https://github.com/Symplify/EasyCodingStandard.git", + "reference": "5893608bde2bf5bd5f48d977481582e3d2f90daa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/Symplify/EasyCodingStandard/zipball/5893608bde2bf5bd5f48d977481582e3d2f90daa", + "reference": "5893608bde2bf5bd5f48d977481582e3d2f90daa", "shasum": "" }, "require": { - "php": "^7.0" + "composer/xdebug-handler": "^1.3", + "friendsofphp/php-cs-fixer": "^2.15", + "jean85/pretty-package-versions": "^1.2", + "nette/robot-loader": "^3.1.0", + "nette/utils": "^2.5|^3.0", + "ocramius/package-versions": "^1.3", + "php": "^7.1", + "psr/simple-cache": "^1.0", + "slevomat/coding-standard": "^5.0.1", + "squizlabs/php_codesniffer": "^3.4", + "symfony/cache": "^3.4|^4.2", + "symfony/config": "^3.4|^4.2", + "symfony/console": "^3.4|^4.2", + "symfony/dependency-injection": "^3.4.10|^4.2", + "symfony/finder": "^3.4|^4.2", + "symfony/http-kernel": "^3.4|^4.2", + "symfony/yaml": "^3.4|^4.2", + "symplify/coding-standard": "^6.0.5", + "symplify/package-builder": "^6.0.5" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^7.5|^8.0", + "symplify/easy-coding-standard-tester": "^6.0.5" }, + "bin": [ + "bin/ecs" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "6.1-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symplify\\EasyCodingStandard\\": "src", + "Symplify\\EasyCodingStandard\\ChangedFilesDetector\\": "packages/ChangedFilesDetector/src", + "Symplify\\EasyCodingStandard\\Configuration\\": "packages/Configuration/src", + "Symplify\\EasyCodingStandard\\FixerRunner\\": "packages/FixerRunner/src", + "Symplify\\EasyCodingStandard\\SniffRunner\\": "packages/SniffRunner/src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } + "MIT" ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "description": "Use Coding Standard with 0-knowledge of PHP-CS-Fixer and PHP_CodeSniffer.", + "time": "2019-07-26T14:48:44+00:00" }, { - "name": "sebastian/resource-operations", - "version": "1.0.0", + "name": "symplify/package-builder", + "version": "v6.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "url": "https://github.com/Symplify/PackageBuilder.git", + "reference": "f531e03f87c89b26605f1cc1022160e398108ba1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/Symplify/PackageBuilder/zipball/f531e03f87c89b26605f1cc1022160e398108ba1", + "reference": "f531e03f87c89b26605f1cc1022160e398108ba1", "shasum": "" }, "require": { - "php": ">=5.6.0" + "nette/finder": "^2.4", + "nette/utils": "^2.5|^3.0", + "php": "^7.1", + "symfony/config": "^3.4|^4.2", + "symfony/console": "^3.4|^4.2", + "symfony/debug": "^3.4|^4.2", + "symfony/dependency-injection": "^3.4.10|^4.2", + "symfony/finder": "^3.4|^4.2", + "symfony/http-kernel": "^3.4|^4.2", + "symfony/yaml": "^3.4|^4.2" + }, + "require-dev": { + "phpunit/phpunit": "^7.5|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "6.1-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Symplify\\PackageBuilder\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } + "MIT" ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "description": "Dependency Injection, Console and Kernel toolkit for Symplify packages.", + "time": "2019-07-22T21:06:43+00:00" }, { - "name": "symfony/dom-crawler", - "version": "v3.1.10", + "name": "theseer/fdomdocument", + "version": "1.6.6", "source": { "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "7eede2a901a19928494194f7d1815a77b9a473a0" + "url": "https://github.com/theseer/fDOMDocument.git", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7eede2a901a19928494194f7d1815a77b9a473a0", - "reference": "7eede2a901a19928494194f7d1815a77b9a473a0", + "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/6e8203e40a32a9c770bcb62fe37e68b948da6dca", + "reference": "6e8203e40a32a9c770bcb62fe37e68b948da6dca", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "symfony/css-selector": "~2.8|~3.0" - }, - "suggest": { - "symfony/css-selector": "" + "ext-dom": "*", + "lib-libxml": "*", + "php": ">=5.3.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "lead" } ], - "description": "Symfony DomCrawler Component", - "homepage": "https://symfony.com", - "time": "2017-01-21T17:13:55+00:00" + "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.", + "homepage": "https://github.com/theseer/fDOMDocument", + "time": "2017-06-30T11:53:12+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.0", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { @@ -6058,28 +10311,28 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07T12:08:54+00:00" + "time": "2019-06-13T22:48:21+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", "extra": { @@ -6108,16 +10361,18 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2019-08-24T08:43:50+00:00" } ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": { + "mohammedmanssour/form-request-tester": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=7.2.0", + "php": ">=7.2.18", "ext-bcmath": "*" }, "platform-dev": [] diff --git a/config/alttp.php b/config/alttp.php index cd4e6021c..8843f7776 100644 --- a/config/alttp.php +++ b/config/alttp.php @@ -1,743 +1,377 @@ [ - 'item' => [ - 'count' => [ - 'ProgressiveSword' => 8, - 'ProgressiveShield' => 6, - 'ProgressiveArmor' => 4, - 'BottleWithRandom' => 8, - 'TwentyRupees' => 14, - 'HalfMagic' => 2, - 'Lamp' => 3, - 'FiveRupees' => 2, - 'Arrow' => 0, - 'SilverArrowUpgrade' => 2, - ], - 'overflow' => [ - 'Armor' => 'TwentyRupees', - 'Bottle' => 'TwentyRupees', - 'Shield' => 'TwentyRupees', - 'Sword' => 'TwentyRupees', - ], - 'require' => [ - 'Lamp' => 3, - ], - ], - 'region' => [ - 'requireBetterBow' => true, - 'requireBetterSword' => true, - ], - 'rom' => [ - 'compassOnPickup' => 'on', - 'HardMode' => -1, - ], - 'variations' => [ - 'key-sanity' => [ - 'region' => [ - 'wildKeys' => true, - 'wildBigKeys' => true, - 'wildMaps' => true, - 'wildCompasses' => true, - ], - 'rom' => [ - 'mapOnPickup' => true, - 'freeItemText' => true, - 'freeItemMenu' => 0x0F, - ], - ], - 'retro' => [ - 'region' => [ - 'takeAnys' => true, - 'wildKeys' => true, - ], - 'rom' => [ - 'genericKeys' => true, - 'rupeeBow' => true, - ], - ], - 'ohko' => [ - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 0, - ], - ], - 'timed-ohko' => [ - 'item' => [ - 'count' => [ - 'TwentyRupees' => 0, - 'OneRupee' => 0, - 'FiftyRupees' => 5, - 'ThreeHundredRupees' => 7, - 'GreenClock' => 17, - ], - 'overflow' => [ // 13 things - 'replacement' => [ - 'Armor' => 'GreenClock', - 'Bottle' => 'GreenClock', - 'Shield' => 'GreenClock', - 'Sword' => 'GreenClock', - ], - ], - 'value' => [ - 'GreenClock' => 240, - ], - ], - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 20 * 60, - ], - ], - 'timed-race' => [ - 'item' => [ - 'count' => [ - 'TwentyRupees' => 0, - 'OneRupee' => 0, - 'FiveRupees' => 0, - 'ThreeBombs' => 0, - 'FiftyRupees' => 5, - 'OneHundredRupees' => 3, - 'ThreeHundredRupees' => 6, - 'GreenClock' => 20, - 'BlueClock' => 10, - 'RedClock' => 10, - ], - 'value' => [ - 'GreenClock' => 240, // reversed for stopwatch - 'BlueClock' => 120, - 'RedClock' => -120, - 'BombUpgrade5' => 2, - 'BombUpgrade10' => 3, - ], - ], - 'rom' => [ - 'timerMode' => 'stopwatch', - 'timerStart' => 0, - ], - ], - ], - ], - 'normal' => [ - 'variations' => [ - 'key-sanity' => [ - 'region' => [ - 'wildKeys' => true, - 'wildBigKeys' => true, - 'wildMaps' => true, - 'wildCompasses' => true, - ], - 'rom' => [ - 'mapOnPickup' => true, - 'compassOnPickup' => 'pickup', - 'freeItemText' => true, - 'freeItemMenu' => 0x0F, - ], - ], - 'retro' => [ - 'item' => [ - 'count' => [ - 'KeyA2' => 0, - 'KeyD1' => 0, - 'TwentyRupees' => 38, - ], - ], - 'region' => [ - 'takeAnys' => true, - 'wildKeys' => true, - ], - 'rom' => [ - 'genericKeys' => true, - 'rupeeBow' => true, - ], - ], - 'ohko' => [ - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 0, - ], - ], - 'timed-ohko' => [ - 'item' => [ - 'count' => [ - 'TwentyRupees' => 0, - 'OneHundredRupees' => 4, - 'ThreeHundredRupees' => 5, - 'GreenClock' => 25, - ], - 'value' => [ - 'GreenClock' => 240, - ], - ], - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 10 * 60, - ], - ], - 'timed-race' => [ - 'item' => [ - 'count' => [ - 'TwentyRupees' => 0, - 'OneRupee' => 0, - 'FiveRupees' => 0, - 'ThreeBombs' => 0, - 'OneHundredRupees' => 3, - 'ThreeHundredRupees' => 6, - 'GreenClock' => 20, - 'BlueClock' => 10, - 'RedClock' => 10, - ], - 'value' => [ - 'GreenClock' => 240, // reversed for stopwatch - 'BlueClock' => 120, - 'RedClock' => -120, - 'BombUpgrade5' => 2, - 'BombUpgrade10' => 3, - ], - ], - 'rom' => [ - 'timerMode' => 'stopwatch', - 'timerStart' => 0, - ], - ], - ], - ], - 'hard' => [ - 'item' => [ - 'count' => [ - 'ArrowUpgrade5' => 0, - 'ArrowUpgrade10' => 0, - 'BombUpgrade5' => 0, - 'BombUpgrade10' => 0, - 'BossHeartContainer' => 6, - 'HeartContainer' => 0, - 'HalfMagic' => 0, - 'QuarterMagic' => 0, - 'SilverArrowUpgrade' => 1, - 'PieceOfHeart' => 20, - 'FiveRupees' => 14, - ], - 'overflow' => [ - 'count' => [ - 'Armor' => 1, - 'Shield' => 2, - 'Sword' => 3, - ], - ], - ], - 'rom' => [ - 'HardMode' => 1, - ], - 'variations' => [ - 'key-sanity' => [ - 'region' => [ - 'wildKeys' => true, - 'wildBigKeys' => true, - 'wildMaps' => true, - 'wildCompasses' => true, - ], - 'rom' => [ - 'mapOnPickup' => true, - 'compassOnPickup' => 'pickup', - 'freeItemText' => true, - 'freeItemMenu' => 0x0F, - ], - ], - 'retro' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 33, - 'BossHeartContainer' => 2, - 'KeyA2' => 0, - 'KeyD1' => 0, - 'KeyD7' => 0, - 'KeyP3' => 0, - ], - ], - 'region' => [ - 'takeAnys' => true, - 'wildKeys' => true, - ], - 'rom' => [ - 'genericKeys' => true, - 'rupeeBow' => true, - ], - ], - 'ohko' => [ - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 0, - ], - ], - 'timed-ohko' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 0, - 'TwentyRupees' => 21, - 'GreenClock' => 20, - 'RedClock' => 1, - ], - 'value' => [ - 'GreenClock' => 240, - 'RedClock' => - 32400, - ], - ], - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 7.5 * 60, - ], - ], - 'timed-race' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 0, - 'TwentyRupees' => 2, - 'GreenClock' => 20, - 'BlueClock' => 10, - 'RedClock' => 10, - ], - 'value' => [ - 'GreenClock' => 240, // reversed for stopwatch - 'BlueClock' => 120, - 'RedClock' => -120, - ], - ], - 'rom' => [ - 'timerMode' => 'stopwatch', - 'timerStart' => 0, - ], - ], - ], - ], - 'expert' => [ - 'item' => [ - 'count' => [ - 'ArrowUpgrade5' => 0, - 'ArrowUpgrade10' => 0, - 'BombUpgrade5' => 0, - 'BombUpgrade10' => 0, - 'BossHeartContainer' => 1, - 'HeartContainer' => 0, - 'HalfMagic' => 0, - 'QuarterMagic' => 0, - 'PieceOfHeart' => 20, - 'SilverArrowUpgrade' => 1, - 'FiveRupees' => 19, - ], - 'overflow' => [ - 'count' => [ - 'Armor' => 0, - 'Shield' => 1, - 'Sword' => 2, - ], - ], - ], - 'rom' => [ - 'HardMode' => 2, - ], - 'variations' => [ - 'key-sanity' => [ - 'region' => [ - 'wildKeys' => true, - 'wildBigKeys' => true, - 'wildMaps' => true, - 'wildCompasses' => true, - ], - 'rom' => [ - 'mapOnPickup' => true, - 'compassOnPickup' => 'pickup', - 'freeItemText' => true, - 'freeItemMenu' => 0x0F, - ], - ], - 'retro' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 35, - 'BossHeartContainer' => 0, - 'KeyA2' => 0, - 'KeyD1' => 0, - 'KeyD7' => 0, - 'KeyP3' => 0, - ], - ], - 'region' => [ - 'takeAnys' => true, - 'wildKeys' => true, - ], - 'rom' => [ - 'genericKeys' => true, - 'rupeeBow' => true, - ], - ], - 'ohko' => [ - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 0, - ], - ], - 'timed-ohko' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 0, - 'TwentyRupees' => 14, - 'FiveRupees' => 15, - 'GreenClock' => 15, - 'RedClock' => 3, - ], - 'value' => [ - 'GreenClock' => 240, - 'RedClock' => - 32400, - ], - ], - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 5 * 60, - ], - ], - 'timed-race' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 0, - 'TwentyRupees' => 7, - 'GreenClock' => 20, - 'BlueClock' => 10, - 'RedClock' => 10, - ], - 'value' => [ - 'GreenClock' => 240, // reversed for stopwatch - 'BlueClock' => 120, - 'RedClock' => -120, - ], - ], - 'rom' => [ - 'timerMode' => 'stopwatch', - 'timerStart' => 0, - ], - ], - ], - ], - 'insane' => [ - 'item' => [ - 'count' => [ - 'ArrowUpgrade5' => 0, - 'ArrowUpgrade10' => 0, - 'BombUpgrade5' => 0, - 'BombUpgrade10' => 0, - 'BossHeartContainer' => 0, - 'HeartContainer' => 0, - 'HalfMagic' => 0, - 'QuarterMagic' => 0, - 'SilverArrowUpgrade' => 0, - 'PieceOfHeart' => 0, - 'FiveRupees' => 41, - ], - 'overflow' => [ - 'count' => [ - 'Armor' => 0, - 'Shield' => 0, - 'Sword' => 2, - ], - ], - ], - 'rom' => [ - 'HardMode' => 3, - ], - 'variations' => [ - 'key-sanity' => [ - 'region' => [ - 'wildKeys' => true, - 'wildBigKeys' => true, - 'wildMaps' => true, - 'wildCompasses' => true, - ], - 'rom' => [ - 'mapOnPickup' => true, - 'compassOnPickup' => 'pickup', - 'freeItemText' => true, - 'freeItemMenu' => 0x0F, - ], - ], - 'retro' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 56, - 'KeyA2' => 0, - 'KeyD1' => 0, - 'KeyD7' => 0, - 'KeyP3' => 0, - ], - ], - 'region' => [ - 'takeAnys' => true, - 'wildKeys' => true, - ], - 'rom' => [ - 'genericKeys' => true, - 'rupeeBow' => true, - ], - ], - 'ohko' => [ - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 0, - ], - ], - 'timed-ohko' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 26, - 'GreenClock' => 10, - 'RedClock' => 5, - ], - 'value' => [ - 'GreenClock' => 240, - 'RedClock' => - 32400, - ], - ], - 'region' => [ - 'cantTakeDamage' => true, - ], - 'rom' => [ - 'timerMode' => 'countdown-ohko', - 'timerStart' => 0, - ], - ], - 'timed-race' => [ - 'item' => [ - 'count' => [ - 'FiveRupees' => 1, - 'GreenClock' => 20, - 'BlueClock' => 10, - 'RedClock' => 10, - ], - 'value' => [ - 'GreenClock' => 240, // reversed for stopwatch - 'BlueClock' => 120, - 'RedClock' => -120, - ], - ], - 'rom' => [ - 'timerMode' => 'stopwatch', - 'timerStart' => 0, - ], - ], - ], - ], - 'custom' => [ - 'prize' => [ - 'crossWorld' => false, - 'shufflePendants' => false, - 'shuffleCrystals' => false, - ], - 'region' => [ - 'bossNormalLocation' => false, - 'pyramidBowUpgrade' => false, - 'bossHaveKey' => false, - 'forceSkullWoodsKey' => false, - 'wildKeys' => false, - 'wildBigKeys' => false, - 'wildMaps' => false, - 'wildCompasses' => false, - ], - 'rom' => [ - 'HardMode' => 0, - 'genericKeys' => false, - ], - 'spoil' => [ - 'BootsLocation' => false, - ], - 'sprite' => [ - 'shuffleOverworldBonkPrizes' => false, - ], - ], - 'vanilla' => [ - 'prize' => [ - 'crossWorld' => false, - 'shufflePendants' => false, - 'shuffleCrystals' => false, - ], - 'region' => [ - 'swordsInPool' => false, - 'pyramidBowUpgrade' => true, - 'forceSkullWoodsKey' => true, - 'wildKeys' => false, - 'wildBigKeys' => false, - 'wildMaps' => false, - 'wildCompasses' => false, - ], - 'rom' => [ - 'HardMode' => 0, - ], - 'sprite' => [ - 'shuffleOverworldBonkPrizes' => false, - ], - ], - 'goals' => [ - 'triforce-hunt' => [ - 'item' => [ - 'count' => [ - 'TriforcePiece' => 30, - ], - 'Goal' => [ - 'Required' => 20, - 'Icon' => 'triforce', - ], - ], - ], - ], - 'randomizer' => [ - 'entrance' => [ - 'difficulties' => [ - 'easy' => 'Easy', - 'normal' => 'Normal', - 'hard' => 'Hard', - 'expert' => 'Expert', - 'insane' => 'Insane', - ], - 'goals' => [ - 'ganon' => 'Defeat Ganon', - 'crystals' => 'Crystals', - 'dungeons' => 'All Dungeons', - 'pedestal' => 'Master Sword Pedestal', - 'triforcehunt' => 'Triforce Pieces', - ], - 'logics' => [ - 'NoGlitches' => 'No Glitches', - ], - 'modes' => [ - 'open' => 'Open', - 'swordless' => 'Swordless', - ], - 'shuffles' => [ - 'simple' => 'Simple', - 'restricted' => 'Restricted', - 'full' => 'Full', - 'crossed' => 'Crossed', - 'insanity' => 'Insanity', - ], - 'variations' => [ - 'none' => 'None', - 'timed-race' => 'Timed Race', - 'timed-ohko' => 'Timed OHKO', - 'ohko' => 'OHKO', - 'triforce-hunt' => 'Triforce Piece Hunt', - 'key-sanity' => 'Keysanity', - 'retro' => 'Retro', - ], - ], - 'item' => [ - 'difficulties' => [ - 'easy' => 'Easy', - 'normal' => 'Normal', - 'hard' => 'Hard', - 'expert' => 'Expert', - 'insane' => 'Insane', - ], - 'goals' => [ - 'ganon' => 'Defeat Ganon', - 'dungeons' => 'All Dungeons', - 'pedestal' => 'Master Sword Pedestal', - 'triforce-hunt' => 'Triforce Pieces', - ], - 'logics' => [ - 'NoGlitches' => 'No Glitches', - 'OverworldGlitches' => 'Overworld Glitches', - 'MajorGlitches' => 'Major Glitches', - 'None' => 'None (I know what I’m doing)', - ], - 'modes' => [ - 'standard' => 'Standard', - 'open' => 'Open', - 'inverted' => 'Inverted', - ], - 'weapons' => [ - 'randomized' => 'Randomized', - 'uncle' => 'Uncle Assured', - 'swordless' => 'Swordless', - ], - 'variations' => [ - 'none' => 'None', - 'key-sanity' => 'Keysanity', - 'retro' => 'Retro', - 'timed-race' => 'Timed Race', - 'timed-ohko' => 'Timed OHKO', - 'ohko' => 'OHKO', - ], - 'difficulty_adjustments' => [ - -1 => 'Easy', - 0 => 'Normal', - 1 => 'Hard', - 2 => 'Expert', - 3 => 'Insane', - ], - ], - 'daily_weights' => [ - 'item' => [ - 'difficulties' => [ - 'easy' => 20, - 'normal' => 60, - 'hard' => 10, - 'expert' => 7, - 'insane' => 3, - ], - 'goals' => [ - 'ganon' => 60, - 'dungeons' => 10, - 'pedestal' => 20, - 'triforce-hunt' => 10, - ], - 'logics' => [ - 'NoGlitches' => 85, - 'OverworldGlitches' => 13, - 'MajorGlitches' => 2, - ], - 'modes' => [ - 'standard' => 30, - 'open' => 30, - 'inverted' => 40, - ], - 'weapons' => [ - 'randomized' => 30, - 'uncle' => 50, - 'swordless' => 20, - ], - 'variations' => [ - 'none' => 69, - 'timed-race' => 0, - 'timed-ohko' => 5, - 'ohko' => 1, - 'key-sanity' => 15, - 'retro' => 15, - ], - ], - ], - ], + 'custom' => [ + 'prize' => [ + 'crossWorld' => false, + 'shufflePendants' => false, + 'shuffleCrystals' => false, + ], + 'region' => [ + 'bossNormalLocation' => false, + 'pyramidBowUpgrade' => false, + 'bossHaveKey' => false, + 'forceSkullWoodsKey' => false, + 'wildKeys' => false, + 'wildBigKeys' => false, + 'wildMaps' => false, + 'wildCompasses' => false, + ], + 'rom' => [ + 'HardMode' => 0, + 'genericKeys' => false, + ], + 'spoil' => [ + 'BootsLocation' => false, + ], + ], + 'goals' => [ + 'triforce-hunt' => [ + 'item' => [ + 'count' => [ + 'TriforcePiece' => 30, + ], + 'Goal' => [ + 'Required' => 20, + 'Icon' => 'triforce', + ], + ], + ], + ], + 'randomizer' => [ + 'item' => [ + 'presets' => [ + 'custom' => [], + 'beginner' => [ + 'glitches_required' => 'none', + 'item_placement' => 'basic', + 'dungeon_items' => 'standard', + 'accessibility' => 'locations', + 'goal' => 'ganon', + 'tower_open' => '7', + 'ganon_open' => '7', + 'world_state' => 'standard', + 'entrance_shuffle' => 'none', + 'boss_shuffle' => 'none', + 'enemy_shuffle' => 'none', + 'hints' => 'on', + 'weapons' => 'vanilla', + 'item_pool' => 'normal', + 'item_functionality' => 'normal', + 'enemy_damage' => 'default', + 'enemy_health' => 'default', + ], + 'default' => [ + 'glitches_required' => 'none', + 'item_placement' => 'advanced', + 'dungeon_items' => 'standard', + 'accessibility' => 'items', + 'goal' => 'ganon', + 'tower_open' => '7', + 'ganon_open' => '7', + 'world_state' => 'open', + 'entrance_shuffle' => 'none', + 'boss_shuffle' => 'none', + 'enemy_shuffle' => 'none', + 'hints' => 'on', + 'weapons' => 'randomized', + 'item_pool' => 'normal', + 'item_functionality' => 'normal', + 'enemy_damage' => 'default', + 'enemy_health' => 'default', + ], + 'veetorp' => [ + 'glitches_required' => 'overworld_glitches', + 'item_placement' => 'basic', + 'dungeon_items' => 'standard', + 'accessibility' => 'locations', + 'goal' => 'fast_ganon', + 'tower_open' => '7', + 'ganon_open' => '7', + 'world_state' => 'open', + 'entrance_shuffle' => 'none', + 'boss_shuffle' => 'none', + 'enemy_shuffle' => 'none', + 'hints' => 'on', + 'weapons' => 'randomized', + 'item_pool' => 'normal', + 'item_functionality' => 'normal', + 'enemy_damage' => 'default', + 'enemy_health' => 'default', + ], + 'crosskeys' => [ + 'glitches_required' => 'none', + 'item_placement' => 'advanced', + 'dungeon_items' => 'full', + 'accessibility' => 'items', + 'goal' => 'fast_ganon', + 'tower_open' => '7', + 'ganon_open' => '7', + 'world_state' => 'open', + 'entrance_shuffle' => 'crossed', + 'boss_shuffle' => 'none', + 'enemy_shuffle' => 'none', + 'hints' => 'on', + 'weapons' => 'randomized', + 'item_pool' => 'normal', + 'item_functionality' => 'normal', + 'enemy_damage' => 'default', + 'enemy_health' => 'default', + ], + 'quick' => [ + 'glitches_required' => 'none', + 'item_placement' => 'advanced', + 'dungeon_items' => 'standard', + 'accessibility' => 'none', + 'goal' => 'fast_ganon', + 'tower_open' => '0', + 'ganon_open' => '0', + 'world_state' => 'open', + 'entrance_shuffle' => 'none', + 'boss_shuffle' => 'none', + 'enemy_shuffle' => 'none', + 'hints' => 'off', + 'weapons' => 'assured', + 'item_pool' => 'normal', + 'item_functionality' => 'normal', + 'enemy_damage' => 'default', + 'enemy_health' => 'default', + ], + 'nightmare' => [ + 'glitches_required' => 'none', + 'item_placement' => 'advanced', + 'dungeon_items' => 'full', + 'accessibility' => 'none', + 'goal' => 'ganon', + 'tower_open' => '7', + 'ganon_open' => '7', + 'world_state' => 'inverted', + 'entrance_shuffle' => 'insanity', + 'boss_shuffle' => 'random', + 'enemy_shuffle' => 'random', + 'hints' => 'off', + 'weapons' => 'swordless', + 'item_pool' => 'expert', + 'item_functionality' => 'expert', + 'enemy_damage' => 'random', + 'enemy_health' => 'expert', + ], + ], + 'glitches_required' => [ + 'none' => 'None', + 'overworld_glitches' => 'Overworld Glitches', + 'major_glitches' => 'Major Glitches', + 'no_logic' => 'No Logic', + ], + 'item_placement' => [ + 'basic' => 'Basic', + 'advanced' => 'Advanced', + ], + 'dungeon_items' => [ + 'standard' => 'Standard', + 'mc' => 'MC Shuffle', + 'mcs' => 'MCS Shuffle', + 'full' => 'Full Shuffle', + ], + 'accessibility' => [ + 'items' => '100% Inventory', + 'locations' => '100% Locations', + 'none' => 'Not Guaranteed', + ], + 'goals' => [ + 'ganon' => 'Defeat Ganon', + 'fast_ganon' => 'Fast Ganon', + 'dungeons' => 'All Dungeons', + 'pedestal' => 'Master Sword Pedestal', + 'triforce-hunt' => 'Triforce Pieces', + ], + 'tower_open' => [ + '0' => 'none', + '1' => '1', + '2' => '2', + '3' => '3', + '4' => '4', + '5' => '5', + '6' => '6', + '7' => '7', + 'random' => 'random', + ], + 'ganon_open' => [ + '0' => 'none', + '1' => '1', + '2' => '2', + '3' => '3', + '4' => '4', + '5' => '5', + '6' => '6', + '7' => '7', + 'random' => 'random', + ], + 'world_state' => [ + 'standard' => 'Standard', + 'open' => 'Open', + 'inverted' => 'Inverted', + 'retro' => 'Retro', + ], + 'entrance_shuffle' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'restricted' => 'Restricted', + 'full' => 'Full', + 'crossed' => 'Crossed', + 'insanity' => 'Insanity', + ], + 'boss_shuffle' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'full' => 'Full', + 'random' => 'Random', + ], + 'enemy_shuffle' => [ + 'none' => 'None', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + 'hints' => [ + 'on' => 'On', + 'off' => 'Off', + ], + 'weapons' => [ + 'randomized' => 'Randomized', + 'assured' => 'Assured', + 'vanilla' => 'Vanilla', + 'swordless' => 'Swordless', + ], + 'item_pool' => [ + 'normal' => 'Normal', + 'hard' => 'Hard', + 'expert' => 'Expert', + 'crowd_control' => 'Crowd Control', + ], + 'item_functionality' => [ + 'normal' => 'Normal', + 'hard' => 'Hard', + 'expert' => 'Expert', + ], + 'enemy_damage' => [ + 'default' => 'Default', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + 'enemy_health' => [ + 'default' => 'Default', + 'easy' => 'Easy', + 'hard' => 'Hard', + 'expert' => 'Expert', + ], + ], + 'daily_weights' => [ + 'glitches_required' => [ + 'none' => 76, + 'overworld_glitches' => 21, + 'major_glitches' => 3, + 'no_logic' => 0, + ], + 'item_placement' => [ + 'basic' => 60, + 'advanced' => 40, + ], + 'dungeon_items' => [ + 'standard' => 60, + 'mc' => 10, + 'mcs' => 10, + 'full' => 20, + ], + 'accessibility' => [ + 'items' => 60, + 'locations' => 10, + 'none' => 30, + ], + 'goals' => [ + 'ganon' => 30, + 'fast_ganon' => 40, + 'dungeons' => 10, + 'pedestal' => 10, + 'triforce-hunt' => 10, + ], + 'tower_open' => [ + '0' => 5, + '1' => 5, + '2' => 5, + '3' => 5, + '4' => 5, + '5' => 5, + '6' => 5, + '7' => 50, + 'random' => 15, + ], + 'ganon_open' => [ + '0' => 5, + '1' => 5, + '2' => 5, + '3' => 5, + '4' => 5, + '5' => 5, + '6' => 5, + '7' => 50, + 'random' => 15, + ], + 'world_state' => [ + 'standard' => 20, + 'open' => 45, + 'inverted' => 25, + 'retro' => 10, + ], + 'entrance_shuffle' => [ + 'none' => 90, + 'simple' => 2, + 'restricted' => 2, + 'full' => 2, + 'crossed' => 2, + 'insanity' => 2, + ], + 'boss_shuffle' => [ + 'none' => 60, + 'simple' => 10, + 'full' => 10, + 'random' => 20, + ], + 'enemy_shuffle' => [ + 'none' => 80, + 'shuffled' => 10, + 'random' => 10, + ], + 'hints' => [ + 'on' => 50, + 'off' => 50, + ], + 'weapons' => [ + 'randomized' => 60, + 'assured' => 10, + 'vanilla' => 10, + 'swordless' => 10, + ], + 'item_pool' => [ + 'normal' => 70, + 'hard' => 20, + 'expert' => 10, + ], + 'item_functionality' => [ + 'normal' => 70, + 'hard' => 20, + 'expert' => 10, + ], + 'enemy_damage' => [ + 'default' => 80, + 'shuffled' => 10, + 'random' => 10, + ], + 'enemy_health' => [ + 'easy' => 5, + 'default' => 80, + 'hard' => 10, + 'expert' => 5, + ], + ], + ], ]; diff --git a/config/app.php b/config/app.php index 75397b24d..c24d95316 100644 --- a/config/app.php +++ b/config/app.php @@ -2,218 +2,220 @@ return [ - /* - |-------------------------------------------------------------------------- - | Application Name - |-------------------------------------------------------------------------- - | - | This value is the name of your application. This value is used when the - | framework needs to place the application's name in a notification or - | any other location as required by the application or its packages. - */ - - 'name' => 'ALttP Web Randomizer', - - /* - |-------------------------------------------------------------------------- - | Application Environment - |-------------------------------------------------------------------------- - | - | This value determines the "environment" your application is currently - | running in. This may determine how you prefer to configure various - | services your application utilizes. Set this in your ".env" file. - | - */ - - 'env' => env('APP_ENV', 'production'), - - /* - |-------------------------------------------------------------------------- - | Application Debug Mode - |-------------------------------------------------------------------------- - | - | When your application is in debug mode, detailed error messages with - | stack traces will be shown on every error that occurs within your - | application. If disabled, a simple generic error page is shown. - | - */ - - 'debug' => env('APP_DEBUG', false), - - /* - |-------------------------------------------------------------------------- - | Application URL - |-------------------------------------------------------------------------- - | - | This URL is used by the console to properly generate URLs when using - | the Artisan command line tool. You should set this to the root of - | your application so that it is used when running Artisan tasks. - | - */ - - 'url' => env('APP_URL', 'http://localhost'), - - /* - |-------------------------------------------------------------------------- - | Application Timezone - |-------------------------------------------------------------------------- - | - | Here you may specify the default timezone for your application, which - | will be used by the PHP date and date-time functions. We have gone - | ahead and set this to a sensible default for you out of the box. - | - */ - - 'timezone' => 'UTC', - - 'locales' => ['fr', 'en', 'de', 'es'], - - /* - |-------------------------------------------------------------------------- - | Application Locale Configuration - |-------------------------------------------------------------------------- - | - | The application locale determines the default locale that will be used - | by the translation service provider. You are free to set this value - | to any of the locales which will be supported by the application. - | - */ - - 'locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Application Fallback Locale - |-------------------------------------------------------------------------- - | - | The fallback locale determines the locale to use when the current one - | is not available. You may change the value to correspond to any of - | the language folders that are provided through your application. - | - */ - - 'fallback_locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Encryption Key - |-------------------------------------------------------------------------- - | - | This key is used by the Illuminate encrypter service and should be set - | to a random, 32 character string, otherwise these encrypted strings - | will not be safe. Please do this before deploying an application! - | - */ - - 'key' => env('APP_KEY'), - - 'cipher' => 'AES-256-CBC', - - /* - |-------------------------------------------------------------------------- - | Autoloaded Service Providers - |-------------------------------------------------------------------------- - | - | The service providers listed here will be automatically loaded on the - | request to your application. Feel free to add your own services to - | this array to grant expanded functionality to your applications. - | - */ - - 'providers' => [ - - /* - * Laravel Framework Service Providers... - */ - Illuminate\Auth\AuthServiceProvider::class, - Illuminate\Broadcasting\BroadcastServiceProvider::class, - Illuminate\Bus\BusServiceProvider::class, - Illuminate\Cache\CacheServiceProvider::class, - Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, - Illuminate\Cookie\CookieServiceProvider::class, - Illuminate\Database\DatabaseServiceProvider::class, - Illuminate\Encryption\EncryptionServiceProvider::class, - Illuminate\Filesystem\FilesystemServiceProvider::class, - Illuminate\Foundation\Providers\FoundationServiceProvider::class, - Illuminate\Hashing\HashServiceProvider::class, - Illuminate\Mail\MailServiceProvider::class, - Illuminate\Notifications\NotificationServiceProvider::class, - Illuminate\Pagination\PaginationServiceProvider::class, - Illuminate\Pipeline\PipelineServiceProvider::class, - Illuminate\Queue\QueueServiceProvider::class, - Illuminate\Redis\RedisServiceProvider::class, - Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, - Illuminate\Session\SessionServiceProvider::class, - Illuminate\Translation\TranslationServiceProvider::class, - Illuminate\Validation\ValidationServiceProvider::class, - Illuminate\View\ViewServiceProvider::class, - Laravel\Tinker\TinkerServiceProvider::class, - - /* - * Package Service Providers... - */ - GrahamCampbell\Markdown\MarkdownServiceProvider::class, - // - - /* - * Application Service Providers... - */ - ALttP\Providers\AppServiceProvider::class, - ALttP\Providers\AuthServiceProvider::class, - // ALttP\Providers\BroadcastServiceProvider::class, - ALttP\Providers\EventServiceProvider::class, - ALttP\Providers\RouteServiceProvider::class, - ALttP\Providers\HelperServiceProvider::class, - - ], - - /* - |-------------------------------------------------------------------------- - | Class Aliases - |-------------------------------------------------------------------------- - | - | This array of class aliases will be registered when this application - | is started. However, feel free to register as many as you wish as - | the aliases are "lazy" loaded so they don't hinder performance. - | - */ - - 'aliases' => [ - - 'App' => Illuminate\Support\Facades\App::class, - 'Artisan' => Illuminate\Support\Facades\Artisan::class, - 'Auth' => Illuminate\Support\Facades\Auth::class, - 'Blade' => Illuminate\Support\Facades\Blade::class, - 'Bus' => Illuminate\Support\Facades\Bus::class, - 'Cache' => Illuminate\Support\Facades\Cache::class, - 'Config' => Illuminate\Support\Facades\Config::class, - 'Cookie' => Illuminate\Support\Facades\Cookie::class, - 'Crypt' => Illuminate\Support\Facades\Crypt::class, - 'DB' => Illuminate\Support\Facades\DB::class, - 'Eloquent' => Illuminate\Database\Eloquent\Model::class, - 'Event' => Illuminate\Support\Facades\Event::class, - 'File' => Illuminate\Support\Facades\File::class, - 'Gate' => Illuminate\Support\Facades\Gate::class, - 'Hash' => Illuminate\Support\Facades\Hash::class, - 'Lang' => Illuminate\Support\Facades\Lang::class, - 'Log' => Illuminate\Support\Facades\Log::class, - 'Mail' => Illuminate\Support\Facades\Mail::class, - 'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class, - 'Notification' => Illuminate\Support\Facades\Notification::class, - 'Password' => Illuminate\Support\Facades\Password::class, - 'Queue' => Illuminate\Support\Facades\Queue::class, - 'Redirect' => Illuminate\Support\Facades\Redirect::class, - 'Redis' => Illuminate\Support\Facades\Redis::class, - 'Request' => Illuminate\Support\Facades\Request::class, - 'Response' => Illuminate\Support\Facades\Response::class, - 'Route' => Illuminate\Support\Facades\Route::class, - 'Schema' => Illuminate\Support\Facades\Schema::class, - 'Session' => Illuminate\Support\Facades\Session::class, - 'Storage' => Illuminate\Support\Facades\Storage::class, - 'URL' => Illuminate\Support\Facades\URL::class, - 'Validator' => Illuminate\Support\Facades\Validator::class, - 'View' => Illuminate\Support\Facades\View::class, - - ], + /* + |-------------------------------------------------------------------------- + | Application Name + |-------------------------------------------------------------------------- + | + | This value is the name of your application. This value is used when the + | framework needs to place the application's name in a notification or + | any other location as required by the application or its packages. + */ + + 'name' => 'ALttP Web Randomizer', + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services your application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + 'locales' => ['fr', 'en', 'de', 'es'], + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + Laravel\Tinker\TinkerServiceProvider::class, + + /* + * Package Service Providers... + */ + GrahamCampbell\Markdown\MarkdownServiceProvider::class, + // + + /* + * Application Service Providers... + */ + ALttP\Providers\AppServiceProvider::class, + ALttP\Providers\AuthServiceProvider::class, + // ALttP\Providers\BroadcastServiceProvider::class, + ALttP\Providers\EventServiceProvider::class, + ALttP\Providers\RouteServiceProvider::class, + ALttP\Providers\HelperServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + + ], ]; diff --git a/config/auth.php b/config/auth.php index a93d1ede4..04e0f8d8d 100644 --- a/config/auth.php +++ b/config/auth.php @@ -2,101 +2,102 @@ return [ - /* - |-------------------------------------------------------------------------- - | Authentication Defaults - |-------------------------------------------------------------------------- - | - | This option controls the default authentication "guard" and password - | reset options for your application. You may change these defaults - | as required, but they're a perfect start for most applications. - | - */ + /* + |-------------------------------------------------------------------------- + | Authentication Defaults + |-------------------------------------------------------------------------- + | + | This option controls the default authentication "guard" and password + | reset options for your application. You may change these defaults + | as required, but they're a perfect start for most applications. + | + */ - 'defaults' => [ - 'guard' => 'web', - 'passwords' => 'users', - ], + 'defaults' => [ + 'guard' => 'web', + 'passwords' => 'users', + ], - /* - |-------------------------------------------------------------------------- - | Authentication Guards - |-------------------------------------------------------------------------- - | - | Next, you may define every authentication guard for your application. - | Of course, a great default configuration has been defined for you - | here which uses session storage and the Eloquent user provider. - | - | All authentication drivers have a user provider. This defines how the - | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. - | - | Supported: "session", "token" - | - */ + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session", "token" + | + */ - 'guards' => [ - 'web' => [ - 'driver' => 'session', - 'provider' => 'users', - ], + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], - 'api' => [ - 'driver' => 'token', - 'provider' => 'users', - ], - ], + 'api' => [ + 'driver' => 'token', + 'provider' => 'users', + 'hash' => false, + ], + ], - /* - |-------------------------------------------------------------------------- - | User Providers - |-------------------------------------------------------------------------- - | - | All authentication drivers have a user provider. This defines how the - | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. - | - | If you have multiple user tables or models you may configure multiple - | sources which represent each model / table. These sources may then - | be assigned to any extra authentication guards you have defined. - | - | Supported: "database", "eloquent" - | - */ + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ - 'providers' => [ - 'users' => [ - 'driver' => 'eloquent', - 'model' => ALttP\User::class, - ], + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => ALttP\User::class, + ], - // 'users' => [ - // 'driver' => 'database', - // 'table' => 'users', - // ], - ], + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], - /* - |-------------------------------------------------------------------------- - | Resetting Passwords - |-------------------------------------------------------------------------- - | - | You may specify multiple password reset configurations if you have more - | than one user table or model in the application and you want to have - | separate password reset settings based on the specific user types. - | - | The expire time is the number of minutes that the reset token should be - | considered valid. This security feature keeps tokens short-lived so - | they have less time to be guessed. You may change this as needed. - | - */ + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ - 'passwords' => [ - 'users' => [ - 'provider' => 'users', - 'table' => 'password_resets', - 'expire' => 60, - ], - ], + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 60, + ], + ], ]; diff --git a/config/broadcasting.php b/config/broadcasting.php index bf09a83d4..19a59bad9 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -2,57 +2,57 @@ return [ - /* - |-------------------------------------------------------------------------- - | Default Broadcaster - |-------------------------------------------------------------------------- - | - | This option controls the default broadcaster that will be used by the - | framework when an event needs to be broadcast. You may set this to - | any of the connections defined in the "connections" array below. - | - | Supported: "pusher", "redis", "log", "null" - | - */ - - 'default' => env('BROADCAST_DRIVER', 'null'), - - /* - |-------------------------------------------------------------------------- - | Broadcast Connections - |-------------------------------------------------------------------------- - | - | Here you may define all of the broadcast connections that will be used - | to broadcast events to other systems or over websockets. Samples of - | each available type of connection are provided inside this array. - | - */ - - 'connections' => [ - - 'pusher' => [ - 'driver' => 'pusher', - 'key' => env('PUSHER_KEY'), - 'secret' => env('PUSHER_SECRET'), - 'app_id' => env('PUSHER_APP_ID'), - 'options' => [ - // - ], - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - ], - - 'log' => [ - 'driver' => 'log', - ], - - 'null' => [ - 'driver' => 'null', - ], - - ], + /* + |-------------------------------------------------------------------------- + | Default Broadcaster + |-------------------------------------------------------------------------- + | + | This option controls the default broadcaster that will be used by the + | framework when an event needs to be broadcast. You may set this to + | any of the connections defined in the "connections" array below. + | + | Supported: "pusher", "redis", "log", "null" + | + */ + + 'default' => env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_KEY'), + 'secret' => env('PUSHER_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + // + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], ]; diff --git a/config/cache.php b/config/cache.php index 76b871268..06fca5797 100644 --- a/config/cache.php +++ b/config/cache.php @@ -1,91 +1,102 @@ env('CACHE_DRIVER', 'file'), - - /* - |-------------------------------------------------------------------------- - | Cache Stores - |-------------------------------------------------------------------------- - | - | Here you may define all of the cache "stores" for your application as - | well as their drivers. You may even define multiple stores for the - | same cache driver to group types of items stored in your caches. - | - */ - - 'stores' => [ - - 'apc' => [ - 'driver' => 'apc', - ], - - 'array' => [ - 'driver' => 'array', - ], - - 'database' => [ - 'driver' => 'database', - 'table' => 'cache', - 'connection' => null, - ], - - 'file' => [ - 'driver' => 'file', - 'path' => storage_path('framework/cache'), - ], - - 'memcached' => [ - 'driver' => 'memcached', - 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), - 'sasl' => [ - env('MEMCACHED_USERNAME'), - env('MEMCACHED_PASSWORD'), - ], - 'options' => [ - // Memcached::OPT_CONNECT_TIMEOUT => 2000, - ], - 'servers' => [ - [ - 'host' => env('MEMCACHED_HOST', '127.0.0.1'), - 'port' => env('MEMCACHED_PORT', 11211), - 'weight' => 100, - ], - ], - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - ], - - ], - - /* - |-------------------------------------------------------------------------- - | Cache Key Prefix - |-------------------------------------------------------------------------- - | - | When utilizing a RAM based store such as APC or Memcached, there might - | be other applications utilizing the same cache. So, we'll specify a - | value to get prefixed to all our keys so we can avoid collisions. - | - */ - - 'prefix' => 'laravel', + /* + |-------------------------------------------------------------------------- + | Default Cache Store + |-------------------------------------------------------------------------- + | + | This option controls the default cache connection that gets used while + | using this caching library. This connection is used when another is + | not explicitly specified when executing a given caching function. + | + | Supported: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb" + | + */ + + 'default' => env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), ]; diff --git a/config/compile.php b/config/compile.php index 0ed244aed..04807eac4 100644 --- a/config/compile.php +++ b/config/compile.php @@ -2,34 +2,34 @@ return [ - /* - |-------------------------------------------------------------------------- - | Additional Compiled Classes - |-------------------------------------------------------------------------- - | - | Here you may specify additional classes to include in the compiled file - | generated by the `artisan optimize` command. These should be classes - | that are included on basically every request into the application. - | - */ + /* + |-------------------------------------------------------------------------- + | Additional Compiled Classes + |-------------------------------------------------------------------------- + | + | Here you may specify additional classes to include in the compiled file + | generated by the `artisan optimize` command. These should be classes + | that are included on basically every request into the application. + | + */ - 'files' => [ - // - ], + 'files' => [ + // + ], - /* - |-------------------------------------------------------------------------- - | Compiled File Providers - |-------------------------------------------------------------------------- - | - | Here you may list service providers which define a "compiles" function - | that returns additional files that should be compiled, providing an - | easy way to get common files from any packages you are utilizing. - | - */ + /* + |-------------------------------------------------------------------------- + | Compiled File Providers + |-------------------------------------------------------------------------- + | + | Here you may list service providers which define a "compiles" function + | that returns additional files that should be compiled, providing an + | easy way to get common files from any packages you are utilizing. + | + */ - 'providers' => [ - // - ], + 'providers' => [ + // + ], ]; diff --git a/config/database.php b/config/database.php index c9d3df3a4..a6664713c 100644 --- a/config/database.php +++ b/config/database.php @@ -1,121 +1,143 @@ PDO::FETCH_OBJ, - - /* - |-------------------------------------------------------------------------- - | Default Database Connection Name - |-------------------------------------------------------------------------- - | - | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. - | - */ - - 'default' => env('DB_CONNECTION', 'mysql'), - - /* - |-------------------------------------------------------------------------- - | Database Connections - |-------------------------------------------------------------------------- - | - | Here are each of the database connections setup for your application. - | Of course, examples of configuring each database platform that is - | supported by Laravel is shown below to make development simple. - | - | - | All database work in Laravel is done through the PHP PDO facilities - | so make sure you have the driver for your particular database of - | choice installed on your machine before you begin development. - | - */ - - 'connections' => [ - - 'sqlite' => [ - 'driver' => 'sqlite', - 'database' => env('DB_DATABASE', database_path('database.sqlite')), - 'prefix' => '', - ], - - 'mysql' => [ - 'driver' => 'mysql', - 'host' => env('DB_HOST', '127.0.0.1'), - 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), - 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', - 'collation' => 'utf8_unicode_ci', - 'prefix' => '', - 'strict' => true, - 'engine' => null, - ], - - 'pgsql' => [ - 'driver' => 'pgsql', - 'host' => env('DB_HOST', '127.0.0.1'), - 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), - 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', - 'prefix' => '', - 'schema' => 'public', - 'sslmode' => 'prefer', - ], - - ], - - /* - |-------------------------------------------------------------------------- - | Migration Repository Table - |-------------------------------------------------------------------------- - | - | This table keeps track of all the migrations that have already run for - | your application. Using this information, we can determine which of - | the migrations on disk haven't actually been run in the database. - | - */ - - 'migrations' => 'migrations', - - /* - |-------------------------------------------------------------------------- - | Redis Databases - |-------------------------------------------------------------------------- - | - | Redis is an open source, fast, and advanced key-value store that also - | provides a richer set of commands than a typical key-value systems - | such as APC or Memcached. Laravel makes it easy to dig right in. - | - */ - - 'redis' => [ - - 'cluster' => false, - - 'default' => [ - 'host' => env('REDIS_HOST', '127.0.0.1'), - 'password' => env('REDIS_PASSWORD', null), - 'port' => env('REDIS_PORT', 6379), - 'database' => 0, - ], - - ], + /* + |-------------------------------------------------------------------------- + | PDO Fetch Style + |-------------------------------------------------------------------------- + | + | By default, database results will be returned as instances of the PHP + | stdClass object; however, you may desire to retrieve records in an + | array format for simplicity. Here you can tweak the fetch style. + | + */ + + 'fetch' => PDO::FETCH_OBJ, + + /* + |-------------------------------------------------------------------------- + | Default Database Connection Name + |-------------------------------------------------------------------------- + | + | Here you may specify which of the database connections below you wish + | to use as your default connection for all database work. Of course + | you may use many connections at once using the Database library. + | + */ + + 'default' => env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer set of commands than a typical key-value systems + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'cluster' => false, + + 'client' => env('REDIS_CLIENT', 'predis'), + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'predis'), + 'prefix' => Str::slug(env('APP_NAME', 'laravel'), '_').'_database_', + ], + + 'default' => [ + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_DB', 0), + ], + 'cache' => [ + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => env('REDIS_CACHE_DB', 1), + ], + + ], ]; diff --git a/config/enemizer.php b/config/enemizer.php index efe78f1a7..33bbe8dfa 100644 --- a/config/enemizer.php +++ b/config/enemizer.php @@ -1,6 +1,6 @@ env('ENEMIZER_BASE'), - 'enabled' => false, + 'base' => env('ENEMIZER_BASE'), + 'enabled' => false, ]; diff --git a/config/filesystems.php b/config/filesystems.php index 9b680b5bd..6d3ca4e5d 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -1,91 +1,81 @@ env('FILESYSTEM_DRIVER', 'local'), + 'default' => env('FILESYSTEM_DRIVER', 'local'), - /* - |-------------------------------------------------------------------------- - | Default Cloud Filesystem Disk - |-------------------------------------------------------------------------- - | - | Many applications store files both locally and in the cloud. For this - | reason, you may specify a default "cloud" driver here. This driver - | will be bound as the Cloud disk implementation in the container. - | - */ + /* + |-------------------------------------------------------------------------- + | Default Cloud Filesystem Disk + |-------------------------------------------------------------------------- + | + | Many applications store files both locally and in the cloud. For this + | reason, you may specify a default "cloud" driver here. This driver + | will be bound as the Cloud disk implementation in the container. + | + */ - 'cloud' => env('FILESYSTEM_CLOUD', 's3'), + 'cloud' => env('FILESYSTEM_CLOUD', 's3'), - /* - |-------------------------------------------------------------------------- - | Filesystem Disks - |-------------------------------------------------------------------------- - | - | Here you may configure as many filesystem "disks" as you wish, and you - | may even configure multiple disks of the same driver. Defaults have - | been setup for each driver as an example of the required options. - | - | Supported Drivers: "local", "ftp", "s3", "rackspace" - | - */ + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "s3", "rackspace" + | + */ - 'disks' => [ - 'local' => [ - 'driver' => 'local', - 'root' => storage_path('app'), - ], + 'disks' => [ + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], - 'public' => [ - 'driver' => 'local', - 'root' => storage_path('app/public'), - 'visibility' => 'public', - ], + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'visibility' => 'public', + ], - 'sprites' => [ - 'driver' => 'local', - 'root' => resource_path('sprites'), - ], + 'sprites' => [ + 'driver' => 'local', + 'root' => resource_path('sprites'), + ], - 'images' => [ - 'driver' => 's3', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION'), - 'bucket' => env('AWS_IMAGE_BUCKET'), - 'url' => env('AWS_IMAGE_URL'), - 'visibility' => 'public', - ], + 'images' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_IMAGE_BUCKET'), + 'url' => env('AWS_IMAGE_URL'), + 'visibility' => 'public', + ], - 'rackspace' => [ - 'driver' => 'rackspace', - 'username' => env('RACKSPACE_USER', ''), - 'key' => env('RACKSPACE_KEY', ''), - 'container' => 'sprites', - 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/', - 'region' => 'ORD', - 'url_type' => 'publicURL', - ], - - 's3' => [ - 'driver' => 's3', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_DEFAULT_REGION'), - 'bucket' => env('AWS_BUCKET'), - 'url' => env('AWS_URL'), - 'visibility' => 'public', - ], - ], + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'visibility' => 'public', + ], + ], ]; diff --git a/config/hashing.php b/config/hashing.php index 3ad2d60a2..f3332edea 100644 --- a/config/hashing.php +++ b/config/hashing.php @@ -2,51 +2,51 @@ return [ - /* - |-------------------------------------------------------------------------- - | Default Hash Driver - |-------------------------------------------------------------------------- - | - | This option controls the default hash driver that will be used to hash - | passwords for your application. By default, the bcrypt algorithm is - | used; however, you remain free to modify this option if you wish. - | - | Supported: "bcrypt", "argon" - | - */ - - 'driver' => 'bcrypt', - - /* - |-------------------------------------------------------------------------- - | Bcrypt Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Bcrypt algorithm. This will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'bcrypt' => [ - 'rounds' => 10, - ], - - /* - |-------------------------------------------------------------------------- - | Argon Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Argon algorithm. These will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'argon' => [ - 'memory' => 1024, - 'threads' => 2, - 'time' => 2, - ], + /* + |-------------------------------------------------------------------------- + | Default Hash Driver + |-------------------------------------------------------------------------- + | + | This option controls the default hash driver that will be used to hash + | passwords for your application. By default, the bcrypt algorithm is + | used; however, you remain free to modify this option if you wish. + | + | Supported: "bcrypt", "argon" + | + */ + + 'driver' => 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => 10, + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 1024, + 'threads' => 2, + 'time' => 2, + ], ]; diff --git a/config/horizon.php b/config/horizon.php index bb6d82eb7..4fc5f3e13 100644 --- a/config/horizon.php +++ b/config/horizon.php @@ -2,93 +2,93 @@ return [ - /* - |-------------------------------------------------------------------------- - | Horizon Redis Connection - |-------------------------------------------------------------------------- - | - | This is the name of the Redis connection where Horizon will store the - | meta information required for it to function. It includes the list - | of supervisors, failed jobs, job metrics, and other information. - | - */ + /* + |-------------------------------------------------------------------------- + | Horizon Redis Connection + |-------------------------------------------------------------------------- + | + | This is the name of the Redis connection where Horizon will store the + | meta information required for it to function. It includes the list + | of supervisors, failed jobs, job metrics, and other information. + | + */ - 'use' => 'default', + 'use' => 'default', - /* - |-------------------------------------------------------------------------- - | Horizon Redis Prefix - |-------------------------------------------------------------------------- - | - | This prefix will be used when storing all Horizon data in Redis. You - | may modify the prefix when you are running multiple installations - | of Horizon on the same server so that they don't have problems. - | - */ + /* + |-------------------------------------------------------------------------- + | Horizon Redis Prefix + |-------------------------------------------------------------------------- + | + | This prefix will be used when storing all Horizon data in Redis. You + | may modify the prefix when you are running multiple installations + | of Horizon on the same server so that they don't have problems. + | + */ - 'prefix' => env('HORIZON_PREFIX', 'horizon:'), + 'prefix' => env('HORIZON_PREFIX', 'horizon:'), - /* - |-------------------------------------------------------------------------- - | Queue Wait Time Thresholds - |-------------------------------------------------------------------------- - | - | This option allows you to configure when the LongWaitDetected event - | will be fired. Every connection / queue combination may have its - | own, unique threshold (in seconds) before this event is fired. - | - */ + /* + |-------------------------------------------------------------------------- + | Queue Wait Time Thresholds + |-------------------------------------------------------------------------- + | + | This option allows you to configure when the LongWaitDetected event + | will be fired. Every connection / queue combination may have its + | own, unique threshold (in seconds) before this event is fired. + | + */ - 'waits' => [ - 'redis:default' => 60, - ], + 'waits' => [ + 'redis:default' => 60, + ], - /* - |-------------------------------------------------------------------------- - | Job Trimming Times - |-------------------------------------------------------------------------- - | - | Here you can configure for how long (in minutes) you desire Horizon to - | persist the recent and failed jobs. Typically, recent jobs are kept - | for one hour while all failed jobs are stored for an entire week. - | - */ + /* + |-------------------------------------------------------------------------- + | Job Trimming Times + |-------------------------------------------------------------------------- + | + | Here you can configure for how long (in minutes) you desire Horizon to + | persist the recent and failed jobs. Typically, recent jobs are kept + | for one hour while all failed jobs are stored for an entire week. + | + */ - 'trim' => [ - 'recent' => 60, - 'failed' => 10080, - ], + 'trim' => [ + 'recent' => 60, + 'failed' => 10080, + ], - /* - |-------------------------------------------------------------------------- - | Queue Worker Configuration - |-------------------------------------------------------------------------- - | - | Here you may define the queue worker settings used by your application - | in all environments. These supervisors and settings handle all your - | queued jobs and will be provisioned by Horizon during deployment. - | - */ + /* + |-------------------------------------------------------------------------- + | Queue Worker Configuration + |-------------------------------------------------------------------------- + | + | Here you may define the queue worker settings used by your application + | in all environments. These supervisors and settings handle all your + | queued jobs and will be provisioned by Horizon during deployment. + | + */ - 'environments' => [ - 'production' => [ - 'supervisor-1' => [ - 'connection' => 'redis', - 'queue' => [env('QUEUE_PREFIX', 'production') . '_default'], - 'balance' => 'simple', - 'processes' => 2, - 'tries' => 3, - ], - ], + 'environments' => [ + 'production' => [ + 'supervisor-1' => [ + 'connection' => 'redis', + 'queue' => [env('QUEUE_PREFIX', 'production') . '_default'], + 'balance' => 'simple', + 'processes' => 2, + 'tries' => 3, + ], + ], - 'local' => [ - 'supervisor-1' => [ - 'connection' => 'redis', - 'queue' => [env('QUEUE_PREFIX', 'production') . '_default'], - 'balance' => 'simple', - 'processes' => 1, - 'tries' => 3, - ], - ], - ], + 'local' => [ + 'supervisor-1' => [ + 'connection' => 'redis', + 'queue' => [env('QUEUE_PREFIX', 'production') . '_default'], + 'balance' => 'simple', + 'processes' => 1, + 'tries' => 3, + ], + ], + ], ]; diff --git a/config/insights.php b/config/insights.php new file mode 100644 index 000000000..09e2c5094 --- /dev/null +++ b/config/insights.php @@ -0,0 +1,88 @@ + 'laravel', + + /* + |-------------------------------------------------------------------------- + | Configuration + |-------------------------------------------------------------------------- + | + | Here you may adjust all the various `Insights` that will be used by PHP + | Insights. You can either add, remove or configure `Insights`. Keep in + | mind that all added `Insights` must belong to a specific `Metric`. + | + */ + + 'exclude' => [ + // 'path/to/directory-or-file' + ], + + 'add' => [ + Classes::class => [ + ForbiddenFinalClasses::class, + ], + ], + + 'remove' => [ + AlphabeticallySortedUsesSniff::class, + DeclareStrictTypesSniff::class, + DisallowMixedTypeHintSniff::class, + DocCommentSpacingSniff::class, + ForbiddenDefineFunctions::class, + ForbiddenNormalClasses::class, + ForbiddenTraits::class, + TypeHintDeclarationSniff::class, + ], + + 'config' => [ + ForbiddenPrivateMethods::class => [ + 'title' => 'The usage of private methods is not idiomatic in Laravel.', + ], + MethodPerClassLimitSniff::class => [ + 'maxCount' => 50, + ], + PropertyPerClassLimitSniff::class => [ + 'maxCount' => 15, + ], + FunctionLengthSniff::class => [ + 'maxLength' => 50, + ], + ClassTraitAndInterfaceLengthSniff::class => [ + 'maxLength' => 500, + ], + ], + +]; diff --git a/config/item.php b/config/item.php index 57e3d1858..df082f00c 100644 --- a/config/item.php +++ b/config/item.php @@ -1,150 +1,154 @@ [ - 'L1Sword' => 0, - 'MasterSword' => 0, - 'ProgressiveSword' => 4, - 'BottleWithRandom' => 4, - 'Bottle' => 0, - 'BottleWithRedPotion' => 0, - 'BottleWithGreenPotion' => 0, - 'BottleWithBluePotion' => 0, - 'BottleWithBee' => 0, - 'BottleWithGoldBee' => 0, - 'BottleWithFairy' => 0, - 'Bombos' => 1, - 'BookOfMudora' => 1, - 'Bow' => 1, - 'CaneOfSomaria' => 1, - 'Cape' => 1, - 'Ether' => 1, - 'FireRod' => 1, - 'Flippers' => 1, - 'Hammer' => 1, - 'Hookshot' => 1, - 'IceRod' => 1, - 'Lamp' => 1, - 'MagicMirror' => 1, - 'MoonPearl' => 1, - 'Mushroom' => 1, - 'OcarinaInactive' => 1, - 'OcarinaActive' => 0, - 'PegasusBoots' => 1, - 'Powder' => 1, - 'PowerGlove' => 0, - 'Quake' => 1, - 'Shovel' => 1, - 'TitansMitt' => 0, - 'BowAndSilverArrows' => 0, - 'SilverArrowUpgrade' => 1, - 'ProgressiveGlove' => 2, - 'TriforcePiece' => 0, - 'PowerStar' => 0, - 'BugCatchingNet' => 1, - 'MirrorShield' => 0, - 'ProgressiveShield' => 3, - 'CaneOfByrna' => 1, - 'TenBombs' => 1, - 'HalfMagic' => 1, - 'QuarterMagic' => 0, - ], - 'nice' => [ - 'L3Sword' => 0, - 'L4Sword' => 0, - 'HeartContainer' => 1, - 'BossHeartContainer' => 10, - 'BlueShield' => 0, - 'ProgressiveArmor' => 2, - 'BlueMail' => 0, - 'Boomerang' => 1, - 'RedBoomerang' => 1, - 'RedShield' => 0, - 'RedMail' => 0, - 'BlueClock' => 0, - 'RedClock' => 0, - 'GreenClock' => 0, - ], - 'junk' => [ - 'PieceOfHeart' => 24, - 'BombUpgrade5' => 0, - 'BombUpgrade10' => 0, - 'ArrowUpgrade5' => 0, - 'ArrowUpgrade10' => 0, - 'Arrow' => 1, - 'TenArrows' => 12, - 'Bomb' => 0, - 'ThreeBombs' => 16, - 'OneRupee' => 2, - 'FiveRupees' => 4, - 'TwentyRupees' => 28, - 'FiftyRupees' => 7, - 'OneHundredRupees' => 1, - 'ThreeHundredRupees' => 5, - 'Heart' => 0, - 'Rupoor' => 0, - ], - 'dungeon' => [ - 'BigKeyA2' => 1, - 'BigKeyD1' => 1, - 'BigKeyD2' => 1, - 'BigKeyD3' => 1, - 'BigKeyD4' => 1, - 'BigKeyD5' => 1, - 'BigKeyD6' => 1, - 'BigKeyD7' => 1, - 'BigKeyP1' => 1, - 'BigKeyP2' => 1, - 'BigKeyP3' => 1, - 'KeyA2' => 4, - 'KeyD1' => 6, - 'KeyD2' => 1, - 'KeyD3' => 2, - 'KeyD4' => 1, - 'KeyD5' => 2, - 'KeyD6' => 3, - 'KeyD7' => 4, - 'KeyA1' => 2, - 'KeyH2' => 1, - 'KeyP2' => 1, - 'KeyP3' => 1, - 'MapA2' => 1, - 'MapD1' => 1, - 'MapD2' => 1, - 'MapD3' => 1, - 'MapD4' => 1, - 'MapD5' => 1, - 'MapD6' => 1, - 'MapD7' => 1, - 'MapH2' => 1, - 'MapP1' => 1, - 'MapP2' => 1, - 'MapP3' => 1, - 'CompassA2' => 1, - 'CompassD1' => 1, - 'CompassD2' => 1, - 'CompassD3' => 1, - 'CompassD4' => 1, - 'CompassD5' => 1, - 'CompassD6' => 1, - 'CompassD7' => 1, - 'CompassP1' => 1, - 'CompassP2' => 1, - 'CompassP3' => 1, - ], - 'drop' => [ - 'Heart' => 13, - 'RupeeGreen' => 9, - 'RupeeBlue' => 7, - 'RupeeRed' => 6, - 'BombRefill1' => 7, - 'BombRefill4' => 1, - 'BombRefill8' => 2, - 'MagicRefillSmall' => 6, - 'MagicRefillFull' => 3, - 'ArrowRefill5' => 5, - 'ArrowRefill10' => 3, - 'Fairy' => 1, - 'BeeGood' => 0, - 'Bee' => 0, - ], + 'advancement' => [ + 'L1Sword' => 0, + 'MasterSword' => 0, + 'ProgressiveSword' => 4, + 'BossHeartContainer' => 10, + 'BottleWithRandom' => 4, + 'Bottle' => 0, + 'BottleWithRedPotion' => 0, + 'BottleWithGreenPotion' => 0, + 'BottleWithBluePotion' => 0, + 'BottleWithBee' => 0, + 'BottleWithGoldBee' => 0, + 'BottleWithFairy' => 0, + 'Bombos' => 1, + 'BookOfMudora' => 1, + 'BowAndArrows' => 0, + 'CaneOfSomaria' => 1, + 'Cape' => 1, + 'Ether' => 1, + 'FireRod' => 1, + 'Flippers' => 1, + 'Hammer' => 1, + 'Hookshot' => 1, + 'IceRod' => 1, + 'Lamp' => 1, + 'MagicMirror' => 1, + 'MoonPearl' => 1, + 'Mushroom' => 1, + 'OcarinaInactive' => 1, + 'OcarinaActive' => 0, + 'PegasusBoots' => 1, + 'Powder' => 1, + 'PowerGlove' => 0, + 'Quake' => 1, + 'Shovel' => 1, + 'TitansMitt' => 0, + 'BowAndSilverArrows' => 0, + 'SilverArrowUpgrade' => 0, + 'ProgressiveArmor' => 1, + 'ProgressiveGlove' => 2, + 'ProgressiveBow' => 2, + 'TriforcePiece' => 0, + 'PowerStar' => 0, + 'BugCatchingNet' => 1, + 'MirrorShield' => 0, + 'ProgressiveShield' => 3, + 'CaneOfByrna' => 1, + 'TenBombs' => 1, + 'HalfMagic' => 1, + 'QuarterMagic' => 0, + ], + 'nice' => [ + 'L3Sword' => 0, + 'L4Sword' => 0, + 'HeartContainer' => 1, + 'BlueShield' => 0, + 'ProgressiveArmor' => 1, + 'BlueMail' => 0, + 'Boomerang' => 1, + 'RedBoomerang' => 1, + 'RedShield' => 0, + 'RedMail' => 0, + 'BlueClock' => 0, + 'RedClock' => 0, + 'GreenClock' => 0, + ], + 'junk' => [ + 'PieceOfHeart' => 24, + 'BombUpgrade5' => 0, + 'BombUpgrade10' => 0, + 'ArrowUpgrade5' => 0, + 'ArrowUpgrade10' => 0, + 'Arrow' => 1, + 'TenArrows' => 12, + 'Bomb' => 0, + 'ThreeBombs' => 16, + 'OneRupee' => 2, + 'FiveRupees' => 4, + 'TwentyRupees' => 28, + 'TwentyRupees2' => 0, + 'FiftyRupees' => 7, + 'OneHundredRupees' => 1, + 'ThreeHundredRupees' => 5, + 'Heart' => 0, + 'SmallMagic' => 0, + 'Rupoor' => 0, + ], + 'dungeon' => [ + 'BigKeyA2' => 1, + 'BigKeyD1' => 1, + 'BigKeyD2' => 1, + 'BigKeyD3' => 1, + 'BigKeyD4' => 1, + 'BigKeyD5' => 1, + 'BigKeyD6' => 1, + 'BigKeyD7' => 1, + 'BigKeyP1' => 1, + 'BigKeyP2' => 1, + 'BigKeyP3' => 1, + 'KeyA2' => 4, + 'KeyD1' => 6, + 'KeyD2' => 1, + 'KeyD3' => 3, + 'KeyD4' => 1, + 'KeyD5' => 2, + 'KeyD6' => 3, + 'KeyD7' => 4, + 'KeyA1' => 2, + 'KeyH2' => 1, + 'KeyP2' => 1, + 'KeyP3' => 1, + 'MapA2' => 1, + 'MapD1' => 1, + 'MapD2' => 1, + 'MapD3' => 1, + 'MapD4' => 1, + 'MapD5' => 1, + 'MapD6' => 1, + 'MapD7' => 1, + 'MapH2' => 1, + 'MapP1' => 1, + 'MapP2' => 1, + 'MapP3' => 1, + 'CompassA2' => 1, + 'CompassD1' => 1, + 'CompassD2' => 1, + 'CompassD3' => 1, + 'CompassD4' => 1, + 'CompassD5' => 1, + 'CompassD6' => 1, + 'CompassD7' => 1, + 'CompassP1' => 1, + 'CompassP2' => 1, + 'CompassP3' => 1, + ], + 'drop' => [ + 'Heart' => 13, + 'RupeeGreen' => 9, + 'RupeeBlue' => 7, + 'RupeeRed' => 6, + 'BombRefill1' => 7, + 'BombRefill4' => 1, + 'BombRefill8' => 2, + 'MagicRefillSmall' => 6, + 'MagicRefillFull' => 3, + 'ArrowRefill5' => 5, + 'ArrowRefill10' => 3, + 'Fairy' => 1, + 'BeeGood' => 0, + 'Bee' => 0, + ], ]; diff --git a/config/logging.php b/config/logging.php index a6923b8ee..0bd43acdc 100644 --- a/config/logging.php +++ b/config/logging.php @@ -1,80 +1,91 @@ env('LOG_CHANNEL', 'stack'), + 'default' => env('LOG_CHANNEL', 'stack'), - /* - |-------------------------------------------------------------------------- - | Log Channels - |-------------------------------------------------------------------------- - | - | Here you may configure the log channels for your application. Out of - | the box, Laravel uses the Monolog PHP logging library. This gives - | you a variety of powerful log handlers / formatters to utilize. - | - | Available Drivers: "single", "daily", "slack", "syslog", - | "errorlog", "monolog", - | "custom", "stack" - | - */ + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ - 'channels' => [ - 'stack' => [ - 'driver' => 'stack', - 'channels' => ['single'], - ], + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + ], - 'single' => [ - 'driver' => 'single', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('APP_LOG_LEVEL', 'debug'), - ], + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('APP_LOG_LEVEL', 'debug'), + ], - 'daily' => [ - 'driver' => 'daily', - 'path' => storage_path('logs/laravel.log'), - 'level' => 'debug', - 'days' => 7, - ], + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + 'days' => 14, + ], - 'slack' => [ - 'driver' => 'slack', - 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => 'Laravel Log', - 'emoji' => ':boom:', - 'level' => 'critical', - ], + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], - 'stderr' => [ - 'driver' => 'monolog', - 'handler' => StreamHandler::class, - 'with' => [ - 'stream' => 'php://stderr', - ], - ], + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => 'debug', + 'handler' => SyslogUdpHandler::class, + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + ], + ], - 'syslog' => [ - 'driver' => 'syslog', - 'level' => 'debug', - ], + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'with' => [ + 'stream' => 'php://stderr', + ], + ], - 'errorlog' => [ - 'driver' => 'errorlog', - 'level' => 'debug', - ], - ], + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + ], ]; diff --git a/config/logic.php b/config/logic.php index bd88a6d87..a123275fa 100644 --- a/config/logic.php +++ b/config/logic.php @@ -1,56 +1,31 @@ [ - ], - 'OverworldGlitches' => [ - 'canSuperBunny' => true, - 'canFakeFlipper' => true, - 'canSuperSpeed' => true, - 'canMirrorClip' => true, - 'canWaterwalk' => true, - 'canBunnySurf' => true, - 'canBunnyRevive' => true, - 'canMirrorWrap' => true, - 'canDungeonRevive' => true, - ], - 'MajorGlitches' => [ - 'FakeFlute' => true, - 'SpinSpeedClip' => true, - ], - 'Custom' => [ - 'BombJump' => false, - 'FakeFlute' => false, - 'NavigateDarkRooms' => false, - 'SpinSpeedClip' => false, - 'canWaterFairyRevive' => false, - ], + 'NoGlitches' => [], + 'OverworldGlitches' => [ + 'canSuperBunny' => true, + 'canFakeFlipper' => true, + 'canSuperSpeed' => true, + 'canBootsClip' => true, + 'canMirrorClip' => true, + 'canWaterWalk' => true, + 'canBunnySurf' => true, + 'canMirrorWrap' => true, + 'canDungeonRevive' => true, + ], + 'MajorGlitches' => [ + 'canSuperBunny' => true, + 'canFakeFlipper' => true, + 'canSuperSpeed' => true, + 'canBootsClip' => true, + 'canMirrorClip' => true, + 'canWaterWalk' => true, + 'canBunnySurf' => true, + 'canBunnyRevive' => true, + 'canMirrorWrap' => true, + 'canDungeonRevive' => true, + 'canOWYBA' => true, + 'canOneFrameClipOW' => true, + 'canOneFrameClipUW' => true, + ], ]; -/* -canSuperBunny -canBecomeDWLink -canSuperSpeed -canMirrorClip -canWaterwalk -canBunnySurf -canBunnyRevive -canOWYBA -canMirrorWrap -canFakeFlute -canOneFrameClipOW -canDungeonRevive -canBombJump -canBombClip -canOneFrameClipUW - -canYBA -canSpinYBA -canMirrorDoor -canSpinMirrorDoor -canDoorJuke -canSomariaGlitch -canAutoSomaria -canQuadrantGlitch -canSpinSomaria -canAutoYBA -*/ diff --git a/config/mail.php b/config/mail.php index 5a30b35da..52f28afae 100644 --- a/config/mail.php +++ b/config/mail.php @@ -1,17 +1,17 @@ env('MAIL_DRIVER', 'smtp'), + 'driver' => env('MAIL_DRIVER', 'smtp'), - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - 'port' => env('MAIL_PORT', 587), - 'from' => [ - 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), - 'name' => env('MAIL_FROM_NAME', 'Example'), - ], - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), - 'username' => env('MAIL_USERNAME'), - 'password' => env('MAIL_PASSWORD'), + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), - 'sendmail' => '/usr/sbin/sendmail -bs', + 'sendmail' => '/usr/sbin/sendmail -bs', ]; diff --git a/config/purifier.php b/config/purifier.php index 0f81135be..4e9564288 100644 --- a/config/purifier.php +++ b/config/purifier.php @@ -1,9 +1,9 @@ [ - 'HTML' => [ - 'Allowed' => 'p[class],strong,em,del,span[class],h1,h2,h3,h4,ol,ul,li,br', - ], - ], + 'default' => [ + 'HTML' => [ + 'Allowed' => 'p[class],strong,em,del,span[class],h1,h2,h3,h4,ol,ul,li,br', + ], + ], ]; diff --git a/config/queue.php b/config/queue.php index 231824240..97a49bc18 100644 --- a/config/queue.php +++ b/config/queue.php @@ -2,85 +2,85 @@ return [ - /* - |-------------------------------------------------------------------------- - | Default Queue Connection Name - |-------------------------------------------------------------------------- - | - | The Laravel queue API supports a variety of back-ends via an unified - | API, giving you convenient access to each back-end using the same - | syntax for every one. Here you may define a default connection. - | - */ + /* + |-------------------------------------------------------------------------- + | Default Queue Connection Name + |-------------------------------------------------------------------------- + | + | The Laravel queue API supports a variety of back-ends via an unified + | API, giving you convenient access to each back-end using the same + | syntax for every one. Here you may define a default connection. + | + */ - 'default' => env('QUEUE_DRIVER', 'sync'), + 'default' => env('QUEUE_DRIVER', 'sync'), - /* - |-------------------------------------------------------------------------- - | Queue Connections - |-------------------------------------------------------------------------- - | - | Here you may configure the connection information for each server that - | is used by your application. A default configuration has been added - | for each back-end shipped with Laravel. You are free to add more. - | - | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" - | - */ + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ - 'connections' => [ + 'connections' => [ - 'sync' => [ - 'driver' => 'sync', - ], + 'sync' => [ + 'driver' => 'sync', + ], - 'database' => [ - 'driver' => 'database', - 'table' => 'jobs', - 'queue' => 'default', - 'retry_after' => 90, - ], + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + ], - 'beanstalkd' => [ - 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'retry_after' => 90, - ], + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + ], - 'sqs' => [ - 'driver' => 'sqs', - 'key' => 'your-public-key', - 'secret' => 'your-secret-key', - 'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id', - 'queue' => 'your-queue-name', - 'region' => 'us-east-1', - ], + 'sqs' => [ + 'driver' => 'sqs', + 'key' => 'your-public-key', + 'secret' => 'your-secret-key', + 'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id', + 'queue' => 'your-queue-name', + 'region' => 'us-east-1', + ], - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - 'queue' => env('QUEUE_PREFIX', 'production') . '_default', - 'retry_after' => 90, - 'block_for' => null, - ], + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('QUEUE_PREFIX', 'production') . '_default', + 'retry_after' => 90, + 'block_for' => null, + ], - ], + ], - /* - |-------------------------------------------------------------------------- - | Failed Queue Jobs - |-------------------------------------------------------------------------- - | - | These options configure the behavior of failed queue job logging so you - | can control which database and table are used to store the jobs that - | have failed. You may change them to any database / table you wish. - | - */ + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ - 'failed' => [ - 'database' => env('DB_CONNECTION', 'mysql'), - 'table' => 'failed_jobs', - ], + 'failed' => [ + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], ]; diff --git a/config/sentry.php b/config/sentry.php index 2a6978aef..1f03c883a 100644 --- a/config/sentry.php +++ b/config/sentry.php @@ -8,7 +8,4 @@ // Capture bindings on SQL queries 'breadcrumbs.sql_bindings' => true, - - // Capture default user context - 'user_context' => true, ); diff --git a/config/services.php b/config/services.php index 74b510ede..ca15bd01e 100644 --- a/config/services.php +++ b/config/services.php @@ -2,37 +2,42 @@ return [ - /* - |-------------------------------------------------------------------------- - | Third Party Services - |-------------------------------------------------------------------------- - | - | This file is for storing the credentials for third party services such - | as Stripe, Mailgun, SparkPost and others. This file provides a sane - | default location for this type of information, allowing packages - | to have a conventional place to find your various credentials. - | - */ + /* + |-------------------------------------------------------------------------- + | Third Party Services + |-------------------------------------------------------------------------- + | + | This file is for storing the credentials for third party services such + | as Stripe, Mailgun, SparkPost and others. This file provides a sane + | default location for this type of information, allowing packages + | to have a conventional place to find your various credentials. + | + */ - 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), - ], + 'mailgun' => [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + ], - 'ses' => [ - 'key' => env('SES_KEY'), - 'secret' => env('SES_SECRET'), - 'region' => 'us-east-1', - ], + 'ses' => [ + 'key' => env('SES_KEY'), + 'secret' => env('SES_SECRET'), + 'region' => 'us-east-1', + ], - 'sparkpost' => [ - 'secret' => env('SPARKPOST_SECRET'), - ], + 'sparkpost' => [ + 'secret' => env('SPARKPOST_SECRET'), + ], - 'stripe' => [ - 'model' => ALttP\User::class, - 'key' => env('STRIPE_KEY'), - 'secret' => env('STRIPE_SECRET'), - ], + 'stripe' => [ + 'model' => ALttP\User::class, + 'key' => env('STRIPE_KEY'), + 'secret' => env('STRIPE_SECRET'), + 'webhook' => [ + 'secret' => env('STRIPE_WEBHOOK_SECRET'), + 'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300), + ], + ], ]; diff --git a/config/session.php b/config/session.php index fae7d491a..f7d58162e 100644 --- a/config/session.php +++ b/config/session.php @@ -1,179 +1,198 @@ env('SESSION_DRIVER', 'file'), - - /* - |-------------------------------------------------------------------------- - | Session Lifetime - |-------------------------------------------------------------------------- - | - | Here you may specify the number of minutes that you wish the session - | to be allowed to remain idle before it expires. If you want them - | to immediately expire on the browser closing, set that option. - | - */ - - 'lifetime' => 120, - - 'expire_on_close' => false, - - /* - |-------------------------------------------------------------------------- - | Session Encryption - |-------------------------------------------------------------------------- - | - | This option allows you to easily specify that all of your session data - | should be encrypted before it is stored. All encryption will be run - | automatically by Laravel and you can use the Session like normal. - | - */ - - 'encrypt' => false, - - /* - |-------------------------------------------------------------------------- - | Session File Location - |-------------------------------------------------------------------------- - | - | When using the native session driver, we need a location where session - | files may be stored. A default has been set for you but a different - | location may be specified. This is only needed for file sessions. - | - */ - - 'files' => storage_path('framework/sessions'), - - /* - |-------------------------------------------------------------------------- - | Session Database Connection - |-------------------------------------------------------------------------- - | - | When using the "database" or "redis" session drivers, you may specify a - | connection that should be used to manage these sessions. This should - | correspond to a connection in your database configuration options. - | - */ - - 'connection' => null, - - /* - |-------------------------------------------------------------------------- - | Session Database Table - |-------------------------------------------------------------------------- - | - | When using the "database" session driver, you may specify the table we - | should use to manage the sessions. Of course, a sensible default is - | provided for you; however, you are free to change this as needed. - | - */ - - 'table' => 'sessions', - - /* - |-------------------------------------------------------------------------- - | Session Cache Store - |-------------------------------------------------------------------------- - | - | When using the "apc" or "memcached" session drivers, you may specify a - | cache store that should be used for these sessions. This value must - | correspond with one of the application's configured cache stores. - | - */ - - 'store' => null, - - /* - |-------------------------------------------------------------------------- - | Session Sweeping Lottery - |-------------------------------------------------------------------------- - | - | Some session drivers must manually sweep their storage location to get - | rid of old sessions from storage. Here are the chances that it will - | happen on a given request. By default, the odds are 2 out of 100. - | - */ - - 'lottery' => [2, 100], - - /* - |-------------------------------------------------------------------------- - | Session Cookie Name - |-------------------------------------------------------------------------- - | - | Here you may change the name of the cookie used to identify a session - | instance by ID. The name specified here will get used every time a - | new session cookie is created by the framework for every driver. - | - */ - - 'cookie' => 'laravel_session', - - /* - |-------------------------------------------------------------------------- - | Session Cookie Path - |-------------------------------------------------------------------------- - | - | The session cookie path determines the path for which the cookie will - | be regarded as available. Typically, this will be the root path of - | your application but you are free to change this when necessary. - | - */ - - 'path' => '/', - - /* - |-------------------------------------------------------------------------- - | Session Cookie Domain - |-------------------------------------------------------------------------- - | - | Here you may change the domain of the cookie used to identify a session - | in your application. This will determine which domains the cookie is - | available to in your application. A sensible default has been set. - | - */ - - 'domain' => env('SESSION_DOMAIN', null), - - /* - |-------------------------------------------------------------------------- - | HTTPS Only Cookies - |-------------------------------------------------------------------------- - | - | By setting this option to true, session cookies will only be sent back - | to the server if the browser has a HTTPS connection. This will keep - | the cookie from being sent to you if it can not be done securely. - | - */ - - 'secure' => env('SESSION_SECURE_COOKIE', false), - - /* - |-------------------------------------------------------------------------- - | HTTP Access Only - |-------------------------------------------------------------------------- - | - | Setting this value to true will prevent JavaScript from accessing the - | value of the cookie and the cookie will only be accessible through - | the HTTP protocol. You are free to modify this option if needed. - | - */ - - 'http_only' => true, + /* + |-------------------------------------------------------------------------- + | Default Session Driver + |-------------------------------------------------------------------------- + | + | This option controls the default session "driver" that will be used on + | requests. By default, we will use the lightweight native driver but + | you may specify any of the other wonderful drivers provided here. + | + | Supported: "file", "cookie", "database", "apc", + | "memcached", "redis", "array" + | + */ + + 'driver' => env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION', null), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using the "apc" or "memcached" session drivers, you may specify a + | cache store that should be used for these sessions. This value must + | correspond with one of the application's configured cache stores. + | + */ + + 'store' => env('SESSION_STORE', null), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE', false), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | do not enable this as other CSRF protection services are in place. + | + | Supported: "lax", "strict" + | + */ + 'same_site' => null, ]; diff --git a/config/sprites.php b/config/sprites.php index 992b25ef5..4184d6fc3 100644 --- a/config/sprites.php +++ b/config/sprites.php @@ -1,860 +1,944 @@ [ - 'name' => 'Link', - 'author' => 'Nintendo', - ], - '4slink-armors.1.zspr' => [ - 'name' => 'Four Swords Link', - 'author' => 'Mike Trethewey', - ], - 'Toadette.2.zspr' => [ - 'name' => 'Toadette', - 'author' => 'Devan2002', - ], - 'abigail.1.zspr' => [ - 'name' => 'Abigail', - 'author' => 'Fish_waffle64', - ], - 'alice.1.zspr' => [ - 'name' => 'Alice', - 'author' => 'Artheau', - ], - 'arrghus.2.zspr' => [ - 'name' => 'Arrghus', - 'author' => 'fatmanspanda', - ], - 'bandit.1.zspr' => [ - 'name' => 'Bandit', - 'author' => 'Fenrika', - ], - 'batman.1.zspr' => [ - 'name' => 'Batman', - 'author' => 'Ninjakauz', - ], - 'beau.1.zspr' => [ - 'name' => 'Beau', - 'author' => 'Achy', - ], - 'bewp.1.zspr' => [ - 'name' => 'Bewp', - 'author' => 'Valechec', - ], - 'bigkey.1.zspr' => [ - 'name' => 'Big Key', - 'author' => 'Fouton', - ], - 'birb.1.zspr' => [ - 'name' => 'Birb', - 'author' => 'Andrew Copple', - ], - 'blackmage.1.zspr' => [ - 'name' => 'Black Mage', - 'author' => 'TheRedMage', - ], - 'blacksmithlink.1.zspr' => [ - 'name' => 'Blacksmith Link', - 'author' => 'Glan', - ], - 'blossom.1.zspr' => [ - 'name' => 'Blossom', - 'author' => 'Artheau', - ], - 'bob.1.zspr' => [ - 'name' => 'Bob', - 'author' => 'fatmanspanda', - ], - 'boo-two.1.zspr' => [ - 'name' => 'Boo 2', - 'author' => 'Achy', - ], - 'boo.2.zspr' => [ - 'name' => 'Boo', - 'author' => 'Zarby89', - ], - 'bottle_o_goo.1.zspr' => [ - 'name' => 'Bottle o\' Goo', - 'author' => 'Fish_waffle64', - ], - 'bowser.1.zspr' => [ - 'name' => 'Bowser', - 'author' => 'Artheau', - ], - 'branch.1.zspr' => [ - 'name' => 'Branch', - 'author' => 'cbass601', - ], - 'broccoli.1.zspr' => [ - 'name' => 'Broccoli', - 'author' => 'fatmanspanda', - ], - 'bronzor.1.zspr' => [ - 'name' => 'Bronzor', - 'author' => 'fatmanspanda', - ], - 'bsboy.1.zspr' => [ - 'name' => 'B.S. Boy', - 'author' => 'InTheBeef', - ], - 'bsgirl.1.zspr' => [ - 'name' => 'B.S. Girl', - 'author' => 'InTheBeef', - ], - 'bubbles.1.zspr' => [ - 'name' => 'Bubbles', - 'author' => 'Artheau', - ], - 'bullet_bill.1.zspr' => [ - 'name' => 'Bullet Bill', - 'author' => 'Artheau', - ], - 'buttercup.1.zspr' => [ - 'name' => 'Buttercup', - 'author' => 'Artheau', - ], - 'cactuar.1.zspr' => [ - 'name' => 'Cactuar', - 'author' => 'RyuTech', - ], - 'casual-zelda.1.zspr' => [ - 'name' => 'Casual Zelda', - 'author' => 'Fish_waffle64', - ], - 'cat.2.zspr' => [ - 'name' => 'Marvin the Cat', - 'author' => 'Fish_waffle64', - ], - 'catboo.1.zspr' => [ - 'name' => 'Cat Boo', - 'author' => 'JaySee87', - ], - 'cdilink.1.zspr' => [ - 'name' => 'CD-i Link', - 'author' => 'SnipSlum', - ], - 'celes.1.zspr' => [ - 'name' => 'Celes', - 'author' => 'Deagans', - ], - 'cheepcheep.1.zspr' => [ - 'name' => 'Cheep Cheep', - 'author' => 'Faw', - ], - 'cirno.1.zspr' => [ - 'name' => 'Cirno', - 'author' => 'Achy', - ], - 'clifford.1.zspr' => [ - 'name' => 'Clifford', - 'author' => 'PlaguedOne', - ], - 'clyde.1.zspr' => [ - 'name' => 'Clyde', - 'author' => 'Artheau', - ], - 'conker.1.zspr' => [ - 'name' => 'Conker', - 'author' => 'Charmander106/SePH', - ], - 'cucco.1.zspr' => [ - 'name' => 'Cucco', - 'author' => 'MikeTrethewey', - ], - 'cursor.1.zspr' => [ - 'name' => 'Cursor', - 'author' => 'PlaguedOne', - ], - 'darkboy.1.zspr' => [ - 'name' => 'Dark Boy', - 'author' => 'iBazly', - ], - 'darkgirl.1.zspr' => [ - 'name' => 'Dark Girl', - 'author' => 'iBazly', - ], - 'darklink-tunic.1.zspr' => [ - 'name' => 'Dark Link (Tunic)', - 'author' => 'Damon', - ], - 'darklink.1.zspr' => [ - 'name' => 'Dark Link', - 'author' => 'iBazly', - ], - 'darkswatchy.1.zspr' => [ - 'name' => 'Dark Swatchy', - 'author' => 'Mike Trethewey', - ], - 'darkzelda.1.zspr' => [ - 'name' => 'Dark Zelda', - 'author' => 'iBazly', - ], - 'darkzora.2.zspr' => [ - 'name' => 'Dark Zora', - 'author' => 'iBazly', - ], - 'deadrock.1.zspr' => [ - 'name' => 'Deadrock', - 'author' => 'Glan', - ], - 'decidueye.1.zspr' => [ - 'name' => 'Decidueye', - 'author' => 'Achy', - ], - 'demonlink.1.zspr' => [ - 'name' => 'Demon Link', - 'author' => 'Krelbel', - ], - 'dragonite.1.zspr' => [ - 'name' => 'Dragonite', - 'author' => 'Fish_waffle64', - ], - 'drake.1.zspr' => [ - 'name' => 'Drake The Dragon', - 'author' => 'No Body The Dragon', - ], - 'eggplant.1.zspr' => [ - 'name' => 'Eggplant', - 'author' => 'PlaguedOne', - ], - 'emosaru.1.zspr' => [ - 'name' => 'EmoSaru', - 'author' => 'Achy', - ], - 'ezlo.1.zspr' => [ - 'name' => 'Ezlo', - 'author' => 'cbass601', - ], - 'finny_bear.1.zspr' => [ - 'name' => 'Finny Bear', - 'author' => 'skovacs1', - ], - 'fish_floodgate.1.zspr' => [ - 'name' => 'Floodgate Fish', - 'author' => 'Delphi1024', - ], - 'foxlink.1.zspr' => [ - 'name' => 'Fox Link', - 'author' => 'InTheBeef', - ], - 'frisk.1.zspr' => [ - 'name' => 'Frisk', - 'author' => 'Original by Toby Fox, sprite edit by MisterKerr', - ], - 'froglink.2.zspr' => [ - 'name' => 'Frog Link', - 'author' => 'Mike Trethewey', - ], - 'gamer.1.zspr' => [ - 'name' => 'Gamer', - 'author' => 'Unknown', - ], - 'ganondorf.1.zspr' => [ - 'name' => 'Ganondorf', - 'author' => 'Fish_waffle64', - ], - 'garfield.2.zspr' => [ - 'name' => 'Garfield', - 'author' => 'Fwiller', - ], - 'garnet.1.zspr' => [ - 'name' => 'Garnet', - 'author' => 'Artheau', - ], - 'garomaster.1.zspr' => [ - 'name' => 'Garo Master', - 'author' => 'Herowho', - ], - 'gobli.1.zspr' => [ - 'name' => 'Gobli', - 'author' => 'Lantis', - ], - 'goomba.1.zspr' => [ - 'name' => 'Goomba', - 'author' => 'SirCzah', - ], - 'grandpoobear.2.zspr' => [ - 'name' => 'GrandPOOBear', - 'author' => 'proximitysound', - ], - 'grunclestan.1.zspr' => [ - 'name' => 'Gruncle Stan', - 'author' => 'SirCzah', - ], - 'hardhat_beetle.1.zspr' => [ - 'name' => 'Hardhat Beetle', - 'author' => 'Artheau', - ], - 'headlesslink.1.zspr' => [ - 'name' => 'Headless Link', - 'author' => 'fatmanspanda', - ], - 'hello_kitty.1.zspr' => [ - 'name' => 'Hello Kitty', - 'author' => 'qeeen', - ], - 'hint_tile.1.zspr' => [ - 'name' => 'Hint Tile', - 'author' => 'PlaguedOne', - ], - 'hoarder-bush.1.zspr' => [ - 'name' => 'Hoarder (Bush)', - 'author' => 'Restomak', - ], - 'hoarder-pot.1.zspr' => [ - 'name' => 'Hoarder (Pot)', - 'author' => 'Restomak', - ], - 'hoarder-rock.1.zspr' => [ - 'name' => 'Hoarder (Rock)', - 'author' => 'Restomak', - ], - 'homer.zspr' => [ - 'name' => 'Homer Simpson', - 'author' => 'Fwiller', - ], - 'hyruleknight.1.zspr' => [ - 'name' => 'Hyrule Knight', - 'author' => 'InTheBeef', - ], - 'ibazly.1.zspr' => [ - 'name' => 'iBazly', - 'author' => 'Achy', - ], - 'ignignokt.2.zspr' => [ - 'name' => 'Ignignokt', - 'author' => 'fatmanspanda', - ], - 'informant_woman.1.zspr' => [ - 'name' => 'Informant Woman', - 'author' => 'Herowho', - ], - 'inkling.1.zspr' => [ - 'name' => 'Inkling', - 'author' => 'RyuTech', - ], - 'invisibleman.1.zspr' => [ - 'name' => 'Invisible Link', - 'author' => 'Mike Trethewey', - ], - 'jason_frudnick.1.zspr' => [ - 'name' => 'Jason Frudnick', - 'author' => 'Artheau', - ], - 'jogurt.1.zspr' => [ - 'name' => 'Jogurt', - 'author' => 'Nakuri', - ], - 'kecleon.1.zspr' => [ - 'name' => 'Kecleon', - 'author' => 'Gylergin', - ], - 'kenny_mccormick.1.zspr' => [ - 'name' => 'Kenny McCormick', - 'author' => 'Artheau', - ], - 'kholdstare.1.zspr' => [ - 'name' => 'Kholdstare', - 'author' => 'fatmanspanda', - ], - 'king_gothalion.1.zspr' => [ - 'name' => 'King Gothalion', - 'author' => 'kickpixel', - ], - 'kirby-meta.1.zspr' => [ - 'name' => 'Kirby', - 'author' => 'KHRoxas', - ], - 'kore8.1.zspr' => [ - 'name' => 'Kore8', - 'author' => 'Skewer', - ], - 'lakitu.1.zspr' => [ - 'name' => 'Lakitu', - 'author' => 'SirCzah', - ], - 'lily.1.zspr' => [ - 'name' => 'Lily', - 'author' => 'ScatlinkSean', - ], - 'linkhatcolor.1.zspr' => [ - 'name' => 'Hat Color Link', - 'author' => 'Damon', - ], - 'linktuniccolor.1.zspr' => [ - 'name' => 'Tunic Color Link', - 'author' => 'Damon', - ], - 'littlepony.1.zspr' => [ - 'name' => 'Pony', - 'author' => 'Botchos', - ], - 'locke_merchant.1.zspr' => [ - 'name' => 'Figaro Merchant', - 'author' => 'Artheau', - ], - 'lucario.1.zspr' => [ - 'name' => 'Lucario', - 'author' => 'Achy', - ], - 'luigi.1.zspr' => [ - 'name' => 'Luigi', - 'author' => 'Achy', - ], - 'magus.1.zspr' => [ - 'name' => 'Magus', - 'author' => 'PlaguedOne', - ], - 'maiden.1.zspr' => [ - 'name' => 'Maiden', - 'author' => 'Plan', - ], - 'mangalink.1.zspr' => [ - 'name' => 'Manga Link', - 'author' => 'fatmanspanda', - ], - 'maplequeen.2.zspr' => [ - 'name' => 'Maple Queen', - 'author' => 'Zarby89', - ], - 'marin.1.zspr' => [ - 'name' => 'Marin', - 'author' => 'Nocturnesthesia', - ], - 'mario-classic.2.zspr' => [ - 'name' => 'Mario (Classic)', - 'author' => 'Damon', - ], - 'mario_tanooki.1.zspr' => [ - 'name' => 'Tanooki Mario', - 'author' => 'Nocturnesthesia', - ], - 'mariocappy.1.zspr' => [ - 'name' => 'Mario and Cappy', - 'author' => 'Damon', - ], - 'marisa.1.zspr' => [ - 'name' => 'Marisa Kirisame', - 'author' => 'Achy', - ], - 'meatwad.1.zspr' => [ - 'name' => 'Meatwad', - 'author' => 'fatmanspanda', - ], - 'medallions.1.zspr' => [ - 'name' => 'Medallions', - 'author' => 'Mike Trethewey', - ], - 'medli.1.zspr' => [ - 'name' => 'Medli', - 'author' => 'Kzinssie', - ], - 'megaman-x.2.zspr' => [ - 'name' => 'Megaman X', - 'author' => 'PlaguedOne', - ], - 'mike-jones.2.zspr' => [ - 'name' => 'Mike Jones', - 'author' => 'Fish_waffle64', - ], - 'mikejones.1.zspr' => [ - 'name' => 'Mike Jones', - 'author' => 'Fish_waffle64', - ], - 'minish_link.1.zspr' => [ - 'name' => 'Minish Link', - 'author' => 'Artheau', - ], - 'minishcaplink.2.zspr' => [ - 'name' => 'Minish Cap Link', - 'author' => 'InTheBeef', - ], - 'missingno.1.zspr' => [ - 'name' => 'missingno', - 'author' => '', - ], - 'modernlink.1.zspr' => [ - 'name' => 'Modern Link', - 'author' => 'RyuTech', - ], - 'mog.2.zspr' => [ - 'name' => 'Mog', - 'author' => 'Krelbel', - ], - 'moosh.1.zspr' => [ - 'name' => 'Moosh', - 'author' => 'PlaguedOne', - ], - 'mouse.1.zspr' => [ - 'name' => 'Mouse', - 'author' => 'Malthaez', - ], - 'mushy.1.zspr' => [ - 'name' => 'Power Up with Pride Mushroom', - 'author' => 'Achy', - ], - 'naturelink.1.zspr' => [ - 'name' => 'Nature Link', - 'author' => 'iBazly', - ], - 'navi.1.zspr' => [ - 'name' => 'Navi', - 'author' => 'qwertymodo', - ], - 'negativelink.1.zspr' => [ - 'name' => 'Negative Link', - 'author' => 'iBazly', - ], - 'neslink.1.zspr' => [ - 'name' => ' NES Link', - 'author' => 'MikeTrethewey/Fatmanspanda', - ], - 'ness.1.zspr' => [ - 'name' => 'Ness (Earthbound)', - 'author' => 'Lantis', - ], - 'nia.1.zspr' => [ - 'name' => 'Nia', - 'author' => 'Mojonbo', - ], - 'oldman.2.zspr' => [ - 'name' => 'Old Man', - 'author' => 'Zarby89', - ], - 'ori.1.zspr' => [ - 'name' => 'Ori', - 'author' => 'Phant', - ], - 'outlinelink.1.zspr' => [ - 'name' => 'Outline Link', - 'author' => 'VT', - ], - 'parallelworldslink.1.zspr' => [ - 'name' => 'Parallel Worlds Link', - 'author' => 'SePH/InTheBeef', - ], - 'paula.1.zspr' => [ - 'name' => 'Paula', - 'author' => 'Fish_waffle64', - ], - 'peach.1.zspr' => [ - 'name' => 'Princess Peach', - 'author' => 'RoPan', - ], - 'penguinlink.1.zspr' => [ - 'name' => 'Penguin Link', - 'author' => 'Fish_waffle64', - ], - 'pete.1.zspr' => [ - 'name' => 'Pete (Harvest Moon)', - 'author' => 'Lantis', - ], - 'phoenix-wright.1.zspr' => [ - 'name' => 'Phoenix Wright', - 'author' => 'SnipSlum', - ], - 'pikachu.1.zspr' => [ - 'name' => 'Pikachu', - 'author' => 'toucansham', - ], - 'pinkribbonlink.2.zspr' => [ - 'name' => 'Pink Ribbon Link', - 'author' => 'fatmanspanda', - ], - 'plagueknight.1.zspr' => [ - 'name' => 'Plague Knight', - 'author' => 'Jenichi', - ], - 'pokey.1.zspr' => [ - 'name' => 'Pokey', - 'author' => 'fatmanspanda', - ], - 'popoi.1.zspr' => [ - 'name' => 'Popoi', - 'author' => 'ItsSupercar', - ], - 'poppy.1.zspr' => [ - 'name' => 'Poppy', - 'author' => 'cbass601', - ], - 'powerpuff_girl.1.zspr' => [ - 'name' => 'Powerpuff Girl', - 'author' => 'Jenichi', - ], - 'pridelink.2.zspr' => [ - 'name' => 'Pride Link', - 'author' => 'proximitysound', - ], - 'primm.1.zspr' => [ - 'name' => 'Primm', - 'author' => 'Artheau', - ], - 'psyduck.1.zspr' => [ - 'name' => 'Psyduck', - 'author' => 'skovacs1', - ], - 'pug.1.zspr' => [ - 'name' => 'The Pug', - 'author' => 'Achy', - ], - 'purplechest-bottle.1.zspr' => [ - 'name' => 'Purple Chest', - 'author' => 'Mike Trethewey', - ], - 'rainbowlink.1.zspr' => [ - 'name' => 'Rainbow Link', - 'author' => 'fatmanspanda', - ], - 'rick.1.zspr' => [ - 'name' => 'Rick (Redacted)', - 'author' => 'Eric the Terrible/Devan 2002', - ], - 'robotlink.1.zspr' => [ - 'name' => 'Robo-Link 9000', - 'author' => 'fatmanspanda', - ], - 'rocko.1.zspr' => [ - 'name' => 'Rocko', - 'author' => 'toucansham', - ], - 'rottytops.1.zspr' => [ - 'name' => 'Rottytops', - 'author' => 'PlaguedOne', - ], - 'roykoopa.1.zspr' => [ - 'name' => 'Roy Koopa', - 'author' => 'Achy', - ], - 'rumia.1.zspr' => [ - 'name' => 'Rumia', - 'author' => 'Achy', - ], - 'ryu.1.zspr' => [ - 'name' => 'Ryu', - 'author' => 'PlaguedOne', - ], - 'sailormoon.1.zspr' => [ - 'name' => 'Sailor Moon', - 'author' => 'Jenichi', - ], - 'samus.2.zspr' => [ - 'name' => 'Samus', - 'author' => 'Fish_waffle64', - ], - 'samus_classic.1.zspr' => [ - 'name' => 'Samus (Classic)', - 'author' => 'Fish_waffle64', - ], - 'santalink.2.zspr' => [ - 'name' => 'Santa Link', - 'author' => 'HOHOHO', - ], - 'scholar.1.zspr' => [ - 'name' => 'Scholar', - 'author' => 'Damon', - ], - 'sevens1ns.1.zspr' => [ - 'name' => 'SevenS1ns', - 'author' => 'Hroun', - ], - 'shadow.1.zspr' => [ - 'name' => 'Shadow', - 'author' => 'CGG Zayik', - ], - 'shadowsaku.2.zspr' => [ - 'name' => 'Shadow Sakura', - 'author' => 'iBazly', - ], - 'shantae.1.zspr' => [ - 'name' => 'Shantae', - 'author' => 'skovacs1', - ], - 'shuppet.1.zspr' => [ - 'name' => 'Shuppet', - 'author' => 'fatmanspanda', - ], - 'shy-guy.1.zspr' => [ - 'name' => 'Shy Guy', - 'author' => 'skovacs1', - ], - 'snes-controller.1.zspr' => [ - 'name' => 'SNES Controller', - 'author' => 'Cbass601', - ], - 'sodacan.1.zspr' => [ - 'name' => 'Soda Can', - 'author' => 'Zarby89', - ], - 'solaire.1.zspr' => [ - 'name' => 'Solaire of Astora', - 'author' => 'Knilip', - ], - 'soldiersprite.1.zspr' => [ - 'name' => 'Hyrule Soldier', - 'author' => 'InTheBeef', - ], - 'sonic.1.zspr' => [ - 'name' => 'Sonic the Hedgehog', - 'author' => 'Osaka', - ], - 'sora.1.zspr' => [ - 'name' => 'Sora', - 'author' => 'roxas232', - ], - 'sora_kh1.1.zspr' => [ - 'name' => 'Sora (KH1)', - 'author' => 'ScatlinkSean', - ], - 'squirtle.1.zspr' => [ - 'name' => 'Squirtle', - 'author' => 'Numberplay', - ], - 'stalfos.1.zspr' => [ - 'name' => 'Stalfos', - 'author' => 'Artheau', - ], - 'staticlink.1.zspr' => [ - 'name' => 'Static Link', - 'author' => 'fatmanspanda', - ], - 'stick_man.1.zspr' => [ - 'name' => 'Stick Man', - 'author' => 'skovacs1', - ], - 'superbomb.1.zspr' => [ - 'name' => 'Super Bomb', - 'author' => 'Ninjakauz', - ], - 'superbunny.2.zspr' => [ - 'name' => 'Super Bunny', - 'author' => 'TheOkayGuy', - ], - 'supermeatboy.1.zspr' => [ - 'name' => 'Super Meat Boy', - 'author' => 'Achy', - ], - 'swatchy.1.zspr' => [ - 'name' => 'Swatchy', - 'author' => 'Mike Trethewey', - ], - 'teatime.1.zspr' => [ - 'name' => 'Tea Time', - 'author' => 'SirCzah', - ], - 'terra.1.zspr' => [ - 'name' => 'Terra (Esper)', - 'author' => 'All-in-one Mighty', - ], - 'tetra.1.zspr' => [ - 'name' => 'Tetra Sheet', - 'author' => 'Ferelheart', - ], - 'thief.1.zspr' => [ - 'name' => 'Thief', - 'author' => 'Devan2002', - ], - 'tile.2.zspr' => [ - 'name' => 'Tile', - 'author' => 'fatmanspanda', - ], - 'tingle.1.zspr' => [ - 'name' => 'Tingle', - 'author' => 'Xenobond', - ], - 'tmnt.1.zspr' => [ - 'name' => 'TMNT', - 'author' => 'SirCzah', - ], - 'toad.2.zspr' => [ - 'name' => 'Toad', - 'author' => 'Zarby89', - ], - 'toadette_captain.1.zspr' => [ - 'name' => 'Captain Toadette', - 'author' => 'Devan2002', - ], - 'totem-links.1.zspr' => [ - 'name' => 'TotemLinks', - 'author' => 'Yotohan', - ], - 'trogdor.1.zspr' => [ - 'name' => 'Trogdor the Burninator', - 'author' => 'MikeTrethewey/Spanda', - ], - 'twilightprincesszelda.2.zspr' => [ - 'name' => 'TP Zelda', - 'author' => 'Fish_waffle64', - ], - 'two_faced.1.zspr' => [ - 'name' => 'TwoFaced', - 'author' => 'Devan2002', - ], - 'ultros.1.zspr' => [ - 'name' => 'Ultros', - 'author' => 'PlaguedOne', - ], - 'valeera.1.zspr' => [ - 'name' => 'Valeera', - 'author' => 'Glan', - ], - 'vanillalink.1.zspr' => [ - 'name' => 'VanillaLink', - 'author' => 'Jenichi', - ], - 'vitreous.1.zspr' => [ - 'name' => 'Vitreous', - 'author' => 'Glan', - ], - 'vivi.1.zspr' => [ - 'name' => 'Vivi', - 'author' => 'RyuTech', - ], - 'vivian.1.zspr' => [ - 'name' => 'Vivian', - 'author' => 'SirCzah', - ], - 'wario.1.zspr' => [ - 'name' => 'Wario', - 'author' => 'Deagans', - ], - 'will.1.zspr' => [ - 'name' => 'Will', - 'author' => 'Xenobond', - ], - 'wixb.1.zspr' => [ - 'name' => 'wixB', - 'author' => 'Peter97', - ], - 'wizzrobe.2.zspr' => [ - 'name' => 'Wizzrobe', - 'author' => 'iBazly', - ], - 'yoshi.1.zspr' => [ - 'name' => 'Yoshi', - 'author' => 'Yotohan', - ], - 'yunica.1.zspr' => [ - 'name' => 'Yunica Tovah', - 'author' => 'Fish_waffle64', - ], - 'zandra.1.zspr' => [ - 'name' => 'Zandra', - 'author' => 'ZandraVandra', - ], - 'zebraunicorn.1.zspr' => [ - 'name' => 'Zebra Unicorn', - 'author' => 'Brass Man', - ], - 'zelda.1.zspr' => [ - 'name' => 'Zelda', - 'author' => 'Myriachan', - ], - 'zerosuitsamus.2.zspr' => [ - 'name' => 'Zero Suit Samus', - 'author' => 'Fish_waffle64', - ], - 'zora.2.zspr' => [ - 'name' => 'Zora', - 'author' => 'Zarby, InTheBeef', - ], + '001.link.1.zspr' => [ + 'name' => 'Link', + 'author' => 'Nintendo', + ], + '4slink-armors.1.zspr' => [ + 'name' => 'Four Swords Link', + 'author' => 'Mike Trethewey', + ], + 'abigail.1.zspr' => [ + 'name' => 'Abigail', + 'author' => 'Fish_waffle64', + ], + 'alice.1.zspr' => [ + 'name' => 'Alice', + 'author' => 'Artheau', + ], + 'arrghus.2.zspr' => [ + 'name' => 'Arrghus', + 'author' => 'fatmanspanda', + ], + 'bandit.1.zspr' => [ + 'name' => 'Bandit', + 'author' => 'Fenrika', + ], + 'batman.1.zspr' => [ + 'name' => 'Batman', + 'author' => 'Ninjakauz', + ], + 'beau.1.zspr' => [ + 'name' => 'Beau', + 'author' => 'Achy', + ], + 'bewp.1.zspr' => [ + 'name' => 'Bewp', + 'author' => 'Valechec', + ], + 'bigkey.1.zspr' => [ + 'name' => 'Big Key', + 'author' => 'Fouton', + ], + 'birb.1.zspr' => [ + 'name' => 'Birb', + 'author' => 'Andrew Copple', + ], + 'birdo.1.zspr' => [ + 'name' => 'Birdo', + 'author' => 'BlackTycoon', + ], + 'blackmage.1.zspr' => [ + 'name' => 'Black Mage', + 'author' => 'TheRedMage', + ], + 'blacksmithlink.1.zspr' => [ + 'name' => 'Blacksmith Link', + 'author' => 'Glan', + ], + 'blossom.1.zspr' => [ + 'name' => 'Blossom', + 'author' => 'Artheau', + ], + 'bob.1.zspr' => [ + 'name' => 'Bob', + 'author' => 'fatmanspanda', + ], + 'boo-two.1.zspr' => [ + 'name' => 'Boo 2', + 'author' => 'Achy', + ], + 'boo.2.zspr' => [ + 'name' => 'Boo', + 'author' => 'Zarby89', + ], + 'bottle_o_goo.1.zspr' => [ + 'name' => 'Bottle o\' Goo', + 'author' => 'Fish_waffle64', + ], + 'bowser.1.zspr' => [ + 'name' => 'Bowser', + 'author' => 'Artheau', + ], + 'branch.1.zspr' => [ + 'name' => 'Branch', + 'author' => 'cbass601', + ], + 'broccoli.1.zspr' => [ + 'name' => 'Broccoli', + 'author' => 'fatmanspanda', + ], + 'bronzor.1.zspr' => [ + 'name' => 'Bronzor', + 'author' => 'fatmanspanda', + ], + 'bsboy.1.zspr' => [ + 'name' => 'B.S. Boy', + 'author' => 'InTheBeef', + ], + 'bsgirl.1.zspr' => [ + 'name' => 'B.S. Girl', + 'author' => 'InTheBeef', + ], + 'bubbles.1.zspr' => [ + 'name' => 'Bubbles', + 'author' => 'Artheau', + ], + 'bullet_bill.1.zspr' => [ + 'name' => 'Bullet Bill', + 'author' => 'Artheau', + ], + 'buttercup.1.zspr' => [ + 'name' => 'Buttercup', + 'author' => 'Artheau', + ], + 'cactuar.1.zspr' => [ + 'name' => 'Cactuar', + 'author' => 'RyuTech', + ], + 'cadence.1.zspr' => [ + 'name' => 'Cadence', + 'author' => 'Fish_waffle64', + ], + 'casual-zelda.1.zspr' => [ + 'name' => 'Casual Zelda', + 'author' => 'Fish_waffle64', + ], + 'cat.3.zspr' => [ + 'name' => 'Marvin the Cat', + 'author' => 'Fish_waffle64', + ], + 'catboo.1.zspr' => [ + 'name' => 'Cat Boo', + 'author' => 'JaySee87', + ], + 'cdilink.1.zspr' => [ + 'name' => 'CD-i Link', + 'author' => 'SnipSlum', + ], + 'celes.1.zspr' => [ + 'name' => 'Celes', + 'author' => 'Deagans', + ], + 'cheepcheep.1.zspr' => [ + 'name' => 'Cheep Cheep', + 'author' => 'Faw', + ], + 'chibity.1.zspr' => [ + 'name' => 'Chibity', + 'author' => 'Ecyro', + ], + 'cirno.1.zspr' => [ + 'name' => 'Cirno', + 'author' => 'Achy', + ], + 'clifford.1.zspr' => [ + 'name' => 'Clifford', + 'author' => 'PlaguedOne', + ], + 'clyde.1.zspr' => [ + 'name' => 'Clyde', + 'author' => 'Artheau', + ], + 'conker.1.zspr' => [ + 'name' => 'Conker', + 'author' => 'Charmander106/SePH', + ], + 'corona.1.zspr' => [ + 'name' => 'Corona', + 'author' => 'Herowho', + ], + 'cucco.1.zspr' => [ + 'name' => 'Cucco', + 'author' => 'MikeTrethewey', + ], + 'cursor.1.zspr' => [ + 'name' => 'Cursor', + 'author' => 'PlaguedOne', + ], + 'd_owls.1.zspr' => [ + 'name' => 'D.Owls', + 'author' => 'D.Owls', + ], + 'darkboy.1.zspr' => [ + 'name' => 'Dark Boy', + 'author' => 'iBazly', + ], + 'darkgirl.1.zspr' => [ + 'name' => 'Dark Girl', + 'author' => 'iBazly', + ], + 'darklink-tunic.1.zspr' => [ + 'name' => 'Dark Link (Tunic)', + 'author' => 'Damon', + ], + 'darklink.1.zspr' => [ + 'name' => 'Dark Link', + 'author' => 'iBazly', + ], + 'darkswatchy.1.zspr' => [ + 'name' => 'Dark Swatchy', + 'author' => 'Mike Trethewey', + ], + 'darkzelda.1.zspr' => [ + 'name' => 'Dark Zelda', + 'author' => 'iBazly', + ], + 'darkzora.2.zspr' => [ + 'name' => 'Dark Zora', + 'author' => 'iBazly', + ], + 'deadrock.1.zspr' => [ + 'name' => 'Deadrock', + 'author' => 'Glan', + ], + 'decidueye.1.zspr' => [ + 'name' => 'Decidueye', + 'author' => 'Achy', + ], + 'demonlink.1.zspr' => [ + 'name' => 'Demon Link', + 'author' => 'Krelbel', + ], + 'dragonite.2.zspr' => [ + 'name' => 'Dragonite', + 'author' => 'Fish_waffle64', + ], + 'drake.1.zspr' => [ + 'name' => 'Drake The Dragon', + 'author' => 'No Body The Dragon', + ], + 'eggplant.1.zspr' => [ + 'name' => 'Eggplant', + 'author' => 'PlaguedOne', + ], + 'emosaru.1.zspr' => [ + 'name' => 'EmoSaru', + 'author' => 'Achy', + ], + 'ezlo.1.zspr' => [ + 'name' => 'Ezlo', + 'author' => 'cbass601', + ], + 'finn.1.zspr' => [ + 'name' => 'Finn Merten', + 'author' => 'Devan2002', + ], + 'finny_bear.1.zspr' => [ + 'name' => 'Finny Bear', + 'author' => 'skovacs1', + ], + 'fish_floodgate.1.zspr' => [ + 'name' => 'Floodgate Fish', + 'author' => 'Delphi1024', + ], + 'flavor_guy.1.zspr' => [ + 'name' => 'Flavor Guy', + 'author' => 'PlaguedOne', + ], + 'foxlink.1.zspr' => [ + 'name' => 'Fox Link', + 'author' => 'InTheBeef', + ], + 'frisk.1.zspr' => [ + 'name' => 'Frisk', + 'author' => 'Original by Toby Fox, sprite edit by MisterKerr', + ], + 'froglink.3.zspr' => [ + 'name' => 'Frog Link', + 'author' => 'Mike Trethewey', + ], + 'fujin.1.zspr' => [ + 'name' => 'Fujin', + 'author' => 'FujinAkari', + ], + 'future_trunks.1.zspr' => [ + 'name' => 'Future Trunks', + 'author' => 'Merciter', + ], + 'gamer.1.zspr' => [ + 'name' => 'Gamer', + 'author' => 'Unknown', + ], + 'ganondorf.1.zspr' => [ + 'name' => 'Ganondorf', + 'author' => 'Fish_waffle64', + ], + 'garfield.2.zspr' => [ + 'name' => 'Garfield', + 'author' => 'Fwiller', + ], + 'garnet.1.zspr' => [ + 'name' => 'Garnet', + 'author' => 'Artheau', + ], + 'garomaster.1.zspr' => [ + 'name' => 'Garo Master', + 'author' => 'Herowho', + ], + 'gobli.1.zspr' => [ + 'name' => 'Gobli', + 'author' => 'Lantis', + ], + 'goomba.1.zspr' => [ + 'name' => 'Goomba', + 'author' => 'SirCzah', + ], + 'grandpoobear.2.zspr' => [ + 'name' => 'GrandPOOBear', + 'author' => 'proximitysound', + ], + 'grunclestan.1.zspr' => [ + 'name' => 'Gruncle Stan', + 'author' => 'SirCzah', + ], + 'hardhat_beetle.1.zspr' => [ + 'name' => 'Hardhat Beetle', + 'author' => 'Artheau', + ], + 'headlesslink.1.zspr' => [ + 'name' => 'Headless Link', + 'author' => 'fatmanspanda', + ], + 'hello_kitty.1.zspr' => [ + 'name' => 'Hello Kitty', + 'author' => 'qeeen', + ], + 'hint_tile.1.zspr' => [ + 'name' => 'Hint Tile', + 'author' => 'PlaguedOne', + ], + 'hoarder-bush.1.zspr' => [ + 'name' => 'Hoarder (Bush)', + 'author' => 'Restomak', + ], + 'hoarder-pot.1.zspr' => [ + 'name' => 'Hoarder (Pot)', + 'author' => 'Restomak', + ], + 'hoarder-rock.1.zspr' => [ + 'name' => 'Hoarder (Rock)', + 'author' => 'Restomak', + ], + 'homer.zspr' => [ + 'name' => 'Homer Simpson', + 'author' => 'Fwiller', + ], + 'hyruleknight.1.zspr' => [ + 'name' => 'Hyrule Knight', + 'author' => 'InTheBeef', + ], + 'ibazly.1.zspr' => [ + 'name' => 'iBazly', + 'author' => 'Achy', + ], + 'ignignokt.2.zspr' => [ + 'name' => 'Ignignokt', + 'author' => 'fatmanspanda', + ], + 'informant_woman.1.zspr' => [ + 'name' => 'Informant Woman', + 'author' => 'Herowho', + ], + 'inkling.1.zspr' => [ + 'name' => 'Inkling', + 'author' => 'RyuTech', + ], + 'invisibleman.1.zspr' => [ + 'name' => 'Invisible Link', + 'author' => 'Mike Trethewey', + ], + 'jason_frudnick.1.zspr' => [ + 'name' => 'Jason Frudnick', + 'author' => 'Artheau', + ], + 'jogurt.1.zspr' => [ + 'name' => 'Jogurt', + 'author' => 'Nakuri', + ], + 'kecleon.1.zspr' => [ + 'name' => 'Kecleon', + 'author' => 'Gylergin', + ], + 'kenny_mccormick.1.zspr' => [ + 'name' => 'Kenny McCormick', + 'author' => 'Artheau', + ], + 'kholdstare.1.zspr' => [ + 'name' => 'Kholdstare', + 'author' => 'fatmanspanda', + ], + 'king_gothalion.1.zspr' => [ + 'name' => 'King Gothalion', + 'author' => 'kickpixel', + ], + 'king_graham.1.zspr' => [ + 'name' => 'King Graham', + 'author' => 'MisterKerr', + ], + 'kirby-meta.1.zspr' => [ + 'name' => 'Kirby', + 'author' => 'KHRoxas', + ], + 'kore8.1.zspr' => [ + 'name' => 'Kore8', + 'author' => 'Skewer', + ], + 'lakitu.1.zspr' => [ + 'name' => 'Lakitu', + 'author' => 'SirCzah', + ], + 'lest.1.zspr' => [ + 'name' => 'Lest', + 'author' => 'PrideToRuleEarth', + ], + 'lily.1.zspr' => [ + 'name' => 'Lily', + 'author' => 'ScatlinkSean', + ], + 'linkhatcolor.1.zspr' => [ + 'name' => 'Hat Color Link', + 'author' => 'Damon', + ], + 'linktuniccolor.1.zspr' => [ + 'name' => 'Tunic Color Link', + 'author' => 'Damon', + ], + 'littlepony.1.zspr' => [ + 'name' => 'Pony', + 'author' => 'Botchos', + ], + 'locke_merchant.1.zspr' => [ + 'name' => 'Figaro Merchant', + 'author' => 'Artheau', + ], + 'lucario.1.zspr' => [ + 'name' => 'Lucario', + 'author' => 'Achy', + ], + 'luigi.1.zspr' => [ + 'name' => 'Luigi', + 'author' => 'Achy', + ], + 'magus.1.zspr' => [ + 'name' => 'Magus', + 'author' => 'PlaguedOne', + ], + 'maiden.1.zspr' => [ + 'name' => 'Maiden', + 'author' => 'Plan', + ], + 'mangalink.1.zspr' => [ + 'name' => 'Manga Link', + 'author' => 'fatmanspanda', + ], + 'maplequeen.2.zspr' => [ + 'name' => 'Maple Queen', + 'author' => 'Zarby89', + ], + 'marin.1.zspr' => [ + 'name' => 'Marin', + 'author' => 'Nocturnesthesia', + ], + 'mario-classic.2.zspr' => [ + 'name' => 'Mario (Classic)', + 'author' => 'Damon', + ], + 'mario_tanooki.1.zspr' => [ + 'name' => 'Tanooki Mario', + 'author' => 'Nocturnesthesia', + ], + 'mariocappy.1.zspr' => [ + 'name' => 'Mario and Cappy', + 'author' => 'Damon', + ], + 'marisa.1.zspr' => [ + 'name' => 'Marisa Kirisame', + 'author' => 'Achy', + ], + 'matthias.1.zspr' => [ + 'name' => 'Matthias', + 'author' => 'Marcus Bolduc', + ], + 'meatwad.1.zspr' => [ + 'name' => 'Meatwad', + 'author' => 'fatmanspanda', + ], + 'medallions.1.zspr' => [ + 'name' => 'Medallions', + 'author' => 'Mike Trethewey', + ], + 'medli.1.zspr' => [ + 'name' => 'Medli', + 'author' => 'Kzinssie', + ], + 'megaman-x.2.zspr' => [ + 'name' => 'Megaman X', + 'author' => 'PlaguedOne', + ], + 'mew.1.zspr' => [ + 'name' => 'MewLp', + 'author' => 'MewLp', + ], + 'mike-jones.2.zspr' => [ + 'name' => 'Mike Jones', + 'author' => 'Fish_waffle64', + ], + 'minish_link.1.zspr' => [ + 'name' => 'Minish Link', + 'author' => 'Artheau', + ], + 'minishcaplink.2.zspr' => [ + 'name' => 'Minish Cap Link', + 'author' => 'InTheBeef', + ], + 'missingno.1.zspr' => [ + 'name' => 'missingno', + 'author' => '', + ], + 'modernlink.1.zspr' => [ + 'name' => 'Modern Link', + 'author' => 'RyuTech', + ], + 'mog.2.zspr' => [ + 'name' => 'Mog', + 'author' => 'Krelbel', + ], + 'moosh.1.zspr' => [ + 'name' => 'Moosh', + 'author' => 'PlaguedOne', + ], + 'mouse.1.zspr' => [ + 'name' => 'Mouse', + 'author' => 'Malthaez', + ], + 'mushy.1.zspr' => [ + 'name' => 'Power Up with Pride Mushroom', + 'author' => 'Achy', + ], + 'naturelink.1.zspr' => [ + 'name' => 'Nature Link', + 'author' => 'iBazly', + ], + 'navi.1.zspr' => [ + 'name' => 'Navi', + 'author' => 'qwertymodo', + ], + 'negativelink.1.zspr' => [ + 'name' => 'Negative Link', + 'author' => 'iBazly', + ], + 'neslink.1.zspr' => [ + 'name' => ' NES Link', + 'author' => 'MikeTrethewey/Fatmanspanda', + ], + 'ness.1.zspr' => [ + 'name' => 'Ness (Earthbound)', + 'author' => 'Lantis', + ], + 'nia.1.zspr' => [ + 'name' => 'Nia', + 'author' => 'Mojonbo', + ], + 'oldman.2.zspr' => [ + 'name' => 'Old Man', + 'author' => 'Zarby89', + ], + 'ori.1.zspr' => [ + 'name' => 'Ori', + 'author' => 'Phant', + ], + 'outlinelink.1.zspr' => [ + 'name' => 'Outline Link', + 'author' => 'VT', + ], + 'parallelworldslink.1.zspr' => [ + 'name' => 'Parallel Worlds Link', + 'author' => 'SePH/InTheBeef', + ], + 'paula.1.zspr' => [ + 'name' => 'Paula', + 'author' => 'Fish_waffle64', + ], + 'peach.1.zspr' => [ + 'name' => 'Princess Peach', + 'author' => 'RoPan', + ], + 'penguinlink.1.zspr' => [ + 'name' => 'Penguin Link', + 'author' => 'Fish_waffle64', + ], + 'pete.1.zspr' => [ + 'name' => 'Pete (Harvest Moon)', + 'author' => 'Lantis', + ], + 'phoenix-wright.1.zspr' => [ + 'name' => 'Phoenix Wright', + 'author' => 'SnipSlum', + ], + 'pikachu.1.zspr' => [ + 'name' => 'Pikachu', + 'author' => 'toucansham', + ], + 'pinkribbonlink.2.zspr' => [ + 'name' => 'Pink Ribbon Link', + 'author' => 'fatmanspanda', + ], + 'piranha_plant.1.zspr' => [ + 'name' => 'Piranha Plant', + 'author' => 'lecremateur', + ], + 'plagueknight.1.zspr' => [ + 'name' => 'Plague Knight', + 'author' => 'Jenichi', + ], + 'pokey.1.zspr' => [ + 'name' => 'Pokey', + 'author' => 'fatmanspanda', + ], + 'popoi.1.zspr' => [ + 'name' => 'Popoi', + 'author' => 'ItsSupercar', + ], + 'poppy.1.zspr' => [ + 'name' => 'Poppy', + 'author' => 'cbass601', + ], + 'powerpuff_girl.1.zspr' => [ + 'name' => 'Powerpuff Girl', + 'author' => 'Jenichi', + ], + 'pridelink.2.zspr' => [ + 'name' => 'Pride Link', + 'author' => 'proximitysound', + ], + 'primm.1.zspr' => [ + 'name' => 'Primm', + 'author' => 'Artheau', + ], + 'psyduck.1.zspr' => [ + 'name' => 'Psyduck', + 'author' => 'skovacs1', + ], + 'pug.1.zspr' => [ + 'name' => 'The Pug', + 'author' => 'Achy', + ], + 'purplechest-bottle.1.zspr' => [ + 'name' => 'Purple Chest', + 'author' => 'Mike Trethewey', + ], + 'rainbowlink.1.zspr' => [ + 'name' => 'Rainbow Link', + 'author' => 'fatmanspanda', + ], + 'rick.1.zspr' => [ + 'name' => 'Rick (Redacted)', + 'author' => 'Eric the Terrible/Devan 2002', + ], + 'robotlink.1.zspr' => [ + 'name' => 'Robo-Link 9000', + 'author' => 'fatmanspanda', + ], + 'rocko.1.zspr' => [ + 'name' => 'Rocko', + 'author' => 'toucansham', + ], + 'rottytops.1.zspr' => [ + 'name' => 'Rottytops', + 'author' => 'PlaguedOne', + ], + 'roykoopa.1.zspr' => [ + 'name' => 'Roy Koopa', + 'author' => 'Achy', + ], + 'rumia.1.zspr' => [ + 'name' => 'Rumia', + 'author' => 'Achy', + ], + 'rydia.1.zspr' => [ + 'name' => 'Rydia', + 'author' => 'Sho', + ], + 'ryu.1.zspr' => [ + 'name' => 'Ryu', + 'author' => 'PlaguedOne', + ], + 'sailormoon.1.zspr' => [ + 'name' => 'Sailor Moon', + 'author' => 'Jenichi', + ], + 'samus.2.zspr' => [ + 'name' => 'Samus', + 'author' => 'Fish_waffle64', + ], + 'samus_classic.1.zspr' => [ + 'name' => 'Samus (Classic)', + 'author' => 'Fish_waffle64', + ], + 'santalink.2.zspr' => [ + 'name' => 'Santa Link', + 'author' => 'HOHOHO', + ], + 'scholar.1.zspr' => [ + 'name' => 'Scholar', + 'author' => 'Damon', + ], + 'sevens1ns.1.zspr' => [ + 'name' => 'SevenS1ns', + 'author' => 'Hroun', + ], + 'shadow.1.zspr' => [ + 'name' => 'Shadow', + 'author' => 'CGG Zayik', + ], + 'shadowsaku.2.zspr' => [ + 'name' => 'Shadow Sakura', + 'author' => 'iBazly', + ], + 'shantae.1.zspr' => [ + 'name' => 'Shantae', + 'author' => 'skovacs1', + ], + 'shuppet.1.zspr' => [ + 'name' => 'Shuppet', + 'author' => 'fatmanspanda', + ], + 'shy-guy.1.zspr' => [ + 'name' => 'Shy Guy', + 'author' => 'skovacs1', + ], + 'sighn_waive.1.zspr' => [ + 'name' => 'SighnWaive', + 'author' => 'GenoCL', + ], + 'snes-controller.1.zspr' => [ + 'name' => 'SNES Controller', + 'author' => 'Cbass601', + ], + 'sodacan.1.zspr' => [ + 'name' => 'Soda Can', + 'author' => 'Zarby89', + ], + 'solaire.1.zspr' => [ + 'name' => 'Solaire of Astora', + 'author' => 'Knilip', + ], + 'soldiersprite.1.zspr' => [ + 'name' => 'Hyrule Soldier', + 'author' => 'InTheBeef', + ], + 'sonic.1.zspr' => [ + 'name' => 'Sonic the Hedgehog', + 'author' => 'Osaka', + ], + 'sora.1.zspr' => [ + 'name' => 'Sora', + 'author' => 'roxas232', + ], + 'sora_kh1.1.zspr' => [ + 'name' => 'Sora (KH1)', + 'author' => 'ScatlinkSean', + ], + 'squirtle.1.zspr' => [ + 'name' => 'Squirtle', + 'author' => 'Numberplay', + ], + 'stalfos.1.zspr' => [ + 'name' => 'Stalfos', + 'author' => 'Artheau', + ], + 'staticlink.1.zspr' => [ + 'name' => 'Static Link', + 'author' => 'fatmanspanda', + ], + 'stick_man.1.zspr' => [ + 'name' => 'Stick Man', + 'author' => 'skovacs1', + ], + 'superbomb.1.zspr' => [ + 'name' => 'Super Bomb', + 'author' => 'Ninjakauz', + ], + 'superbunny.2.zspr' => [ + 'name' => 'Super Bunny', + 'author' => 'TheOkayGuy', + ], + 'supermeatboy.1.zspr' => [ + 'name' => 'Super Meat Boy', + 'author' => 'Achy', + ], + 'swatchy.1.zspr' => [ + 'name' => 'Swatchy', + 'author' => 'Mike Trethewey', + ], + 'teatime.1.zspr' => [ + 'name' => 'Tea Time', + 'author' => 'SirCzah', + ], + 'terra.1.zspr' => [ + 'name' => 'Terra (Esper)', + 'author' => 'All-in-one Mighty', + ], + 'tetra.1.zspr' => [ + 'name' => 'Tetra', + 'author' => 'Ferelheart', + ], + 'tgh.1.zspr' => [ + 'name' => 'TGH', + 'author' => 'Drew Wise, pizza_for_free', + ], + 'thief.1.zspr' => [ + 'name' => 'Thief', + 'author' => 'Devan2002', + ], + 'tile.2.zspr' => [ + 'name' => 'Tile', + 'author' => 'fatmanspanda', + ], + 'tingle.1.zspr' => [ + 'name' => 'Tingle', + 'author' => 'Xenobond', + ], + 'tmnt.1.zspr' => [ + 'name' => 'TMNT', + 'author' => 'SirCzah', + ], + 'toad.2.zspr' => [ + 'name' => 'Toad', + 'author' => 'Zarby89', + ], + 'toadette.2.zspr' => [ + 'name' => 'Toadette', + 'author' => 'Devan2002', + ], + 'toadette_captain.1.zspr' => [ + 'name' => 'Captain Toadette', + 'author' => 'Devan2002', + ], + 'totem-links.1.zspr' => [ + 'name' => 'TotemLinks', + 'author' => 'Yotohan', + ], + 'trogdor.1.zspr' => [ + 'name' => 'Trogdor the Burninator', + 'author' => 'MikeTrethewey/Spanda', + ], + 'twilightprincesszelda.2.zspr' => [ + 'name' => 'TP Zelda', + 'author' => 'Fish_waffle64', + ], + 'two_faced.1.zspr' => [ + 'name' => 'TwoFaced', + 'author' => 'Devan2002', + ], + 'ty.1.zspr' => [ + 'name' => 'Ty the Tasmanian Tiger', + 'author' => 'Fish_waffle64', + ], + 'ultros.1.zspr' => [ + 'name' => 'Ultros', + 'author' => 'PlaguedOne', + ], + 'valeera.1.zspr' => [ + 'name' => 'Valeera', + 'author' => 'Glan', + ], + 'vanillalink.1.zspr' => [ + 'name' => 'VanillaLink', + 'author' => 'Jenichi', + ], + 'vaporeon.1.zspr' => [ + 'name' => 'Vaporeon', + 'author' => 'Aquana', + ], + 'vegeta.1.zspr' => [ + 'name' => 'Vegeta', + 'author' => 'Merciter', + ], + 'vitreous.1.zspr' => [ + 'name' => 'Vitreous', + 'author' => 'Glan', + ], + 'vivi.1.zspr' => [ + 'name' => 'Vivi', + 'author' => 'RyuTech', + ], + 'vivian.1.zspr' => [ + 'name' => 'Vivian', + 'author' => 'SirCzah', + ], + 'wario.1.zspr' => [ + 'name' => 'Wario', + 'author' => 'Deagans', + ], + 'will.1.zspr' => [ + 'name' => 'Will', + 'author' => 'Xenobond', + ], + 'wixb.1.zspr' => [ + 'name' => 'wixB', + 'author' => 'Peter97', + ], + 'wizzrobe.2.zspr' => [ + 'name' => 'Wizzrobe', + 'author' => 'iBazly', + ], + 'wolf_link.1.zspr' => [ + 'name' => 'Wolf Link (Festive)', + 'author' => 'Fish/Beef-Chan', + ], + 'wolf_link_tp.1.zspr' => [ + 'name' => 'Wolf Link (TP)', + 'author' => 'Gfish59', + ], + 'yoshi.1.zspr' => [ + 'name' => 'Yoshi', + 'author' => 'Yotohan', + ], + 'yunica.1.zspr' => [ + 'name' => 'Yunica Tovah', + 'author' => 'Fish_waffle64', + ], + 'zandra.1.zspr' => [ + 'name' => 'Zandra', + 'author' => 'ZandraVandra', + ], + 'zebraunicorn.1.zspr' => [ + 'name' => 'Zebra Unicorn', + 'author' => 'Brass Man', + ], + 'zelda.1.zspr' => [ + 'name' => 'Zelda', + 'author' => 'Myriachan', + ], + 'zerosuitsamus.2.zspr' => [ + 'name' => 'Zero Suit Samus', + 'author' => 'Fish_waffle64', + ], + 'zora.2.zspr' => [ + 'name' => 'Zora', + 'author' => 'Zarby, InTheBeef', + ], ]; diff --git a/config/view.php b/config/view.php index 9d705a2fc..4b4f29dd7 100644 --- a/config/view.php +++ b/config/view.php @@ -1,9 +1,9 @@ [ - realpath(base_path('resources/views')), - ], + 'paths' => [ + realpath(base_path('resources/views')), + ], - 'compiled' => realpath(storage_path('framework/views')), + 'compiled' => realpath(storage_path('framework/views')), ]; diff --git a/config/vue-i18n-generator.php b/config/vue-i18n-generator.php index 1850cf836..a35ed6d6f 100644 --- a/config/vue-i18n-generator.php +++ b/config/vue-i18n-generator.php @@ -1,57 +1,60 @@ '/resources/lang', + 'langPath' => '/resources/lang', - /* - |-------------------------------------------------------------------------- - | Laravel translation files - |-------------------------------------------------------------------------- - | - | You can choose which translation files to be generated. - | Note: leave this empty for all the translation files to be generated. - | - */ + /* + |-------------------------------------------------------------------------- + | Laravel translation files + |-------------------------------------------------------------------------- + | + | You can choose which translation files to be generated. + | Note: leave this empty for all the translation files to be generated. + | + */ - 'langFiles' => [ - 'enemizer', - 'entrance', - 'error', - 'randomizer', - 'rom', - 'item', - ], + 'langFiles' => [ + 'customizer', + 'enemizer', + 'entrance', + 'error', + 'randomizer', + 'rom', + 'item', + 'sprite', + 'region', + ], - /* - |-------------------------------------------------------------------------- - | Output file - |-------------------------------------------------------------------------- - | - | The javascript path where I will place the generated file. - | Note: the path will be prepended to point to the App directory. - | - */ - 'jsPath' => '/resources/assets/js/langs/', - 'jsFile' => '/resources/assets/js/vue-i18n-locales.generated.js', + /* + |-------------------------------------------------------------------------- + | Output file + |-------------------------------------------------------------------------- + | + | The javascript path where I will place the generated file. + | Note: the path will be prepended to point to the App directory. + | + */ + 'jsPath' => '/resources/js/langs/', + 'jsFile' => '/resources/js/vue-i18n-locales.generated.js', - /* - |-------------------------------------------------------------------------- - | i18n library - |-------------------------------------------------------------------------- - | - | Specify the library you use for localization. - | Options are vue-i18n or vuex-i18n. - | - */ - 'i18nLib' => 'vue-i18n', + /* + |-------------------------------------------------------------------------- + | i18n library + |-------------------------------------------------------------------------- + | + | Specify the library you use for localization. + | Options are vue-i18n or vuex-i18n. + | + */ + 'i18nLib' => 'vue-i18n', ]; diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 815616d2f..58127461e 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -13,12 +13,12 @@ /** @var \Illuminate\Database\Eloquent\Factory $factory */ $factory->define(ALttP\User::class, function (Faker\Generator $faker) { - static $password; + static $password; - return [ - 'name' => $faker->name, - 'email' => $faker->unique()->safeEmail, - 'password' => $password ?: $password = bcrypt('secret'), - 'remember_token' => str_random(10), - ]; + return [ + 'name' => $faker->name, + 'email' => $faker->unique()->safeEmail, + 'password' => $password ?: $password = bcrypt('secret'), + 'remember_token' => str_random(10), + ]; }); diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index bd03a2ee3..689cbeea4 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -4,29 +4,32 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateUsersTable extends Migration { - /** - * Run the migrations. - * - * @return void - */ - public function up() { - Schema::create('users', function (Blueprint $table) { - $table->increments('id'); - $table->string('name'); - $table->string('email')->unique(); - $table->string('password'); - $table->rememberToken(); - $table->timestamps(); - }); - } +class CreateUsersTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('users', function (Blueprint $table) { + $table->increments('id'); + $table->string('name'); + $table->string('email')->unique(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } - /** - * Reverse the migrations. - * - * @return void - */ - public function down() { - Schema::dropIfExists('users'); - } + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } } diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php index 239b5f5ad..1eefa4055 100644 --- a/database/migrations/2014_10_12_100000_create_password_resets_table.php +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -4,26 +4,29 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreatePasswordResetsTable extends Migration { - /** - * Run the migrations. - * - * @return void - */ - public function up() { - Schema::create('password_resets', function (Blueprint $table) { - $table->string('email')->index(); - $table->string('token')->index(); - $table->timestamp('created_at')->nullable(); - }); - } +class CreatePasswordResetsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('password_resets', function (Blueprint $table) { + $table->string('email')->index(); + $table->string('token')->index(); + $table->timestamp('created_at')->nullable(); + }); + } - /** - * Reverse the migrations. - * - * @return void - */ - public function down() { - Schema::dropIfExists('password_resets'); - } + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } } diff --git a/database/migrations/2017_02_08_160733_create_seeds_table.php b/database/migrations/2017_02_08_160733_create_seeds_table.php index 07d6c9a3c..79a5ce27c 100644 --- a/database/migrations/2017_02_08_160733_create_seeds_table.php +++ b/database/migrations/2017_02_08_160733_create_seeds_table.php @@ -4,39 +4,42 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateSeedsTable extends Migration { - /** - * Run the migrations. - * - * @return void - */ - public function up() { - Schema::create('seeds', function (Blueprint $table) { - $table->increments('id'); - $table->char('hash', 10)->nullable(); - $table->bigInteger('seed'); - $table->string('rules', 32); - $table->date('build'); - $table->integer('logic'); - $table->integer('vt_complexity')->default(0); - $table->integer('complexity')->default(0); - $table->string('game_mode', 32); - $table->json('patch'); - $table->json('spoiler')->nullable(); - $table->timestamps(); +class CreateSeedsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('seeds', function (Blueprint $table) { + $table->increments('id'); + $table->char('hash', 10)->nullable(); + $table->bigInteger('seed'); + $table->string('rules', 32); + $table->date('build'); + $table->integer('logic'); + $table->integer('vt_complexity')->default(0); + $table->integer('complexity')->default(0); + $table->string('game_mode', 32); + $table->json('patch'); + $table->json('spoiler')->nullable(); + $table->timestamps(); - $table->index('seed'); - $table->index('hash'); - $table->index(['vt_complexity', 'complexity']); - }); - } + $table->index('seed'); + $table->index('hash'); + $table->index(['vt_complexity', 'complexity']); + }); + } - /** - * Reverse the migrations. - * - * @return void - */ - public function down() { - Schema::dropIfExists('seeds'); - } + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('seeds'); + } } diff --git a/database/migrations/2017_02_08_160734_create_builds_table.php b/database/migrations/2017_02_08_160734_create_builds_table.php index 76d74d1f6..5bfcee5f5 100644 --- a/database/migrations/2017_02_08_160734_create_builds_table.php +++ b/database/migrations/2017_02_08_160734_create_builds_table.php @@ -4,28 +4,31 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateBuildsTable extends Migration { - /** - * Run the migrations. - * - * @return void - */ - public function up() { - Schema::create('builds', function (Blueprint $table) { - $table->increments('id'); - $table->date('build')->unique(); - $table->char('hash', 32); - $table->json('patch'); - $table->timestamps(); - }); - } +class CreateBuildsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('builds', function (Blueprint $table) { + $table->increments('id'); + $table->date('build')->unique(); + $table->char('hash', 32); + $table->json('patch'); + $table->timestamps(); + }); + } - /** - * Reverse the migrations. - * - * @return void - */ - public function down() { - Schema::dropIfExists('builds'); - } + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('builds'); + } } diff --git a/database/migrations/2017_06_05_174258_move_patches_to_seperate_table.php b/database/migrations/2017_06_05_174258_move_patches_to_seperate_table.php index f256f40f4..ec3b914e9 100644 --- a/database/migrations/2017_06_05_174258_move_patches_to_seperate_table.php +++ b/database/migrations/2017_06_05_174258_move_patches_to_seperate_table.php @@ -4,58 +4,61 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class MovePatchesToSeperateTable extends Migration { - /** - * Run the migrations. - * - * @return void - */ - public function up() { - Schema::create('patches', function (Blueprint $table) { - $table->increments('id'); - $table->string('sha1', 40)->unique(); - $table->json('patch')->nullable(); - $table->timestamps(); - }); - - if (DB::getDriverName() == 'mysql') { - DB::statement("INSERT IGNORE INTO patches (sha1, patch, created_at, updated_at) +class MovePatchesToSeperateTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('patches', function (Blueprint $table) { + $table->increments('id'); + $table->string('sha1', 40)->unique(); + $table->json('patch')->nullable(); + $table->timestamps(); + }); + + if (DB::getDriverName() == 'mysql') { + DB::statement("INSERT IGNORE INTO patches (sha1, patch, created_at, updated_at) SELECT SHA1(patch) AS sha1, patch, created_at, updated_at FROM seeds;"); - } - - Schema::table('seeds', function (Blueprint $table) { - $table->integer('patch_id')->default(0); - }); - - Schema::table('seeds', function (Blueprint $table) { - $table->dropColumn(['vt_complexity', 'complexity']); - }); - - if (DB::getDriverName() == 'mysql') { - DB::update("UPDATE seeds JOIN patches ON patches.sha1 = SHA1(seeds.patch) SET seeds.patch_id = patches.id"); - DB::update("UPDATE seeds SET seeds.patch = '[]'"); - } - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() { - if (DB::getDriverName() == 'mysql') { - DB::update("UPDATE seeds JOIN patches ON patches.id = seeds.patch_id SET seeds.patch = patches.patch;"); - } - - Schema::table('seeds', function (Blueprint $table) { - $table->dropColumn('patch_id'); - }); - - Schema::table('seeds', function (Blueprint $table) { - $table->integer('complexity')->default(0); - $table->integer('vt_complexity')->default(0); - }); - - Schema::dropIfExists('patches'); - } + } + + Schema::table('seeds', function (Blueprint $table) { + $table->integer('patch_id')->default(0); + }); + + Schema::table('seeds', function (Blueprint $table) { + $table->dropColumn(['vt_complexity', 'complexity']); + }); + + if (DB::getDriverName() == 'mysql') { + DB::update("UPDATE seeds JOIN patches ON patches.sha1 = SHA1(seeds.patch) SET seeds.patch_id = patches.id"); + DB::update("UPDATE seeds SET seeds.patch = '[]'"); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if (DB::getDriverName() == 'mysql') { + DB::update("UPDATE seeds JOIN patches ON patches.id = seeds.patch_id SET seeds.patch = patches.patch;"); + } + + Schema::table('seeds', function (Blueprint $table) { + $table->dropColumn('patch_id'); + }); + + Schema::table('seeds', function (Blueprint $table) { + $table->integer('complexity')->default(0); + $table->integer('vt_complexity')->default(0); + }); + + Schema::dropIfExists('patches'); + } } diff --git a/database/migrations/2017_11_17_174259_daily_seed_and_cleanup.php b/database/migrations/2017_11_17_174259_daily_seed_and_cleanup.php index ac87dbb6f..a787ca02a 100644 --- a/database/migrations/2017_11_17_174259_daily_seed_and_cleanup.php +++ b/database/migrations/2017_11_17_174259_daily_seed_and_cleanup.php @@ -4,36 +4,39 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class DailySeedAndCleanup extends Migration { - /** - * Run the migrations. - * - * @return void - */ - public function up() { - Schema::create('featured_games', function (Blueprint $table) { - $table->increments('id'); - $table->date('day')->unique(); - $table->integer('seed_id'); - $table->string('description')->default(''); - $table->timestamps(); - }); +class DailySeedAndCleanup extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('featured_games', function (Blueprint $table) { + $table->increments('id'); + $table->date('day')->unique(); + $table->integer('seed_id'); + $table->string('description')->default(''); + $table->timestamps(); + }); - Schema::table('seeds', function (Blueprint $table) { - $table->dropColumn(['patch']); - }); - } + Schema::table('seeds', function (Blueprint $table) { + $table->dropColumn(['patch']); + }); + } - /** - * Reverse the migrations. - * - * @return void - */ - public function down() { - Schema::table('seeds', function (Blueprint $table) { - $table->json('patch'); - }); + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('seeds', function (Blueprint $table) { + $table->json('patch'); + }); - Schema::dropIfExists('featured_games'); - } + Schema::dropIfExists('featured_games'); + } } diff --git a/database/migrations/2018_07_19_174259_remove_seed_field.php b/database/migrations/2018_07_19_174259_remove_seed_field.php index 8be213ab7..be100f604 100644 --- a/database/migrations/2018_07_19_174259_remove_seed_field.php +++ b/database/migrations/2018_07_19_174259_remove_seed_field.php @@ -4,26 +4,29 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class RemoveSeedField extends Migration { - /** - * Run the migrations. - * - * @return void - */ - public function up() { - Schema::table('seeds', function (Blueprint $table) { - $table->dropColumn(['seed']); - }); - } +class RemoveSeedField extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::table('seeds', function (Blueprint $table) { + $table->dropColumn(['seed']); + }); + } - /** - * Reverse the migrations. - * - * @return void - */ - public function down() { - Schema::table('seeds', function (Blueprint $table) { - $table->bigInteger('seed'); - }); - } + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('seeds', function (Blueprint $table) { + $table->bigInteger('seed'); + }); + } } diff --git a/database/migrations/2018_09_29_143546_create_failed_jobs_table.php b/database/migrations/2018_09_29_143546_create_failed_jobs_table.php index 8304e58ba..d432dff08 100644 --- a/database/migrations/2018_09_29_143546_create_failed_jobs_table.php +++ b/database/migrations/2018_09_29_143546_create_failed_jobs_table.php @@ -4,29 +4,32 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; -class CreateFailedJobsTable extends Migration { - /** - * Run the migrations. - * - * @return void - */ - public function up() { - Schema::create('failed_jobs', function (Blueprint $table) { - $table->bigIncrements('id'); - $table->text('connection'); - $table->text('queue'); - $table->longText('payload'); - $table->longText('exception'); - $table->timestamp('failed_at')->useCurrent(); - }); - } +class CreateFailedJobsTable extends Migration +{ + /** + * Run the migrations. + * + * @return void + */ + public function up() + { + Schema::create('failed_jobs', function (Blueprint $table) { + $table->bigIncrements('id'); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } - /** - * Reverse the migrations. - * - * @return void - */ - public function down() { - Schema::dropIfExists('failed_jobs'); - } + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } } diff --git a/database/migrations/2019_05_18_132511_move_patches_back_to_seeds.php b/database/migrations/2019_05_18_132511_move_patches_back_to_seeds.php new file mode 100644 index 000000000..9949d25e3 --- /dev/null +++ b/database/migrations/2019_05_18_132511_move_patches_back_to_seeds.php @@ -0,0 +1,63 @@ +json('patch')->nullable(); + }); + + if (DB::getDriverName() == 'mysql') { + DB::update("UPDATE seeds JOIN patches ON patches.id = seeds.patch_id SET seeds.patch = patches.patch;"); + } + + Schema::table('seeds', function (Blueprint $table) { + $table->dropColumn(['patch_id', 'rules']); + }); + + Schema::dropIfExists('patches'); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::create('patches', function (Blueprint $table) { + $table->increments('id'); + $table->string('sha1', 40)->unique(); + $table->json('patch')->nullable(); + $table->timestamps(); + }); + + if (DB::getDriverName() == 'mysql') { + DB::statement("INSERT IGNORE INTO patches (sha1, patch, created_at, updated_at) + SELECT SHA1(patch) AS sha1, patch, created_at, updated_at FROM seeds;"); + } + + Schema::table('seeds', function (Blueprint $table) { + $table->integer('patch_id')->default(0); + $table->string('rules', 32)->default('numpty'); + }); + + if (DB::getDriverName() == 'mysql') { + DB::update("UPDATE seeds JOIN patches ON patches.sha1 = SHA1(seeds.patch) SET seeds.patch_id = patches.id"); + } + + Schema::table('seeds', function (Blueprint $table) { + $table->dropColumn(['patch']); + }); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 632ea7e8d..e119db624 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -1,12 +1,16 @@ -call(UsersTableSeeder::class); - } +use Illuminate\Database\Seeder; + +class DatabaseSeeder extends Seeder +{ + /** + * Run the database seeds. + * + * @return void + */ + public function run() + { + // $this->call(UsersTableSeeder::class); + } } diff --git a/documentation/mutlworld.md b/documentation/mutlworld.md new file mode 100644 index 000000000..4e4009307 --- /dev/null +++ b/documentation/mutlworld.md @@ -0,0 +1,49 @@ +# Multiworld Data File Format + +The intent of this file is to describe the binary multiworld data file format. + +## Header (X bytes) + +|Offset|Length|Info| +|-|-|-| +|0|9|Should be 'ALTTPR-MW'| +|9|2|Version of file (current version is 1)| +|11|36|Signature of creator| + +## Record Data + +All record data will start with a Record Id, which should then indicate the length of the record as follows: + +### Item location +|Length|Name|Info| +|-|-|-| +|1|Record Type|This should be '0x01'| +|1|World Id|Which world this record belongs to| +|1|Macro Location|indoors & 0xF0 \| LW & 0x0F| +|2|Room Id|SNES byte order| +|1|Chest Index|Index of chest in room| +|1|Item|Byte for item| +|1|Item World|Id of World the item belongs to| + +### Text Table +|Length|Name|Info| +|-|-|-| +|1|Record Type|This should be '0x02'| +|1|World Id|Which world this record belongs to| +|29525|Text Data|Full dump of text table| + +### Entrance +|Length|Name|Info| +|-|-|-| +|1|Record Type|This should be '0x03'| +|1|World Id|Which world this record belongs to| +|1|Door Id|Door Id| +|2|Room Id|SNES byte order| + +### Exit +|Length|Name|Info| +|-|-|-| +|1|Record Type|This should be '0x04'| +|1|World Id|Which world this record belongs to| +|2|Room Id|SNES byte order| +|1|Door Id|Door Id| diff --git a/package-lock.json b/package-lock.json index 1d4e20fc6..93cb1fb1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,10702 +2,10256 @@ "requires": true, "lockfileVersion": 1, "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "@babel/highlight": "^7.0.0" } }, - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "@babel/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", "dev": true, "requires": { - "acorn": "^4.0.3" + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, - "adjust-sourcemap-loader": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz", - "integrity": "sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==", + "@babel/generator": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", + "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", "dev": true, "requires": { - "assert": "^1.3.0", - "camelcase": "^1.2.1", - "loader-utils": "^1.1.0", - "lodash.assign": "^4.0.1", - "lodash.defaults": "^3.1.2", - "object-path": "^0.9.2", - "regex-parser": "^2.2.9" + "@babel/types": "^7.5.5", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" }, "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "lodash.defaults": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", - "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", "dev": true, "requires": { - "lodash.assign": "^3.0.0", - "lodash.restparam": "^3.0.0" - }, - "dependencies": { - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true, - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" - } - } + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" } } } }, - "ajv": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", - "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" - }, - "dependencies": { - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - } + "@babel/types": "^7.0.0" } }, - "ajv-keywords": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", - "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", - "dev": true + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "@babel/helper-call-delegate": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", "dev": true, "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-define-map": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" } } } }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", "dev": true, "requires": { - "ansi-wrap": "0.1.0" + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "@babel/types": "^7.0.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "@babel/helper-hoist-variables": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } }, - "archive-type": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", - "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", + "@babel/helper-member-expression-to-functions": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", "dev": true, "requires": { - "file-type": "^3.1.0" + "@babel/types": "^7.5.5" }, "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } } } }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", "dev": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "@babel/types": "^7.0.0" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@babel/helper-module-transforms": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", "dev": true }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "@babel/helper-replace-supers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } }, - "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", - "dev": true + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "dev": true, + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "@babel/types": "^7.4.4" } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "@babel/helpers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", + "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", + "dev": true, + "requires": { + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + }, + "dependencies": { + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "@babel/parser": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", + "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", "dev": true }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", "dev": true, "requires": { - "util": "0.10.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" } }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "dev": true + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.1.tgz", + "integrity": "sha512-PVGXx5LYHcT7L4MdoE+rM5uq68IKlvU9lljVQ4OXY6aUEnGvezcGbM4VNY57Ug+3R2Zg/nYHlEdiWoIBoRA0mw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", "dev": true, "requires": { - "lodash": "^4.14.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", + "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" + } }, - "async-each-series": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", - "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", - "dev": true + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", - "dev": true - }, - "autoprefixer": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", - "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", - "dev": true, - "requires": { - "browserslist": "^2.11.3", - "caniuse-lite": "^1.0.30000805", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^6.0.17", - "postcss-value-parser": "^3.2.3" - } - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "dev": true - }, - "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "dev": true, - "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.0", - "debug": "^2.6.8", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.7", - "slash": "^1.0.0", - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "@babel/plugin-transform-async-to-generator": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" } }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", "dev": true, "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "@babel/plugin-transform-block-scoping": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz", + "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" } }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "@babel/plugin-transform-classes": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4", + "globals": "^11.1.0" } }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "@babel/plugin-transform-destructuring": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", + "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "@babel/plugin-transform-dotall-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", + "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" } }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-loader": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", - "integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", "dev": true, "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "@babel/plugin-transform-function-name": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", + "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", "dev": true, "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", + "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "regexp-tree": "^0.1.6" } }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" } }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "@babel/plugin-transform-regenerator": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "regenerator-transform": "^0.14.0" } }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "@babel/plugin-transform-runtime": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.0.tgz", + "integrity": "sha512-LmPIZOAgTLl+86gR9KjLXex6P/lRz1fWEjTz6V6QZMmKie51ja3tvzdwORqhHc4RWR8TcZ5pClpRWs0mlaA2ng==", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "resolve": "^1.8.1", + "semver": "^5.5.1" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } } }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "@babel/plugin-transform-spread": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", + "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", "dev": true, "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" } }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", "dev": true, "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "@babel/plugin-transform-unicode-regex": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", + "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.5.4" } }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "@babel/preset-env": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.5.5", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + }, + "dependencies": { + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "@babel/runtime": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.1.tgz", + "integrity": "sha512-g+hmPKs16iewFSmW57NkH9xpPkuYD1RV3UE2BCkXx9j+nhhRb9hsiSxPmEa67j35IecTQdn4iyMtHMbt5VoREg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "regenerator-runtime": "^0.13.2" } }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" } }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "@babel/traverse": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", + "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.5.5", + "@babel/types": "^7.5.5", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/types": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", + "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "@babel/types": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.0.tgz", + "integrity": "sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ==", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" } }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" } }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", "dev": true, "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "@jest/core": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "slash": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "@jest/environment": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-env": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", - "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^2.1.2", - "invariant": "^2.2.2", - "semver": "^5.3.0" + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" } }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "@jest/reporters": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.4.2", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "@jest/test-sequencer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "@jest/transform": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "@babel/core": "^7.1.0", + "@jest/types": "^24.9.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", + "micromatch": "^3.1.10", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "dev": true, - "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" } }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "bfj-node4": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", - "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "check-types": "^7.3.0", - "tryer": "^1.0.0" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" } }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, - "bin-build": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", - "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", - "dev": true, + "@sentry/browser": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-5.6.3.tgz", + "integrity": "sha512-bP1LTbcKPOkkmfJOAM6c7WZ0Ov0ZEW6B9keVZ9wH9fw/lBPd9UyDMDCwJ+FAYKz9M9S5pxQeJ4Ebd7WUUrGVAQ==", "requires": { - "archive-type": "^3.0.1", - "decompress": "^3.0.0", - "download": "^4.1.2", - "exec-series": "^1.0.0", - "rimraf": "^2.2.6", - "tempfile": "^1.0.0", - "url-regex": "^3.0.0" - }, - "dependencies": { - "tempfile": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", - "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", - "dev": true, - "requires": { - "os-tmpdir": "^1.0.0", - "uuid": "^2.0.1" - } - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } + "@sentry/core": "5.6.2", + "@sentry/types": "5.6.1", + "@sentry/utils": "5.6.1", + "tslib": "^1.9.3" } }, - "bin-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", - "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", - "dev": true, + "@sentry/core": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.6.2.tgz", + "integrity": "sha512-grbjvNmyxP5WSPR6UobN2q+Nss7Hvz+BClBT8QTr7VTEG5q89TwNddn6Ej3bGkaUVbct/GpVlI3XflWYDsnU6Q==", "requires": { - "executable": "^1.0.0" + "@sentry/hub": "5.6.1", + "@sentry/minimal": "5.6.1", + "@sentry/types": "5.6.1", + "@sentry/utils": "5.6.1", + "tslib": "^1.9.3" } }, - "bin-version": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", - "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", - "dev": true, + "@sentry/hub": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.6.1.tgz", + "integrity": "sha512-m+OhkIV5yTAL3R1+XfCwzUQka0UF/xG4py8sEfPXyYIcoOJ2ZTX+1kQJLy8QQJ4RzOBwZA+DzRKP0cgzPJ3+oQ==", "requires": { - "find-versions": "^1.0.0" + "@sentry/types": "5.6.1", + "@sentry/utils": "5.6.1", + "tslib": "^1.9.3" } }, - "bin-version-check": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", - "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", - "dev": true, + "@sentry/minimal": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.6.1.tgz", + "integrity": "sha512-ercCKuBWHog6aS6SsJRuKhJwNdJ2oRQVWT2UAx1zqvsbHT9mSa8ZRjdPHYOtqY3DoXKk/pLUFW/fkmAnpdMqRw==", "requires": { - "bin-version": "^1.0.0", - "minimist": "^1.1.0", - "semver": "^4.0.3", - "semver-truncate": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - } + "@sentry/hub": "5.6.1", + "@sentry/types": "5.6.1", + "tslib": "^1.9.3" } }, - "bin-wrapper": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", - "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", - "dev": true, + "@sentry/types": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.6.1.tgz", + "integrity": "sha512-Kub8TETefHpdhvtnDj3kKfhCj0u/xn3Zi2zIC7PB11NJHvvPXENx97tciz4roJGp7cLRCJsFqCg4tHXniqDSnQ==" + }, + "@sentry/utils": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.6.1.tgz", + "integrity": "sha512-rfgha+UsHW816GqlSRPlniKqAZylOmQWML2JsujoUP03nPu80zdN43DK9Poy/d9OxBxv0gd5K2n+bFdM2kqLQQ==", "requires": { - "bin-check": "^2.0.0", - "bin-version-check": "^2.1.0", - "download": "^4.0.0", - "each-async": "^1.1.1", - "lazy-req": "^1.0.0", - "os-filter-obj": "^1.0.0" + "@sentry/types": "5.6.1", + "tslib": "^1.9.3" } }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "@types/babel__core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", + "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", "dev": true, "requires": { - "readable-stream": "^2.0.5" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", "dev": true, "requires": { - "inherits": "~2.0.0" + "@babel/types": "^7.0.0" } }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", "dev": true, "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" - }, - "dependencies": { - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - } + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "@types/babel__traverse": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", "dev": true, "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "@babel/types": "^7.3.0" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", "dev": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", "dev": true, "requires": { - "hoek": "2.x.x" + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" } }, - "bootstrap": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.2.tgz", - "integrity": "sha512-3bP609EdMc/8EwgGp8KgpN8HwnR4V4lZ9CTi5pImMrXNxpkw7dK1B05aMwQWpG1ZWmTLlBSN/uzkuz5GsmQNFA==", + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "@types/istanbul-lib-coverage": "*" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { + "@types/istanbul-reports": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, - "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "@types/jest": { + "version": "24.0.18", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.18.tgz", + "integrity": "sha512-jcDDXdjTcrQzdN06+TSVsPPqxvsZA/5QkYfIZlq1JMw7FdP5AZylbOc+6B/cuDurctRe+MziUMtQ3xQdrbjqyQ==", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "@types/jest-diff": "*" } }, - "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "@types/jest-diff": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", + "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.0.tgz", + "integrity": "sha512-dVeOVH/lhZ2Cki5Emh0aKeXUcWG1+EDTkqyzdgPe0ZjzgvBhzSFlogc6rm8uUd0I+XGK5fcp9DsMv5Wofe0/3w==", + "dev": true + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", + "dev": true + }, + "@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz", + "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1" + "@types/yargs-parser": "*" } }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "@types/yargs-parser": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz", + "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw==", + "dev": true + }, + "@typescript-eslint/experimental-utils": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz", + "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "1.13.0", + "eslint-scope": "^4.0.0" } }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "@typescript-eslint/typescript-estree": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz", + "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "lodash.unescape": "4.0.1", + "semver": "5.5.0" } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "@vue/component-compiler-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz", + "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==", "dev": true, "requires": { - "pako": "~1.0.5" + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^5.0.0", + "prettier": "1.16.3", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } } }, - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "@vue/test-utils": { + "version": "1.0.0-beta.29", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz", + "integrity": "sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000792", - "electron-to-chromium": "^1.3.30" + "dom-event-types": "^1.0.0", + "lodash": "^4.17.4" } }, - "buffer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", "dev": true, "requires": { - "base64-js": "0.0.8", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", "dev": true }, - "buffer-from": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", - "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==", + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", "dev": true }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", "dev": true }, - "buffer-to-vinyl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", - "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", "dev": true, "requires": { - "file-type": "^3.1.0", - "readable-stream": "^2.0.2", - "uuid": "^2.0.1", - "vinyl": "^1.0.0" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } + "@webassemblyjs/wast-printer": "1.8.5" } }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", "dev": true }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", "dev": true }, - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" - }, - "dependencies": { - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" } }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "requires": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - } + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" } }, - "caniuse-db": { - "version": "1.0.30000817", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000817.tgz", - "integrity": "sha1-yfjiNoh89grmI9H7Hl7JKHerEik=", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "caniuse-lite": { - "version": "1.0.30000817", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000817.tgz", - "integrity": "sha512-O68CSiZY4NuxdGT0gQO+2vtU07/FOrCUpGPYincrOjybQIdsSyWC9CWx+hhm+SnCTAwpG/AywH4cU5RAkqbFXA==", + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "caw": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", - "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "get-proxy": "^1.0.1", - "is-obj": "^1.0.0", - "object-assign": "^3.0.0", - "tunnel-agent": "^0.4.0" - }, - "dependencies": { - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - } + "mime-types": "~2.1.18", + "negotiator": "0.6.1" } }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true }, - "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "acorn-globals": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz", + "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" } }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", "dev": true }, - "check-types": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", - "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "dev": true }, - "chokidar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", - "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.1.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.0" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", "dev": true, "requires": { - "chalk": "^1.1.3" + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", "dev": true } } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", - "dev": true, - "requires": { - "source-map": "0.5.x" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true }, - "cliui": { + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "color-convert": "^1.9.0" } }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", - "dev": true - }, - "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "for-own": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "for-in": "^1.0.1" + "remove-trailing-separator": "^1.0.1" } } } }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", - "dev": true, - "requires": { - "q": "^1.1.2" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" + "sprintf-js": "~1.0.2" } }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "dev": true, - "requires": { - "color-name": "^1.1.1" - } + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "^1.0.0" - } + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", - "dev": true, - "requires": { - "color": "^0.11.0", - "css-color-names": "0.0.4", - "has": "^1.0.1" - } + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "array-uniq": "^1.0.1" } }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, - "compressible": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", - "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "mime-db": ">= 1.33.0 < 2" + "safer-buffer": "~2.1.0" } }, - "compression": { - "version": "1.7.2", - "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", - "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "accepts": "~1.3.4", - "bytes": "3.0.0", - "compressible": "~2.0.13", - "debug": "2.6.9", - "on-headers": "~1.0.1", - "safe-buffer": "5.1.1", - "vary": "~1.1.2" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "dev": true, "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "util": "0.10.3" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "inherits": "2.0.1" } } } }, - "concatenate": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz", - "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", - "dev": true, - "requires": { - "globs": "^0.1.2" - } - }, - "config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", "dev": true }, - "console-stream": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", - "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "consolidate": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", - "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "bluebird": "^3.1.1" + "lodash": "^4.17.11" } }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "autoprefixer": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "dev": true, + "requires": { + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "axios-mock-adapter": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.17.0.tgz", + "integrity": "sha512-q3efmwJUOO4g+wsLNSk9Ps1UlJoF3fQ3FSEe4uEEhkRtu7SoiAVPj8R3Hc/WP55MBTVFzaDP9QkdJhdVhP8A1Q==", + "dev": true, + "requires": { + "deep-equal": "^1.0.1" + } }, - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "babel-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", "dev": true, "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.9.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true } } }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "babel-loader": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "babel-merge": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-2.0.1.tgz", + "integrity": "sha512-puTQQxuzS+0JlMyVdfsTVaCgzqjBXKPMv7oUANpYcHFY+7IptWZ4PZDYX+qBxrRMtrriuBA44LkKpS99EJzqVA==", "dev": true, "requires": { - "capture-stack-trace": "^1.0.0" + "@babel/core": "^7.0.0-beta.49", + "deepmerge": "^2.1.0", + "object.omit": "^3.0.0" } }, - "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "sha.js": "^2.4.0" + "babel-runtime": "^6.22.0" } }, - "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "object.assign": "^4.1.0" } }, - "cross-env": { + "babel-plugin-istanbul": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", - "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", + "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", "dev": true, "requires": { - "cross-spawn": "^6.0.5", - "is-windows": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } + "@babel/helper-plugin-utils": "^7.0.0", + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" } }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "babel-plugin-jest-hoist": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "@types/babel__traverse": "^7.0.6" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "requires": { - "boom": "2.x.x" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, - "css": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz", - "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==", + "babel-preset-jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "source-map": "^0.1.38", - "source-map-resolve": "^0.5.1", - "urix": "^0.1.0" + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.9.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" }, "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "ms": "2.0.0" } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true } } }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + } + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, - "css-loader": { - "version": "0.28.11", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", - "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "cssnano": "^3.10.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash.camelcase": "^4.3.0", - "object-assign": "^4.1.1", - "postcss": "^5.0.6", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "is-descriptor": "^1.0.0" } }, - "has-flag": { + "is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "kind-of": "^6.0.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } }, - "css-select": { - "version": "1.3.0-rc0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.3.0-rc0.tgz", - "integrity": "sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE=", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "^1.0.1" - } + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true }, - "css-select-base-adapter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz", - "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA=", + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - }, - "dependencies": { - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - } + "tweetnacl": "^0.14.3" } }, - "css-tree": { - "version": "1.0.0-alpha25", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz", - "integrity": "sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A==", + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", "dev": true, "requires": { - "mdn-data": "^1.0.0", - "source-map": "^0.5.3" + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", "dev": true } } }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "bluebird": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", "dev": true }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" + "ms": "2.0.0" } }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "bootstrap": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", + "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==", "dev": true }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "es5-ext": "^0.10.9" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true } } }, - "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", "dev": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, "requires": { - "ms": "2.0.0" + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } } }, - "decamelize": { + "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } }, - "decompress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", - "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "buffer-to-vinyl": "^1.0.0", - "concat-stream": "^1.4.6", - "decompress-tar": "^3.0.0", - "decompress-tarbz2": "^3.0.0", - "decompress-targz": "^3.0.0", - "decompress-unzip": "^3.0.0", - "stream-combiner2": "^1.1.1", - "vinyl-assign": "^1.0.1", - "vinyl-fs": "^2.2.0" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "mimic-response": "^1.0.0" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, - "decompress-tar": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", - "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "is-tar": "^1.0.0", - "object-assign": "^2.0.0", - "strip-dirs": "^1.0.0", - "tar-stream": "^1.1.1", - "through2": "^0.6.1", - "vinyl": "^0.4.3" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } - } + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, - "decompress-tarbz2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", - "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "is-bzip2": "^1.0.0", - "object-assign": "^2.0.0", - "seek-bzip": "^1.0.3", - "strip-dirs": "^1.0.0", - "tar-stream": "^1.1.1", - "through2": "^0.6.1", - "vinyl": "^0.4.3" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } - } + "pako": "~1.0.5" } }, - "decompress-targz": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", - "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", + "browserslist": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.4.tgz", + "integrity": "sha512-ErJT8qGfRt/VWHSr1HeqZzz50DvxHtr1fVL1m5wf20aGrG8e1ce8fpZ2EjZEfs09DDZYSvtRaDlMpWslBf8Low==", "dev": true, "requires": { - "is-gzip": "^1.0.0", - "object-assign": "^2.0.0", - "strip-dirs": "^1.0.0", - "tar-stream": "^1.1.1", - "through2": "^0.6.1", - "vinyl": "^0.4.3" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } - } + "caniuse-lite": "^1.0.30000981", + "electron-to-chromium": "^1.3.188", + "node-releases": "^1.1.25" } }, - "decompress-unzip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", - "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "requires": { - "is-zip": "^1.0.0", - "read-all-stream": "^3.0.0", - "stat-mode": "^0.2.0", - "strip-dirs": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^1.0.0", - "yauzl": "^2.2.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } + "fast-json-stable-stringify": "2.x" } }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", "dev": true, "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" + "node-int64": "^0.4.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "buffer": { + "version": "4.9.1", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - } + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "cacache": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", + "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "repeating": "^2.0.0" + "callsites": "^2.0.0" } }, - "detect-libc": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, - "optional": true + "requires": { + "caller-callsite": "^2.0.0" + } }, - "detect-node": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } + "caniuse-lite": { + "version": "1.0.30000981", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000981.tgz", + "integrity": "sha512-JTByHj4DQgL2crHNMK6PibqAMrqqb/Vvh0JrsTJVSWG4VSUrT16EklkuRZofurlMjgA9e+zlCM4Y39F3kootMQ==", + "dev": true }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } + "rsvp": "^4.8.4" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "dotenv": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", - "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "dotenv-expand": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", - "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", "dev": true }, - "download": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", - "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "chokidar": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", + "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", "dev": true, "requires": { - "caw": "^1.0.1", - "concat-stream": "^1.4.7", - "each-async": "^1.0.0", - "filenamify": "^1.0.1", - "got": "^5.0.0", - "gulp-decompress": "^1.2.0", - "gulp-rename": "^1.2.0", - "is-url": "^1.2.0", - "object-assign": "^4.0.1", - "read-all-stream": "^3.0.0", - "readable-stream": "^2.0.2", - "stream-combiner2": "^1.1.1", - "vinyl": "^1.0.0", - "vinyl-fs": "^2.2.0", - "ware": "^1.2.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", "dev": true }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "tslib": "^1.9.0" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "duplexify": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", - "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "safe-buffer": "^5.0.1" } }, - "each-async": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", - "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "onetime": "^1.0.0", - "set-immediate-shim": "^1.0.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } } }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, - "optional": true, "requires": { - "jsbn": "~0.1.0" + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", - "dev": true + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } }, - "electron-to-chromium": { - "version": "1.3.40", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz", - "integrity": "sha1-H71tl779crim+SHcONIkE9L2/d8=", + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "once": "^1.4.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "object-assign": "^4.0.1", - "tapable": "^0.2.7" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" } }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "prr": "~1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" } }, - "error-stack-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz", - "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "stackframe": "^1.0.3" + "color-name": "1.1.3" } }, - "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { - "is-callable": "^1.1.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" + "delayed-stream": "~1.0.0" } }, - "es5-ext": { - "version": "0.10.41", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.41.tgz", - "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "arity-n": "^1.0.4" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "mime-db": ">= 1.40.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + } } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, - "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==" + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "concatenate": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz", + "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "globs": "^0.1.2" } }, - "es6-templates": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", - "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", "dev": true, "requires": { - "recast": "~0.11.12", - "through": "~2.3.6" + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "date-now": "^0.1.4" } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "safe-buffer": "5.1.2" } }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", "dev": true }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "core-js-compat": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", "dev": true, "requires": { - "original": ">=0.0.5" + "browserslist": "^4.6.6", + "semver": "^6.3.0" + }, + "dependencies": { + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "caniuse-lite": { + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.235", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.235.tgz", + "integrity": "sha512-xNabEDbMIKPLQd6xgv4nyyeMaWXIKSJr6G51ZhUemHhbz6kjZAYcygA8CvfEcMF+Mt5eLmDWaLmfSOWdQxzBVQ==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "exec-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", - "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "create-hmac": { + "version": "1.1.7", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "execa": "^0.7.0", - "p-finally": "^1.0.0", - "pify": "^3.0.0", - "rimraf": "^2.5.4", - "tempfile": "^2.0.0" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "exec-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", - "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", + "cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", "dev": true, "requires": { - "async-each-series": "^1.1.0", - "object-assign": "^4.1.0" + "cross-spawn": "^6.0.5" } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "executable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", - "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "meow": "^3.1.0" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", + "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", "dev": true, "requires": { - "fill-range": "^2.1.0" + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" }, "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - } - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "css-select": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", + "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", "dev": true, "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", - "qs": "6.5.1", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - } - } - }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dev": true, - "requires": { - "mime-db": "^1.28.0" - } - }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dev": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" + "boolbase": "^1.0.0", + "css-what": "^2.1.2", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true }, - "is-accessor-descriptor": { + "regexpu-core": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "jsesc": "~0.5.0" } } } }, - "extract-text-webpack-plugin": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", - "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "css-tree": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", + "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", "dev": true, "requires": { - "async": "^2.4.1", - "loader-utils": "^1.1.0", - "schema-utils": "^0.3.0", - "webpack-sources": "^1.0.1" + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", "dev": true }, - "fancy-log": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", - "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { + "css-url-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", "dev": true }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "file-loader": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", - "integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2" - } - }, - "file-saver": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", - "integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==" - }, - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", "dev": true }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", "dev": true }, - "filename-reserved-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", - "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", "dev": true }, - "filenamify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", - "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "dev": true, "requires": { - "filename-reserved-regex": "^1.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" + "postcss": "^7.0.0" } }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", "dev": true }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "css-tree": "1.0.0-alpha.29" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" } } } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", "dev": true, "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "cssom": "0.3.x" } }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "assert-plus": "^1.0.0" } }, - "find-versions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", - "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", "dev": true, "requires": { - "array-uniq": "^1.0.0", - "get-stdin": "^4.0.1", - "meow": "^3.5.0", - "semver-regex": "^1.0.0" + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } } }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, - "flag-icon-css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-3.0.0.tgz", - "integrity": "sha512-Dy5xpXT2wKIx7oxTuimedeNymmCAFf1Tnq4ec9o3wxTBD9qESVMYti2SBLh4XMiKZzlTIy+msEtOfa/e5Na5iQ==", + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "flatten": { + "de-indent": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", "dev": true }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "ms": "2.0.0" } }, - "follow-redirects": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", - "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "debug": "^3.1.0" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "ms": "2.0.0" + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "for-in": "^1.0.1" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "dev": true }, - "friendly-errors-webpack-plugin": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.6.1.tgz", - "integrity": "sha1-4yeBxHIvVGoGqbXXp8+ihSA3XXA=", + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "diff-sequences": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "chalk": "^1.1.3", - "error-stack-parser": "^2.0.0", - "string-length": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "arrify": "^1.0.1", + "path-type": "^3.0.0" } }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, - "fs-minipass": { - "version": "1.2.5", - "resolved": false, - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, "requires": { - "minipass": "^2.2.1" + "buffer-indexof": "^1.0.0" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "esutils": "^2.0.2" } }, - "fs.realpath": { + "dom-event-types": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "resolved": "https://registry.npmjs.org/dom-event-types/-/dom-event-types-1.0.0.tgz", + "integrity": "sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ==", "dev": true }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, - "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "rc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", - "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tar": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", - "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "requires": { - "string-width": "^1.0.2" - } - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" - } + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "webidl-conversions": "^4.0.2" } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { - "globule": "^1.0.0" + "dom-serializer": "0", + "domelementtype": "1" } }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-proxy": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", - "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { - "rc": "^1.1.2" + "is-obj": "^1.0.0" } }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", "dev": true }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dotenv-expand": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", + "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", "dev": true }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "gifsicle": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", - "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=", + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { - "bin-build": "^2.0.0", - "bin-wrapper": "^3.0.0", - "logalot": "^2.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", "dev": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" }, "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^5.0.3", - "glob-parent": "^3.0.0", - "micromatch": "^2.3.7", - "ordered-read-streams": "^0.3.0", - "through2": "^0.6.0", - "to-absolute-glob": "^0.1.1", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } } } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } + "ejs": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.2.tgz", + "integrity": "sha512-PcW2a0tyTuPHz3tWyYqtK6r1fZ3gp+3Sop8Ph+ZYN81Ob5rwmbHEzaqs10N3BEsaGTkh/ooniXK+WwszGlc2+Q==", + "dev": true }, - "globs": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.3.tgz", - "integrity": "sha1-ZwA3ElKHy2VJqtlqRM+mhP18VQI=", - "dev": true, - "requires": { - "glob": "^7.1.1" - } + "electron-to-chromium": { + "version": "1.3.188", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.188.tgz", + "integrity": "sha512-tEQcughYIMj8WDMc59EGEtNxdGgwal/oLLTDw+NEqJRJwGflQvH3aiyiexrWeZOETP4/ko78PVr6gwNhdozvuQ==", + "dev": true }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "elliptic": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", + "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", "dev": true, "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, - "glogg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", - "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "sparkles": "^1.0.0" + "once": "^1.4.0" } }, - "got": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", - "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "create-error-class": "^3.0.1", - "duplexer2": "^0.1.4", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "node-status-codes": "^1.0.0", - "object-assign": "^4.0.1", - "parse-json": "^2.1.0", - "pinkie-promise": "^2.0.0", - "read-all-stream": "^3.0.0", - "readable-stream": "^2.0.5", - "timed-out": "^3.0.0", - "unzip-response": "^1.0.2", - "url-parse-lax": "^1.0.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", + "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "dev": true, + "requires": { + "stackframe": "^1.0.4" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } }, - "gulp-decompress": { + "es-to-primitive": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", - "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { - "archive-type": "^3.0.0", - "decompress": "^3.0.0", - "gulp-util": "^3.0.1", - "readable-stream": "^2.0.2" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "gulp-rename": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "es5-ext": { + "version": "0.10.50", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", + "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "dev": true, + "requires": { + "recast": "~0.11.12", + "through": "~2.3.6" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", "dev": true, "requires": { - "convert-source-map": "^1.1.1", - "graceful-fs": "^4.1.2", - "strip-bom": "^2.0.0", - "through2": "^2.0.0", - "vinyl": "^1.0.0" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } + "optional": true } } }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "eslint": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.3.0.tgz", + "integrity": "sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ms": "^2.1.1" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "is-glob": "^4.0.1" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", "dev": true, "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" + "ansi-regex": "^4.1.0" } } } }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "eslint-plugin-jest": { + "version": "22.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-22.16.0.tgz", + "integrity": "sha512-eBtSCDhO1k7g3sULX/fuRK+upFQ7s548rrBtxDyM1fSoY7dTWp/wICjrJcDZKVsW7tsFfH22SG+ZaxG5BZodIg==", "dev": true, "requires": { - "glogg": "^1.0.0" + "@typescript-eslint/experimental-utils": "^1.13.0" } }, - "gzip-size": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", - "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", + "eslint-plugin-vue": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz", + "integrity": "sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw==", "dev": true, "requires": { - "duplexer": "^0.1.1", - "pify": "^3.0.0" + "vue-eslint-parser": "^5.0.0" } }, - "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", - "dev": true + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", "dev": true }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "espree": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", "dev": true, "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" }, "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } + "acorn": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true } } }, - "has": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "esquery": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "function-bind": "^1.0.2" + "estraverse": "^4.0.0" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "has-symbol-support-x": "^1.4.1" + "estraverse": "^4.1.0" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { + "esutils": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "^2.0.1" - } - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "original": "^1.0.0" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", "dev": true }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", - "dev": true - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "html-loader": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.4.5.tgz", - "integrity": "sha1-X7zYfNY6XEmn/OL+VvQl4Fcpxow=", - "dev": true, - "requires": { - "es6-templates": "^0.2.2", - "fastparse": "^1.1.1", - "html-minifier": "^3.0.1", - "loader-utils": "^1.0.2", - "object-assign": "^4.1.0" - } - }, - "html-minifier": { - "version": "3.5.12", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.12.tgz", - "integrity": "sha512-+N778qLf0RWBscD0TPGoYdeGNDZ0s76/0pQhY1/409EOudcENkm9IbSkk37RDyPdg/09GVHTKotU4ya93RF1Gg==", + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "camel-case": "3.0.x", - "clean-css": "4.1.x", - "commander": "2.15.x", - "he": "1.1.x", - "ncname": "1.0.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.3.x" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "uglify-js": { - "version": "3.3.16", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.16.tgz", - "integrity": "sha512-FMh5SRqJRGhv9BbaTffENIpDDQIoPDR8DBraunGORGhySArsXlw9++CN+BWzPBLpoI4RcSnpfGPnilTxWL3Vvg==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "commander": "~2.15.0", - "source-map": "~0.6.1" + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - } + "homedir-polyfill": "^1.0.1" } }, - "http-parser-js": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.11.tgz", - "integrity": "sha512-QCR5O2AjjMW8Mo4HyI1ctFcv+O99j/0g367V3YoVnrNw5hkDvAWZD0lWGcc+F4yN3V55USPCVix4efb75HxFfA==", - "dev": true - }, - "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "expect": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", "dev": true, "requires": { - "eventemitter3": "1.x.x", - "requires-port": "1.x.x" + "@jest/types": "^24.9.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" } }, - "http-proxy-middleware": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", - "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^3.1.0", - "lodash": "^4.17.2", - "micromatch": "^2.3.11" + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "ms": "2.0.0" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "is-extglob": "^1.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - } + "mime-db": "1.40.0" } }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - } - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "^6.0.1" - } - }, - "ieee754": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.10.tgz", - "integrity": "sha512-byWFX8OyW/qeVxcY21r6Ncxl0ZYHgnf0cPup2h34eHXrCJbOp7IuqnJ4Q0omfyWl6Z++BTI6bByf31pZt7iRLg==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": false, - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "imagemin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz", - "integrity": "sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ=", - "dev": true, - "requires": { - "file-type": "^4.1.0", - "globby": "^6.1.0", - "make-dir": "^1.0.0", - "p-pipe": "^1.1.0", - "pify": "^2.3.0", - "replace-ext": "^1.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true } } }, - "imagemin-gifsicle": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz", - "integrity": "sha512-K01m5QuPK+0en8oVhiOOAicF7KjrHlCZxS++mfLI2mV/Ksfq/Y9nCXCWDz6jRv13wwlqe5T7hXT+ji2DnLc2yQ==", - "dev": true, - "requires": { - "exec-buffer": "^3.0.0", - "gifsicle": "^3.0.0", - "is-gif": "^1.0.0" - } + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, - "imagemin-mozjpeg": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-7.0.0.tgz", - "integrity": "sha1-2SZHf8bvXzp2ikIi97LYCNPrpWg=", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "execa": "^0.8.0", - "is-jpg": "^1.0.0", - "mozjpeg": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, - "imagemin-optipng": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", - "integrity": "sha1-0i2kEsCfX/AKQzmWC5ioix2+hpU=", + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { - "exec-buffer": "^3.0.0", - "is-png": "^1.0.0", - "optipng-bin": "^3.0.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, - "imagemin-pngquant": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-5.1.0.tgz", - "integrity": "sha512-RtIUPbp8/HYX5EKY6p/L1NLKnkxNj37I92IFNsrptzBVql8FqBgPra9DO/eUgE4EWx+zq6ih4a/Y9YhF3pNM5A==", + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "execa": "^0.10.0", - "is-png": "^1.0.0", - "is-stream": "^1.1.0", - "pngquant-bin": "^4.0.0" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "is-descriptor": "^1.0.0" } }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - } - } - }, - "imagemin-svgo": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-6.0.0.tgz", - "integrity": "sha512-xwjBZQKpbkklHtJYnCOwRJjTRJA/nR0hQzKMh+CUZRvm/L0QwKKPJQ9tkPWQHrg+cydPu2i1vLgHuy2E0hKEkg==", - "dev": true, - "requires": { - "buffer-from": "^0.1.1", - "is-svg": "^2.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "coa": { + "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz", - "integrity": "sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ==", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "q": "^1.1.2" + "is-extendable": "^0.1.0" } }, - "csso": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.0.tgz", - "integrity": "sha512-WtJjFP3ZsSdWhiZr4/k1B9uHPgYjFYnDxfbaJxk1hz5PDLIJ5BCRWkJqaztZ0DbP8d2ZIVwUPIJb2YmCwkPaMw==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.27" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.27", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.27.tgz", - "integrity": "sha512-BAYp9FyN4jLXjfvRpTDchBllDptqlK9I7OsagXCG9Am5C+5jc8eRZHgqb9x500W2OKS14MMlpQc/nmh/aA7TEQ==", - "dev": true, - "requires": { - "mdn-data": "^1.0.0", - "source-map": "^0.5.3" - } - } + "kind-of": "^6.0.0" } }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "kind-of": "^6.0.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "svgo": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.0.5.tgz", - "integrity": "sha512-nYrifviB77aNKDNKKyuay3M9aYiK6Hv5gJVDdjj2ZXTQmI8WZc8+UPLR5IpVlktJfSu3co/4XcWgrgI6seGBPg==", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "coa": "~2.0.1", - "colors": "~1.1.2", - "css-select": "~1.3.0-rc0", - "css-select-base-adapter": "~0.1.0", - "css-tree": "1.0.0-alpha25", - "css-url-regex": "^1.1.0", - "csso": "^3.5.0", - "js-yaml": "~3.10.0", - "mkdirp": "~0.5.1", - "object.values": "^1.0.4", - "sax": "~1.2.4", - "stable": "~0.1.6", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, - "img-loader": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-2.0.1.tgz", - "integrity": "sha512-cD5D+zzIDvVPyX9nmz6+GL20BfpRUKUEXFur9IPeUC8/LRJT/PQ3YJVyKelIum8R5rCVZXgSFB0ccpsnS4IyAQ==", + "extract-from-css": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/extract-from-css/-/extract-from-css-0.4.4.tgz", + "integrity": "sha1-HqffLnx8brmSL6COitrqSG9vj5I=", "dev": true, "requires": { - "imagemin": "^5.3.1", - "imagemin-gifsicle": "^5.2.0", - "imagemin-mozjpeg": "^7.0.0", - "imagemin-optipng": "^5.2.0", - "imagemin-pngquant": "^5.0.1", - "imagemin-svgo": "^6.0.0", - "loader-utils": "^1.1.0" + "css": "^2.1.0" } }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "extract-text-webpack-plugin": { + "version": "4.0.0-beta.0", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz", + "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", "dev": true, "requires": { - "pkg-dir": "^2.0.0", - "resolve-cwd": "^2.0.0" + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5", + "webpack-sources": "^1.1.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "requires": { - "repeating": "^2.0.0" + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" } }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "websocket-driver": ">=0.5.1" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", "dev": true, "requires": { - "meow": "^3.3.0" + "bser": "^2.0.0" } }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", "dev": true }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "escape-string-regexp": "^1.0.5" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", - "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", - "dev": true - }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", - "dev": true - }, - "is-absolute": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", - "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "is-relative": "^0.1.0" + "flat-cache": "^2.0.1" } }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "file-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", + "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "file-saver": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz", + "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==" }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", + "dev": true }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } } }, - "is-bzip2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", - "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", - "dev": true - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ms": "2.0.0" } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true } } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "json5": "^0.5.1", + "path-exists": "^3.0.0" }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true } } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { - "is-primitive": "^2.0.0" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "locate-path": "^3.0.0" } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" } }, - "is-gif": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", - "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=", + "flag-icon-css": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-3.3.0.tgz", + "integrity": "sha512-u5lCGVExrJJRykNGd//ZrBU5Bkt0LTZJFSuG+Az/pwcHgzDeFwomwFbsgVtI1aJd6ysyHsx+5UGrA+nhSGd4yw==", "dev": true }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" } }, - "is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", - "dev": true - }, - "is-jpg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz", - "integrity": "sha1-KVnBfnNDDbOCZNp1uQ3VTy2G2hw=", - "dev": true - }, - "is-natural-number": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", - "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=", + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "dev": true, "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "debug": "=3.1.0" } }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "isobject": "^3.0.1" + "map-cache": "^0.2.2" } }, - "is-png": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", - "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-relative": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", - "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", - "dev": true - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true - }, - "is-tar": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", - "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-url": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.3.tgz", - "integrity": "sha512-vmOHLvzbcnsdFz8wQPXj1lgI5SE8AUlUGMenzuZzRFjoReb1WB+pLt9GrIo7BTker+aTcwrjTDle7odioWeqyw==", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "is-zip": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", - "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "friendly-errors-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", "dev": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, - "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==", - "dev": true - }, - "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "jsonify": "~0.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, + "optional": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { - "assert-plus": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "killable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "laravel-mix": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-2.1.11.tgz", - "integrity": "sha512-+iDqVPOuHSq6Ng/WX0w8V2O7R8847u1N1jybB/AAuRca3nRw4iI9BNNJ307ViiXb1GulxKixLe67shPFatJjvQ==", - "dev": true, - "requires": { - "autoprefixer": "^7.2.6", - "babel-core": "^6.24.1", - "babel-loader": "^7.1.1", - "babel-plugin-transform-object-rest-spread": "^6.26.0", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-env": "^1.5.1", - "chokidar": "^2.0.0", - "clean-css": "^4.1.3", - "concatenate": "0.0.2", - "css-loader": "^0.28.9", - "dotenv": "^4.0.0", - "dotenv-expand": "^4.2.0", - "extract-text-webpack-plugin": "^3.0.2", - "file-loader": "^0.11.2", - "friendly-errors-webpack-plugin": "^1.6.1", - "fs-extra": "^3.0.1", - "glob": "^7.1.2", - "html-loader": "^0.4.5", - "img-loader": "^2.0.1", - "lodash": "^4.17.5", - "md5": "^2.2.1", - "node-sass": "^4.7.2", - "postcss-loader": "^2.1.0", - "resolve-url-loader": "^2.2.1", - "sass-loader": "^6.0.5", - "style-loader": "^0.18.2", - "uglify-js": "^2.8.29", - "uglifyjs-webpack-plugin": "^1.1.8", - "vue-loader": "^13.7.1", - "vue-template-compiler": "^2.5.13", - "webpack": "^3.11.0", - "webpack-chunk-hash": "^0.4.0", - "webpack-dev-server": "^2.11.1", - "webpack-merge": "^4.1.0", - "webpack-notifier": "^1.5.1", - "yargs": "^8.0.2" + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, - "lazy-req": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", - "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", - "dev": true + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "readable-stream": "^2.0.5" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "globs": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.4.tgz", + "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==", + "dev": true, "requires": { - "immediate": "~3.0.5" + "glob": "^7.1.1" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "duplexer": "^0.1.1", + "pify": "^4.0.1" }, "dependencies": { "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true } } }, - "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-loader": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", + "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", + "dev": true, + "requires": { + "es6-templates": "^0.2.3", + "fastparse": "^1.1.1", + "html-minifier": "^3.5.8", + "loader-utils": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", "dev": true }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, - "localforage": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.2.tgz", - "integrity": "sha1-+kRCYC+Abt0rympUq05lbwMfEhw=", + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, "requires": { - "lie": "3.1.1" + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", "dev": true }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true + "imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", + "dev": true, + "requires": { + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } + } }, - "lodash._root": { + "img-loader": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz", + "integrity": "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==", "dev": true, "requires": { - "lodash._root": "^3.0.0" + "loader-utils": "^1.1.0" } }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" + "import-from": "^2.1.0" } }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" } }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" + "resolve-from": "^3.0.0" } }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "logalot": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", - "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "figures": "^1.3.5", - "squeak": "^1.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, - "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "longest": { + "indexes-of": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "^3.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "lpad-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", - "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "indent-string": "^2.1.0", - "longest": "^1.0.0", - "meow": "^3.3.0" + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, - "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, - "make-dir": { + "interpret": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", - "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "object-visit": "^1.0.0" + "loose-envify": "^1.0.0" } }, - "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "dev": true, - "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "kind-of": "^3.0.2" }, "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "is-buffer": "^1.1.5" } } } }, - "mdn-data": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.0.tgz", - "integrity": "sha512-jC6B3BFC07cCOU8xx1d+sQtDkVIpGKWv4TzK7pN7PyObdbwlIFJbHYk8ofvr0zrU8SkV1rSi87KAHhWCdLGw1Q==", + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", "dev": true }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "ci-info": "^2.0.0" } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" } }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "kind-of": "^3.0.2" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-stream": { + "is-date-object": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "is-plain-object": "^2.0.4" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", - "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" - } - } - }, - "minizlib": { - "version": "1.1.0", - "resolved": false, - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", - "requires": { - "minipass": "^2.2.1" + "is-extglob": "^2.1.1" } }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "kind-of": "^3.0.2" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - } - } - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-buffer": "^1.1.5" } } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, "requires": { - "minimist": "0.0.8" + "is-path-inside": "^2.1.0" } }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "path-is-inside": "^1.0.2" } }, - "mozjpeg": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-5.0.0.tgz", - "integrity": "sha1-uGccSSRWijY94AP/L9OXq4P3UsU=", + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "bin-build": "^2.2.0", - "bin-wrapper": "^3.0.0", - "logalot": "^2.0.0" + "isobject": "^3.0.1" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "has": "^1.0.1" } }, - "multicast-dns-service-types": { + "is-resolvable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - }, - "dependencies": { - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "html-comment-regex": "^1.1.0" } }, - "ncname": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", - "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { - "xml-char-classes": "^1.0.0" + "has-symbols": "^1.0.0" } }, - "needle": { - "version": "2.2.0", - "resolved": false, - "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", "dev": true }, - "neo-async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", - "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==", + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "next-tick": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { - "lower-case": "^1.1.1" + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node-forge": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", - "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", - "dev": true + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } }, - "node-gyp": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz", - "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==", + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": ">=2.9.0 <2.82.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" } }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" + "handlebars": "^4.1.2" + } + }, + "jest": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.9.0" }, "dependencies": { - "base64-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", - "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "jest-cli": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^13.3.0" } }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" } }, - "string_decoder": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.0.tgz", - "integrity": "sha512-8zQpRF6juocE69ae7CSPmYEGJe4VCXwP6S6dxUWI7i53Gwv54/ec41fiUA+X7BPGGv7fRSQJjBQVa0gomGaOgg==", + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" } } } }, - "node-notifier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", - "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", "dev": true, "requires": { - "growly": "^1.3.0", - "semver": "^5.4.1", - "shellwords": "^0.1.1", - "which": "^1.3.0" + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" } }, - "node-pre-gyp": { - "version": "0.10.0", - "resolved": false, - "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", + "jest-config": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", "dev": true, - "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.9.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-docblock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-environment-jsdom": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", + "dev": true, + "requires": { + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" + } + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true + }, + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.9.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", + "dev": true, + "requires": { + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-matcher-utils": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" }, "dependencies": { - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz", - "integrity": "sha512-mq9ixIYfNF9SK0IS/h2HKMu8Q2iaCuhDDsZhdEag/FHv8fOaYld4vN7ouMgcSSt5WKZzPs8atclTcJm36OTh4w==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.3", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true, - "optional": true + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true } } }, - "node-sass": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.2.tgz", - "integrity": "sha512-LdxoJLZutx0aQXHtWIYwJKMj+9pTjneTcLWJgzf2XbGu0q5pRNqW5QvFCEdm3mc5rJOdru/mzln5d0EZLacf6g==", + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", "dev": true, "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.3.1", - "npmlog": "^4.0.0", - "request": "2.87.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" + "@jest/types": "^24.9.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", + "dev": true + }, + "jest-resolve": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.9.0" + } + }, + "jest-runner": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.9.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^13.3.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "ansi-regex": "^4.1.0" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } } } }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", "dev": true }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "jest-serializer-vue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz", + "integrity": "sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM=", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "pretty": "2.0.0" } }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "jest-snapshot": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "@babel/types": "^7.0.0", + "@jest/types": "^24.9.0", + "chalk": "^2.0.1", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.9.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "jest-transform-stub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz", + "integrity": "sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==", "dev": true }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "dev": true, "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "npm-bundled": { - "version": "1.0.3", - "resolved": false, - "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", - "dev": true, - "optional": true - }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", "dev": true, "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" } }, - "npm-packlist": { - "version": "1.1.10", - "resolved": false, - "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", + "jest-watch-typeahead": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.0.tgz", + "integrity": "sha512-bJR/HPNgOQnkmttg1OkBIrYFAYuxFxExtgQh67N2qPvaWGVC8TCkedRNPKBfmZfVXFD3u2sCH+9OuS5ApBfCgA==", "dev": true, - "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.1", + "jest-watcher": "^24.3.0", + "slash": "^3.0.0", + "string-length": "^3.1.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dev": true, + "requires": { + "type-fest": "^0.5.2" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string-length": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", + "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^5.2.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "jest-watcher": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", "dev": true, "requires": { - "path-key": "^2.0.0" + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.9.0", + "string-length": "^2.0.0" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", + "dev": true + }, + "js-beautify": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.2.tgz", + "integrity": "sha512-ZtBYyNUYJIsBWERnQP0rPN9KjkrDfJcMjuVGcvXOUJrD1zmOGwhRwQ4msG+HJ+Ni/FA7+sRQEMYVzdTQDvnzvQ==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "~0.5.1", + "nopt": "~4.0.1" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "async-limiter": "~1.0.0" } } } }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "object-path": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", - "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "object-visit": { + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", "dev": true, "requires": { - "isobject": "^3.0.0" + "minimist": "^1.2.0" } }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "graceful-fs": "^4.1.6" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "laravel-mix": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-4.1.2.tgz", + "integrity": "sha512-nA+JME+59hWI5u+r3VfPfmpUj8CxlNmNsvslBOUtUwRc1K2Wq55uAPUtTLgAp7n5JngF3O7qFN3LcTCVO/SpZQ==", + "dev": true, + "requires": { + "@babel/core": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-transform-runtime": "^7.2.0", + "@babel/preset-env": "^7.2.0", + "@babel/runtime": "^7.2.0", + "autoprefixer": "^9.4.2", + "babel-loader": "^8.0.4", + "babel-merge": "^2.0.1", + "chokidar": "^2.0.3", + "clean-css": "^4.1.3", + "concatenate": "0.0.2", + "css-loader": "^1.0.1", + "dotenv": "^6.2.0", + "dotenv-expand": "^4.2.0", + "extract-text-webpack-plugin": "v4.0.0-beta.0", + "file-loader": "^2.0.0", + "friendly-errors-webpack-plugin": "^1.6.1", + "fs-extra": "^7.0.1", + "glob": "^7.1.2", + "html-loader": "^0.5.5", + "imagemin": "^6.0.0", + "img-loader": "^3.0.0", + "lodash": "^4.17.5", + "md5": "^2.2.1", + "optimize-css-assets-webpack-plugin": "^5.0.1", + "postcss-loader": "^3.0.0", + "style-loader": "^0.23.1", + "terser": "^3.11.0", + "terser-webpack-plugin": "^1.2.2", + "vue-loader": "^15.4.2", + "webpack": "^4.27.1", + "webpack-cli": "^3.1.2", + "webpack-dev-server": "^3.1.14", + "webpack-merge": "^4.1.0", + "webpack-notifier": "^1.5.1", + "yargs": "^12.0.5" + } + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "dev": true, "requires": { - "isobject": "^3.0.1" + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" } }, - "object.values": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", - "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" + "invert-kv": "^2.0.0" } }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "ee-first": "1.1.1" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "wrappy": "1" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "open-iconic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/open-iconic/-/open-iconic-1.1.1.tgz", - "integrity": "sha1-nc/Ix808Yc20ojaxo0eJTJetwMY=" - }, - "opener": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", - "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, - "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, - "optipng-bin": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", - "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", - "dev": true, + "localforage": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.3.tgz", + "integrity": "sha512-1TulyYfc4udS7ECSBT2vwJksWbkwwTX8BzeUIiq8Y07Riy7bDAAnxDaPU/tWyOVmQAcWJIEIFP9lPfBGqVoPgQ==", "requires": { - "bin-build": "^2.0.0", - "bin-wrapper": "^3.0.0", - "logalot": "^2.0.0" + "lie": "3.1.1" } }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "is-stream": "^1.0.1", - "readable-stream": "^2.0.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "os-filter-obj": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", - "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=", + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true }, - "os-locale": { + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "loglevel": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", + "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", + "dev": true + }, + "loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "lcid": "^1.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "tmpl": "1.0.x" } }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", "dev": true }, - "p-event": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz", - "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=", + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-timeout": "^1.1.1" + "p-defer": "^1.0.0" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "p-try": "^1.0.0" + "object-visit": "^1.0.0" } }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + } } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "p-reduce": "^1.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "p-pipe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", - "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", "dev": true }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { - "p-finally": "^1.0.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, - "parallel-transform": { + "merge-source-map": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "source-map": "^0.6.1" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } } } }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "merge2": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "dev": true, "requires": { - "error-ex": "^1.2.0" + "mime-db": "~1.38.0" } }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", "dev": true }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "path-exists": { + "mississippi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } }, - "path-is-absolute": { + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "move-concurrently": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } + "optional": true }, - "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "pinkie": "^2.0.0" + "lower-case": "^1.1.1" } }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "node-cache": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz", + "integrity": "sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==", "dev": true, "requires": { - "find-up": "^2.1.0" + "clone": "2.x", + "lodash": "^4.17.15" } }, - "pngquant-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-4.0.0.tgz", - "integrity": "sha512-jhjMp87bvaUeQOfNaPhSKx3tLCEwRaAycgDpIhMflgFr2+vYhw4ZrcK06eQeYg4OprXPanFljXLl5VuuAP2IHw==", + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^3.0.0", - "execa": "^0.10.0", - "logalot": "^2.0.0" - }, - "dependencies": { - "bin-build": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", - "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==", - "dev": true, - "requires": { - "decompress": "^4.0.0", - "download": "^6.2.2", - "execa": "^0.7.0", - "p-map-series": "^1.0.0", - "tempfile": "^2.0.0" - }, - "dependencies": { - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", - "dev": true, - "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" - } - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "dev": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - } - } - }, - "download": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", - "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==", - "dev": true, - "requires": { - "caw": "^2.0.0", - "content-disposition": "^0.5.2", - "decompress": "^4.0.0", - "ext-name": "^5.0.0", - "file-type": "5.2.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^7.0.0", - "make-dir": "^1.0.0", - "p-event": "^1.0.0", - "pify": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.0.0.tgz", - "integrity": "sha1-vRYiYsC26Uv7zc8Zo7uzdk94VpU=", - "dev": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" - } - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "requires": { - "npm-conf": "^1.1.0" - } - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "requires": { - "is-natural-number": "^4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } } } }, - "popper.js": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.3.tgz", - "integrity": "sha1-FDj5jQRqz3tNeM1QK/QYrGTU8JU=", + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, - "portfinder": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "node-notifier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", + "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "node-releases": { + "version": "1.1.25", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.25.tgz", + "integrity": "sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "postcss": { - "version": "6.0.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", - "integrity": "sha512-Opr6usW30Iy0xEDrJywDckRxtylfO7gTGs3Kfb2LdLQlGsUg89fTy0R3Vm1Dub2YHO7MK58avr0p70+uFFHb7A==", + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "chalk": "^2.3.2", - "source-map": "^0.6.1", - "supports-color": "^5.3.0" + "path-key": "^2.0.0" } }, - "postcss-calc": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "postcss": "^5.0.2", - "postcss-message-helpers": "^2.0.0", - "reduce-css-calc": "^1.2.6" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "boolbase": "~1.0.0" } }, - "postcss-colormin": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "colormin": "^1.0.5", - "postcss": "^5.0.13", - "postcss-value-parser": "^3.2.3" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "is-descriptor": "^0.1.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "is-buffer": "^1.1.5" } } } }, - "postcss-convert-values": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "dev": true, + "requires": { + "is-extendable": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "postcss": "^5.0.11", - "postcss-value-parser": "^3.1.2" + "mimic-fn": "^1.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-discard-comments": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "open-iconic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/open-iconic/-/open-iconic-1.1.1.tgz", + "integrity": "sha1-nc/Ix808Yc20ojaxo0eJTJetwMY=" + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "postcss": "^5.0.14" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-discard-duplicates": { + "optimize-css-assets-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "dev": true, + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { - "postcss": "^5.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" } }, - "postcss-discard-empty": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "postcss": "^5.0.14" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, - "postcss-discard-overridden": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "postcss": "^5.0.16" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "no-case": "^2.2.0" } }, - "postcss-discard-unused": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "postcss": "^5.0.14", - "uniqs": "^2.0.0" + "callsites": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-filter-plugins": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", - "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { - "postcss": "^5.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, - "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "requires": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0", - "postcss-load-options": "^1.2.0", - "postcss-load-plugins": "^2.3.0" - } + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0" + "pify": "^3.0.0" } }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "cosmiconfig": "^2.1.1", - "object-assign": "^4.1.0" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "postcss-loader": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.3.tgz", - "integrity": "sha512-RuBcNE8rjCkIB0IsbmkGFRmQJTeQJfCI88E0VTarPNTvaNSv9OFv1DvTwgtAN/qlzyiELsmmmtX/tEzKp/cdug==", + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "postcss": "^6.0.0", - "postcss-load-config": "^1.2.0", - "schema-utils": "^0.4.0" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } + "pinkie": "^2.0.0" } }, - "postcss-merge-idents": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.10", - "postcss-value-parser": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "node-modules-regexp": "^1.0.0" } }, - "postcss-merge-longhand": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "postcss": "^5.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "find-up": "^3.0.0" } }, - "postcss-merge-rules": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "popper.js": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", + "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==", + "dev": true + }, + "portfinder": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", "dev": true, "requires": { - "browserslist": "^1.5.2", - "caniuse-api": "^1.5.2", - "postcss": "^5.0.4", - "postcss-selector-parser": "^2.2.2", - "vendors": "^1.0.0" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "ms": "2.0.0" } } } }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, - "postcss-minify-font-values": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "postcss": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", + "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", "dev": true, "requires": { - "object-assign": "^4.0.1", - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } } } }, - "postcss-minify-gradients": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", "dev": true, "requires": { - "postcss": "^5.0.12", - "postcss-value-parser": "^3.3.0" + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-minify-params": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.2", - "postcss-value-parser": "^3.0.2", - "uniqs": "^2.0.0" + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-minify-selectors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "has": "^1.0.1", - "postcss": "^5.0.14", - "postcss-selector-parser": "^2.0.0" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-modules-extract-imports": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", - "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dev": true, "requires": { - "postcss": "^6.0.1" + "postcss": "^7.0.0" } }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "postcss": "^7.0.0" } }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" + "postcss": "^7.0.0" } }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "dev": true, "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "postcss": "^7.0.0" } }, - "postcss-normalize-charset": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { - "postcss": "^5.0.5" + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } }, - "postcss-normalize-url": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", "dev": true, "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^1.4.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3" + "postcss": "^6.0.1" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-ordered-values": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.1" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-reduce-idents": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "dev": true, "requires": { - "postcss": "^5.0.4", - "postcss-value-parser": "^3.0.2" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-reduce-initial": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "dev": true, "requires": { - "postcss": "^5.0.4" + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "postcss-reduce-transforms": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.8", - "postcss-value-parser": "^3.0.1" + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "dev": true, "requires": { - "flatten": "^1.0.2", + "cssesc": "^2.0.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + } } }, "postcss-svgo": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", "dev": true, "requires": { - "is-svg": "^2.0.0", - "postcss": "^5.0.14", - "postcss-value-parser": "^3.2.3", - "svgo": "^0.7.0" + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, "postcss-unique-selectors": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", "dev": true, "requires": { - "alphanum-sort": "^1.0.1", - "postcss": "^5.0.4", + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", "uniqs": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } } }, "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz", + "integrity": "sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ==", "dev": true }, - "postcss-zindex": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "prando": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/prando/-/prando-5.1.1.tgz", + "integrity": "sha512-KstlnYTOUs+3DJWaVZGmdpBh9Y2fHhPPB+BkxfZ7ZWb8qqUfDxBz/QC4pXNwGEYWtkjMaCuBWDPDUQ5BZQksEA==" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", + "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", + "dev": true + }, + "pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", "dev": true, "requires": { - "has": "^1.0.1", - "postcss": "^5.0.4", - "uniqs": "^2.0.0" + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "is-extendable": "^0.1.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } } } }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "prettier": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.1.tgz", - "integrity": "sha512-T/KD65Ot0PB97xTrG8afQ46x3oiVhnfGjGESSI9NWYcG92+OUPZKkwHqGWXH2t9jK1crnQjubECW0FuOth+hxw==", - "dev": true + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } }, "private": { "version": "0.1.8", @@ -10712,9 +10266,15 @@ "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "promise-inflight": { @@ -10723,6 +10283,16 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "prompts": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", + "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" + } + }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", @@ -10730,13 +10300,13 @@ "dev": true }, "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" + "ipaddr.js": "1.9.0" } }, "prr": { @@ -10751,23 +10321,30 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "psl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", + "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==", + "dev": true + }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -10775,21 +10352,32 @@ } }, "pumpify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", - "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "^3.5.3", + "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.5.1", @@ -10798,21 +10386,11 @@ "dev": true }, "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dev": true, - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -10826,15 +10404,15 @@ "dev": true }, "querystringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", - "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -10851,124 +10429,116 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, - "raven-js": { - "version": "3.26.3", - "resolved": "https://registry.npmjs.org/raven-js/-/raven-js-3.26.3.tgz", - "integrity": "sha512-VPAsPfK73A9VPcJx5X/kt0GxOqUGpGDM8vdzsYNQXMhYemyZGiW1JX1AI+f4jxm37Apijj6VVtCyJcYFz3ocSQ==" - }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true } } }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0", - "readable-stream": "^2.0.0" - } + "react-is": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", + "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==", + "dev": true }, "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "^1.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } }, "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.1", + "inherits": "~2.0.3", "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" } }, "recast": { @@ -10981,100 +10551,38 @@ "esprima": "~3.1.0", "private": "~0.1.5", "source-map": "~0.5.0" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" } }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", - "dev": true, - "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } - } + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true }, - "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", "dev": true, "requires": { - "balanced-match": "^0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "regenerate": "^1.4.0" } }, - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true - }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", "dev": true }, "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", "dev": true, "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", "private": "^0.1.6" } }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -11086,32 +10594,47 @@ } }, "regex-parser": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.9.tgz", - "integrity": "sha512-VncXxOF6uFlYog5prG2j+e2UGJeam5MfNiJnB/qEgo4KTnMm2XrELCg4rNZ6IlaEUZnGlb8aB6lXowCRQtTkkA==", + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "dev": true + }, + "regexp-tree": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", + "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" } }, "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", "dev": true }, "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -11138,9 +10661,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -11149,15 +10672,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", @@ -11165,99 +10679,37 @@ "dev": true }, "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "uuid": "^3.3.2" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "qs": { @@ -11266,33 +10718,48 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" } } } }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "requires-port": { @@ -11302,12 +10769,12 @@ "dev": true }, "resolve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", - "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-cwd": { @@ -11319,6 +10786,29 @@ "resolve-from": "^3.0.0" } }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", @@ -11332,42 +10822,79 @@ "dev": true }, "resolve-url-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-2.3.0.tgz", - "integrity": "sha512-RaEUWgF/B6aTg9VKaOv2o6dfm5f75/lGh8S+SQwoMcBm48WkA2nhLR+V7KEawkxXjU4lLB16IVeHCe7F69nyVw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.0.tgz", + "integrity": "sha512-2QcrA+2QgVqsMJ1Hn5NnJXIGCX1clQ1F6QJTqOeiaDw9ACo1G2k+8/shq3mtqne03HOFyskAClqfxKyFBriXZg==", "dev": true, "requires": { - "adjust-sourcemap-loader": "^1.1.0", - "camelcase": "^4.1.0", - "convert-source-map": "^1.5.1", - "loader-utils": "^1.1.0", - "lodash.defaults": "^4.0.0", - "rework": "^1.0.1", - "rework-visit": "^1.0.0", - "source-map": "^0.5.7", - "urix": "^0.1.0" + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.0.0", + "compose-function": "3.0.3", + "convert-source-map": "1.6.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.14", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" }, "dependencies": { "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", "dev": true }, + "postcss": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, "rework": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", @@ -11392,34 +10919,52 @@ "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "^0.1.1" - } + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "^2.0.0", + "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -11429,10 +10974,20 @@ "aproba": "^1.1.1" } }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safe-regex": { "version": "1.1.0", @@ -11449,130 +11004,75 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - } - } - }, - "sass-loader": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", - "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", - "dev": true, - "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", "dev": true, "requires": { - "ajv": "^5.0.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - } + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" } }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "sass": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.22.10.tgz", + "integrity": "sha512-DUpS1tVMGCH6gr/N9cXCoemrjoNdOLhAHfQ37fJw2A5ZM4gSI9ej/8Xi95Xwus03RqZ2zdSnKZGULL7oS+jfMA==", "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "requires": { + "chokidar": ">=2.0.0 <4.0.0" } }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "sass-loader": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", "dev": true, "requires": { - "commander": "~2.8.1" + "clone-deep": "^4.0.1", + "loader-utils": "^1.0.1", + "neo-async": "^2.5.0", + "pify": "^4.0.1", + "semver": "^6.3.0" }, "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -11580,12 +11080,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz", - "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", + "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", "dev": true, "requires": { - "node-forge": "0.7.1" + "node-forge": "0.7.5" } }, "semver": { @@ -11594,25 +11094,10 @@ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true - }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", @@ -11622,18 +11107,74 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } } }, "serialize-javascript": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", - "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", "dev": true }, "serve-index": { @@ -11649,18 +11190,29 @@ "http-errors": "~1.6.2", "mime-types": "~2.1.17", "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -11669,16 +11221,10 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -11695,6 +11241,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -11721,22 +11273,12 @@ } }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "kind-of": "^6.0.2" } }, "shebang-command": { @@ -11760,18 +11302,58 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "dev": true }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "sisteransi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz", + "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg==", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -11788,6 +11370,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -11806,10 +11397,10 @@ "is-extendable": "^0.1.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true } } @@ -11874,6 +11465,12 @@ "kind-of": "^3.2.0" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -11885,15 +11482,6 @@ } } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "sockjs": { "version": "0.3.19", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", @@ -11905,58 +11493,55 @@ } }, "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "^2.6.6", - "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", "json3": "^3.3.2", - "url-parse": "^1.1.8" + "url-parse": "^1.4.3" }, "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dev": true, - "requires": { - "sort-keys": "^1.0.0" - } - }, "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "source-map-resolve": { @@ -11973,18 +11558,19 @@ } }, "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { - "source-map": "^0.5.6" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -12001,16 +11587,10 @@ "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=", "dev": true }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -12018,9 +11598,9 @@ } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { @@ -12034,68 +11614,79 @@ } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "^2.6.8", - "handle-thing": "^1.2.5", + "debug": "^4.1.0", + "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", - "safe-buffer": "^5.0.1", "select-hose": "^2.0.0", - "spdy-transport": "^2.0.18" + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "spdy-transport": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", - "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "^2.6.8", - "detect-node": "^2.0.3", + "debug": "^4.1.0", + "detect-node": "^2.0.4", "hpack.js": "^2.1.6", - "obuf": "^1.1.1", - "readable-stream": "^2.2.9", - "safe-buffer": "^5.0.1", - "wbuf": "^1.7.2" + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" + "ms": "^2.1.1" } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } @@ -12115,48 +11706,10 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "squeak": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", - "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "console-stream": "^0.1.1", - "lpad-align": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -12168,29 +11721,27 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "figgy-pudding": "^3.5.1" } }, "stable": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz", - "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, "stackframe": { @@ -12199,12 +11750,6 @@ "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", "dev": true }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", - "dev": true - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -12232,39 +11777,26 @@ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "dev": true }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" } }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -12272,48 +11804,16 @@ } }, "stream-http": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.1.tgz", - "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", - "readable-stream": "^2.3.3", + "readable-stream": "^2.3.6", "to-arraybuffer": "^1.0.0", "xtend": "^4.0.0" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "stream-shift": { @@ -12322,116 +11822,83 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true - }, "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", "dev": true, "requires": { - "strip-ansi": "^3.0.0" + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, - "requires": { - "first-chunk-stream": "^1.0.0", - "strip-bom": "^2.0.0" - } - }, - "strip-dirs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", - "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "get-stdin": "^4.0.1", - "is-absolute": "^0.1.5", - "is-natural-number": "^2.0.0", - "minimist": "^1.1.0", - "sum-up": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true }, "strip-eof": { "version": "1.0.0", @@ -12439,279 +11906,297 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "strip-outer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", - "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true }, "style-loader": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", - "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^0.3.0" + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, - "sum-up": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", - "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dev": true, "requires": { - "chalk": "^1.0.0" + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true } } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "svgo": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", - "dev": true, - "requires": { - "coa": "~1.0.1", - "colors": "~1.1.2", - "csso": "~2.3.1", - "js-yaml": "~3.7.0", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", + "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.28", + "css-url-regex": "^1.1.0", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", - "sax": "~1.2.1", - "whet.extend": "~0.9.9" - } - }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-stream": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", - "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "end-of-stream": "^1.0.0", - "readable-stream": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true - }, - "tempfile": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", - "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", - "dev": true, - "requires": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" } } } }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "dev": true, "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz", + "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==", + "dev": true, + "requires": { + "cacache": "^11.3.2", + "find-cache-dir": "^2.0.0", + "is-wsl": "^1.1.0", + "loader-utils": "^1.2.3", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.0.0", + "webpack-sources": "^1.3.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.2.tgz", + "integrity": "sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==", "dev": true, "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" } } } }, - "thunky": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", - "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", "dev": true }, - "timed-out": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", - "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { "setimmediate": "^1.0.4" } }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "extend-shallow": "^2.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "os-tmpdir": "~1.0.2" } }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -12719,9 +12204,9 @@ "dev": true }, "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-object-path": { @@ -12733,6 +12218,12 @@ "kind-of": "^3.0.2" }, "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -12766,28 +12257,29 @@ "repeat-string": "^1.6.1" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "punycode": "^1.4.1" + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, "requires": { - "escape-string-regexp": "^1.0.2" + "punycode": "^2.1.0" } }, "trim-right": { @@ -12796,35 +12288,70 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "ts-jest": { + "version": "24.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", + "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", "dev": true, "requires": { - "glob": "^6.0.4" + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" }, "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "camelcase": "^4.1.0" } } } }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true + "tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "requires": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tty-browserify": { "version": "0.0.0", @@ -12833,175 +12360,149 @@ "dev": true }, "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz", + "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "prelude-ls": "~1.1.2" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", "dev": true }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "mime-db": "1.40.0" } } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, - "uglifyjs-webpack-plugin": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz", - "integrity": "sha512-z0IbjpW8b3O/OVn+TTZN4pI29RN1zktFBXLIzzfZ+++cUtZ1ERSlLWgpE/5OERuEUs1ijVQnpYAkSlpoVmQmSQ==", + "typescript": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.2.tgz", + "integrity": "sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw==", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "commander": "~2.19.0", + "source-map": "~0.6.1" }, "dependencies": { "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, - "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "unbzip2-stream": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", - "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "requires": { - "buffer": "^3.0.1", - "through": "^2.3.6" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" } }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "set-value": "^2.0.1" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -13018,37 +12519,27 @@ "dev": true }, "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { "unique-slug": "^2.0.0" } }, "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" } }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "^1.0.0", - "through2-filter": "^2.0.0" - } - }, "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { @@ -13103,16 +12594,10 @@ } } }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", - "dev": true - }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, "upper-case": { @@ -13127,13 +12612,6 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } } }, "urix": { @@ -13161,69 +12639,35 @@ } }, "url-parse": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", - "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "url-regex": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", - "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", - "dev": true, - "requires": { - "ip-regex": "^1.0.1" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "util.promisify": { "version": "1.0.0", @@ -13242,32 +12686,32 @@ "dev": true }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, "v-tooltip": { - "version": "2.0.0-rc.33", - "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.0.0-rc.33.tgz", - "integrity": "sha1-ePfY6cNCZWIr5lup3HjGfx3AK3M=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/v-tooltip/-/v-tooltip-2.0.2.tgz", + "integrity": "sha512-xQ+qzOFfywkLdjHknRPgMMupQNS8yJtf9Utd5Dxiu/0n4HtrxqsgDtN2MLZ0LKbburtSAQgyypuE/snM8bBZhw==", "dev": true, "requires": { - "lodash.merge": "^4.6.0", - "popper.js": "^1.12.9", - "vue-resize": "^0.4.3" + "lodash": "^4.17.11", + "popper.js": "^1.15.0", + "vue-resize": "^0.4.5" } }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", "dev": true }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -13281,9 +12725,9 @@ "dev": true }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", "dev": true }, "verror": { @@ -13295,188 +12739,149 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - }, - "dependencies": { - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - } - } + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true }, - "vinyl-assign": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", - "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "readable-stream": "^2.0.0" - } + "vue": { + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz", + "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==", + "dev": true + }, + "vue-class-component": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-7.1.0.tgz", + "integrity": "sha512-G9152NzUkz0i0xTfhk0Afc8vzdXxDR1pfN4dTwE72cskkgJtdXfrKBkMfGvDuxUh35U500g5Ve4xL8PEGdWeHg==", + "dev": true }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "vue-eslint-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", + "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", "dev": true, "requires": { - "duplexify": "^3.2.0", - "glob-stream": "^5.3.2", - "graceful-fs": "^4.0.0", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "^0.3.0", - "lazystream": "^1.0.0", - "lodash.isequal": "^4.0.0", - "merge-stream": "^1.0.0", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.0", - "readable-stream": "^2.0.4", - "strip-bom": "^2.0.0", - "strip-bom-stream": "^1.0.0", - "through2": "^2.0.0", - "through2-filter": "^2.0.0", - "vali-date": "^1.0.0", - "vinyl": "^1.0.0" + "debug": "^4.1.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.1.0", + "esquery": "^1.0.1", + "lodash": "^4.17.11" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "ms": "^2.1.1" } }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", "dev": true, "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - } + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "vue": { - "version": "2.5.16", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.16.tgz", - "integrity": "sha512-/ffmsiVuPC8PsWcFkZngdpas19ABm5mh2wA7iDqcltyCTwlgZjHGeJYOXkBMo422iPwIcviOtrTCUpSfXmToLQ==", - "dev": true - }, "vue-hot-reload-api": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz", - "integrity": "sha512-2j/t+wIbyVMP5NvctQoSUvLkYKoWAAk2QlQiilrM2a6/ulzFgdcLUJfTvs4XQ/3eZhHiBmmEojbjmM4AzZj8JA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz", + "integrity": "sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==", "dev": true }, "vue-i18n": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.0.0.tgz", - "integrity": "sha512-Xi4xQEhL96zqXfPcfEM8Dusqmxu2jJBR88t+KGCxT7WoeDa7YHFtN7tauf9ZJQQEKt9kT6PH1+krVMB8tnl7TA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.14.0.tgz", + "integrity": "sha512-utI1Rvc8i+fmmUkkKRmHaf4QQ87s7rGVL5ZZLsKvvRzmgaIr1l+GfGxxxRmsZxHpPlgeB8OxoUZ4noqZgDL6xg==", "dev": true }, + "vue-jest": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.4.tgz", + "integrity": "sha512-PY9Rwt4OyaVlA+KDJJ0614CbEvNOkffDI9g9moLQC/2DDoo0YrqZm7dHi13Q10uoK5Nt5WCYFdeAheOExPah0w==", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", + "chalk": "^2.1.0", + "extract-from-css": "^0.4.4", + "find-babel-config": "^1.1.0", + "js-beautify": "^1.6.14", + "node-cache": "^4.1.1", + "object-assign": "^4.1.1", + "source-map": "^0.5.6", + "tsconfig": "^7.0.0", + "vue-template-es2015-compiler": "^1.6.0" + } + }, "vue-js-toggle-button": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/vue-js-toggle-button/-/vue-js-toggle-button-1.2.3.tgz", - "integrity": "sha512-9ucr11h8w2qkXcfu2+gZJz5h9cVphGepOcdBcEZKyiktCbUNwqMFah6xXjO0xPpOphk+5irVjnLjmdFBhGe52A==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/vue-js-toggle-button/-/vue-js-toggle-button-1.3.2.tgz", + "integrity": "sha512-LS+pvX5lXEhX+Gei5MOAEw7bx99/A+9idFhMtBgz72ApsEHlW69Y7bk+ZKC1rLRUxchL5WlQ+MhJXqXewhkfjg==" }, "vue-loader": { - "version": "13.7.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.7.1.tgz", - "integrity": "sha512-v6PbKMGl/hWHGPxB2uGHsA66vusrXF66J/h1QiFXtU6z5zVSK8jq5xl95M1p3QNXmuEJKNP3nxoXfbgQNs7hJg==", + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz", + "integrity": "sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==", "dev": true, "requires": { - "consolidate": "^0.14.0", + "@vue/component-compiler-utils": "^2.5.1", "hash-sum": "^1.0.2", "loader-utils": "^1.1.0", - "lru-cache": "^4.1.1", - "postcss": "^6.0.8", - "postcss-load-config": "^1.1.0", - "postcss-selector-parser": "^2.0.0", - "prettier": "^1.7.0", - "resolve": "^1.4.0", - "source-map": "^0.6.1", - "vue-hot-reload-api": "^2.2.0", - "vue-style-loader": "^3.0.0", - "vue-template-es2015-compiler": "^1.6.0" + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" } }, "vue-multiselect": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.0.tgz", - "integrity": "sha512-mEhApxZ6MUISGLuGDy0RF5UlAKUgG/Qq0DWYE/C+CA1h6ZszM3cHfpNFfFm2AMWLclY2SAWpY1HlQLjsw8WnvQ==" + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.6.tgz", + "integrity": "sha512-s7jmZPlm9FeueJg1RwJtnE9KNPtME/7C8uRWSfp9/yEN4M8XcS/d+bddoyVwVnvFyRh9msFo0HWeW0vTL8Qv+w==" + }, + "vue-property-decorator": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-8.2.2.tgz", + "integrity": "sha512-3gRrIeoUtjXvkoMX2stJsVs7805Pa9MXEndnk21ej+sWO7AIc5HF1TKqK0Pox5TEjpO02UbadIF0QWNrx6ZwXQ==", + "dev": true, + "requires": { + "vue-class-component": "^7.0.1" + } }, "vue-resize": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-0.4.4.tgz", - "integrity": "sha512-Lb/cnE2N9Y42ZJPw8wpjkpuX5a9ReerWNGcQRcbNCwfCnkHG6++FurNNmLIdU8dcCTH4c5rtTPdxBqFoRMK2cQ==", + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-0.4.5.tgz", + "integrity": "sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg==", "dev": true }, "vue-slider-component": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-2.7.4.tgz", - "integrity": "sha512-RpdXb4eko2qRXfXHNNbpsKPB87tIgOCK2hqKWTdz7joOZrcrLQdX59FAqNoBq+8dsFG1UmAskTRh5ORQFJDF3g==", - "dev": true + "version": "3.0.40", + "resolved": "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-3.0.40.tgz", + "integrity": "sha512-8obhszDPC34b43h/dd0Gh+oQmUD402X+yo129K3m1EiqAlQ5Imr12XAOQ+RcwCKSOLigLW/flZ0H3dvmhk2ZWQ==", + "dev": true, + "requires": { + "vue-property-decorator": "^8.0.0" + } }, "vue-style-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz", - "integrity": "sha512-ICtVdK/p+qXWpdSs2alWtsXt9YnDoYjQe0w5616j9+/EhjoxZkbun34uWgsMFnC1MhrMMwaWiImz3K2jK1Yp2Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", + "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", "dev": true, "requires": { "hash-sum": "^1.0.2", @@ -13484,9 +12889,9 @@ } }, "vue-template-compiler": { - "version": "2.5.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz", - "integrity": "sha512-ZbuhCcF/hTYmldoUOVcu2fcbeSAZnfzwDskGduOrnjBiIWHgELAd+R8nAtX80aZkceWDKGQ6N9/0/EUpt+l22A==", + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz", + "integrity": "sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -13494,36 +12899,48 @@ } }, "vue-template-es2015-compiler": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", - "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", "dev": true }, "vue-timeago": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vue-timeago/-/vue-timeago-4.0.2.tgz", - "integrity": "sha512-v2pdqHKtYc9tpOa6uMJItVMzIPSDKmGyRm4peyH9lzMds3MzNQxOj7FMta9rAYgf+1yUY6JRolFm+OT9x1DlGw==", - "dev": true + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/vue-timeago/-/vue-timeago-5.1.2.tgz", + "integrity": "sha512-K74EdER1WO1XX+EIsf5ZeHucZjconfncOTlKxntC7s7q0QAAgiZt5BYenJ/GPHEEcxfmrGsiFWJPYmLHyNzDRg==", + "dev": true, + "requires": { + "date-fns": "^1.29.0" + } }, "vuex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz", - "integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.1.tgz", + "integrity": "sha512-ER5moSbLZuNSMBFnEBVGhQ1uCBNJslH9W/Dw2W7GZN23UQA69uapP5GTT9Vm8Trc0PzBSVt6LzF3hGjmv41xcg==", "dev": true }, - "ware": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", - "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { - "wrap-fn": "^0.1.0" + "makeerror": "1.0.x" } }, "watchpack": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", - "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { "chokidar": "^2.0.2", @@ -13540,218 +12957,609 @@ "minimalistic-assert": "^1.0.0" } }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "webpack": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", - "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "version": "4.35.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.35.3.tgz", + "integrity": "sha512-xggQPwr9ILlXzz61lHzjvgoqGU08v5+Wnut19Uv3GaTtzN4xBTcwnobodrXE142EL1tOiS5WVEButooGzcQzTA==", "dev": true, "requires": { - "acorn": "^5.0.0", - "acorn-dynamic-import": "^2.0.0", + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.0", "ajv": "^6.1.0", "ajv-keywords": "^3.1.0", - "async": "^2.1.2", - "enhanced-resolve": "^3.4.0", - "escope": "^3.6.0", - "interpret": "^1.0.0", - "json-loader": "^0.5.4", - "json5": "^0.5.1", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.3.0", "loader-utils": "^1.1.0", "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", "node-libs-browser": "^2.0.0", - "source-map": "^0.5.3", - "supports-color": "^4.2.1", - "tapable": "^0.2.7", - "uglifyjs-webpack-plugin": "^0.4.6", - "watchpack": "^1.4.0", - "webpack-sources": "^1.0.1", - "yargs": "^8.0.2" + "schema-utils": "^1.0.0", + "tapable": "^1.1.0", + "terser-webpack-plugin": "^1.1.0", + "watchpack": "^1.5.0", + "webpack-sources": "^1.3.0" }, "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "acorn": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz", + "integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==", "dev": true }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.4.1.tgz", + "integrity": "sha512-Bs8D/1zF+17lhqj2OYmzi7HEVYqEVxu7lCO9Ff8BwajenOU0vAwEoV8e4ICCPNZAcqR1PCR/7o2SkW+cnCmF0A==", + "dev": true, + "requires": { + "acorn": "^6.0.7", + "acorn-walk": "^6.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.15", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + } + } + }, + "webpack-cli": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.5.tgz", + "integrity": "sha512-w0j/s42c5UhchwTmV/45MLQnTVwRoaUTu9fM5LuyOd/8lFoCNCELDogFoecx5NzRUndO0yD/gF2b02XKMnmAWQ==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", + "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.2", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.7.2.tgz", + "integrity": "sha512-mjWtrKJW2T9SsjJ4/dxDC2fkFVUw8jlpemDERqV0ZJIkjjjamR2AbQlr3oz+j4JLhYCHImHnXZK5H06P2wvUew==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.6", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "killable": "^1.0.1", + "loglevel": "^1.6.3", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.20", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.4", + "semver": "^6.1.1", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.3.0", + "spdy": "^4.0.0", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.0", + "webpack-log": "^2.0.0", + "yargs": "12.0.5" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" } }, - "uglifyjs-webpack-plugin": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "source-map": "^0.5.6", - "uglify-js": "^2.8.29", - "webpack-sources": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3" } - } - } - }, - "webpack-bundle-analyzer": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz", - "integrity": "sha512-rwxyfecTAxoarCC9VlHlIpfQCmmJ/qWD5bpbjkof+7HrNhTNZIwZITxN6CdlYL2axGmwNUQ+tFgcSOiNXMf/sQ==", - "dev": true, - "requires": { - "acorn": "^5.3.0", - "bfj-node4": "^5.2.0", - "chalk": "^2.3.0", - "commander": "^2.13.0", - "ejs": "^2.5.7", - "express": "^4.16.2", - "filesize": "^3.5.11", - "gzip-size": "^4.1.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "opener": "^1.4.3", - "ws": "^4.0.0" - } - }, - "webpack-chunk-hash": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/webpack-chunk-hash/-/webpack-chunk-hash-0.4.0.tgz", - "integrity": "sha1-a0DDBw+8n/DP4P54HHF0r2x8FqQ=", - "dev": true - }, - "webpack-dev-middleware": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", - "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", - "dev": true, - "requires": { - "memory-fs": "~0.4.1", - "mime": "^1.5.0", - "path-is-absolute": "^1.0.0", - "range-parser": "^1.0.3", - "time-stamp": "^2.0.0" - }, - "dependencies": { + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true - } - } - }, - "webpack-dev-server": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz", - "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "array-includes": "^3.0.3", - "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.17.4", - "import-local": "^1.0.0", - "internal-ip": "1.2.0", - "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", - "selfsigned": "^1.9.1", - "serve-index": "^1.7.2", - "sockjs": "0.3.19", - "sockjs-client": "1.1.4", - "spdy": "^3.4.1", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", - "webpack-dev-middleware": "1.12.2", - "yargs": "6.6.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "ms": "2.0.0" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" } }, - "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^4.2.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, - "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "semver": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", + "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { - "camelcase": "^3.0.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" } } } }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, "webpack-merge": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz", - "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", "dev": true, "requires": { "lodash": "^4.17.5" } }, "webpack-notifier": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.6.0.tgz", - "integrity": "sha1-/6yOVf+MRpdSuMG7sBGhbxCYbgI=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", + "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", "dev": true, "requires": { "node-notifier": "^5.1.2", @@ -13760,22 +13568,31 @@ } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -13785,12 +13602,32 @@ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, - "whet.extend": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", @@ -13801,65 +13638,62 @@ } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrap-fn": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", - "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "co": "3.1.0" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, @@ -13869,59 +13703,77 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" + "async-limiter": "~1.0.0" } }, - "xml-char-classes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", - "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true }, "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", + "os-locale": "^3.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" }, "dependencies": { "ansi-regex": { @@ -13930,86 +13782,37 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "camelcase": { + "cliui": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "number-is-nan": "^1.0.0" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "strip-ansi": { "version": "4.0.0", @@ -14020,54 +13823,64 @@ "ansi-regex": "^3.0.0" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.0.1" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } diff --git a/package.json b/package.json index c98f91928..1d137999d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "private": true, "scripts": { + "test": "jest", "dev": "npm run development", "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "npm run development -- --watch", @@ -10,32 +11,93 @@ "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" }, "devDependencies": { - "axios": "^0.18", - "bootstrap": "^4.1.2", - "cross-env": "^5.2.0", - "date-fns": "^1.29.0", - "flag-icon-css": "^3.0.0", - "jquery": "^3.3.1", - "laravel-mix": "^2.1.11", - "lodash": "^4.17.10", - "popper.js": "^1.14.3", + "@babel/core": "^7.5.5", + "@babel/preset-env": "^7.5.5", + "@types/jest": "^24.0.18", + "@vue/test-utils": "^1.0.0-beta.29", + "axios": "^0.19.0", + "axios-mock-adapter": "^1.17.0", + "babel-core": "^7.0.0-bridge.0", + "bootstrap": "^4.3.1", + "cross-env": "^5.2.1", + "date-fns": "^1.30.1", + "eslint": "^6.3.0", + "eslint-plugin-jest": "^22.16.0", + "eslint-plugin-vue": "^5.2.3", + "flag-icon-css": "^3.3.0", + "jest": "^24.9.0", + "jest-serializer-vue": "^2.0.2", + "jest-transform-stub": "^2.0.0", + "jest-watch-typeahead": "^0.4.0", + "jquery": "^3.4.1", + "laravel-mix": "^4.1.2", + "lodash": "^4.17.15", + "popper.js": "^1.15.0", + "resolve-url-loader": "^3.1.0", + "sass": "^1.22.10", + "sass-loader": "^7.3.1", "spark-md5": "^3.0.0", - "v-tooltip": "^2.0.0-rc.33", - "vue": "^2.5.16", - "vue-i18n": "^8.0.0", - "vue-slider-component": "^2.7.4", - "vue-timeago": "^4.0.2", - "vuex": "^3.0.1", - "webpack-bundle-analyzer": "^2.13.1" + "ts-jest": "^24.0.2", + "typescript": "^3.6.2", + "v-tooltip": "^2.0.2", + "vue": "^2.6.10", + "vue-i18n": "^8.14.0", + "vue-jest": "^3.0.4", + "vue-slider-component": "^3.0.40", + "vue-template-compiler": "^2.6.10", + "vue-timeago": "^5.1.2", + "vuex": "^3.1.1", + "webpack-bundle-analyzer": "^3.4.1" }, "dependencies": { - "ajv": "^6.5.2", - "es6-promise": "^4.2.5", - "file-saver": "^1.3.8", - "localforage": "^1.7.2", + "@sentry/browser": "^5.6.3", + "ajv": "^6.10.2", + "es6-promise": "^4.2.8", + "file-saver": "^2.0.2", + "localforage": "^1.7.3", "open-iconic": "^1.1.1", - "raven-js": "^3.26.3", - "vue-js-toggle-button": "^1.2.3", - "vue-multiselect": "^2.1.0" + "prando": "^5.1.1", + "vue-js-toggle-button": "^1.3.2", + "vue-multiselect": "^2.1.6" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "ts", + "vue" + ], + "moduleNameMapper": { + "^@/(.*)$": "/resources/js/components/$1", + "^.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$": "jest-transform-stub" + }, + "transform": { + "^.+\\.js$": "/node_modules/babel-jest", + "^.+\\.ts$": "/node_modules/ts-jest", + ".*\\.(vue)$": "/node_modules/vue-jest", + ".+\\.(css|styl|less|sass|scss|png|jpg|svg|ttf|woff|woff2)$": "jest-transform-stub" + }, + "snapshotSerializers": [ + "/node_modules/jest-serializer-vue" + ], + "watchPlugins": [ + "jest-watch-typeahead/filename", + "jest-watch-typeahead/testname" + ] + }, + "babel": { + "env": { + "test": { + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "node": "current" + } + } + ] + ] + } + } } } diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 000000000..9fb3f4888 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,5 @@ +includes: + - ./vendor/nunomaduro/larastan/extension.neon +parameters: + excludes_analyse: + - /*/*/Tournament.php diff --git a/phpunit.dusk.xml b/phpunit.dusk.xml deleted file mode 100644 index 60392c932..000000000 --- a/phpunit.dusk.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - ./tests/Browser - - - - - ./app - - - diff --git a/phpunit.xml b/phpunit.xml index 1814796c8..d62f45214 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,18 +1,16 @@ + stopOnFailure="false"> ./tests - ./tests/Browser @@ -25,6 +23,8 @@ + + diff --git a/public/i/logo-large.png b/public/i/logo-large.png index 7e21937fd..bd70bfa08 100644 Binary files a/public/i/logo-large.png and b/public/i/logo-large.png differ diff --git a/public/i/logo.png b/public/i/logo.png index f3aac6c05..e83936c87 100644 Binary files a/public/i/logo.png and b/public/i/logo.png differ diff --git a/public/index.php b/public/index.php index a807a4eea..f9ea69277 100644 --- a/public/index.php +++ b/public/index.php @@ -1,4 +1,14 @@ + */ + +define('LARAVEL_START', microtime(true)); + /* |-------------------------------------------------------------------------- | Register The Auto Loader @@ -7,11 +17,11 @@ | Composer provides a convenient, automatically generated class loader for | our application. We just need to utilize it! We'll simply require it | into the script here so that we don't have to worry about manual -| loading any of our classes later on. It feels nice to relax. +| loading any of our classes later on. It feels great to relax. | */ -require __DIR__.'/../bootstrap/autoload.php'; +require __DIR__ . '/../vendor/autoload.php'; /* |-------------------------------------------------------------------------- @@ -25,7 +35,7 @@ | */ -$app = require_once __DIR__.'/../bootstrap/app.php'; +$app = require_once __DIR__ . '/../bootstrap/app.php'; /* |-------------------------------------------------------------------------- @@ -42,7 +52,7 @@ $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); $response = $kernel->handle( - $request = Illuminate\Http\Request::capture() + $request = Illuminate\Http\Request::capture() ); $response->send(); diff --git a/public/js/base2current.json b/public/js/base2current.json index a5eb0682d..613091977 100644 --- a/public/js/base2current.json +++ b/public/js/base2current.json @@ -1 +1 @@ -[{"35":[92,0,136,161]},{"47":[34,0,255,161,234]},{"87":[0]},{"89":[161]},{"99":[186]},{"127":[174]},{"155":[164]},{"204":[92,66,128,161]},{"215":[92,130,219,160,234]},{"827":[128,1]},{"980":[92,55,133,164]},{"2379":[34,106,129,160]},{"2404":[234,234,234]},{"2414":[234,234,234]},{"2424":[234,234,234]},{"2434":[234,234,234]},{"2444":[234,234,234]},{"2561":[165,188]},{"3097":[34,47,132,164,234]},{"4993":[252]},{"5002":[178]},{"5011":[164]},{"20581":[49]},{"20636":[49,49]},{"20804":[168]},{"20859":[160,176]},{"21027":[0]},{"21082":[0,0]},{"21809":[92,73,195,160]},{"21847":[34,33,196,160,234]},{"21854":[34,91,148]},{"21858":[234,234]},{"24418":[92,10,246]},{"24422":[234,234]},{"25951":[32]},{"26189":[92,153,245,160,96,234]},{"27785":[160]},{"27789":[160]},{"27884":[160]},{"27887":[176]},{"30972":[255,159,160]},{"30994":[129,160,160]},{"31001":[255,159,160]},{"31011":[129,160,160]},{"31046":[43,217,160]},{"31102":[34,75,150,160,234,234,234,234,234,234]},{"32725":[48]},{"32727":[11,5]},{"50088":[18,217,160]},{"50445":[191,80,128,48]},{"50965":[191,80,128,48]},{"51006":[34,240,194,160,234,234,234,234]},{"51019":[234,234]},{"53095":[34,175,217,160]},{"59775":[1,8]},{"59778":[1,7]},{"60395":[92,92,147,164,234]},{"60790":[46,218,160]},{"61077":[155,177,160]},{"61133":[34,111,192,160,234]},{"62723":[34,200,131,160]},{"65511":[34,4,232,160]},{"65607":[37,231,160]},{"65778":[34,215,140,160,234,234]},{"65879":[34,124,190,160,234]},{"65894":[34,170,190,160]},{"66284":[34,205,190,160]},{"66292":[92,243,241,160]},{"66579":[234,234,234,234,234,234,34,165,128,160,208]},{"66710":[92,217,233,160]},{"67552":[34,126,128,164,234,234,234,234,234]},{"67579":[34,135,130,164]},{"67619":[34,143,128,160]},{"67793":[34,191,218,160,234,234]},{"67934":[128,242,160]},{"68495":[34,135,151,160,208,6,234]},{"68584":[132,242,160]},{"69776":[34,135,151,160,208,4,234]},{"70410":[132,242,160]},{"71576":[234,234,234,234,234,234]},{"71853":[34,236,241,160,234]},{"72216":[228,216,160]},{"72241":[34,170,190,160]},{"72246":[102,150,160]},{"73041":[34,98,151,160]},{"73263":[28,231,160]},{"73340":[34,241,128,160,234]},{"73937":[34,186,190,160]},{"74833":[34,135,130,164]},{"76423":[34,9,232,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"78172":[34,90,218,160,34,75,150,160,234,234]},{"79603":[34,24,217,160]},{"79767":[34,206,218,160]},{"82676":[132,242,160]},{"87892":[34,201,241,160,234,234,234,234,234]},{"88488":[4]},{"88505":[34,22,233,160]},{"90651":[34,134,230,160,234,234]},{"93230":[34,156,154,164,234,234]},{"93325":[34,88,153,164,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"93521":[34,156,154,164,234,234]},{"130070":[177,198,249,201,198,249]},{"157614":[34,123,153,164]},{"166331":[34,98,151,160]},{"173045":[214,177,160]},{"173058":[214,177,160]},{"173307":[214,177,160]},{"173320":[214,177,160]},{"183384":[34,118,242,160,234]},{"186959":[80]},{"186977":[80]},{"187009":[80]},{"187802":[34,98,151,160]},{"187902":[34,121,151,160]},{"188153":[0]},{"188234":[176,230,160]},{"188261":[34,65,130,164,96]},{"188337":[34,223,148,160]},{"188959":[34,229,229,160,128,13]},{"189655":[34,15,192,160,234,234]},{"191439":[34,44,193,160,234,234]},{"191760":[234,234,234,234,234]},{"191967":[34,64,193,160,234,234]},{"192037":[34,121,151,160]},{"192083":[34,32,141,160,234,234]},{"192095":[34,102,191,160,234]},{"192121":[182,191,160]},{"192140":[34,205,141,160,234]},{"192151":[234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"192286":[34,229,132,160]},{"192350":[47,133,160]},{"192378":[147,132,160]},{"192463":[76,132,160]},{"192506":[34,248,132,160,234,234,234,234,234,234]},{"192561":[94,132,160]},{"192650":[34,18,132,160,176,24,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"192877":[0,128,162]},{"192887":[34,18,141,160]},{"192893":[34,121,151,160]},{"192937":[0,128,162]},{"192957":[0,128,162]},{"192975":[0,128,162]},{"192985":[0,128,162]},{"193014":[34,98,151,160]},{"193025":[158,141,160]},{"193033":[34,98,151,160]},{"193140":[34,141,175,160]},{"193157":[34,134,175,160]},{"193440":[34,7,215,160]},{"193472":[122,229,160]},{"193546":[34,7,215,160]},{"193578":[66,229,160]},{"193854":[34,41,141,160]},{"193859":[32]},{"193888":[246,190,160]},{"194141":[34,206,191,160,234,234,234,234,234]},{"194177":[34,68,191,160,96,234,234,234,234,234,234,234,234]},{"195214":[92,229,229,160]},{"195327":[34,208,140,160,240,2,96,234]},{"195539":[34,0,195,160]},{"195589":[248,172,160]},{"195710":[34,14,173,160,234,234,234,234,234]},{"195735":[234,234,234,234,234,234]},{"195743":[209,172,160]},{"195909":[219,172,160]},{"196477":[34,121,151,160]},{"196497":[34,98,151,160]},{"197750":[205,188,160]},{"198721":[34,233,213,160,234,234]},{"198801":[234,234,234,234,234,234,234,234,34,32,182,164]},{"198942":[34,251,152,164]},{"199084":[6,240]},{"199188":[234,234,234,234,234,234,234,234]},{"199596":[34,245,140,160]},{"199659":[34,153,162,160,96,234]},{"199950":[34,25,141,160]},{"199964":[154,172,160]},{"199993":[34,229,172,160]},{"200070":[34,231,140,160]},{"200470":[34,224,140,160]},{"200845":[34,238,140,160,201]},{"200851":[240]},{"200853":[34,238,140,160]},{"200858":[8]},{"200893":[34,245,140,160]},{"201132":[34,0,128,164,234,234]},{"208729":[92,134,194,160,96]},{"208796":[22,244]},{"208799":[41,1,208]},{"208969":[254,140,160]},{"208994":[34,245,140,160,234,234]},{"209010":[139]},{"209098":[141,141,160]},{"209199":[41,247]},{"210057":[92,59,215,160,234,234,234,234]},{"210164":[68,141,160]},{"211413":[124,141,160]},{"213169":[15,133,160]},{"214205":[34,39,177,160]},{"214972":[185,176,160]},{"217490":[34,123,217,160]},{"217579":[34,111,189,160]},{"224597":[34,7,214,160]},{"224693":[34,27,214,160]},{"224710":[34,100,129,164]},{"225501":[34,12,128,164,234,234]},{"225992":[34,179,129,164]},{"226026":[34,41,215,160,234]},{"226304":[34,92,214,160,234]},{"229522":[115]},{"229524":[133,0,156]},{"229529":[173,123,3,208,93]},{"229574":[34,231,231,160]},{"230816":[171,175,160]},{"230955":[171,175,160]},{"233256":[145,149,160]},{"233266":[34,165,128,160]},{"233297":[34,240,231,160,234]},{"233987":[129,216,160]},{"234731":[34,222,216,160]},{"234747":[34,251,231,160]},{"235953":[34,173,132,160,144,3]},{"236024":[26,200,160]},{"236047":[79,189,160]},{"236578":[34,232,133,164]},{"237653":[34,1,133,164,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"237676":[34,162,132,164]},{"237682":[234,175]},{"238447":[234,234,234,234,234]},{"238458":[218,193,160]},{"238498":[34,133,192,160,128,3]},{"238562":[34,158,194,160,240,4,234]},{"238751":[34,149,215,160]},{"238964":[34,149,215,160]},{"239190":[34,149,215,160]},{"239964":[116,218,160]},{"240044":[92,141,153,164]},{"240196":[234,234,234,234,234,234,34,192,128,160,208]},{"241065":[16]},{"241115":[34,125,214,160]},{"241165":[34,125,214,160]},{"241175":[34,4,129,164]},{"241294":[34,125,214,160]},{"241304":[34,4,129,164]},{"241814":[34,125,214,160,24,125,139,176]},{"241869":[223,229,160]},{"241877":[34,125,214,160,24,125,139,176]},{"242973":[255]},{"243003":[255]},{"243060":[34,243,217,160,234]},{"243067":[234,234,34,213,211,160,234]},{"250411":[34,181,128,164,234,234]},{"250420":[34,155,214,160,234]},{"250478":[34,209,214,160,234]},{"259329":[142,1]},{"261983":[34,203,150,164,96]},{"270714":[201,3,144]},{"271374":[201,3,176]},{"273121":[34,192,237,160,234]},{"273608":[34,27,179,160,76,230,172]},{"275716":[34,255,178,160,234]},{"276202":[34,60,179,160,76,8,183,32,86,248,107]},{"279550":[64]},{"279552":[49,80,127]},{"279585":[92,125,220,160,234]},{"279601":[34,156,128,160,234]},{"279644":[83,133,160,34,74,232,160,234,234]},{"280037":[34,195,228,160,234,234]},{"280055":[234,234,234,234,234]},{"280063":[223,229,160]},{"280106":[92,187,220,160,234]},{"280265":[200,205,160]},{"280287":[200,204,160]},{"280314":[200,205,160]},{"280335":[34,67,176,160]},{"282028":[34,16,153,164,234,234,234,234,234]},{"283541":[34,105,190,160,234,234]},{"285863":[34,52,129,164,234]},{"285881":[34,125,214,160]},{"285891":[34,207,128,164]},{"295207":[34,120,132,164]},{"295219":[34,145,132,164]},{"296429":[34,146,196,160,234]},{"296466":[200,206]},{"296471":[201,206]},{"296480":[200,208]},{"296488":[200,206]},{"296493":[201,206]},{"296502":[200,208,34,0,128,160]},{"296583":[34,98,151,160]},{"296619":[200,209]},{"296810":[216,203]},{"297038":[248,201]},{"297052":[232,202]},{"297087":[34,201,132,160,234,176]},{"297144":[200,204]},{"297200":[248,201]},{"297225":[232,202]},{"297263":[201,210]},{"297292":[34,49,191,160]},{"297309":[208,210]},{"297904":[34,91,129,160,234]},{"304330":[240]},{"304340":[240]},{"304350":[240]},{"304360":[240]},{"304370":[240]},{"304380":[240]},{"304390":[240]},{"304400":[240]},{"304410":[240]},{"304420":[240]},{"304430":[240]},{"304440":[240]},{"313527":[189,247]},{"324619":[34,123,149,160]},{"324675":[34,221,217,160]},{"324896":[34,119,230,160,34,197,217,160,234,234,234,234,234,234]},{"324996":[34,186,190,160]},{"325131":[34,167,230,160]},{"325565":[6,31,64,18,1,63,20,1,63,19,31,66,26,31,75,26,32,75,37,45,63,41,32,63,42,60,63]},{"341871":[32,232,160]},{"342245":[34,207,131,160,34,70,217,160,156,0,16,156,1,16,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"343854":[0,1]},{"343880":[50]},{"343898":[50]},{"344082":[234,234,234,234,234,234,234,234,34,121,151,160]},{"344119":[34,121,151,160]},{"344185":[34,121,151,160]},{"344248":[34,121,151,160]},{"344312":[34,121,151,160]},{"344375":[34,121,151,160]},{"344441":[34,121,151,160]},{"344499":[34,121,151,160]},{"344565":[34,121,151,160]},{"344623":[34,121,151,160]},{"344689":[34,121,151,160]},{"344747":[34,121,151,160]},{"344813":[34,121,151,160]},{"344871":[34,121,151,160]},{"344937":[34,121,151,160]},{"345406":[34,151,150,160]},{"345531":[34,170,150,160,96]},{"345560":[34,170,150,160,96]},{"393133":[18,217,160]},{"412057":[234,234,234,234]},{"412775":[66,0,0,175]},{"412810":[221,231,160]},{"412876":[92,172,144,164]},{"413015":[107]},{"413094":[44,145,164]},{"413109":[34,83,230,160]},{"413141":[34,59,142,164,234,234,234,234,234,234,234,234]},{"413199":[234,234,234,234,234,234,234,234,234]},{"413249":[34,209,145,164,234,234,234,234]},{"413264":[34,248,145,164,234,234,234,234,234,234]},{"413297":[92,31,146,164,234]},{"414010":[76,29]},{"414014":[104]},{"414018":[105]},{"414022":[130]},{"414026":[136,1]},{"414032":[92,29]},{"414036":[120]},{"414040":[121]},{"414044":[146]},{"414048":[136,1]},{"414472":[66,0,0]},{"414504":[77]},{"414506":[78,29,101]},{"414510":[78,29,109]},{"414514":[78,29,136,1]},{"414522":[136,1]},{"414526":[136,1]},{"414532":[93]},{"414536":[94]},{"414544":[94]},{"414548":[125,29,136,1,94,29,136,1]},{"414611":[34,59,142,164,234,234,234,234,234,234,234,234]},{"414774":[68]},{"414776":[36]},{"414790":[128]},{"414951":[234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"414988":[204]},{"414990":[74,1,202,1,42]},{"414996":[146,1,18,1]},{"415015":[34,168,134,164,234]},{"415036":[66]},{"415040":[234,234]},{"415090":[64]},{"415102":[61]},{"415421":[81]},{"415678":[34,81,146,164]},{"416378":[196,146,164]},{"416491":[34,155,146,164,234]},{"416529":[34,118,146,164]},{"416912":[34,146,146,164]},{"416937":[34,132,146,164]},{"417380":[136,1]},{"417384":[136,1]},{"417388":[136,1]},{"417392":[136,1]},{"417396":[136,1]},{"417400":[136,1]},{"417406":[136,1]},{"417410":[136,1]},{"417414":[136,1]},{"417418":[136,1]},{"417422":[136,1]},{"417426":[136,1]},{"417432":[77]},{"417434":[78,29,101]},{"417438":[78,29,109]},{"417442":[78,29,136,1,79,29,98]},{"417450":[101,29,78]},{"417456":[136,1]},{"417462":[93]},{"417464":[94,29,117]},{"417468":[94,29,125]},{"417472":[94,29,136,1,95,29,114]},{"417480":[117,29,94]},{"417486":[136,1]},{"417798":[77]},{"417800":[78,29,101]},{"417804":[78,29,109]},{"417808":[78,29,136,1,79,29,98]},{"417816":[101,29,78]},{"417822":[139]},{"417826":[136,1]},{"417836":[93]},{"417838":[94,29,117]},{"417842":[94,29,125]},{"417846":[94,29,136,1,95,29,114]},{"417854":[117,29,94]},{"417860":[155]},{"417864":[136,1]},{"417870":[136,1]},{"417874":[136,1]},{"417878":[136,1]},{"417882":[136,1]},{"417886":[136,1]},{"417890":[136,1]},{"417894":[136,1]},{"417898":[136,1]},{"417902":[136,1]},{"417906":[136,1]},{"417910":[136,1]},{"417914":[136,1]},{"417918":[136,1]},{"417924":[136,1]},{"417928":[136,1]},{"417932":[136,1]},{"417936":[136,1]},{"417940":[136,1]},{"417944":[136,1]},{"417948":[136,1]},{"417952":[136,1]},{"417956":[136,1]},{"417960":[136,1]},{"417964":[136,1]},{"417968":[136,1]},{"417972":[136,1]},{"417978":[76,29,74,29,103,29,76,29,78,29,101,29,136,1]},{"417996":[136,1]},{"418000":[136,1]},{"418004":[136,1]},{"418010":[92,29,90,29,119,29,92,29,94,29,117,29,136,1]},{"418028":[136,1]},{"418032":[136,1]},{"418036":[136,1]},{"418348":[136,1,76,29,104]},{"418354":[105,29,130]},{"418360":[79]},{"418362":[98,29,101]},{"418366":[78,29,136,1]},{"418382":[136,1,92,29,120]},{"418388":[121,29,146]},{"418394":[95]},{"418396":[114,29,117]},{"418400":[94,29,136,1]},{"418458":[76,29]},{"418462":[74,29]},{"418466":[103,29]},{"418470":[76,29]},{"418474":[78,29,136,1,101,29,136,1]},{"418484":[136,1]},{"418490":[92,29]},{"418494":[90,29]},{"418498":[119,29]},{"418502":[92,29]},{"418506":[94,29,136,1,117,29,136,1]},{"418516":[136,1]},{"418523":[128,13,97,13,98,13,76,13,97,13,134,13,136,1]},{"418541":[144,13,113,13,114,13,92,13,113,13,150,13,136,1]},{"418716":[128,13,97,13,78,13,107,13,78,13,134,13,136,1]},{"418734":[144,13,113,13,94,13,123,13,94,13,150,13,136,1]},{"418842":[9]},{"418848":[9]},{"418854":[9]},{"418860":[9]},{"418866":[9]},{"418872":[9]},{"418874":[44]},{"418878":[73]},{"418880":[73]},{"418882":[73]},{"418884":[73]},{"418886":[201]},{"418888":[45]},{"418890":[30]},{"418892":[9]},{"418898":[9]},{"418900":[9]},{"418902":[9]},{"418904":[9]},{"418906":[137]},{"418908":[77]},{"418910":[30,128,9]},{"418914":[109]},{"418916":[30,128,9]},{"418920":[141]},{"418922":[30,128,9]},{"418926":[173]},{"418928":[30]},{"418930":[137]},{"418936":[73]},{"418942":[9]},{"418948":[9]},{"418954":[73]},{"418960":[9]},{"418966":[201]},{"418972":[137]},{"418978":[137]},{"418984":[9]},{"418986":[9]},{"418988":[9]},{"418990":[9]},{"418992":[9]},{"418994":[9]},{"418996":[9]},{"418998":[9]},{"419004":[9]},{"419006":[9]},{"419008":[9]},{"419010":[9]},{"419012":[9]},{"419014":[9]},{"419016":[9]},{"419018":[9]},{"419024":[5]},{"422780":[244,237,160,234,234]},{"436680":[165,2,105,0]},{"444489":[34,121,151,160]},{"449502":[34,149,218,160,234,234,234,234,234,234]},{"449516":[16,39]},{"449521":[15,39]},{"449575":[34,25,238,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"449609":[34,55,238,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"449691":[34,4,238,160,234,234,234,234,234,234]},{"450109":[128]},{"450137":[34,168,151,160,96]},{"450208":[4]},{"450227":[34,102,132,164]},{"450334":[34,251,151,160]},{"450360":[34,87,179,160,144]},{"450366":[76,136,223,32,70,227,107,234,234,234]},{"450458":[34,195,180,160,234]},{"450492":[34,219,151,160,234,234,234]},{"450861":[34,217,180,160]},{"451151":[242]},{"451157":[244]},{"451163":[50,18]},{"451169":[52,18]},{"451292":[76,241,226]},{"451775":[34,131,132,164]},{"452340":[128]},{"452537":[34,110,152,160,234]},{"452559":[34,92,152,160,234]},{"452581":[34,128,152,160,234]},{"452634":[96]},{"453064":[34,155,156,160,96]},{"453452":[242]},{"453458":[244]},{"453464":[50,18]},{"453470":[52,18]},{"453536":[128]},{"453538":[126,0]},{"453542":[64]},{"453546":[34,135,189,160,234,234,76,230,236]},{"453867":[34,146,152,160,234]},{"453892":[34,164,152,160]},{"454092":[34,13,152,160,234,234,234,234,234]},{"454233":[34,13,152,160,234,234,234,234,234]},{"454256":[34,239,190,160,234]},{"454282":[34,13,152,160,234,234,234,234,234]},{"454459":[34,13,152,160,234,234,234,234,234]},{"456591":[19]},{"456599":[18]},{"456607":[20]},{"456631":[21]},{"456871":[75,60]},{"456879":[79,44]},{"456887":[47,36]},{"457299":[34,135,131,160]},{"457344":[34,125,150,160,234,234,234,234]},{"457367":[176,134]},{"457374":[33]},{"457503":[34,232,211,160]},{"457513":[34,14,212,160,128,18,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"457783":[34,43,192,160,128,15,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,92,103,230,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,226,48,162,255]},{"484946":[74,179,35]},{"485100":[34,249,220,160]},{"485416":[34,156,175,35,183,124,234]},{"485439":[183,124,234]},{"485459":[183,124,234]},{"485466":[34,163,179,35]},{"485485":[34,178,176,35,76,253,232]},{"486667":[34,109,131,164,234,234]},{"486677":[34,109,131,164,234,234]},{"486698":[34,122,131,164,234,234]},{"486832":[172,179,35]},{"486873":[34,192,179,35]},{"487006":[187,228,160]},{"487935":[34,33,221,160]},{"488156":[34,33,221,160]},{"488213":[34,33,221,160]},{"488242":[34,33,221,160]},{"488309":[34,33,221,160]},{"488340":[34,33,221,160]},{"488721":[34,33,221,160]},{"489560":[34,33,221,160]},{"490022":[34,33,221,160]},{"490060":[34,33,221,160]},{"490164":[34,33,221,160]},{"490184":[34,33,221,160]},{"490209":[34,33,221,160]},{"490257":[34,33,221,160]},{"490438":[34,49,221,160,96]},{"561458":[12]},{"561460":[30]},{"561462":[63]},{"561464":[127]},{"561466":[127]},{"561468":[63]},{"561470":[19]},{"561473":[12,18,45,94,82,46,19,0]},{"561482":[112]},{"561484":[248,0,252,0,238,0,254,0,254,0,252,0,0,112,136,116,234,154,234,100]},{"561840":[7]},{"561842":[15]},{"561844":[10]},{"561846":[9,1,12,4,7,3,3]},{"561856":[5,8,13,14,11,4,3]},{"561864":[184,0,120,96,254,192,62,0,127,0,254]},{"561876":[254]},{"561878":[8]},{"561880":[248,144,28,246,162,54,220]},{"882113":[34,74,153,164]},{"883789":[34,184,131,160]},{"883797":[234,234,234,234,234,234]},{"899214":[92,23,234,160]},{"900244":[34,109,232,160,208,39,234,234,234,234,234,234]},{"900357":[92,98,234,160,234]},{"900437":[92,252,232,160,234]},{"900447":[34,187,241,160,234,234,234]},{"900458":[34,24,217,160]},{"901799":[34,28,150,164,107,32,222,201,107]},{"903876":[34,164,234,160,208,3,107,234,234]},{"912889":[34,27,128,191,107,234]},{"912923":[34]},{"912925":[128,191,107]},{"917533":[188,170,191,174,201,172,184,183,189,178,183,190,174,248,188,170,191,174,201,186,190,178,189,249,172,184,183,189,178,183,190,174,251]},{"917567":[223]},{"917575":[223]},{"917582":[223]},{"917590":[223]},{"917596":[172,170,183,216,189,255,194,184,190]},{"917606":[189,170,180,174,248,182,174,255,188,184,182,174]},{"917619":[185,181,170,172,174,249,183,178,172,174,205,251,252,0,247,228,248,255,249]},{"917639":[254,113,251,252,0,247,255,248,228,249,255,254,113,251,252,0,247,255,248]},{"917659":[249]},{"917662":[113]},{"917664":[252,0,247,228,248,255,254,114,251,252,0,247,255,248,228,254,114,251,178,216,182,255,179,190,188,189,255,176,184,178,183,176,248,184,190,189,255,175,184,187,255,170,255,185,170,172,180,249,184,175,255,188,182,184,180,174,188,205,251,254,110,0,254,107,4,251,184,183,181,194,255,170,173,190,181,189,188,248,188,177,184,190,181,173,255,189,187,170,191,174,181,249,170,189,255,183,178,176,177,189,205,251,194,184,190,255,172,170,183,255,185,187,174,188,188,248,193,255,189,184,255,188,174,174,255,189,177,174,249,182,170,185,205,251,185,187,174,188,188,255,189,177,174,255,170,248,171,190,189,189,184,183,255,189,184,255,181,178,175,189,249,189,177,178,183,176,188,255,171,194,255,194,184,190,205,251,192,177,174,183,255,194,184,190,255,177,170,188,255,170,248,188,192,184,187,173,200,255,185,187,174,188,188,255,171,249,189,184,255,188,181,170,188,177,255,178,189,205,251,12,36,131,154,99,255,117,40,113,124,95,110,54,20,251,170,187,174,255,192,174,255,187,174,170,181,181,194,248,188,189,178,181,181,255,187,174,170,173,178,183,176,249,189,177,174,188,174,198,251,179,174,174,195,174,199,255,189,177,174,187,174,248,187,174,170,181,181,194,255,170,187,174,255,170,249,181,184,189,255,184,175,255,189,177,178,183,176,188,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4]},{"917988":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,189,177,174,194,255,189,184,184,180,255,177,174,187,248,189,184,255,189,177,174,255,172,170,188,189,181,174,199,249,189,170,180,174,255,194,184,190,187,250,246,188,192,184,187,173,255,170,183,173,255,188,170,191,174,246,177,174,187,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,107,2,252,6,178,216,182,255,178,183,255,189,177,174,248,172,170,188,189,181,174,249,171,170,188,174,182,174,183,189,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,107,2,252,6,177,178,255,254,106,200,248,177,170,191,174,255,194,184,190,255,171,174,174,183,249,189,177,178,183,180,178,183,176,255,170,171,184,190,189,250,246,182,174,198,246,170,187,187,187,187,187,176,176,177,177,204,246,204,255,204,255,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,177,174,194,170,200,255,254,106]},{"918267":[181,184,183,176,255,189,178,182,174,255,183,184,249,188,174,174,205,250,246,194,184,190,255,192,170,183,189,255,170,246,182,170,188,189,174,187,255,188,192,184,187,173,198,246,250,246,192,174,181,181,255,176,184,184,173,255,181,190,172,180,246,192,178,189,177,255,189,177,170,189,205,251,178,189,255,184,172,172,190,187,188,255,189,184,248,182,174,255,189,177,170,189,255,178,255,181,178,180,174,249,189,184,170,188,189,255,170,183,173,255,179,170,182,200,250,246,171,190,189,255,172,177,174,174,188,174,255,170,183,173,246,172,187,170,172,180,174,187,188,255,178,188,246,171,174,189,189,174,187,205,250,246,194,184,190,255,181,178,180,174,198,246]},{"918430":[255,228,255,172,177,174,174,188,174,246,255,255,255,255,179,170,182,254,104,251,170,183,194,192,177,184,200,255,178,255,177,170,191,174,248,189,177,178,183,176,188,255,189,184,255,173,184,205,249,194,184,190,255,188,174,174,255,189,177,184,188,174,250,246,162,255,184,191,174,183,188,198,246,246,194,174,170,177,200,255,162,199,250,246,192,177,184,255,177,170,188,255,162,246,184,191,174,183,188,246,183,184,192,170,173,170,194,188,198,199,251,172,184,184,181,255,188,192,184,187,173,199,248,249,250,246,204,246,246,250,246,204,246,246,250,246,185,181,174,170,188,174]},{"918573":[188,170,191,174,255,190,188,251,176,190,170,187,173,188,199,255,177,174,181,185,199,248,189,177,174]},{"918599":[172,187,174,174,185,174,187,249,254,106,255,178,188,255,177,174,187,174,199,251,254,109,1,172,184,184,181,255,171,174,170,183,188,200,248,171,190,189,255,178,255,189,177,178,183,180,249,194,184,190,255,188,177,184,190,181,173,250,246,182,184,188,174,194,255,184,183,255,184,191,174,187,246,189,184,255,189,177,174,255,181,184,188,189,246,192,184,184,173,188,205,251,254,109,1,189,177,170,189,216,188,255,170,248,185,187,174,189,189,194,255,188,192,184,187,173,200,249,171,190,189,255,178,216,182,255,184,181,173,200,250,246,175,184,187,176,174,189,175,190,181,200,255,170,183,173,246,184,181,173,205,255,192,177,194,255,173,184,183,216,189,246,194,184,190,255,176,184,255,173,184,255,170,181,181,250,246,189,177,174,255,177,170,187,173,255,192,184,187,180]},{"918790":[192,177,178,181,174,255,178,255,177,170,183,176,246,184,190,189,255,178,183,255,189,177,178,188,250,246,177,190,189,205,251,254,109,1,188,170,177,170,188,187,170,177,181,170,200]},{"918836":[178,248,170,182,205,255,194,184,190,255,192,184,190,181,173,249,173,184,255,192,174,181,181]},{"918860":[189,184,250,246,175,178,183,173,255,189,177,174,255,163,246,185,174,183,173,170,183,189,188,255,175,187,184,182,246,189,177,174,255,163,255,173,190,183,176,174,184,183,188,250,246,178,183,255,189,177,174,255,181,178,176,177,189,246,192,184,187,181,173,205,246,190,183,173,174,187,188,189,170,183,173,198,250,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,254,110,0,254,107,4,251,254,109,1,181,178,180,174,200,255,178,255,188,178,189,248,177,174,187,174,200,255,170,183,173,255,189,174,181,181,249,194,184,190,255,192,177,170,189,255,189,184,250,246,173,184,198,246,246,250,246,170,181,187,178,176,177,189,200,255,176,184,246,170,183,173,255,175,178,183,173,255,170,181,181,246,189,177,174,255,182,170,178,173,174,183,188,200,250,246,189,177,174,187,174,255,170,187,174,200,246,181,178,180,174,200,255,182,170,194,171,174,255,167,246,184,175,255,189,177,174,182,205,255,178,250,246,173,190,183,183,184,255,170,183,194,182,184,187,174,205,246,178,216,182,255,184,181,173,205]},{"919113":[110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,224,255,173,194,178,183,176,255,190,183,172,181,174,248,255,255,189,177,178,188,255,192,170,194,204,251,210,211,255,187,170,183,173,184,182,178,195,174,187,248,173,184,183,216,189,255,187,174,170,173,255,182,174,200,249,176,184,255,171,174,170,189,255,176,170,183,184,183,199,251,172,170,191,174,255,189,184,255,181,184,188,189,200,248,184,181,173,255,182,170,183,205,249,176,184,184,173,255,181,190,172,180,205,251,248,224,255,181,184,188,189,255,192,184,184,173,188,251,173,170,183,176,174,187,199,248,173,174,174,185,255,192,170,189,174,187,199,249,195,184,187,170,188,199,251,192,174,181,172,184,182,174,255,189,184,255,189,177,174,248,182,170,176,178,172,255,188,177,184,185,185,174,251,172,170,191,174,255,170,192,170,194,255,175,187,184,182,248,188,180,194,255,172,170,171,171,170,176,174,188,251,225,255,181,170,180,174]},{"919355":[177,194,181,178,170,248,249,255,170,181,188,184,200,255,170,255,188,177,184,185,251,227,255,180,170,180,170,187,178,180,184,248,255,255,191,178,181,181,170,176,174,251,227,255,173,174,188,174,187,189,248,249,255,255,255,255,255,255,178,189,216,188,250,246,177,184,189,205,251,224,226,255,185,184,189,178,184,183,188,199,248,249,192,178,188,177,255,192,170,189,174,187,175,170,181,181,251,226,255,174,170,188,189,255,185,170,181,170,172,174,248,249,227,255,172,170,188,189,181,174,251,248,255,181,170,180,174,255,255,177,178,187,178,170,177,251,173,184,183,216,189,255,189,170,181,180,255,189,184,248,182,174,255,184,187,255,189,184,190,172,177,255,182,194,249,188,178,176,183,199,251,181,190,182,171,174,187,179,170,172,180,188,200,248,178,183,172,205,249,194,184,190,255,188,174,174,255,216,174,182,200,250,246,192,174,255,188,170,192,255,216,174,182,205,251,225,255,180,170,180]},{"919576":[187,178,180,184,248,255,255,191,178,181,181,170,176,174,251,173,184,190,171,181,174,200,255,173,184,190,171,181,174,248,189,184,178,181,255,170,183,173,249,189,187,184,190,171,181,174,199,250,246,171,187,178,183,176,255,182,174,255,170,246,182,190,188,177,187,184,184,182,199,251,254,110,0,254,107,4,251,170,255,171,184,189,189,181,174,255,175,184,187,248,194,184,190,187,255,189,177,184,190,176,177,189,188,198,249,184,187,200,255,189,184,255,185,190,189,250,246,185,184,189,178,184,183,188]},{"919701":[178,183,205,251]},{"919706":[110,0,254,107,4,251,254,110,0,254,107,4,251,178,175,255,184,183,181,194,255,194,184,190,248,177,170,173,255,188,184,182,174,189,177,178,183,176,249,189,184,255,185,190,189,255,189,177,170,189,250,246,178,183,200,255,181,178,180,174,255,170,246,171,184,189,189,181,174,204,251,192,177,184,170,200,255,171,190,172,180,184,199,248,183,184,255,174,182,185,189,194,249,171,184,189,189,181,174,188,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0]},{"919847":[107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4]},{"920088":[254,110,0,254,107,4,251,188,184,182,174,189,177,178,183,176,255,178,188,248,182,178,188,188,178,183,176,204,249,189,177,174,255,171,178,176,255,180,174,194,198,251]},{"920131":[110,0,254,107,4,251,254,110,0,254,107,4,251,192,177,184,170,199,255,178,255,172,170,183,248,189,170,181,180,255,170,176,170,178,183,199,251,194,170,183,180,255,184,183,255,189,177,174,248,185,178,189,172,177,175,184,187,180,255,178,183,249,189,177,174,255,172,174,183,189,174,187]},{"920204":[184,175,250]},{"920208":[189,184,192,183,200,255,194,170,255,177,174,170,187,173,246,178,189,255,177,174,187,174,205,251,176,170,183,184,183,255,178,188,255,188,190,172,177,248,170,255,173,178,183,176,190,188,200,255,183,184,249,184,183,174,255,181,178,180,174,188,255,177,178,182,200,250,246,194,170,255,177,174,170,187,173,255,178,189,246,177,174,187,174,205,251,189,177,174,187,174,255,178,188,255,170,248,185,184,187,189,170,181]},{"920311":[183,174,170,187,249,189,177,174,255,181,184,188,189,250,246,192,184,184,173,188,200,255,194,170,246,177,174,170,187,173,255,178,189,255,177,174,187,174,205,251,190,188,174,255,171,184,182,171,188,255,189,184,248,186,190,178,172,180,181,194,255,180,178,181,181,249,189,177,174,255,177,178,183,184,193,200,255,194,170,250,246,177,174,170,187,173,255,178,189,255,177,174,187,174,205,251,178,255,172,170,183,255,171,187,174,170,189,177,174,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,162,160]},{"920439":[187,190,185,174,174,188,205,248,165]},{"920449":[170,187,187,184,192,188,205,249,192,178,183,255,187,190,185,174,174,188,199,250,246,192,170,183,189,255,189,184,255,185,181,170,194,198,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,181,174,189,216,188,255,173,184,255,189,177,178,188,199,251,192,177,174,187,174,255,170,187,174,255,194,184,190,248,176,184,178,183,176,198,249,188,189,187,170,178,176,177,189,255,190,185,199,251,180,174,174,185,255,185,181,170,194,178,183,176,198,248,255,255,228,255,194,174,188,249,255,255,255,255,183,184,254,104,251,201,192,178,188,177,178,183,176,255,185,184,183,173,201,248,249,255,184,183,255,191,170,172,170,189,178,184,183,251,185,178,172,180,255,188,184,182,174,189,177,178,183,176,248,189,184,255,189,177,187,184,192,255,178,183,205,254,105,251,194,184,190,255,189,184,188,188,255,189,177,178,188,198,248,255,255,228,255,194,190,185,249,255,255,255,255,192,187,184,183,176,254,104,251,194,184,190,216,187,174,255,177,184,183,174,188,189,200,248,188,184,255,178,216,181,181,255,176,178,191,174,249,194,184,190]},{"920707":[170]},{"920709":[185,187,174,188,174,183,189,205,251,194,184,190,255,188,190,187,174,198,248,255,255,228,255,184,177,255,194,174,170,177,249,255,255,255,255,190,182,254,104,251,192,174,181,181,200,255,178,255,173,184,183,216,189,248,192,170,183,189,255,178,189,200,255,188,184,249,189,170,180,174,255,178,189,255,171,170,172,180,205,251,254,110,0,254,107,4,251,178]},{"920798":[176,187,170,183,189,255,194,184,190,248,189,177,174,255,170,171,178,181,178,189,194,255,189,184,249,171,181,184,172,180,250,246,175,178,187,174,171,170,181,181,188,205,246,173,184,183,216,189,255,181,184,188,174,246,189,177,178,188,255,189,184,255,170,250,246,185,178,180,178,189,199,251,188,184,200,255,192,184,190,181,173,183,216,189,248,178,189,255,171,174,255,183,178,172,174,255,189,184,249,180,178,181,181,255,176,170,183,184,183,198,250]},{"920910":[189,177,174,188,174,255,188,177,184,190,181,173,246,177,174,181,185,255,178,183,255,189,177,174,246,175,178,183,170,181,255,185,177,170,188,174,205,251,171,184,189,189,181,174,255,175,178,181,181,174,173,199,248,182,184,183,174,194,255,188,170,191,174,173,199,251,189,177,170,183,180,255,194,184,190,255,175,184,187,248,189,177,174,255,188,192,184,187,173,200,249,177,174,187,174,255,178,188,255,170,250,246,188,189,178,172,180,255,184,175,246,171,190,189,189,174,187,205,251,177,170,185,185,178,183,174,188,188,255,190,185,199,248,194,184,190,255,170,187,174,255,183,184,192,249,254,108,1,254,108,0,255,177,170,185,185,194,199,251,194,184,190,187,255,192,178,188,177,198,248,255,255,228,182,184,187,174,255,171,184,182,171,188,249,255,255,255,182,184,187,174,255,170,187,187,184,192,188,254,104,251,192,184,184,201,177,184,184,199,248,194,184,190,255,172,170,183,255,183,184,192,249,172,170,187,187,194,255,254,108,1,254,108,0,255,171,184,182,171,188,251,192,184,184,201,177,184,184,199,248,194,184,190,255,172,170,183,255,183,184,192,249,177,184,181,173,255,254,108,1,254,108,0,255,170,187,187,184,192,188,251,194,184,190,255,177,170,191,174,255,170,181,181,255,178,248,172,170,183,255,176,178,191,174,255,194,184,190,200,249,177,174,187,174,255,170,187,174,255,194,184,190,187,250,246,187,190,185,174,174,188,255,171,170,172,180,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,181,178,175,174,198,255,181,184,191,174,198,248,177,170,185,185,178,183,174,188,188,198,255,189,177,174,249,186,190,174,188,189,178,184,183,255,194,184,190,250,246,188,177,184,190,181,173,255,187,174,170,181,181,194,246,170,188,180,255,178,188,255,255,192,170,188,246,189,177,178,188,255,176,174,183,174,187,170,189,174,173,250,246,171,194,255,188,189,184,184,185,188,255,170,181,190,246,184,187,255,188,189,184,184,185,188,255,179,174,189,198,251,194,184,190,255,188,177,184,190,181,173,248,185,181,170,194,255,189,177,170,189,249,175,181,190,189,174,255,175,184,187,255,189,177,174,250,246,192,174,170,189,177,174,187,191,170,183,174,200]},{"921465":[172,170,190,188,174,255,187,174,170,188,184,183,188,205,251,194,184,190,255,188,177,184,190,181,173,248,185,181,170,194,255,189,177,170,189,249,175,181,190,189,174,255,175,184,187,255,189,177,174,250,246,192,174,170,189,177,174,187,191,170,183,174,200,246,172,170,190,188,174,255,187,174,170,188,184,183,188,205,251,181,178,175,174,198,255,181,184,191,174,198,248,177,170,185,185,178,183,174,188,188,198,255,189,177,174,249,186,190,174,188,189,178,184,183,255,194,184,190,250,246,188,177,184,190,181,173,255,187,174,170,181,181,194,246,170,188,180,255,178,188,255,255,192,170,188,246,189,177,178,188,255,176,174,183,174,187,170,189,174,173,250,246,171,194,255,188,189,184,184,185,188,255,170,181,190,246,184,187,255,188,189,184,184,185,188,255,179,174,189,198,251,189,177,178,188,255,178,188,248,172,177,187,178,188,189,184,188,216,255,177,190,189,205,249,250,246,177,174,216,188,255,184,190,189,200,246,188,174,170,187,172,177,178,183,176,255,175,184,187,246,170,255,171,184,192,205,251,177,178,200,255,173,184,255,194,184,190,248,180,183,184,192,255,191,174,174,189,184,187,185,198,249,250,246,194,184,190,255,187,174,170,181,181,194,246,188,177,184,190,181,173,205,255,170,183,173,246,170,181,181,255,189,177,174,255,184,189,177,174,187,250,246,176,187,174,170,189,255,176,190,194,188,255,192,177,184,246,182,170,173,174,255,189,177,178,188]},{"921802":[185,184,188,188,178,171,181,174,205,250,246,176,184,255,189,177,170,183,180,255,189,177,174,182,205,246,246,250,246,178,175,255,194,184,190,255,172,170,183,246,172,170,189,172,177,255,189,177,174,182,204,251,192,177,194,255,170,187,174,255,194,184,190,248,187,174,170,173,178,183,176,255,189,177,178,188,249,188,178,176,183,198,255,187,190,183,199,199,199,251,194,184,190,255,183,174,174,173,255,172,170,185,174,200,248,171,190,189,255,183,184,189,249,177,184,184,180,188,177,184,189,251,189,184,188,188,255,187,184,172,180,188,248,189,184,188,188,255,178,189,174,182,188,249,189,184,188,188,255,172,184,184,180,178,174,188,251,224,255,188,180,190,181,181,255,192,184,184,173,188,248,249,225,255,188,189,174,191,174,216,188,255,189,184,192,183,251,248,226,255,180,170,187,180,170,189,188,255,172,170,191,174,251,248,226,255,173,170,187,180]},{"922013":[185,170,181,170,172,174,251,248,227,255,171,184,182,171,255,188,177,184,185,185,174,251,248,227,255,182,178,188,174,187,194,255,182,178,187,174,249,255,183,184,255,192,170,194,255,178,183,205,250,246,255,183,184,255,192,170,194,255,184,190,189,205,251,177,170,191,174,255,170,255,189,187,190,181,178,174,248,170,192,174,188,184,182,174,255,173,170,194,199,251,192,170,189,174,187,175,170,181,181,248,190,185,255,170,177,174,170,173,249,182,170,180,174,255,192,178,188,177,174,188,251,226,224,255,177,170,191,174,255,194,184,190,248,182,174,189,255,192,184,174,175,190,181,249,178,180,174,198,251,181,184,184,180,178,183,176,255,175,184,187,255,170,248,185,187,178,183,172,174,188,188,198,255,181,184,184,180,249,173,184,192,183,188,189,170,178,187,188,205,251,183,184,255,181,184,183,180,188,248,170,181,181,184,192,174,173,199,251,254,107,2,194,184,190,255,183,174,174,173,255,170,255,171,184,192,248,189,184,255,176,174,189,255,185,170,188,189,249,189,177,174,255,187,174,173,250,246,174,194,174,176,184,187,174,205,255,173,174,187,185,194,251,254,107,2,178,175,255,194,184,190,255,175,178,183,173,255,170,248,188,177,178,183,194,255,171,170,181,181,200,249,194,184,190,255,172,170,183,255,171,174,255,194,184,190,250,246,178,183,255,189,177,174,255,173,170,187,180,246,192,184,187,181,173,205,251,221,223,223,255,221,223,223,255,221,223,223,248,255,222,255,221,223,223,221,255,222,249,221,223,223]},{"922365":[222,221,221,222,255,223,223,222,251,170,255,189,174,188,189,255,184,175,248,188,189,187,174,183,176,189,177,255,255,178,175,249,194,184,190,255,177,170,191,174,255,163,250,246,185,174,183,173,170,183,189,188,200,255,178,216,182,246,194,184,190,187,188,205,251,254,107,2,190,188,174,255,189,177,174,248,182,178,187,187,184,187]},{"922448":[255,184,187,255,189,177,174,249,177,184,184,180,188,177,184,189,255,170,183,173,250,246,177,170,182,182,174,187,200,255,189,184,255,176,174,189,246,189,184,255,189,184,192,174,187,255,184,175,246,177,174,187,170,199,251,254,107,2,173,187,170,178,183]},{"922512":[189,177,174,248,175,181,184,184,173,176,170,189,174,255,189,184,249,187,170,178,188,174,255,189,177,174,250,246,192,170,189,174,187,255,177,174,187,174,199,251,188,174,172,184,183,173,170,187,194,248,189,184,190,187,183,170,182,174,183,189,249,192,178,183,183,174,187,188,250,254,121,45,246,255,255,206,206,206,162,160,161,167,206,206,206,246,170,255,255,195,170,174,183,251,254,107,2,181,178,176,177,189,178,183,176,255,164,248,189,184,187,172,177,174,188,255,192,178,181,181,249,184,185,174,183,255,194,184,190,187,255,192,170,194,250,246,175,184,187,192,170,187,173,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,107,2,184,183,181,194,255,170,187,187,184,192,188,248,192,178,181,181,255,175,178,183,178,188,177,249,184,175,175,255,170]},{"922704":[171,181,190,174,250,246,176,170,183,184,183,200,255,184,187,246,187,174,170,181,181,194,246,192,174,181,181,201,189,178,182,174,173,250,246,188,185,178,183,188,255,178,183,255,185,177,170,188,174,246,164,205,251,254,107,2,189,177,178,188,255,178,188,255,170,248,175,190,183,183,194,255,181,184,184,180,178,183,176,249,174,183,174,182,178,195,174,187,251,254,107,2,189,177,178,183,176,188,255,172,170,183]},{"922807":[171,174,248,180,183,184,172,180,174,173,255,173,184,192,183,200,249,178,175,255,194,184,190,255,175,170,183,172,194,250,246,194,184,190,187,188,174,181,175,255,170,246,173,170,188,177,178,183,176,255,173,190,173,174,205,251,254,107,2,194,184,190,255,172,170,183,248,187,174,175,181,174,172,189,249,170,176,170,177,183,178,182,216,188,250,246,174,183,174,187,176,194,255,192,178,189,177,246,188,192,184,187,173,200,255,171,190,176,201,183,174,189,246,184,187,255,177,170,182,182,174,187,205]},{"922931":[254,107,2,170,181,181,255,187,178,176,177,189,255,188,189,184,185,248,172,184,181,181,170,171,184,187,170,189,174,249,170,183,173,255,181,178,188,189,174,183,250,246,178,172,174,255,178,188,255,171,170,172,180,246,192,178,189,177,255,182,194,255,171,187,170,183,173,246,183,174,192,255,178,183,191,174,183,189,178,184,183,205,251,254,107,2,194,184,190,255,188,177,170,181,181,255,183,184,189,248,185,170,188,188,204,255,192,178,189,177,184,190,189,249,189,177,174,255,187,174,173,255,172,170,183,174,205,251,254,107,2,194,184,190,255,172,170,183,255,190,188,174,248,175,178,187,174,255,187,184,173,255,184,187,249,171,184,182,171,184,188,255,189,184,250,246,185,170,188,188,205,251,254,107,2,180,183,184,172,180,255,216,174,182,255,173,184,192,183,248,170,183,173,255,189,177,174,183,255,171,184,182,171,249,189,177,174,182,255,173,174,170,173,205,251,254,107,2,189,177,178,188,255,178,188,255,170,255,171,170,173,248,185,181,170,172,174,200,255,192,178,189,177,255,170,249,176,190,194,255,192,177,184,255,192,178,181,181,250,246,182,170,180,174,255,194,184,190,255,175,170,181,181,204,246,246,250,246,170]},{"923211":[181,184,189,205]},{"923216":[187,170,183,173,184,182,178,195,174,187,248,189,184,190,187,183,170,182,174,183,189,249,192,178,183,183,174,187,188,250,254,121]},{"923249":[246,255,255,206,206,206,162,160,161,167,206,206,206,246,170,255,255,170,179,183,174,171,161,167,164,246,188,255,255,170,179,183,174,171,161,167,164,251,172,170,190,176,177,189]},{"923294":[170,255,171,174,174,248,255,255,228,255,180,174,174,185,249,255,255,255,255,187,174,181,174,170,188,174,254,104,251,172,170,190,176,177,189,255,175,170,178,187,194,199,248,255,255,228,255,180,174,174,185,249,255,255,255,255,187,174,181,174,170,188,174,254,104,251,192,177,184,170,200,255,171,190,172,180,184,199,248,183,184,255,174,182,185,189,194,249,171,184,189,189,181,174,188,205,251,194,184,190,187,255,189,178,182,174,255,192,170,188,248,254,108,3,254,108,2,255,182,178,183,255,254,108,1,254,108,0,255,188,174,172,205,251,194,184,190,255,177,170,191,174,255,161,165,248,188,174,172,184,183,173,188,200,249,176,184,204,255,176,184,204,255,176,184,204,251,183,178,172,174,199,248,194,184,190,255,172,170,183,255,177,170,191,174,249,189,177,178,188,255,189,187,170,188,177,199,251,189,184,184,255,188,181,184,192,199,248,178,255,180,174,174,185,255,182,194,249,185,187,174,172,178,184,190,188,199,251,194,184,190,255,170,181,187,174,170,173,194,248,177,170,191,174,255,194,184,190,187,249,185,187,178,195,174,200,255,173,178,183,176,190,188,199,251,189,177,184,190,176,177,189,255,194,184,190,248,172,184,190,181,173,255,188,183,174,170,180,249,178,183,200,255,174,177,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,175,178,183,174,199,255,178,255,173,178,173,183,216,189,248,192,170,183,189,255,194,184,190,187,249,182,184,183,174,194,255,170,183,194,192,170,194,205,251,173,190,173,174,199,255,194,184,190,248,170,181,187,174,170,173,194,255,177,170,191,174,249,178,189,205,251,172,184,184,181,199,255,170,255,171,174,174,199,248,177,174,187,174,216,188,255,161,160,160,249,187,190,185,174,174,188,205,251,192,177,184,170,199,255,170,255,175,178,188,177,199,248,194,184,190,255,192,170,181,180,174,173,249,189,177,178,188,255,170,181,181,255,189,177,174,250,246,192,170,194,255,177,174,187,174,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,177,200,255,172,184,182,174,255,171,194,248,170,183,194,255,189,178,182,174,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,178,255,181,184,188,189,255,182,194,248,175,187,178,174,183,173,205,255,177,174,181,185,249,182,174,255,175,178,183,173,255,177,178,182,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,182,174,189,177,178,183,176,255,189,177,178,188,248]},{"923889":[187,174,172,178,184,190,188,255,189,170,180,174,188,249,189,178,182,174,204,255,172,184,182,174,250,246,171,170,172,180,255,181,170,189,174,187,205,251,189,177,170,183,180,188,199,248,249,189,177,170,183,180,188,199,251,173,174,187,183,189,255,189,170,180,174,255,174,187,248,179,174,187,171,188,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,177,255,178,255,188,174,174,200,255,183,184,189,248,176,184,184,173,255,174,183,184,190,176,177,249,175,184,187,255,194,184,190,204,255,175,178,183,174,199,251,188,189,178,181,181,255,177,170,191,174,183,216,189,248,175,184,190,183,173,255,189,177,174,249,178,189,174,182,198,255,173,178,176,255,178,183,250,246,189,177,174,255,181,178,176,177,189,246,192,184,187,181,173,255,170,187,184,190,183,173,246,177,174,187,174,200,255,173,178,183,176,190,188,199,251,188,184,255,178,255,176,170,191,174,255,194,184,190,248,170,183,255,178,189,174,182,200,255,170,183,173,249,194,184,190,216,187,174,255,188,189,178,181,181,250,246,177,174,187,174,205,246,246,250,246,246,246,250,246,178,255,182,174,170,183,200]},{"924157":[192,174,255,172,170,183,246,188,178,189,255,177,174,187,174,255,170,183,173,246,188,189,170,187,174,255,170,189,255,174,170,172,177,250,246,184,189,177,174,187,200,255,178,175,255,194,184,190,246,181,178,180,174,204,246,250,246,246,246,250,246,246,246,250,246,175,178,183,174,200,255,178,255,176,190,174,188,188,246,194,184,190,255,188,177,184,190,181,173,246,179,190,188,189,255,176,184,205,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174,255,171,184,184,180,249,184,185,174,183,188,255,189,177,174,250,246,173,174,188,174,187,189,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,183,184,189,177,178,183,176,249,173,184,178,183,176,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,178,216,182,249,172,177,174,170,185,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,170,182,255,178,249,172,177,174,170,185,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,195,184,187,170,249,181,178,191,174,188,255,170,189,255,189,177,174,250,246,174,183,173,255,184,175,255,189,177,174,246,187,178,191,174,187,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174,255,172,170,185,174,249,172,170,183,255,185,170,188,188,250,246,189,177,187,184,190,176,177,255,189,177,174,246,171,170,187,187,178,174,187,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,188,185,178,183,200,249,177,170,182,182,174,187,200,255,184,187,255,183,174,189,250,246,189,184,255,177,190,187,189,246,170,176,170,177,183,178,182,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,172,170,183,249,179,190,182,185,255,178,183,255,189,177,174,250,246,192,174,181,181,255,171,194,255,189,177,174,246,171,181,170,172,180,188,182,178,189,177,188,251,254,109,1,189,177,174,255,171,181,170,172,180,255,172,170,189,188,248,170,187,174]},{"924675":[177,190,183,176,187,194,200,249,172,184,182,174,255,171,170,172,180,255,192,178,189,177,250,246,187,190,185,174,174,188,251,254,109,1,192,174,181,172,184,182,174,255,189,184,255,189,177,174,248,175,184,187,189,190,183,174,249,188,177,184,185,185,174,199,250,246,175,170,183,172,194,255,170,255,187,174,170,173,198,246,255,255,228,178,255,182,190,188,189,255,180,183,184,192,246,255,255,255,183,174,176,170,189,178,191,174,254,104,251,254,109,1,175,184,187,255,254,108,0,254,108,1,255,187,190,185,174,174,188,248,178,189,255,178,188,255,173,184,183,174,205,249,171,174,255,176,184,183,174,199,251,254,109,1,192,174,181,181,255,189,177,174,183,200,255,192,177,194,248,173,178,173,255,194,184,190,255,174,191,174,183,249,172,184,182,174,255,178,183,255,177,174,187,174,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,192,177,194,255,194,184,190,249,173,184,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,185,170,183,173,170,249,172,187,170,172,180,174,187,188,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174]},{"924968":[182,178,188,188,178,183,176,250,246,171,181,170,172,180,188,182,178,189,177,255,178,188,246,188,184,190,189,177,255,184,175,255,189,177,174,246,191,178,181,181,170,176,174,255,184,175,250,246,184,190,189,172,170,188,189,188]},{"925025":[254,109]},{"925028":[171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,184,185,174,183]},{"925052":[172,177,174,188,189,188,255,189,184,255,176,174,189,250,246,188,189,190,175,175,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,172,170,183,249,171,190,194,255,170,255,183,174,192,255,171,184,182,171,250,246,170,189,255,189,177,174,255,171,184,182,171,246,188,177,184,185,185,174,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,171,178,176,249,171,184,182,171,188,255,171,181,184,192,255,190,185,250,246,172,187,170,172,180,174,173,255,192,170,181,181,188,246,178,183,255,185,194,187,170,182,178,173,188,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,183,174,174,173,249,170,181,181,255,189,177,174,250,246,172,187,194,188,189,170,181,188,255,189,184,246,184,185,174,183,255,176,170,183,184,183,216,188,246,189,184,192,174,187,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,188,178,181,191,174,187,249,170,187,187,184,192,188,255,192,178,181,181,250,246,173,174,175,174,170,189,255,176,170,183,184,183,246,178,183,255,177,178,188,255,175,178,183,170,181,246,185,177,170,188,174,251,175,184,187,255,162,160,255,187,190,185,174,174,188,248,178,216,181,181,255,189,174,181,181,255,194,184,190,249,188,184,182,174,189,177,178,183,176,198,250,246,177,184,192,255,170,171,184,190,189,255,178,189,198,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,178,255,184,183,172,174,255,192,170,188,255,170,248,189,174,170,255,180,174,189,189,181,174,200,249,171,190,189,255,189,177,174,183,255,178,250,246,182,184,191,174,173,255,190,185,255,178,183,246,189,177,174,255,192,184,187,181,173,200,255,170,183,173,246,183,184,192,255,194,184,190,255,172,170,183,250,246,188,174,174,255,182,174,255,170,188,246,189,177,178,188,205,255,182,170,180,174,188,246,194,184,190,255,192,184,183,173,174,187,205,250,246,192,177,170,189,255,178,255,172,184,190,181,173,246,171,174,255,183,174,193,189,255,189,178,182,174,205,251,189,177,174,183,255,176,184,255,170,192,170,194,199,251,189,177,174,187,174,255,178,188,255,170,248,189,177,178,174,175,255,178,183,255,189,177,174,249,173,174,188,174,187,189,200,255,177,174,255,172,170,183,250,246,184,185,174,183,255,172,187,174,174,185,194,246,172,177,174,188,189,188,255,189,177,170,189,246,175,184,181,181,184,192,255,194,184,190,205,250,246,171,190,189,255,183,184,192,255,189,177,170,189,246,192,174,255,177,170,191,174,255,189,177,170,189,246,184,190,189,255,184,175,255,189,177,174,250,246,192,170,194,200,255,173,184,255,194,184,190,246,181,178,180,174,255,182,194,255,177,170,178,187,198,246,178,216,191,174,255,188,185,174,183,189,250,246,174,184,183,188,255,176,174,189,189,178,183,176,246,178,189,255,189,177,178,188,255,192,170,194,205,251,192,178,189,177,255,172,187,194,188,189,170,181,188,248,165,255,166,200,255,194,184,190,255,172,170,183,249,175,178,183,173,255,170,255,176,187,174,170,189,250,246,175,170,178,187,194,255,178,183,255,189,177,174,246,185,194,187,170,182,178,173,205,246,250,246,175,181,184,182,185,255,175,181,184,182,185,200,246,192,177,178,195,195,181,174,255,192,177,184,182,185,251,170,181,181,255,178,255,172,170,183,255,188,170,194,248,178,188,255,189,177,170,189,255,182,194,249,181,178,175,174,255,178,188,255,185,187,174,189,189,194,250,246,185,181,170,178,183,200,246,178,255,181,178,180,174,246,192,170,189,172,177,178,183,216,255,189,177,174,250,246,185,190,173,173,181,174,188,255,176,170,189,177,174,187,246]},{"925930":[170,178,183,200,246,170,183,173,255,170,181,181,255,178,255,172,170,183,250,246,173,184,255,178,188,255,179,190,188,189,246,185,184,190,187,255,188,184,182,174,255,189,174,170,246,175,184,187]},{"925979":[189,192,184,200,250,246,170,183,173,255,188,185,174,170,180,255,182,194,246,185,184,178,183,189,255,184,175,255,191,178,174,192,246,171,190,189,255,178,189,216,188,255,183,184,189,250,246,188,170,183,174,200,246,178,189,216,188,255,183,184,189]},{"926041":[188,170,183,174,251,254,109,1,178,216,182,255,188,178,172,180,199,255,188,177,184,192]},{"926064":[182,174,255,170,255,171,184,189,189,181,174,200,249,176,174,189,255,188,184,182,174,189,177,178,183,176,199,251,254,110,0,254,107,4,251,254,109,1,181,174,170,191,174,255,182,174,255,170,181,184,183,174,248,178,216,182,255,188,178,172,180,205,255,194,184,190,249,177,170,191,174,255,182,194,255,178,189,174,182,205,251,204,204,204,204,204,204,204,204,204,251,192,177,194,204,204,204,204,204,251,178,255,192,170,188,255,170,255,189,177,178,174,175]},{"926178":[248,178,255,184,185,174,183,255,185,190,187,185,181,174,249,172,177,174,188,189,188,199,250,246,180,174,174,185]},{"926207":[188,174,172,187,174,189,198,246,255,255,228,255,188,190,187,174,255,189,177,178,183,176,246,255,255,255,255,183,174,191,174,187,199,254,104,251,172,184,184,181,200,255,171,187,178,183,176,255,182,174,248,170,183,194,255,185,190,187,185,181,174,249,172,177,174,188,189,188,255,194,184,190,250,246,175,178,183,173,205,251,194,184,190,255,189,174,181,181,248,170,183,194,184,183,174,255,170,183,173,255,178,249,192,178,181,181,255,176,178,191,174,255,194,184,190,250,246,188,190,172,177,255,170,255,185,178,183,172,177,199,251,171,187,178,183,176,255,172,177,174,188,189,188,205,248,178,189,216,188,255,170,255,188,174,172,187,174,189,249,189,184,255,174,191,174,187,194,184,183,174,205,251,222,222,255,222,221,223,222,223,255,223,221,223,248,223,221,221,255,223,221,221,223,222]},{"926402":[223,223,221,222,223,255,221,223,222,222,221,251,172,170,183,255,194,184,190,255,182,170,180,174,248,189,177,178,183,176,188,255,175,170,181,181,249,184,190,189,255,184,175,255,189,177,174,250,246,188,180,194,198,255,192,178,189,177,255,189,177,174,246,182,170,188,189,174,187,255,188,192,184,187,173,200,246,194,184,190,255,172,170,183,199,251,172,170,183,255,194,184,190,255,182,170,180,174,248,189,177,178,183,176,188,255,175,170,181,181,249,184,190,189,255,184,175,255,189,177,174,250,246,188,180,194,198,255,192,178,189,177,255,189,177,174,246,182,170,188,189,174,187,255,188,192,184,187,173,200,246,194,184,190,255,172,170,183,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,119,7,252,3,254,107,2,254,103,255,174,185,178,188,184,173,174,255,255,178,178,178,255,254,120,3,248,255,170,255,181,178,183,180,255,189,184,255,255,255,255,249,255,255,255,189,177,174,255,185,170,188,189,255,255,255,254,120,3,246,255,255,187,170,183,173,184,182,178,195,174,187,254,120,3,246,170,175,189,174,187,255,182,184,188,189,181,194,246,173,178,188,187,174,176,170,187,173,178,183,176,246,192,177,170,189,255,177,170,185,185,174,183,174,173,246,178,183,255,189,177,174,255,175,178,187,188,189,246,189,192,184,255,176,170,182,174,188,205,254,120,3,246,181,178,183,180,255,170,192,170,180,174,183,188,246,189,184,255,177,178,188,255,190,183,172,181,174,246,181,174,170,191,178,183,176,255,189,177,174,246,177,184,190,188,174,205,254,120,3,246,177,174,255,179,190,188,189,255,187,190,183,188]},{"926784":[184,190,189,255,189,177,174,255,173,184,184,187,200,254,120,3,246,178,183,189,184,255,189,177,174,255,187,170,178,183,194,246,183,178,176,177,189,205,254,120,3,254,103,254,103,246,176,170,183,184,183,255,177,170,188,246,182,184,191,174,173,255,170,187,184,190,183,173]},{"926853":[170,181,181,255,189,177,174,255,178,189,174,182,188,246,178,183,255,177,194,187,190,181,174,205,254,120,7,246,194,184,190,255,192,178,181,181,255,177,170,191,174,246,189,184,255,175,178,183,173,255,170,181,181,246,189,177,174,255,178,189,174,182,188,246,183,174,172,174,188,188,170,187,194,255,189,184,246,171,174,170,189,255,176,170,183,184,183,205,254,120,7,246,189,177,178,188,255,178,188,255,194,184,190,187,246,172,177,170,183,172,174,255,189,184,255,171,174,255,170,246,177,174,187,184,205,254,120,3,254,103,254,103,246,194,184,190,255,182,190,188,189,255,176,174,189,246,189,177,174,255,167,255,172,187,194,188,189,170,181,188,246,189,184,255,171,174,170,189,255,176,170,183,184,183,205,254,120,9,254,103,254,103,251,254,107,2,254,119,7,252,3,247,181,184,184,180,255,170,189,255,189,177,178,188,248,188,189,170,181,175,184,188,255,184,183,255,189,177,174,249,189,177,187,184,183,174,205,251,254,107,2,254,119,7,252,3,247,178,189,255,178,188,255,194,184,190,187,248,189,178,182,174,255,189,184,255,188,177,178,183,174,199,251,254,107,2,254,119,7,252,3,247,170,181,188,184,200,255,194,184,190,255,183,174,174,173,248,189,184,255,173,174,175,174,170,189,255,189,177,178,188,249,176,190,194,199]},{"927160":[254,110,0,254,107,4,251,163,160,255,171,184,182,171,188,255,175,184,187,248,161,160,160,255,187,190,185,174,174,188,205,249,176,184,184,173,255,173,174,170,181,188,255,170,181,181,250,246,173,170,194,199,251,163,160,255,171,184,182,171,188,255,175,184,187,248,161,160,160,255,187,190,185,174,174,188,200,249,161,160,160,255,187,190,185,174,174,188,255,161,250,246,171,178,176,255,171,184,182,171,205,255,176,184,184,173,246,173,174,170,181,188,255,170,181,181,255,173,170,194,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,177,174,177,200,255,176,184,184,173,255,181,190,172,180,248,176,174,189,189,178,183,176,255,178,183,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,185,175,175,189,205,255,178,255,177,170,191,174,248,183,184,255,187,174,170,188,184,183,255,189,184,249,177,170,183,176,205,255,188,174,174,255,194,170,199,251,183,184,255,183,184,255,183,184,255,183,184,248,183,184,199,255,192,174,255,188,177,184,190,181,173,249,185,181,170,194,255,171,194,255,182,194,250,246,187,190,181,174,188,199,246,176,184,184,173,171,194,174,204,251,254,110,0,254,107,4,251,170,170,170,170,177,177,177,177,206,199,248,188,201,188,184,255,171,187,178,176,177,189,206,199,251,254,110,0,254,107,4,251,178,255,184,183,172,174,255,177,170,173,255,170,248,175,178,188,177,255,173,178,183,183,174,187,205,255,178,249,188,189,178,181,181,255,187,174,182,174,182,171,174,187,250,246,178,189,255,189,184,255,189,177,178,188,246,173,170,194,205,251,173,184,255,194,184,190,248,187,174,182,174,182,171,174,187,255,192,177,174,183,249,178,255,192,170,188,255,194,184,190,183,176,198,250,246,246,178,255,188,190,187,174,255,173,184,183,216,189,205,251,188,184,200,255,178,216,191,174,255,171,174,174,183,248,181,178,191,178,183,176,255,178,183,255,189,177,178,188,249,172,170,191,174,255,175,184,187,250,246,194,174,170,187,188,200,255,170,183,173,255,194,184,190,246,189,177,178,183,180,255,194,184,190,255,172,170,183,246,179,190,188,189,255,172,184,182,174,250,246,170,181,184,183,176,255,170,183,173,255,171,184,182,171,246,184,185,174,183,255,192,170,181,181,188,198,251,184,183,172,174,200,255,178,255,175,170,187,189,174,173,248,178,183,255,189,177,178,188,255,172,170,191,174,249,188,184,255,171,170,173,255,170,181,181,255,189,177,174,250]},{"927744":[179,170,195,195,255,177,170,183,173,188,246,176,190,194,188,255,187,170,183,255,170,192,170,194,246,170,183,173,255,177,178,173,255,178,183,255,189,177,174,250,246,188,170,183,173,205,251,185,170,183,173,170,188,255,170,187,174,248,191,174,187,194,255,191,178,172,178,184,190,188,249,170,183,178,182,170,181,188,205,255,183,174,191,174,187,250,246,175,184,187,176,174,189,204,246,246,250,246,246,246,178,255,183,174,191,174,187,255,192,178,181,181,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,183,174,255,184,175,255,190,188,248,170,181,192,170,194,188,255,181,178,174,188,205,251,184,183,174,255,184,175,255,190,188,248,170,181,192,170,194,188,255,189,174,181,181,188,249,189,177,174,255,189,187,190,189,177,205,251,184,183,174,255,184,175,255,190,188,248,181,178,180,174,188,255,185,174,170,183,190,189,249,171,190,189,189,174,187,205,251,178,255,192,170,181,181,174,173,255,184,175,175,248,182,194,255,171,187,184,189,177,174,187,255,181,174,184,249,250,246,192,177,170,189,255,170,255,173,178,183,176,190,188,205,251,183,184,192,255,178,255,188,177,184,190,181,173,248,185,187,184,171,170,171,181,194,255,189,170,181,180,249,189,184,255,177,178,182,204,251,173,178,173,255,194,184,190,255,172,184,182,174,248,175,187,184,182,255,182,194,249,171,187,184,189,177,174,187,188,255,187,184,184,182,198,250,246,246,170,187,174,255,192,174,255,172,184,184,181,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107]},{"928188":[251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,175,178,183,174,199,248,176,184,255,176,174,189,255,188,184,182,174,249,182,184,187,174]},{"928247":[182,184,183,174,194,250,246,175,178,187,188,189,205,251,254,110,0,254,107,4,251,182,194,255,176,187,170,183,173,185,170]},{"928279":[178,188,248,184,191,174,187,255,178,183,255,189,177,174,249,174,170,188,189,205,255,178,216,182,255,171,170,173,250,246,192,178,189,177,246,173,178,187,174,172,189,178,184,183,188,205,246,178,216,181,181,255,182,170,187,180]},{"928336":[194,184,190,187,250,246,182,170,185,205,255,171,174,188,189,255,184,175,246,181,190,172,180,199,254,121,45,251,188,184,182,174,173,170,194,255,178,216,181,181,248,171,174,255,178,183,255,170,255,177,178,176,177,249,188,172,177,184,184,181,255,171,170,183,173,199,251,173,178,173,255,194,184,190,255,180,183,184,192]},{"928416":[248,249,250,246,170,255,189,187,174,174,246,189,194,185,178,172,170,181,181,194,255,177,170,188,246,182,170,183,194,255,188,174,172,184,183,173,170,187,194,250,246,171,187,170,183,172,177,174,188,246,188,190,185,185,184,187,189,174,173,246,172,181,174,170,187,255,184,175,255,189,177,174,250,246,176,187,184,190,183,173,255,171,194,255,189,177,174,246,189,187,190,183,180,205]},{"928511":[189,177,178,188,246,189,187,190,183,180,250,246,189,194,185,178,172,170,181,181,194,246,172,184,183,189,170,178,183,188,255,192,184,184,173,194,246,189,178,188,188,190,174,255,175,184,187,250,246,188,189,187,174,183,176,189,177,200,255,170,183,173,246,191,170,188,172,190,181,170,187,246,189,178,188,188,190,174,255,189,184,250,246,172,170,187,187,194,246,182,170,189,174,187,178,170,181,188,255,175,187,184,182,246,184,183,174,255,185,170,187,189,255,184,175,250,246,189,177,174,255,189,187,174,174,255,189,184,246,170,183,184,189,177,174,187,205,251,248,201,192,178,188,177,178,183,176]},{"928659":[185,184,183,173,201,249,250,246,189,177,187,184,192]},{"928673":[178,189,174,182,255,178,183,198,246,255,255,228,255,194,174,188,177,246,255,255,255,255,183,184,254,104,251]},{"928701":[255,255,255,188,189,184,185,255,178,189,199,251,248,255,255,175,178,183,174,255,189,177,174,183,199,251,184,180,170,194,205,255,177,174,187,174,216,188,248,194,184,190,187,255,178,189,174,182,249,171,170,172,180,200,255,172,170,190,188,174,255,178,250,246,172,170,183,216,189,255,190,188,174,255,178,189,205,246,178,216,182,255,188,189,190,172,180,255,178,183,246,189,177,178,188,255,175,184,190,183,189,170,178,183,205,251,177,184,192,255,182,170,183,194,198,248,255]},{"928819":[228,254,108,1,254,108,0,255,187,190,185,174,174,188,249,255,255,255,254,108,3,254,108,2,255,187,190,185,174,174,188,254,104,251,178,255,181,178,180,174,255,194,184,190]},{"928864":[255,188,184,248,177,174,187,174,216,188,255,170,255,189,177,178,183,176,249,194,184,190,255,172,170,183,255,190,188,174,255,189,184,250,246,171,174,170,189,255,190,185,255,176,170,183,184,183,205,251,248,178,188,255,176,187,174,170,189,255,181,190,172,180]},{"928929":[248,255,178,188,255,176,184,184,173,255,181,190,172,180,251]},{"928945":[255,178,188,255,182,174,177,255,181,190,172,180,251,192,177,194,255,194,184,190,255,172,184,182,174,248,178,183,255,177,174,187,174,255,170,183,173,249,185,187,174,189,174,183,173,255,181,178,180,174,250,246,194,184,190,255,177,170,191,174,246,188,184,182,174,189,177,178,183,176,255,189,177,178,188,246,175,184,190,183,189,170,178,183,250,246,192,170,183,189,188,198,255,172,184,182,174,246,171,170,172,180,255,192,178,189,177,246,171,184,189,189,181,174,188,199,251,171,194,255,189,177,174,255,192,170,194,200,248,194,184,190,187,255,175,184,187,189,190,183,174,200,251,254,110,0,254,107,4]},{"929095":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,192,174,181,181,255,173,184,183,174,200,248,181,174,189,189,190,172,174,255,177,170,191,174,255,170,249,172,190,185,255,184,175,255,189,174,170,204,251,178,255,192,187,184,189,174,255,170,248,192,184,187,173,205,255,179,190,188,189,249,184,183,174,205,255,184,183,255,170,250,246,188,189,184,183,174,255,170,183,173,246,189,177,187,174,192,255,178,189,255,178,183,189,184,246,189,177,174,255,184,172,174,170,183,205,255,178,189,250,246,192,170,188,255,182,194,255,192,184,187,173,205,246,178,189,255,192,170,188,255,192,177,170,189,246,192,184,190,181,173,255,188,170,191,174,255,182,174,205,250,246,178,255,177,184,185,174,255,188,184,182,174,173,170,194,246,188,184,182,174,184,183,174,255,175,178,183,173,188,246,189,177,170,189,255,192,184,187,173,255,170,183,173,250,246,171,187,178,183,176,188,255,178,189,255,189,184,246,182,174,205,255,189,177,174,255,192,184,187,173,246,178,188,255,189,177,174,250,246,171,174,176,178,183,183,178,183,176,255,184,175,246,182,194,255,188,184,183,176,205,251,178,255,192,187,184,189,174,255,170,248,188,184,183,176,205,255,179,190,188,189,249,184,183,174,205,255,184,183,255,170,250,246,176,190,178,189,170,187,255,170,183,173,246,189,177,187,174,192,255,178,189,255,178,183,189,184,246,189,177,174,255,188,180,194,205,255,178,189,250,246,192,170,188,255,182,194,255,188,184,183,176,205,246,178,189,255,172,184,190,181,173,255,189,170,182,174,246,171,174,170,188,189,188,255,170,183,173,250,246,175,187,174,174]},{"929487":[182,178,183,173,188,205,255,178,189,246,175,181,178,189,189,174,187,188,255,184,183,246,189,177,174,255,192,178,183,173,255,170,183,173,250,246,181,190,187,180,188,255,178,183,255,184,190,187,246,182,178,183,173,188,205,255,178,189,255,178,188,246,189,177,174,255,188,184,183,176,255,184,175,250,246,183,170,189,190,187,174,200,255,184,175,246,177,190,182,170,183,178,189,194,200,255,184,175,246,173,187,174,170,182,188,255,170,183,173,250,246,173,187,174,170,182,174,187,188,205,251,170,173,173,255,176,170,187,181,178,172,200,248,176,178,183,176,174,187,255,170,183,173,249,170,185,185,181,174,255,170,183,173,255,172,184,184,180]},{"929647":[175,184,187,255,162,255,182,178,183,190,189,174,188,205,246,170,173,173,255,172,170,187,187,184,189,188]},{"929674":[246,185,184,189,170,189,184,174,188,200,250,246,176,170,187,170,182,255,182,170,188,170,181,170,246,170,183,173,255,172,190,187,187,194,246,185,184,192,173,174,187,255,170,183,173,250,246,188,189,178,187,255,192,174,181,181,205,255,170,173,173,246,189,184,182,170,189,184,255,185,170,188,189,174,200,246,188,189,178,187,255,192,174,181,181,255,170,183,173,250,246,188,181,184,192,181,194,255,170,173,173,255,187,174,173,246,192,178,183,174,255,170,183,173,255,171,187,178,183,176,246,189,184,255,170,255,171,184,178,181,205,255,170,173,173,250,246,188,190,176,170,187,200,255,188,184,194,246,188,170,190,172,174,255,170,183,173,246,192,170,189,174,187,200,255,188,189,178,187,250,246,170,183,173,255,171,187,178,183,176,255,189,184,255,170,246,171,184,178,181,255,170,176,170,178,183,205,251,178,255,189,177,178,183,180,255,178,248,175,184,187,176,184,189,255,177,184,192,255,189,184,249,188,182,178,181,174,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,200,255,181,178,180,174,200,255,194,184,190,248,183,174,174,173,255,163,160,249,187,190,185,174,174,188,205,250,246,188,178,181,181,194,199,251,194,184,190,255,192,170,183,189,255,189,184,248,185,181,170,194,255,170,255,176,170,182,174,198]},{"929980":[189,170,181,180,255,189,184,255,182,174,205,251,194,184,190,216,191,174,255,184,185,174,183,174,173,248,189,177,174,255,172,177,174,188,189,188,199,249,189,178,182,174,255,189,184,255,176,184,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,200,255,181,178,180,174,200,255,194,184,190,248,170,181,187,174,170,173,194,255,177,170,191,174,249,184,183,174,255,184,175,255,189,177,184,188,174,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,192,177,194,255,173,184,174,188,255,183,184,248,184,183,174,255,184,192,183,249,171,184,189,189,181,174,188,198,255,176,184,250,246,175,178,183,173,255,184,183,174,246,175,178,187,188,189,199,251,194,184,190,255,170,187,174,248,172,170,187,187,194,178,183,176,255,189,184]},{"930196":[182,190,172,177]},{"930201":[172,187,170,185,200,255,176,184,250,246,190,188,174,255,188,184,182,174,255,184,175,255,178,189,246,175,178,187,188,189,199,251,194,184,190,255,173,187,184,191,174,248,170,192,170,194,255,182,194,255,184,189,177,174,187,249,188,174,181,175,200,255,170,176,170,177,183,178,182,200,250,246,189,192,184,255,189,178,182,174,188,204,246,171,190,189,200,255,178]},{"930291":[192,184,183,216,189,246,176,178,191,174,255,194,184,190,255,189,177,174,250,246,189,187,178,175,184,187,172,174,205,246,178,216,181,181,255,173,174,175,174,170,189,246,194,184,190,199,251,172,170,183,255,194,184,190,255,171,174,170,189,248,182,194,255,173,170,187,180,183,174,188,188,249,189,174,172,177,183,178,186,190,174,198,251,177,170,191,174,255,194,184,190,255,188,174,174,183,248,170,183,173,194,198,249,250,246,177,174,255,192,170,188,255,184,190,189,246,181,184,184,180,178,183,176,255,175,184,187,246,184,190,187,255,185,187,178,195,174,173,250,246,174,189,177,174,187,246,182,174,173,170,181,181,178,184,183,205,246,178,255,192,184,183,173,174,187,255,192,177,174,183,250,246,177,174,255,192,178,181,181,255,171,174,246,171,170,172,180,198,251,178,216,182]},{"930484":[179,190,188,189,255,188,184,182,174,248,173,190,173,174,205,255,189,177,178,188,255,178,188,249,171,181,178,183,173,216,188,255,177,190,189,205,251,252,2,254,109,0,254,107,2,255,255,255,255,255,176,255,176,251,184,190,172,177,199,248,249,194,184,190,255,179,174,187,180,199,251,173,184,183,216,189,255,170,187,176,190,174,248,192,178,189,177,255,170,255,175,187,184,195,174,183,249,173,174,170,173,187,184,172,180,205,250,246,177,174,216,181,181,255,183,174,191,174,187,246,172,177,170,183,176,174,255,177,178,188,246,185,184,188,178,189,178,184,183,199,251,254,110,0,254,107,4,251,188,184,255,194,184,190,200,255,181,178,180,174,200,248,171,190,188,189,174,173,255,173,184,192,183,255,182,194,249,173,184,184,187,200,255,170,183,173]},{"930671":[170,187,174,250,246,171,174,178,183,176,255,170,255,179,174,187,180,246,171,194,255,189,170,181,180,178,183,176,255,189,184,246,182,174,198,255,183,184,187,182,170,181,181,194]},{"930716":[178,250,246,192,184,190,181,173,255,171,174,255,170,183,176,187,194,246,170,183,173,255,182,170,180,174,255,194,184,190,246,185,170,194,255,175,184,187,255,178,189,200,250,246,171,190,189,255,178,255,171,174,189,246,194,184,190,216,187,174,255,179,190,188,189,246,176,184,178,183,176,255,189,184,255,171,187,174,170,180,250,246,170,181,181,255,182,194,255,185,184,189,188,246,170,183,173,255,188,189,174,170,181,255,182,194,246,165,160]},{"930826":[187,190,185,174,174,188,205,251,178,216,182]},{"930838":[170]},{"930840":[187,190,185,174,174,248,185,184,189,255,175,170,187,182,174,187,205,249,184,183,174,255,173,170,194,255,178]},{"930868":[192,178,181,181,250,246,189,170,180,174,255,184,191,174,187]},{"930884":[189,177,174,246,192,184,187,181,173,255,192,178,189,177,255,182,194,246,188,180,178,181,181,195,205,255,177,170,191,174,250,246,194,184,190]},{"930920":[182,174,189,255,182,194,246,171,187,184,189,177,174,187,255,178,183,255,189,177,174,246,173,174,188,174,187,189,198,255,177,174,216,188,250,246,192,170,194,255,187,178,172,177,174,187,246,189,177,170,183,255,178,255,170,182,205,251,206,206,255,173,174,191,255,172,170,191,174,255,206,206,248,255,255,183,184,255,175,170,187,182,178,183,176,249,255,255,255,187,174,186,190,178,187,174,173,251,173,178,173,255,194,184,190,255,177,174,170,187,248,189,177,170,189,255,191,174,174,189,184,187,185,249,171,174,170,189,255,170,179,183,174,171,161,167,164,250,246,178,183,255,170,255,161,255,184,183,255,161,246,187,170,172,174,255,170,189,255,170,176,173,186,198,251,194,184,190,255,175,184,190,183,173,248,188,177,170,171,170,173,184,184,200,255,177,190,177,198,249,183,178,178,178,178,178,172,174,205,251,194,184,199,255,178,216,182]},{"931128":[183,184,189,248,187,190,183,183,178,183,176,255,170,249,172,177,170,187,178,189,194,255,177,174,187,174,205,251,188,182,170,181,181,177,170,172,180,174,187,204,248,249,250,246,192,170,188,255,177,178,173,178,183,176,200,246,194,184,190]},{"931188":[175,184,190,183,173,255,182,174,199,246,250,246,246,184,180,170,194,200,255,194,184,190,255,172,170,183,246,181,174,170,191,174,255,183,184,192,205,251,185,170,194,255,162,160,255,187,190,185,174,174,188,200,248,184,185,174,183,255,161,255,172,177,174,188,189,205,249,170,187,174,255,194,184,190,255,181,190,172,180,194,198,250,246,188,184,200,255,185,181,170,194,255,176,170,182,174,198,246,255,255,228,255,185,181,170,194,246,255,255,255,255,183,174,191,174,187,199,254,104,251,176,184,184,173,255,181,190,172,180,255,189,177,174,183,251,192,174,181,181,255,175,178,183,174,200,255,178,248,173,178,173,183,216,189]},{"931343":[192,170,183,189,249,194,184,190,187]},{"931353":[187,190,185,174,174,188,205,251,185,170,194,255,161,160,160,255,187,190,185,174,174,188,248,184,185,174,183,255,161,255,172,177,174,188,189,205,249,170,187,174,255,194,184,190,255,181,190,172,180,194,198,250,246,188,184,200]},{"931410":[185,181,170,194,255,176,170,182,174,198,246,255,255,228]},{"931425":[185,181,170,194,246,255,255,255]},{"931434":[183,174,191,174,187,199,254,104,251,178,255,188,190,187,174]},{"931450":[173,184,255,177,170,191,174,248,170,255,181,184,189,255,184,175,255,171,174,173,188,205,249,250,246,195,184,187,170]},{"931480":[178,188,255,170,246,172,177,174,170,185,188,180,170,189,174,255,170,183,173]},{"931500":[192,178,181,181,255,189,187,194,255,189,184,250,246,188,174,181,181,255,194,184,190,255,177,178,188,246,189,187,170,188,177,255,175,184,187,255,165,160,160,246,187,190,185,174,174,188,204,251,178,255,188,190,187,174,255,173,184,255,177,170,191,174,248,170]},{"931565":[181,184,189]},{"931569":[184,175,255,171,174,173,188,205,249,250,246,173,178,173,255,194,184,190,255,180,183,184,192,246,178,175,255,194,184,190,255,185,181,170,194,174,173,246,189,177,174,255,175,181,190,189,174,255,178,183,250,246,189,177,174,255,172,174,183,189,174,187,255,184,175,246,189,184,192,183,255,189,177,178,183,176,188,246,172,184,190,181,173,255,177,170,185,185,174,183,198,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174,248,255,188,170,183,172,189,190,170,187,194,254,114,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174,248,255,188,170,183,172,189,190,170,187,194,249,255,182,184,190,183,189,170,178,183,255,172,170,191,174,254,113,251,252,0,228,172,184,183,189,178,183,190,174,248,255,188,170,191,174,255,170,183,173,255,186,190,178,189,254,114,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,177,184,191,174,181,255,187,174,183,189,170,181,248,178,188,255,168,160,255,187,190,185,174,174,188,205,249,178,255,177,170,191,174,255,170,181,181,255,173,170,194,251,189,178,182,174,216,188,255,190,185,199,248,189,178,182,174,255,175,184,187,255,194,184,190,249,189,184]},{"931849":[176,184,205,251,172,184,182,174,255,171,170,172,180,248,181,170,189,174,187,200,255,178,255,177,170,191,174,249,189,184,255,171,190,187,194,250,246,189,177,178,183,176,188,205,251,188,184,182,174,189,177,178,183,176,255,178,188,248,175,184,181,181,184,192,178,183,176,255,194,184,190,205,249,178,255,173,184,183,216,189,255,181,178,180,174,205,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174]},{"931953":[255,182,184,190,183,189,170,178,183,255,172,170,191,174,254,114,251,194,184,190,255,189,177,178,183,180,255,194,184,190,248,170,187,174,255,187,174,170,173,194,255,189,184,249,175,170,172,174,255,182,174,198,250,246,246,178,255,192,178,181,181,255,183,184,189,255,173,178,174,246,250,246,190,183,181,174,188,188,255,194,184,190,246,172,184,182,185,181,174,189,174,255,194]},{"932047":[190,187,246,176,184,170,181,188,205,255,173,178,183,176,190,188,199,251,176,184,189,255,192,170,193,255,178,183,248,194,184,190,187,255,174,170,187,188,198,255,178,249,172,170,183,183,184,189,255,173,178,174,199,251,177,184,192,255,173,178,173,255,194,184,190,248,176,174,189,255,190,185,255,177,174,187,174,198]},{"932126":[178,189,216,188,255,170,255,188,174,172,187,174,189,248,189,184,255,174,191,174,187,194,184,183,174,205,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932251":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932333":[255]},{"932335":[255,255,255,255,255,255,255,255,255]},{"932348":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932364":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932544":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932636":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932725":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932864":[255]},{"932866":[255,255,255,255,255,255,255,255]},{"932878":[255,255,255,255,255,255,255,255,255,255,255,255]},{"932891":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932938":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933050":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933207":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933260":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933322":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933413":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933485":[255,255]},{"933488":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933595":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933615":[255,255]},{"933618":[255,255]},{"933621":[255,255,255,255,255,255,255,255,255,255]},{"933632":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933726":[255]},{"933728":[255,255,255,255,255,255,255]},{"933739":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933820":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933842":[255,255,255,255,255]},{"933848":[255,255,255,255,255,255,255]},{"933856":[255,255,255,255,255,255,255,255,255,255,255]},{"933868":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933883":[255,255,255,255,255,255,255,255]},{"933892":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933918":[255,255,255,255,255,255,255,255]},{"933927":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933966":[255,255,255,255,255,255,255]},{"933974":[255]},{"933976":[255,255,255]},{"933980":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933998":[255,255,255,255,255,255,255,255,255,255,255]},{"934010":[255,255,255,255,255,255,255]},{"934018":[255]},{"934020":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934040":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934094":[255,255,255,255,255,255]},{"934101":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934128":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934145":[255,255,255,255,255,255,255,255,255,255]},{"934157":[255]},{"934172":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934198":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934215":[255,255,255,255,255,255,255,255,255,255,255]},{"934231":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934255":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934274":[255,255,255,255,255,255,255,255,255,255]},{"934291":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934312":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934330":[255]},{"934345":[255,255,255,255,255,255,255]},{"934353":[255,255,255,255,255,255,255,255,255,255,255]},{"934365":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934382":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934398":[255,255,255,255,255,255,255,255,255,255,255]},{"934410":[255,255,255,255,255,255]},{"934422":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934443":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934462":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934476":[255,255,255,255,255,255,255,255,255,255,255,255]},{"934489":[255,255,255,255,255,255,255,255]},{"934504":[255]},{"934519":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934555":[255]},{"934570":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934743":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934790":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934833":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935013":[255]},{"935015":[255,255,255,255,255,255,255,255]},{"935027":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935044":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935076":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935109":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935168":[255]},{"935170":[255,255,255,255,255,255,255,255,255]},{"935183":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935199":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935230":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935268":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935307":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935372":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935498":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935516":[255]},{"935518":[255]},{"935520":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935922":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935975":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936045":[255,255,255]},{"936049":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936123":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936202":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936231":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936288":[255]},{"936302":[255]},{"936316":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936376":[255]},{"936391":[255]},{"936399":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936471":[255]},{"936486":[255]},{"936501":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936571":[255]},{"936584":[255]},{"936597":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936674":[255]},{"936689":[255]},{"936704":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936773":[255]},{"936787":[255]},{"936800":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936866":[255]},{"936881":[255]},{"936893":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936970":[255]},{"936985":[255]},{"937000":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937031":[255]},{"937033":[255]},{"937035":[255]},{"937037":[255]},{"937039":[255,255,255,255,255,255,255,255,255,255,255,255]},{"937052":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937109":[255]},{"937123":[255]},{"937137":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937204":[255]},{"937219":[255]},{"937234":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937296":[255]},{"937311":[255]},{"937321":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937366":[255]},{"937380":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937441":[255]},{"937455":[255]},{"937466":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937538":[255]},{"937553":[255]},{"937564":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937624":[255]},{"937639":[255]},{"937646":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937696":[255]},{"937708":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937781":[255]},{"937795":[255]},{"937807":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937870":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937927":[255]},{"937941":[255]},{"937955":[255,255,255,255,255,255,255,255,255,255]},{"937966":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938020":[255]},{"938032":[255]},{"938046":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938117":[255]},{"938132":[255]},{"938145":[255,255,255,255,255,255,255,255,255,255,255]},{"938157":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938196":[255]},{"938211":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938284":[255]},{"938299":[255]},{"938314":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938385":[255]},{"938399":[255]},{"938414":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938437":[255,255,255,255]},{"938442":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938468":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938525":[255]},{"938539":[255]},{"938553":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938632":[255]},{"938646":[255]},{"938660":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938727":[255]},{"938742":[255]},{"938756":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938813":[255]},{"938828":[255]},{"938839":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938902":[255]},{"938916":[255]},{"938924":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938959":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939016":[255]},{"939030":[255]},{"939044":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939114":[255]},{"939129":[255]},{"939144":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939220":[255]},{"939234":[255]},{"939249":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939324":[255]},{"939339":[255]},{"939354":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939423":[255]},{"939434":[255]},{"939448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939516":[255]},{"939531":[255]},{"939544":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939577":[255]},{"939579":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939598":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939655":[255]},{"939669":[255]},{"939683":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939752":[255]},{"939767":[255]},{"939780":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939854":[255]},{"939868":[255]},{"939882":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939953":[255]},{"939967":[255]},{"939982":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940050":[255]},{"940065":[255]},{"940078":[255,255,255,255,255,255,255,255,255,255]},{"940089":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940153":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940197":[255]},{"940212":[255]},{"940226":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940258":[255]},{"940260":[255]},{"940262":[255,255,255,255,255]},{"940281":[255]},{"940291":[255]},{"940298":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940371":[255]},{"940386":[255]},{"940401":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940467":[255]},{"940482":[255]},{"940491":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940557":[255]},{"940572":[255]},{"940581":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940653":[255]},{"940668":[255]},{"940683":[255,255,255]},{"940687":[255,255]},{"940690":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940715":[255]},{"940717":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940787":[255]},{"940789":[255]},{"940792":[255,255]},{"940798":[255,255,255,255,255,255,255,255,255,255]},{"940809":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940867":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940911":[255]},{"940926":[255]},{"940940":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940972":[255]},{"940974":[255]},{"940976":[255,255,255,255,255]},{"940995":[255]},{"941005":[255]},{"941012":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941085":[255]},{"941100":[255]},{"941115":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941181":[255]},{"941196":[255]},{"941205":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941271":[255]},{"941286":[255]},{"941295":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941362":[255]},{"941371":[255]},{"941385":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941457":[255]},{"941472":[255]},{"941484":[255,255,255]},{"941488":[255,255]},{"941491":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941516":[255]},{"941518":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941563":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941611":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941628":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941742":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941775":[255,255,255,255,255,255,255,255,255]},{"941785":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941954":[255]},{"941956":[255,255,255,255,255,255,255,255,255]},{"941969":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942030":[255]},{"942032":[255,255,255,255,255,255,255,255,255,255]},{"942046":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942076":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942170":[255,255,255,255,255,255,255]},{"942179":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942789":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942832":[255]},{"942834":[255,255,255,255,255,255,255]},{"942845":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942899":[255]},{"942901":[255]},{"942903":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942923":[255]},{"942925":[255,255,255,255,255,255,255,255,255,255]},{"942939":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943097":[255,255,255,255,255]},{"943104":[255,255,255,255,255]},{"943112":[255,255,255,255,255]},{"943119":[255,255,255,255,255]},{"943127":[255,255,255,255,255]},{"943134":[255,255,255,255,255]},{"943142":[255,255,255,255,255,255]},{"943150":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943187":[255,255]},{"943195":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943211":[255,255]},{"943219":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943235":[255,255]},{"943243":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943259":[255,255]},{"943267":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943298":[255,255]},{"943306":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943346":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943360":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943570":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943586":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943830":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943882":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943936":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943957":[255]},{"943959":[255,255,255,255,255,255,255]},{"943970":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944480":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944607":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944909":[255]},{"944911":[255]},{"944913":[255,255,255,255,255]},{"944930":[255]},{"944945":[255]},{"944952":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944981":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945024":[255]},{"945039":[255]},{"945053":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945121":[255]},{"945134":[255]},{"945148":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945213":[255]},{"945227":[255]},{"945241":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945317":[255]},{"945332":[255]},{"945347":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945418":[255]},{"945433":[255]},{"945448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945517":[255]},{"945532":[255]},{"945545":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945616":[255]},{"945631":[255]},{"945646":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945682":[255]},{"945684":[255]},{"945686":[255]},{"945688":[255,255,255,255,255,255,255]},{"945696":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945924":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945941":[255,255,255,255,255,255,255]},{"945949":[255]},{"945951":[255]},{"945953":[255]},{"945955":[255,255,255,255,255,255,255,255,255]},{"945965":[255,255,255,255,255,255,255]},{"945973":[255]},{"945975":[255]},{"945977":[255,255,255,255,255,255,255,255]},{"945987":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946002":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946074":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946091":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946110":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946124":[255,255,255,255,255,255,255,255,255,255,255,255]},{"946137":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946210":[255]},{"946213":[255,255,255,255,255,255,255]},{"946225":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946346":[255]},{"946349":[255,255,255,255,255,255,255]},{"946361":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946376":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946558":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946679":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946711":[255,255,255,255,255,255,255,255,255,255,255]},{"946723":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946743":[255,255,255,255,255,255,255,255,255,255]},{"946755":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946826":[255]},{"946828":[255,255,255,255,255]},{"946837":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946864":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946908":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"947006":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"950962":[143]},{"954488":[34,33,229,160,96]},{"954852":[50,178,160]},{"955117":[0,229,160]},{"955529":[46,178,160]},{"962925":[11,178,160]},{"962951":[11,178,160]},{"963167":[11,178,160]},{"963214":[11,178,160]},{"965041":[11,178,160]},{"965069":[11,178,160]},{"965214":[11,178,160]},{"965298":[11,178,160]},{"965316":[11,178,160]},{"967797":[34,123,176,160,234,234,234,234,234,234,234,234]},{"967817":[234,234,234,234,34,149,176,160]},{"972824":[218,177,160]},{"972834":[218,177,160]},{"972851":[218,177,160]},{"974665":[92]},{"974667":[193,160,234]},{"974706":[197,193,160]},{"974722":[170,193,160]},{"975106":[34,48,141,160]},{"975132":[34,48,141,160]},{"975265":[34,161,193,160,234,234]},{"975332":[34,135,193,160,234,234]},{"975401":[255]},{"976357":[7,178,160]},{"976423":[7,178,160]},{"978658":[247,177,160]},{"979078":[34,27,215,160]},{"982376":[131,177,160]},{"982421":[15]},{"982430":[234,234,234,234,234,234,234,234]},{"982440":[34,99,192,160]},{"983466":[247,177,160]},{"983651":[247,177,160]},{"988539":[3,178,160]},{"988657":[3,178,160]},{"988668":[3,178,160]},{"988874":[3,178,160]},{"988902":[3,178,160]},{"989142":[3,178,160]},{"994007":[157,80]},{"994143":[157,80]},{"996856":[251,177,160]},{"999246":[255,177,160]},{"999265":[255,177,160]},{"999359":[255,177,160]},{"999574":[255,177,160]},{"1002731":[92,57,205,30]},{"1003079":[92,93,193,160]},{"1003229":[34,98,151,160]},{"1003277":[34,98,151,160]},{"1004410":[112,130,160]},{"1004774":[34,79,128,164,234,234]},{"1004919":[92,92,128,164]},{"1005119":[222,177,160]},{"1005176":[234,234,34,111,128,164]},{"1005296":[222,177,160]},{"1007982":[234,234,234,234,234,234,234,234]},{"1008002":[0,128,162]},{"1008025":[34,85,238,160,234,234,234,234,234,234,234,234,234,234,234]},{"1008815":[34,130,128,160,234,234]},{"1009927":[4,240]},{"1009930":[34,215,140,160,234,234]},{"1010175":[94,141,160]},{"1011427":[34,33,166,160,96,234]},{"1011808":[34,31,142]},{"1011812":[234]},{"1012601":[234,234,234,234]},{"1041509":[30]},{"1048568":[32,24,7,35]},{"1048576":[34,4,181,160,48,66,192,27,240,63,192,5,240,59,192,4,240,55,192,12,240,51,192,11,240,47,192,58,240,43,192,73,240,57,192,1,240,53,192,80,240,49,192,2,240,45,192,59,240,30,192,42,240,26,192,13,240,22,192,20,240,18,192,19,240,14,192,41,240,10,135]},{"1048648":[107,199]},{"1048651":[176,249,167]},{"1048655":[107,72,167]},{"1048659":[208,4,104,135]},{"1048664":[107,104,107,72,152,201,73,208,2,169]},{"1048675":[201,80,208,2,169,1,26,207,23,244,126,176,14,175,23,244,126,58,168,104,175,23,244,126,130,200,255,104,130,196,255,169]},{"1048708":[143,211,243,126,169,10,143,204,243,126,107,175,197,243,126,240,6,175,145,80,127,73,1,107,165,138,201,128,208,2,165,35,107,175,87,243,126,240,1,107,175,202,243,126,41,64,72,175,74,128,48,208,5,104,73,64,128,1,104,107,165,27,240,1,107,175,87,243,126,240,1,107,165,138,41,64,72,175,74,128,48,208,5,104,73,64,128,1,104,107,173,224,2,240,13,34,165,128,160,240,7,100,93,156,224,2,100,86,96,175,116,129,48,240,16,34,165,128,160,208,10,32,13,129,169,4,141,44,1,128,5,169,9,141,44,1,107,218,90,169,23,133,93,169,1,141,224,2,133,86,34,138,253,2,122,250,96,175,202,243,126,208,16,175,204,243,126,201,7,208,26,169,8,143,204,243,126,128,14,175,204,243,126,201,8,208,10,169,7,143,204,243,126,34,99,212]},{"1048905":[96,175,164,128,48,208,10,173,12,4,201,12,208,3,156,122,4,107,142,216,2,34,4,157,9,144,1,107,100,174,100,175,107,169,112,72,171,34,96,130,160,34,176,216,160,107,175,74,128,48,240,3,76,234,129,175,160,128,48,240,6,175,83,243,126,240,10,175,197,243,126,201,3,144,2,128,20,169]},{"1048984":[143,202,243,126,175,204,243,126,201,7,208,6,169,8,143,204,243,126,107,175,74,128,48,240,3,76,27,130,165,27,240,17,173,12,4,201,255,208,13,165,160,208,6,175,113,129,48,208,12,76,119,129,175,162,128,48,208,23,76,140,129,169,64,143,202,243,126,175,204,243,126,201,8,208,6,169,7,143,204,243,126,107,175,160,128,48,240,6,175,83,243,126,240,10,175,197,243,126,201,3,144,2,128,26,169,64,143,202,243,126,175,204,243,126,201,7,240,6,201,8,240,2,128,6,169]},{"1049110":[143,204,243,126,107,165,27,240,17,173,12,4,201,255,208,13,165,160,208,6,175,113,129,48,208,12,76,119,129,175,162,128,48,208,23,76,246,129,169]},{"1049150":[143,202,243,126,175,204,243,126,201,7,208,6,169,8,143,204,243,126,107,175,116,129,48,240,8,165,138,41,64,143,202,243,126,107,175,204,243,126,201,14,240,1,107,169]},{"1049195":[143,204,243,126,107,169]},{"1049202":[143,204,243,126,34,69,249]},{"1049210":[107,175,197,243,126,201,1,240,1,107,175,200,243,126,201,3,208,47,175,133,129,48,56,239,110,243,126,144,4,143,115,243,126,175,134,129,48,56,239,67,243,126,144,4,143,117,243,126,175,135,129,48,56,239,119,243,126,144,4,143,118,243,126,128,100,201,2,208,47,175,136,129,48,56,239,110,243,126,144,4,143,115,243,126,175,137,129,48,56,239,67,243,126,144,4,143,117,243,126,175,138,129,48,56,239,119,243,126,144,4,143,118,243,126,128,49,201,4,208,45,175,139,129,48,56,239,110,243,126,144,4,143,115,243,126,175,140,129,48,56,239,67,243,126,144,4,143,117,243,126,175,141,129,48,56,239,119,243,126,144,4,143,118,243,126,107,175,197,243,126,201,1,208,30,175,77,128,48,137,4,240,4,143,202,80,127,137,2,240,4,143,201,80,127,137,1,240,4,143,200,80,127,128,42,175,77,128,48,137,4,240,6,169]},{"1049424":[143,202,80,127,175,77,128,48,137,2,240,6,169]},{"1049438":[143,201,80,127,175,77,128,48,137,1,240,6,169]},{"1049452":[143,200,80,127,107,175,129,129,48,240,15,175,64,243,126,201,3,144,7,56,233,2,143,64,243,126,107,175,196,80,127,201,1,208,1,107,201,255,208,2,26,107,175,74,243,126,208,27,175,202,243,126,208,17,173,12,4,208,6,175,56,128,48,128,10,175,57,128,48,128,4,175,58,128,48,107,175,197,243,126,201,2,144,3,169,1,107,175,204,243,126,107,34,135,131,160,133,29,107,34,96,130,160,175,61,128,48,208,40,175,187,242,126,41,223,143,187,242,126,175,251,242,126,41,223,143,251,242,126,175,22,242,126,41,127,143,22,242,126,175,81,240,126,41,254,143,81,240,126,175,161,128,48,240,10,175,106,240,126,41,127,143,106,240,126,107,218,90,188,128,14,208,5,34,67,133,160,168,34,96,133,160,156,233,2,192,38,208,15,175,107,243,126,26,41,3,143,107,243,126,208,14,128]},{"1049656":[34,179,145,7,34,157,153,7,24,130,1]},{"1049668":[56,34,239,175,160,122,250,107,218,90,34,205,188,160,188,128,14,208,5,34,45,138,160,168,128,196,8,34,119,148,160,144,44,72,90,175]},{"1049705":[80,127,240,7,34,15,133,160,130,27]},{"1049716":[189,128,14,72,34,110,146,160,144,8,189,96,14,9,32,157,96,14,104,34,186,147,160,34,92,220,6,122,104,40,107,8,34,119,148,160,144,247,72,90,175]},{"1049758":[80,127,240,6,34,47,133,160,128,231,189,128,14,128,202,192,32,240,22,192,55,240,18,192,56,240,14,192,57,240,10,34,96,140,160,144,4,169,46,56,107,24,107,189,94,12,192,32,240,19,192,55,240,15,192,56,240,11,192,57,240,7,72,34,96,140,160,104,107,24,107,175,51,80,127,240,8,58,143,51,80,127,169]},{"1049842":[107,191,128,242,126,107,175,52,80,127,240,6,58,143,52,80,127,107,191,128,242,126,9,64,159,128,242,126,107,72,169,1,143]},{"1049876":[80,127,165,93,201,20,240,17,169]},{"1049886":[143]},{"1049888":[80,127,34,67,133,160,157,128,14,34,84,147,160,104,107,72,169]},{"1049906":[143]},{"1049908":[80,127,34,45,138,160,157,128,14,34,84,147,160,104,107,165,27,240,7,34,125,133,160,130,4]},{"1049934":[34,26,135,160,107,34,88,173,9,72,169,1,143]},{"1049948":[80,127,104,107,72,8,165,27,208,20,194,32,165,138,201,42]},{"1049965":[208,11,175,22,244,126,9,1]},{"1049974":[143,22,244,126,40,104,107,8,194,32,165,160,201,225]},{"1049989":[208,50,175,135,128,48,208,6,175]},{"1049999":[128,48,128,35,218,8,194,48,165]},{"1050009":[72,165,2,72,169]},{"1050015":[128,133]},{"1050018":[169,48]},{"1050021":[133,2,169]},{"1050026":[34,233,146,164,250,134,2,250,134,1,40,250,130,92,1,201,226]},{"1050044":[208,50,175,135,128,48,208,6,175,1,128,48,128,35,218,8,194,48,165]},{"1050064":[72,165,2,72,169]},{"1050070":[128,133]},{"1050073":[169,48]},{"1050076":[133,2,169,1]},{"1050081":[34,233,146,164,250,134,2,250,134,1,40,250,130,37,1,201,234]},{"1050099":[208,50,175,135,128,48,208,6,175,2,128,48,128,35,218,8,194,48,165]},{"1050119":[72,165,2,72,169]},{"1050125":[128,133]},{"1050128":[169,48]},{"1050131":[133,2,169,2]},{"1050136":[34,233,146,164,250,134,2,250,134,1,40,250,130,238]},{"1050151":[201,27,1,208,108,165,34,235,41,1]},{"1050162":[208,50,175,135,128,48,208,6,175,3,128,48,128,35,218,8,194,48,165]},{"1050182":[72,165,2,72,169]},{"1050188":[128,133]},{"1050191":[169,48]},{"1050194":[133,2,169,3]},{"1050199":[34,233,146,164,250,134,2,250,134,1,40,250,130,175]},{"1050214":[175,135,128,48,208,6,175,4,128,48,128,35,218,8,194,48,165]},{"1050232":[72,165,2,72,169]},{"1050238":[128,133]},{"1050241":[169,48]},{"1050244":[133,2,169,4]},{"1050249":[34,233,146,164,250,134,2,250,134,1,40,250,130,125]},{"1050264":[201,38,1,208,50,175,135,128,48,208,6,175,5,128,48,128,35,218,8,194,48,165]},{"1050287":[72,165,2,72,169]},{"1050293":[128,133]},{"1050296":[169,48]},{"1050299":[133,2,169,5]},{"1050304":[34,233,146,164,250,134,2,250,134,1,40,250,130,70]},{"1050319":[201,39,1,208,50,175,135,128,48,208,6,175,6,128,48,128,35,218,8,194,48,165]},{"1050342":[72,165,2,72,169]},{"1050348":[128,133]},{"1050351":[169,48]},{"1050354":[133,2,169,6]},{"1050359":[34,233,146,164,250,134,2,250,134,1,40,250,130,15]},{"1050374":[201,135]},{"1050377":[208,7,175,98,129,48,130,3]},{"1050386":[169,23]},{"1050389":[41,255]},{"1050392":[40,107,8,194,32,165,138,201,3]},{"1050402":[208,107,165,34,201,98,7,144,50,175,135,128,48,208,6,175,64,129,48,128,35,218,8,194,48,165]},{"1050429":[72,165,2,72,169,64,129,133]},{"1050438":[169,48]},{"1050441":[133,2,169]},{"1050446":[34,233,146,164,250,134,2,250,134,1,40,250,130,203,2,175,135,128,48,208,6,175,22,128,48,128,35,218,8,194,48,165]},{"1050479":[72,165,2,72,169,16,128,133]},{"1050488":[169,48]},{"1050491":[133,2,169,6]},{"1050496":[34,233,146,164,250,134,2,250,134,1,40,250,130,153,2,201,5]},{"1050514":[208,50,175,135,128,48,208,6,175,65,129,48,128,35,218,8,194,48,165]},{"1050534":[72,165,2,72,169,64,129,133]},{"1050543":[169,48]},{"1050546":[133,2,169,1]},{"1050551":[34,233,146,164,250,134,2,250,134,1,40,250,130,98,2,201,40]},{"1050569":[208,50,175,135,128,48,208,6,175,66,129,48,128,35,218,8,194,48,165]},{"1050589":[72,165,2,72,169,64,129,133]},{"1050598":[169,48]},{"1050601":[133,2,169,2]},{"1050606":[34,233,146,164,250,134,2,250,134,1,40,250,130,43,2,201,42]},{"1050624":[208,50,175,135,128,48,208,6,175,74,129,48,128,35,218,8,194,48,165]},{"1050644":[72,165,2,72,169,64,129,133]},{"1050653":[169,48]},{"1050656":[133,2,169,10]},{"1050661":[34,233,146,164,250,134,2,250,134,1,40,250,130,244,1,201,48]},{"1050679":[208,107,165,34,201]},{"1050685":[2,176,50,175,135,128,48,208,6,175,67,129,48,128,35,218,8,194,48,165]},{"1050706":[72,165,2,72,169,64,129,133]},{"1050715":[169,48]},{"1050718":[133,2,169,3]},{"1050723":[34,233,146,164,250,134,2,250,134,1,40,250,130,182,1,175,135,128,48,208,6,175,23,128,48,128,35,218,8,194,48,165]},{"1050756":[72,165,2,72,169,16,128,133]},{"1050765":[169,48]},{"1050768":[133,2,169,7]},{"1050773":[34,233,146,164,250,134,2,250,134,1,40,250,130,132,1,201,53]},{"1050791":[208,50,175,135,128,48,208,6,175,68,129,48,128,35,218,8,194,48,165]},{"1050811":[72,165,2,72,169,64,129,133]},{"1050820":[169,48]},{"1050823":[133,2,169,4]},{"1050828":[34,233,146,164,250,134,2,250,134,1,40,250,130,77,1,201,59]},{"1050846":[208,50,175,135,128,48,208,6,175,69,129,48,128,35,218,8,194,48,165]},{"1050866":[72,165,2,72,169,64,129,133]},{"1050875":[169,48]},{"1050878":[133,2,169,5]},{"1050883":[34,233,146,164,250,134,2,250,134,1,40,250,130,22,1,201,66]},{"1050901":[208,50,175,135,128,48,208,6,175,70,129,48,128,35,218,8,194,48,165]},{"1050921":[72,165,2,72,169,64,129,133]},{"1050930":[169,48]},{"1050933":[133,2,169,6]},{"1050938":[34,233,146,164,250,134,2,250,134,1,40,250,130,223]},{"1050953":[201,74]},{"1050956":[208,50,175,135,128,48,208,6,175,70,129,48,128,35,218,8,194,48,165]},{"1050976":[72,165,2,72,169,64,129,133]},{"1050985":[169,48]},{"1050988":[133,2,169,6]},{"1050993":[34,233,146,164,250,134,2,250,134,1,40,250,130,168]},{"1051008":[201,91]},{"1051011":[208,50,175,135,128,48,208,6,175,71,129,48,128,35,218,8,194,48,165]},{"1051031":[72,165,2,72,169,64,129,133]},{"1051040":[169,48]},{"1051043":[133,2,169,7]},{"1051048":[34,233,146,164,250,134,2,250,134,1,40,250,130,113]},{"1051063":[201,104]},{"1051066":[208,50,175,135,128,48,208,6,175,72,129,48,128,35,218,8,194,48,165]},{"1051086":[72,165,2,72,169,64,129,133]},{"1051095":[169,48]},{"1051098":[133,2,169,8]},{"1051103":[34,233,146,164,250,134,2,250,134,1,40,250,130,58]},{"1051118":[201,129]},{"1051121":[208,50,175,135,128,48,208,6,175,73,129,48,128,35,218,8,194,48,165]},{"1051141":[72,165,2,72,169,64,129,133]},{"1051150":[169,48]},{"1051153":[133,2,169,9]},{"1051158":[34,233,146,164,250,134,2,250,134,1,40,250,130,3]},{"1051173":[169,23]},{"1051176":[41,255]},{"1051179":[40,107,8,194,32,165,160,201,200]},{"1051189":[208,50,175,135,128,48,208,6,175,80,129,48,128,35,218,8,194,48,165]},{"1051209":[72,165,2,72,169,80,129,133]},{"1051218":[169,48]},{"1051221":[133,2,169]},{"1051226":[34,233,146,164,250,134,2,250,134,1,40,250,130,242,1,201,51]},{"1051244":[208,50,175,135,128,48,208,6,175,81,129,48,128,35,218,8,194,48,165]},{"1051264":[72,165,2,72,169,80,129,133]},{"1051273":[169,48]},{"1051276":[133,2,169,1]},{"1051281":[34,233,146,164,250,134,2,250,134,1,40,250,130,187,1,201,7]},{"1051299":[208,50,175,135,128,48,208,6,175,82,129,48,128,35,218,8,194,48,165]},{"1051319":[72,165,2,72,169,80,129,133]},{"1051328":[169,48]},{"1051331":[133,2,169,2]},{"1051336":[34,233,146,164,250,134,2,250,134,1,40,250,130,132,1,201,90]},{"1051354":[208,50,175,135,128,48,208,6,175,83,129,48,128,35,218,8,194,48,165]},{"1051374":[72,165,2,72,169,80,129,133]},{"1051383":[169,48]},{"1051386":[133,2,169,3]},{"1051391":[34,233,146,164,250,134,2,250,134,1,40,250,130,77,1,201,6]},{"1051409":[208,50,175,135,128,48,208,6,175,84,129,48,128,35,218,8,194,48,165]},{"1051429":[72,165,2,72,169,80,129,133]},{"1051438":[169,48]},{"1051441":[133,2,169,4]},{"1051446":[34,233,146,164,250,134,2,250,134,1,40,250,130,22,1,201,41]},{"1051464":[208,50,175,135,128,48,208,6,175,85,129,48,128,35,218,8,194,48,165]},{"1051484":[72,165,2,72,169,80,129,133]},{"1051493":[169,48]},{"1051496":[133,2,169,5]},{"1051501":[34,233,146,164,250,134,2,250,134,1,40,250,130,223]},{"1051516":[201,172]},{"1051519":[208,50,175,135,128,48,208,6,175,86,129,48,128,35,218,8,194,48,165]},{"1051539":[72,165,2,72,169,80,129,133]},{"1051548":[169,48]},{"1051551":[133,2,169,6]},{"1051556":[34,233,146,164,250,134,2,250,134,1,40,250,130,168]},{"1051571":[201,222]},{"1051574":[208,50,175,135,128,48,208,6,175,87,129,48,128,35,218,8,194,48,165]},{"1051594":[72,165,2,72,169,80,129,133]},{"1051603":[169,48]},{"1051606":[133,2,169,7]},{"1051611":[34,233,146,164,250,134,2,250,134,1,40,250,130,113]},{"1051626":[201,144]},{"1051629":[208,50,175,135,128,48,208,6,175,88,129,48,128,35,218,8,194,48,165]},{"1051649":[72,165,2,72,169,80,129,133]},{"1051658":[169,48]},{"1051661":[133,2,169,8]},{"1051666":[34,233,146,164,250,134,2,250,134,1,40,250,130,58]},{"1051681":[201,164]},{"1051684":[208,50,175,135,128,48,208,6,175,89,129,48,128,35,218,8,194,48,165]},{"1051704":[72,165,2,72,169,80,129,133]},{"1051713":[169,48]},{"1051716":[133,2,169,9]},{"1051721":[34,233,146,164,250,134,2,250,134,1,40,250,130,3]},{"1051736":[169,62]},{"1051739":[41,255]},{"1051742":[40,107,194,32,165,160,201,200]},{"1051751":[208,4,56,130,82]},{"1051757":[201,51]},{"1051760":[208,4,56,130,73]},{"1051766":[201,7]},{"1051769":[208,4,56,130,64]},{"1051775":[201,90]},{"1051778":[208,4,56,130,55]},{"1051784":[201,6]},{"1051787":[208,4,56,130,46]},{"1051793":[201,41]},{"1051796":[208,4,56,130,37]},{"1051802":[201,172]},{"1051805":[208,4,56,130,28]},{"1051811":[201,222]},{"1051814":[208,4,56,130,19]},{"1051820":[201,144]},{"1051823":[208,4,56,130,10]},{"1051829":[201,164]},{"1051832":[208,4,56,130,1]},{"1051838":[24,226,32,107,175,17,244,126,41,8,107,175,17,244,126,41,4,107,175,17,244,126,41,128,107,175,16,244,126,41,1,201,1,107,175,16,244,126,41,2,107,175,16,244,126,41,4,107,175,16,244,126,41,8,107,175,16,244,126,41,8,74,74,107,34,48,208,13,175,16,244,126,41,8,240,4,128,5,169,5,189,128,13,107,175,16,244,126,41,16,107,175,16,244,126,41,128,107,175,17,244,126,42,42,42,42,107,175,17,244,126,41,32,107,175,16,244,126,41,32,107,72,175,17,244,126,9,8,143,17,244,126,104,107,72,175,17,244,126,9,4,143,17,244,126,104,107,72,175,17,244,126,9,128,143,17,244,126,104,107,34,157,153,7,72,175,16,244,126,9,1,143,16,244,126,104,107,72,175,16,244,126,9,2,143,16,244,126,104,107,34,157,153,7,72,175,16,244,126,9,4,143,16,244,126,104,107,34,157,153,7,72,175,16,244,126,9,8,143,16,244,126,104,107,34,157,153,7,72,175,16,244,126,9,16,143,16,244,126,104,107,72,175,16,244,126,9,32,143,16,244,126,104,107,34,157,153,7,72,175,16,244,126,9,128,143,16,244,126,104,107,72,175,17,244,126,9,16,143,17,244,126,188,128,14,208,48,175,135,128,48,208,6,175,19,128,48,128,35,218,8,194,48,165]},{"1052143":[72,165,2,72,169,16,128,133]},{"1052152":[169,48]},{"1052155":[133,2,169,3]},{"1052160":[34,233,146,164,250,134,2,250,134,1,40,250,168,104,156,233,2,107,72,175,17,244,126,9,32,143,17,244,126,104,107,254,128,13,72,8,194,32,165,160,201,35,1,208,50,175,135,128,48,208,6,175,16,128,48,128,35,218,8,194,48,165]},{"1052223":[72,165,2,72,169,16,128,133]},{"1052232":[169,48]},{"1052235":[133,2,169]},{"1052240":[34,233,146,164,250,134,2,250,134,1,40,250,168,128,57,201,30,1,208,50,175,135,128,48,208,6,175,17,128,48,128,35,218,8,194,48,165]},{"1052278":[72,165,2,72,169,16,128,133]},{"1052287":[169,48]},{"1052290":[133,2,169,1]},{"1052295":[34,233,146,164,250,134,2,250,134,1,40,250,168,128,2,160,70,40,104,107,32,144,213,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,21,72,32,193,213,207,150,128,48,144,10,104,175,151,128,48,34,155,142,160,107,104,218,139,75,171,170,191,129,143,160,171,250,201,249,176,1,107,201,249,208,12,175,123,243,126,208,3,169,59,107,169,60,107,201,250,208,7,34,121,212,160,76,155,142,201,251,208,7,34,53,213,160,76,155,142,201,253,208,22,175,91,243,126,207,148,128,48,144,9,175,149,128,48,34,155,142,160,107,169,4,107,201,254,208,43,175,89,243,126,207,144,128,48,144,9,175,145,128,48,34,155,142,160,107,201]},{"1052474":[208,3,169,67,107,201,1,208,3,169,68,107,201,2,208,3,169,69,107,169,70,107,201,255,208,44,175,22,244,126,41,192,74,74,74,74,74,74,207,146,128,48,144,9,175,147,128,48,34,155,142,160,107,201]},{"1052529":[208,3,169,45,107,201,1,208,3,169,32,107,169,46,107,107,6,68,69,70,45,32,46,9,9,10,8,5,16,11,44,27,26,28,20,25,12,7,29,47,7,21,18,13,13,14,17,23,40,39,4,4,15,22,3,19,1,30,16]},{"1052594":[48,34,33,36,36,36,35,35,35,41,42,44,43,3,3,52,53,49,51,2,50,54,55,44,67,12,56,57,58,249,60,68,61,62,63,64,44]},{"1052633":[65,36,71,72,72,72,254,255,253,13,250,251,255,255,255,255,255,255,73,74,73,255,255,255,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,32,144,213,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,21,72,32,193,213,207,150,128,48,144,10,104,175,151,128,48,34,129,144,160,107,104,218,139,75,171,170,191,110,145,160,171,250,201,250,176,1,107,201,253,208,43,175,89,243,126,207,144,128,48,144,9,175,145,128,48,34,129,144,160,107,201]},{"1052896":[208,3,169,4,107,201,1,208,3,169,4,107,201,2,208,3,169,2,107,169,8,107,201,254,208,44,175,22,244,126,41,192,74,74,74,74,74,74,207,146,128,48,144,9,175,147,128,48,34,129,144,160,107,201]},{"1052951":[208,3,169,4,107,201,1,208,3,169,2,107,169,8,107,201,255,208,29,175,91,243,126,207,148,128,48,144,9,175,149,128,48,34,129,144,160,107,201]},{"1052991":[208,3,169,4,107,169,2,107,201,252,208,12,175,84,243,126,208,3,169,2,107,169,8,107,201,250,208,7,34,121,212,160,76,129,144,201,251,208,7,34,53,213,160,76,129,144,107]},{"1053039":[4,2,8,4,2,8,2,4,2,2,2,4,4,4,8,8,8,2,2,4,2,2,2,4,2,4,2,8,8,4,2,10,2,4,2,4,4]},{"1053077":[4,4,8,2,2,8,4,2,8,4,4,8,8,8,4,2,8,2,4,8,2,4,4,2,2,8,8,2,4,4,8,8,8,4,4,4,2,8,8,8,8,4,8,8,8,8,4]},{"1053126":[2,6,2,2,4,8,253,254,255,252,250,251]},{"1053144":[8,8,8]},{"1053150":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,72,218,139,75,171,32,144,213,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,22,32,193,213,207,150,128,48,144,11,175,151,128,48,34,110,146,160,130,128]},{"1053352":[128,107,201,94,208,22,175,89,243,126,207,144,128,48,144,10,175,145,128,48,34,110,146,160,128,102,128,81,201,95,208,35,175,22,244,126,41,192,208,25,56,128,85,74,74,74,74,74,74,207,146,128,48,144,10,175,147,128,48,34,110,146,160,128,63,128,60,201,96,208,20,175,91,243,126,207,148,128,48,144,10,175,149,128,48,34,110,146,160,128,37,201,98,208,6,34,121,212,160,128,8,201,99,208,4,34,53,213,160,162]},{"1053463":[224,36,176,12,223,44,147,160,208,3,56,128,4,232,128,240,24,171,250,104,107,4,7,8,9,10,11,12,19,21,24,36,42,52,53,54,66,67,69,89,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,255,255,255,255,255,72,218,90,32,102,147,34,155,142,160,34,45,213]},{"1053538":[122,250,104,107,72,8,72,194,32,169]},{"1053550":[143,37,192,126,143,39,192,126,169]},{"1053560":[2,143,43,192,126,226,32,169,36,143,41,192,126,163,1,34,129,144,160,143,42,192,126,143,50,192,126,104,34,110,146,160,176,2,128,27,194,32,169]},{"1053601":[143,44,192,126,143,51,192,126,169]},{"1053611":[8,143,46,192,126,169]},{"1053618":[52,143,48,192,126,40,104,96,34,110,146,160,176,15,169,1,133,6,169,12,34,136,186,13,169,2,72,128,13,169,2,133,6,169,16,34,136,186,13,169,3,72,169,37,133,8,169,192,133,9,100,7,169,126,139,72,171,169,1,143,8,80,127,34,112,223,5,169]},{"1053687":[143,8,80,127,171,165,144,24,105,8,133,144,165,146,26,26,133,146,104,107,34,110,146,160,176,12,169,1,133,6,169,4,34,136,186,13,128,10,169,2,133,6,169,8,34,136,186,13,169,37,133,8,169,192,133,9,100,7,169,126,139,72,171,169,1,143,8,80,127,34,112,223,5,175,115,129,48,208,6,169]},{"1053768":[143,8,80,127,171,165,144,24,105,8,133,144,165,146,26,26,133,146,107,72,175,66,80,127,240,13,170,160,2]},{"1053798":[169]},{"1053801":[143,66,80,127,128,6,162,64,45,160,2]},{"1053813":[104,107,32,160,148,176,35,194,32,165,226,72,56,233,15]},{"1053829":[133,226,165,232,72,56,233,15]},{"1053838":[133,232,226,32,32,160,148,194,32,104,133,232,104,133,226,226,32,107,189,16,13,197,226,189,48,13,229,227,208,14,189]},{"1053870":[13,197,232,189,32,13,229,233,208,2,56,96,24,96,132,11,133,8,189]},{"1053890":[13,133]},{"1053893":[56,229,232,133,6,189,32,13,133,1,189,16,13,133,2,56,229,226,133,7,189,48,13,133,3,107,175,8,80,127,240,14,169]},{"1053928":[143,8,80,127,165,4,41,255,240,133,4,177,8,69,4,107,72,72,169,144,144,133,4,133,6,104,201,232,3,144,8,230,4,56,233,232,3,128,243,201,100]},{"1053970":[144,8,230,5,56,233,100]},{"1053978":[128,243,201,10]},{"1053983":[144,8,230,6,56,233,10]},{"1053991":[128,243,201,1]},{"1053996":[144,8,230,7,56,233,1]},{"1054004":[128,243,165,4,143,4,80,127,165,6,143,6,80,127,104,107,8,165,93,201,4,208,42,175,86,243,126,208,36,175,1,80,127,240,30,165,138,207,152,80,127,240,22,175,22,244,126,9,4,143,22,244,126,169]},{"1054059":[143,109,243,126,169]},{"1054065":[143,1,80,127,40,175,109,243,126,107,162]},{"1054077":[175,22,244,126,137,4,240,9,41,251,143,22,244,126,169,240,107,169,6,107,34,232,152,9,169]},{"1054103":[143,1,80,127,107,165,93,201,4,208,20,175,86,243,126,208,8,169,1,143,1,80,127,128,6,169]},{"1054130":[143,1,80,127,107,72,165,138,143,152,80,127,104,107,169,32,141,226,2,156,123,3,100,85,156,96,3,107,175,48,128,48,47,20,130,48,240,4,34,221,149,160,107,72,173]},{"1054176":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,128,141]},{"1054206":[67,141,1,67,169,64,141,129,33,169,243,141,130,33,169,126,141,131,33,156,2,67,169,30,141,3,67,169,112,141,4,67,169,128,141,5,67,169,1,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1054280":[67,104,107,8,226,32,175,202,243,126,73,64,143,202,243,126,240,4,169,7,128,2,169,3,143,199,243,126,40,107,72,175,114,129,48,240,10,104,175,139,243,126,34,136,250,13,107,104,34,136,250,13,107,175,114,129,48,240,11,169]},{"1054341":[143,23,192,126,175,139,243,126,107,169]},{"1054352":[143,23,192,126,169,255,107,218,138,10,170,175,202,243,126,73,64,208,1,232,191,96,128,48,250,107,218,175,202,243,126,41,64,208,54,175,59,128,48,240,36,175,104,243,126,15,20,244,126,41,1,208,24,218,191,77,151,160,170,191,104,243,126,31,20,244,126,250,63,87,151,160,208,3,130,98]},{"1054429":[191,66,151,160,16,3,24,128,90,170,128,52,175,59,128,48,240,36,175,104,243,126,15,20,244,126,41,2,208,24,218,191,80,151,160,170,191,104,243,126,31,20,244,126,250,63,91,151,160,208,3,130,44]},{"1054483":[191,70,151,160,170,128,3,56,250,107,191,80,128,48,41,64,208,13,175,116,243,126,63,155,160,2,208,16,24,128,14,175,122,243,126,63,155,160,2,208,3,24,128,1,56,250,107,2,10,3,255,6,8,12,11,7,9,5,1]},{"1054543":[1,1]},{"1054548":[1]},{"1054550":[1,32,32,16]},{"1054555":[2,128,8,16,1,64,4,8,226,32,175,202,243,126,73,64,208,4,169,7,128,2,169,3,143,199,243,126,40,107,175,202,243,126,41,64,240,3,169,7,107,169,3,107,175,90,128,48,41,255]},{"1054606":[208,12,175,116,243,126,47,165,160,2,41,255]},{"1054619":[107,175,122,243,126,47,165,160,2,41,255]},{"1054631":[107,194,32,175,19,130,48,41,255]},{"1054641":[240,5,169,8]},{"1054646":[128,4,175,72,128,48,73,255,255,24,105,1]},{"1054659":[24,101,234,201,24,255,176,3,169,24,255,133,234,201,24,255,226,32,208,3,238]},{"1054681":[2,107,175,19,130,48,41,255]},{"1054690":[240,5,169,8]},{"1054695":[128,7,175,72,128,48,41,255]},{"1054704":[24,101,234,48,3,169]},{"1054712":[133,234,107,175,73,128,48,208,5,165,244,41,16,107,165,240,41,16,73,16,107,173,12,4,41,255]},{"1054739":[201,255]},{"1054742":[208,1,107,175,22,244,126,41,32]},{"1054752":[240,4,169]},{"1054757":[107,173,12,4,41,255]},{"1054764":[201,255]},{"1054767":[107,218,8,226,48,173,12,4,197,31,144,26,74,170,175,111,243,126,159,124,243,126,224]},{"1054791":[208,4,143,125,243,126,224,1,208,4,143,124,243,126,34,69,232,160,40,250,107,175,69,128,48,208,6,169,8,22,133]},{"1054823":[107,169,136,21,133]},{"1054829":[107,175,69,128,48,208,6,169,16,22,133]},{"1054841":[107,169,144,21,133]},{"1054847":[107,175,69,128,48,208,6,169,24,22,133]},{"1054859":[107,169,152,21,133]},{"1054865":[107,175,69,128,48,208,6,169,32,22,133]},{"1054877":[107,169,160,21,133]},{"1054883":[107,175,69,128,48,208,1,107,8,194,48,169,80,45,141,70,22,169,84,45,141,72,22,169,81,45,141,76,22,169,82,45,141,78,22,169,83,45,141,80,22,169,85,45,141,84,22,169,86,45,141,86,22,169,87,45,141,88,22,169,88,45,141,90,22,169,89,45,141,92,22,169,90,45,141,94,22,169,91,45,141,96,22,169,92,45,141,100,22,162]},{"1054975":[169,245,36,157,134,22,157,198,22,232,232,224,32]},{"1054989":[144,240,175,22,244,126,41,32]},{"1054998":[240,3,130,200,1,175,69,128,48,41,1]},{"1055010":[208,3,130,231]},{"1055015":[169,16,40,141,132,22,226,32,169,22,24,111,125,243,126,141,134,22,169,40,105]},{"1055037":[141,135,22,169,22,24,111,128,243,126,141,136,22,169,40,105]},{"1055054":[141,137,22,169,22,24,111,126,243,126,141,140,22,169,40,105]},{"1055071":[141,141,22,169,22,24,111,127,243,126,141,142,22,169,40,105]},{"1055088":[141,143,22,169,22,24,111,134,243,126,141,144,22,169,40,105]},{"1055105":[141,145,22,169,22,24,111,130,243,126,141,148,22,169,40,105]},{"1055122":[141,149,22,169,22,24,111,129,243,126,141,150,22,169,40,105]},{"1055139":[141,151,22,169,22,24,111,132,243,126,141,152,22,169,40,105]},{"1055156":[141,153,22,169,22,24,111,135,243,126,141,154,22,169,40,105]},{"1055173":[141,155,22,169,22,24,111,133,243,126,141,156,22,169,40,105]},{"1055190":[141,157,22,169,22,24,111,131,243,126,141,158,22,169,40,105]},{"1055207":[141,159,22,169,22,24,111,136,243,126,141,160,22,169,40,105]},{"1055224":[141,161,22,169,22,24,111,137,243,126,141,164,22,169,40,105]},{"1055241":[141,165,22,194,32,175,69,128,48,41,2]},{"1055253":[208,3,130,201]},{"1055258":[169,17,40,141,196,22,175,103,243,126,41,64]},{"1055271":[240,6,169,38,40,141,198,22,175,103,243,126,41,8]},{"1055286":[240,6,169,38,40,141,200,22,175,103,243,126,41,32]},{"1055301":[240,6,169,38,40,141,204,22,175,103,243,126,41,16]},{"1055316":[240,6,169,38,40,141,206,22,175,102,243,126,41,32]},{"1055331":[240,6,169,38,40,141,208,22,175,103,243,126,41,2]},{"1055346":[240,6,169,38,40,141,212,22,175,103,243,126,41,4]},{"1055361":[240,6,169,38,40,141,214,22,175,102,243,126,41,128]},{"1055376":[240,6,169,38,40,141,216,22,175,102,243,126,41,16]},{"1055391":[240,6,169,38,40,141,218,22,175,102,243,126,41,64]},{"1055406":[240,6,169,38,40,141,220,22,175,103,243,126,41,1]},{"1055421":[240,6,169,38,40,141,222,22,175,102,243,126,41,8]},{"1055436":[240,6,169,38,40,141,224,22,175,102,243,126,41,4]},{"1055451":[240,6,169,38,40,141,228,22,175,22,244,126,41,32]},{"1055466":[208,3,130,170,1,175,69,128,48,41,4]},{"1055478":[208,3,130,201]},{"1055483":[169,33,40,141,132,22,175,105,243,126,41,64]},{"1055496":[240,6,169,38,40,141,134,22,175,105,243,126,41,8]},{"1055511":[240,6,169,38,40,141,136,22,175,105,243,126,41,32]},{"1055526":[240,6,169,38,40,141,140,22,175,105,243,126,41,16]},{"1055541":[240,6,169,38,40,141,142,22,175,104,243,126,41,32]},{"1055556":[240,6,169,38,40,141,144,22,175,105,243,126,41,2]},{"1055571":[240,6,169,38,40,141,148,22,175,105,243,126,41,4]},{"1055586":[240,6,169,38,40,141,150,22,175,104,243,126,41,128]},{"1055601":[240,6,169,38,40,141,152,22,175,104,243,126,41,16]},{"1055616":[240,6,169,38,40,141,154,22,175,104,243,126,41,64]},{"1055631":[240,6,169,38,40,141,156,22,175,105,243,126,41,1]},{"1055646":[240,6,169,38,40,141,158,22,175,104,243,126,41,8]},{"1055661":[240,6,169,38,40,141,160,22,175,104,243,126,41,4]},{"1055676":[240,6,169,38,40,141,164,22,175,69,128,48,41,8]},{"1055691":[208,3,130,201]},{"1055696":[169,32,44,141,196,22,175,101,243,126,41,64]},{"1055709":[240,6,169,38,44,141,198,22,175,101,243,126,41,8]},{"1055724":[240,6,169,38,44,141,200,22,175,101,243,126,41,32]},{"1055739":[240,6,169,38,44,141,204,22,175,101,243,126,41,16]},{"1055754":[240,6,169,38,44,141,206,22,175,100,243,126,41,32]},{"1055769":[240,6,169,38,44,141,208,22,175,101,243,126,41,2]},{"1055784":[240,6,169,38,44,141,212,22,175,101,243,126,41,4]},{"1055799":[240,6,169,38,44,141,214,22,175,100,243,126,41,128]},{"1055814":[240,6,169,38,44,141,216,22,175,100,243,126,41,16]},{"1055829":[240,6,169,38,44,141,218,22,175,100,243,126,41,64]},{"1055844":[240,6,169,38,44,141,220,22,175,101,243,126,41,1]},{"1055859":[240,6,169,38,44,141,222,22,175,100,243,126,41,8]},{"1055874":[240,6,169,38,44,141,224,22,175,100,243,126,41,4]},{"1055889":[240,6,169,38,44,141,228,22,40,107,8,139,75,171,194,48,162]},{"1055908":[191,227,157,160,157,234,18,191,247,157,160,157,42,19,191,11,158,160,157,106,19,191,31,158,160,157,170,19,191,51,158,160,157,234,19,191,71,158,160,157,42,20,191,91,158,160,157,106,20,191,111,158,160,157,170,20,191,131,158,160,157,234,20,232,232,224,20]},{"1055976":[144,186,175,116,243,126,41,4]},{"1055985":[240,24,169,43,61,141,50,19,169,44,61,141,52,19,169,45,61,141,114,19,169,46,61,141,116,19,175,116,243,126,41,2]},{"1056018":[240,24,169,43,45,141,174,19,169,44,45,141,176,19,169,45,45,141,238,19,169,46,45,141,240,19,175,116,243,126,41,1]},{"1056051":[240,24,169,43,37,141,182,19,169,44,37,141,184,19,169,45,37,141,246,19,169,46,37,141,248,19,175,122,243,126,41,2]},{"1056084":[240,12,169,68,45,141,172,20,169,69,45,141,174,20,175,122,243,126,41,16]},{"1056105":[240,12,169,68,45,141,110,20,169,69,45,141,112,20,175,122,243,126,41,64]},{"1056126":[240,12,169,68,45,141,176,20,169,69,45,141,178,20,175,122,243,126,41,32]},{"1056147":[240,12,169,68,45,141,114,20,169,69,45,141,116,20,175,122,243,126,41,4]},{"1056168":[240,12,169,68,37,141,180,20,169,69,37,141,182,20,175,122,243,126,41,1]},{"1056189":[240,12,169,68,37,141,118,20,169,69,37,141,120,20,175,122,243,126,41,8]},{"1056210":[240,12,169,68,45,141,184,20,169,69,45,141,186,20,171,40,107,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,245,36,245,36,245,36,43,49,44,49,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,61,49,46,49,245,36,245,36,245,36,252,104,252,40,245,36,43,49,44,49,245,36,245,36,43,49,44,49,245,36,252,104,252,40,245,36,61,49,46,49,245,36,245,36,61,49,46,49,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,70,49,71,49,70,49,71,49,70,49,71,49,245,36,252,104,252,40,70,49,71,49,70,49,71,49,70,49,71,49,70,49,71,49,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,33,37,34,37,35,37,36,37,63,37,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,59,33,60,33,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,61,33,62,33,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,59,33,60,33,245,36,245,36,59,33,60,33,245,36,252,104,252,40,245,36,61,33,62,33,245,36,245,36,61,33,62,33,245,36,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,47,37,52,37,53,37,54,37,55,37,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,70,49,71,49,70,49,71,49,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,70,49,71,49,70,49,71,49,70,49,71,49,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,70,49,71,49,70,49,71,49,245,36,245,36,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,194,32,165,160,201,23,1,208,6,226,32,169,160,128,76,226,32,175,132,128,48,201,160,176,66,175,146,80,127,208,23,175,132,128,48,24,111,109,243,126,207,108,243,126,144,4,175,108,243,126,143,146,80,127,175,109,243,126,207,146,80,127,144,19,169]},{"1056833":[143,114,243,126,173,10,2,208,14,169]},{"1056844":[143,146,80,127,56,107,169,8,143,114,243,126,24,107,175,109,243,126,207,108,243,126,144,21,175,108,243,126,143,109,243,126,169]},{"1056878":[143,114,243,126,173,10,2,208,8,56,107,169,160,143,114,243,126,24,107,194,32,165,160,201,23,1,208,6,226,32,169,128,128,61,226,32,175,133,128,48,201,128,176,51,175,147,80,127,208,19,175,133,128,48,24,111,110,243,126,201,128,144,2,169,128,143,147,80,127,175,110,243,126,207,147,80,127,144,8,169]},{"1056959":[143,147,80,127,56,107,169,1,143,115,243,126,24,107,226,48,175,110,243,126,201,128,176,9,169,128,143,115,243,126,226,48,107,226,49,107,218,90,8,160,255,162]},{"1057002":[165,12,201,232,3,144,3,130,24]},{"1057012":[201,100]},{"1057015":[144,3,130,97]},{"1057020":[201,10]},{"1057023":[144,3,130,170]},{"1057028":[201,1]},{"1057031":[144,3,130,243]},{"1057036":[100,10,165,12,201,232,3,144,8,56,233,232,3,230,10,128,243,133,12,192,255,208,10,160,6,165,14,24,121,145,162,133,14,165,14,159]},{"1057073":[201,126,232,232,169,56]},{"1057080":[159]},{"1057082":[201,126,232,232,164,10,152,10,168,185,125,162,159]},{"1057096":[201,126,232,232,169]},{"1057103":[159]},{"1057105":[201,126,232,232,165,14,24,105,8]},{"1057115":[133,14,100,10,165,12,201,100]},{"1057124":[144,8,56,233,100]},{"1057130":[230,10,128,243,133,12,192,255,208,10,160,4,165,14,24,121,145,162,133,14,165,14,159]},{"1057154":[201,126,232,232,169,56]},{"1057161":[159]},{"1057163":[201,126,232,232,164,10,152,10,168,185,125,162,159]},{"1057177":[201,126,232,232,169]},{"1057184":[159]},{"1057186":[201,126,232,232,165,14,24,105,8]},{"1057196":[133,14,100,10,165,12,201,10]},{"1057205":[144,8,56,233,10]},{"1057211":[230,10,128,243,133,12,192,255,208,10,160,2,165,14,24,121,145,162,133,14,165,14,159]},{"1057235":[201,126,232,232,169,56]},{"1057242":[159]},{"1057244":[201,126,232,232,164,10,152,10,168,185,125,162,159]},{"1057258":[201,126,232,232,169]},{"1057265":[159]},{"1057267":[201,126,232,232,165,14,24,105,8]},{"1057277":[133,14,100,10,165,12,201,1]},{"1057286":[144,8,56,233,1]},{"1057292":[230,10,128,243,133,12,192,255,208,10,160]},{"1057304":[165,14,24,121,145,162,133,14,165,14,159]},{"1057316":[201,126,232,232,169,56]},{"1057323":[159]},{"1057325":[201,126,232,232,164,10,152,10,168,185,125,162,159]},{"1057339":[201,126,232,232,169]},{"1057346":[159]},{"1057348":[201,126,232,232,165,14,24,105,8]},{"1057358":[133,14,226,32,138,74,74,74,133,6,10,10,72,165,34,207,34,80,127,144,13,207,35,80,127,176,7,104,34,132,186,13,128,5,104,34,128,186,13,138,74,74,74,40,122,250,96,48,2,49,2,2,2,3,2,18,2,19,2,34,2,35,2,50,2,51,2,4]},{"1057429":[252,255,248,255,218,90,8,194,48,162]},{"1057441":[191,1,200,48,197,160,208,66,191,5,200,48,41,64]},{"1057456":[208,13,175,153,80,127,41,255]},{"1057465":[223,3,200,48,208,44,226,32,191]},{"1057475":[200,48,143,80,80,127,191,5,200,48,143,81,80,127,41,3,10,10,143,96,80,127,191,6,200,48,143,99,80,127,191,7,200,48,143,98,80,127,128,33,191]},{"1057517":[200,48,41,255]},{"1057522":[201,255]},{"1057525":[240,10,232,232,232,232,232,232,232,232,128,160,226,32,169,255,143,81,80,127,130,222]},{"1057548":[226,32,162]},{"1057553":[160]},{"1057556":[152,207,96,80,127,144,3,130,172]},{"1057566":[191,1,201,48,201,255,208,3,130,161]},{"1057577":[191]},{"1057579":[201,48,207,80,80,127,240,3,130,137]},{"1057590":[191,1,201,48,218,187,159,82,80,127,250,191,2,201,48,218,187,159,83,80,127,250,191,3,201,48,218,187,159,84,80,127,250,90,218,169]},{"1057627":[235,152,74,74,24,111,98,80,127,170,191,2,243,126,187,159,85,80,127,168,250,191,4,201,48,240,43,152,223,4,201,48,144,36,122,191,5,201,48,218,187,159,82,80,127,250,191,6,201,48,218,187,159,83,80,127,250,191,7,201,48,218,187,159,84,80,127,250,128,1,122,218,90,218,187,191,82,80,127,250,168,194,32,163,1,170,191,91,164,160,170,32,122,164,122,250,200,200,200,200,232,232,232,232,232,232,232,232,130,74,255,165,160,201,255,208,13,173,55,33,173,63,33,173,61,33,201,60,144,243,169,128,141]},{"1057761":[33,32,149,164,169,15,141]},{"1057769":[33,175,81,80,127,137,32,240,14,169]},{"1057780":[235,175,98,80,127,170,191,2,243,126,128,2,169]},{"1057794":[143,95,80,127,175,82,80,127,201,255,208,12,175,95,80,127,15,181,169,160,143,95,80,127,175,86,80,127,201,255,208,12,175,95,80,127,15,182,169,160,143,95,80,127,175,90,80,127,201,255,208,12,175,95,80,127,15,183,169,160,143,95,80,127,40,122,250,175,81,80,127,201,255,208,13,104,104,104,254,160,11,189,64,14,92,241,139,6,107]},{"1057887":[128]},{"1057892":[1]},{"1057895":[169,145,143,68,80,127,169,164,143,69,80,127,169,160,143,70,80,127,96,138,24,105,128,17,143,66,80,127,226,48,152,34,155,142,160,34,45,213]},{"1057934":[194,16,96,32,149,164,107,173]},{"1057943":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,1,141]},{"1057973":[67,169,24,141,1,67,169,128,141,21,33,169,128,141,2,67,169,161,141,3,67,169,126,141,4,67,175,81,80,127,41,16,208,3,130,141]},{"1058010":[169,64,141,5,67,156,6,67,169,64,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,64,141,22,33,169,91,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,91,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,91,141,23,33,169,1,141,11,66,130,138]},{"1058151":[169,64,141,5,67,156,6,67,169,96,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,93,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,93,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,160,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,160,141,22,33,169,93,141,23,33,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1058316":[67,96,104,104,104,169,30,72,169,238,72,169,233,72,189,128,14,92,129,135]},{"1058337":[175,81,80,127,201,255,208,3,76,14,166,139,75,171,34,231,244,30,32,92,166,175,81,80,127,137,128,240,22,137,32,208,18,218,175,98,80,127,170,191,2,243,126,240,3,250,128,9,250,128]},{"1058388":[32,121,170,32,121,168,171,107,175,99,80,127,41,7,240,26,201,1,208,3,130,165]},{"1058411":[201,2,208,3,130,227]},{"1058418":[201,3,208,3,130,110,1,201,4,208,1,96,218,162]},{"1058433":[165,26,41,16,240,12,189,240,166,159]},{"1058444":[201,126,232,224,16,144,244,189]},{"1058453":[167,159]},{"1058456":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1058515":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1058546":[248,255]},{"1058551":[2]},{"1058556":[16]},{"1058559":[2]},{"1058562":[248,255]},{"1058567":[2]},{"1058572":[16,64]},{"1058575":[2,169,1,133,6,169,4,34,128,186,13,100,7,165,26,41,8,240,10,169,69,133,8,169,167,133,9,128,8,169,77,133,8,169,167,133,9,34,112,223,5,165,144,24,105,4,133,144,165,146,26,133,146,96]},{"1058633":[70,10]},{"1058636":[2]},{"1058641":[70,74]},{"1058644":[2,218,162]},{"1058648":[165,26,41,64,240,12,189,199,167,159]},{"1058659":[201,126,232,224,16,144,244,189,215,167,159]},{"1058671":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1058730":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1058761":[248,255,132]},{"1058766":[2]},{"1058771":[16]},{"1058774":[2]},{"1058777":[248,255,132]},{"1058782":[2]},{"1058787":[16,64]},{"1058790":[2,218,162]},{"1058794":[165,26,41,64,240,12,189,89,168,159]},{"1058805":[201,126,232,224,16,144,244,189,105,168,159]},{"1058817":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1058876":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1058907":[248,255,142]},{"1058912":[2]},{"1058917":[16]},{"1058920":[2]},{"1058923":[248,255,142]},{"1058928":[2]},{"1058933":[16,64]},{"1058936":[2,218,90,8,160]},{"1058942":[90,152,74,74,168,175,95,80,127,57,181,169,240,3,122,128,48,122,173,238]},{"1058963":[221,32,15,208,39,32,76,170,32,184,169,34,230,131,6,144,3,32,108,170,32,34,170,34,230,131,6,144,15,165,246,41,128,240,9,165,16,201,12,176,3,32,206,168,200,200,200,200,152,207,96,80,127,144,180,40,122,250,96,218,90,187,191,82,80,127,201,14,240,14,201,46,240,10,201,47,240,6,201,48,240,2,128,6,34,40,222,30,48,38,175,81,80,127,41,128,208,46,194,32,175,96,243,126,223,83,80,127,226,32,176,32,169,122,160,1,34,25,226,5,169,60,141,46,1,130,159]},{"1059091":[169,107,160,1,34,25,226,5,169,60,141,46,1,130,143]},{"1059107":[175,81,80,127,41,128,208,17,194,32,175,96,243,126,56,255,83,80,127,143,96,243,126,226,32,191,82,80,127,168,34,157,153,7,191,85,80,127,26,159,85,80,127,138,74,74,170,175,81,80,127,137,128,208,33,175,95,80,127,29,181,169,143,95,80,127,218,138,24,111,98,80,127,170,191,2,243,126,26,240,4,159,2,243,126,250,128,55,137,32,208,25,175,95,80,127,9,7,143,95,80,127,218,175,98,80,127,170,169,1,159,2,243,126,250,128,26,175,95,80,127,29,181,169,143,95,80,127,218,175,98,80,127,170,175,95,80,127,159,2,243,126,250,122,250,96,1,2,4,194,32,165]},{"1059260":[72,226,32,189,48,13,235,189,16,13,194,32,72,90,175,81,80,127,41,3]},{"1059281":[58,10,168,185,110,171,133]},{"1059289":[122,104,24,113]},{"1059294":[24,105,2]},{"1059298":[226,32,133,4,235,133,10,189,32,13,235,189]},{"1059311":[13,194,32,90,200,200,24,113]},{"1059320":[122,72,175,81,80,127,41,128]},{"1059329":[240,7,104,24,105,4]},{"1059336":[128,1,104,226,32,133,5,235,133,11,169,12,133,6,169,14,133,7,194,32,104,133]},{"1059359":[226,32,96,8,226,32,165,4,56,233,10,133,4,165,10,233]},{"1059376":[133,10,165,5,56,233,8,133,5,165,11,233]},{"1059389":[133,11,165,6,24,105,20,133,6,169,40,133,7,40,96,169,8,133,2,133,3,165,34,24,105,4,133]},{"1059417":[165,35,105]},{"1059421":[133,8,165,32,105,8,133,1,165,33,105]},{"1059433":[133,9,96,218,34]},{"1059439":[245,28,100,94,34,179,145,7,250,96,139,75,171,218,90,138,143,97,80,127,162]},{"1059461":[160]},{"1059463":[175,81,80,127,41,3,201,3,208,5,32,170,170,128,4,201,2,208,5,32,170,170,128,4,201,1,208,3,32,170,170,122,250,171,96,175,95,80,127,57,181,169,240,3,130,178]},{"1059510":[90,175,81,80,127,41,3,58,10,168,194,32,185,110,171,133]},{"1059527":[163,1,10,10,168,177]},{"1059534":[143,37,192,126,200,200,175,81,80,127,41,128]},{"1059547":[208,8,177]},{"1059551":[143,39,192,126,128,10,177]},{"1059559":[24,105,4]},{"1059563":[143,39,192,126,226,32,122,191,82,80,127,201,46,208,2,128,15,201,47,208,2,128,9,201,48,240,5,185,140,171,128,2,169,192,235,175,81,80,127,41,16,240,5,235,56,233,34,235,235,143,41,192,126,191,82,80,127,34,129,144,160,143,42,192,126,169]},{"1059630":[143,43,192,126,191,82,80,127,34,110,146,160,176,10,169,2,143,44,192,126,169,1,128,11,169]},{"1059656":[143,44,192,126,32,97,172,169,2,218,72,175,97,80,127,170,104,32,24,172,250,175,81,80,127,41,128,208,3,32,143,171,200,232,232,232,232,96,116,171,120,171,128,171,8]},{"1059702":[40]},{"1059704":[240,255,40]},{"1059708":[32]},{"1059710":[40]},{"1059712":[216,255,40]},{"1059716":[8]},{"1059718":[40]},{"1059720":[56]},{"1059722":[40]},{"1059724":[198,200,202,139,75,171,218,90,8,194,32,90,175,81,80,127,41,3]},{"1059743":[58,10,168,185,110,171,133]},{"1059751":[185,6,172,133,2,122,90,152,10,10,168,177]},{"1059764":[133,14,152,74,168,177,2,143,34,80,127,200,177,2,143,35,80,127,122,191,83,80,127,133,12,240,50,32,227,160,226,32,133,6,100,7,72,169]},{"1059803":[133,8,169,201,133,9,169,126,72,171,218,72,175,97,80,127,170,104,34,112,223,5,250,163,1,10,10,24,101,144,133,144,104,24,101,146,133,146,40,122,250,171,96,12,172,14,172,18,172]},{"1059853":[255]},{"1059855":[128,128,255]},{"1059859":[96,96,144,144,255,218,90,72,133,6,165,32,201,98,176,10,163,1,10,10,34,128,186,13,128,8,163,1,10,10,34,132,186,13,163,1,133,6,100,7,169,37,133,8,169,192,133,9,169,126,139,72,171,34,112,223,5,171,163,1,10,10,24,101,144,133,144,165,146,24,99,1,133,146,104,122,250,96,218,162]},{"1059940":[194,32,191,37,192,126,24,105,4]},{"1059950":[159,37,192,126,159,45,192,126,191,39,192,126,24,105,8]},{"1059966":[159,47,192,126,191,41,192,126,24,105,16]},{"1059978":[159,49,192,126,191,43,192,126,159,51,192,126,226,32,250,96,175,135,128,48,208,6,175,18,128,48,128,35,218,8,194,48,165]},{"1060012":[72,165,2,72,169,16,128,133]},{"1060021":[169,48]},{"1060024":[133,2,169,2]},{"1060029":[34,233,146,164,250,134,2,250,134,1,40,250,157,128,14,34,84,147,160,107,72,189,128,14,34,186,147,160,104,107,72,188,128,14,104,34,188,141,160,107,169,8,157,80,15,169]},{"1060076":[143]},{"1060078":[80,127,32,53,173,34,84,147,160,107,72,175]},{"1060091":[80,127,240,6,34,234,172,160,128,7,32,53,173,34,11,148,160,104,107,32,53,173,201,36,208,24,90,160,36,34,4,181,160,122,175,111,243,126,26,143,111,243,126,169,47,34,138,187,13,107,90,168,34,157,153,7,122,107,165,160,201,115,208,6,175,96,129,48,128,12,201,140,208,6,175,97,129,48,128,2,169,36,96,185,121,55,158,218,173,228,80,133,8,173,230,80,133,10,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,173,224,80,133,12,173,226,80,133,14,24,165,12,42,133,12,165,14,42,133,14,24,165,12,42,133,12,165,14,42,133,14,165,8,69,12,141,242,80,165,10,69,14,141,244,80,173,228,80,133,8,173,230,80,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,173,224,80,133,12,173,226,80,133,14,24,165,14,106,133,14,165,12,106,133,12,24,165,14,106,133,14,165,12,106,133,12,24,165,14,106,133,14,165,12,106,133,12,165,8,69,12,141,246,80,165,10,69,14,141,248,80,173,242,80,24,109,246,80,141,242,80,173,244,80,109,248,80,141,244,80,173,232,80,77,224,80,133,8,173,234,80,77,226,80,133,10,173,236,80,41,3]},{"1060442":[77,240,80,10,10,170,189,208,80,77,228,80,133,12,189,210,80,77,230,80,133,14,165,8,24,101,12,141,246,80,165,10,101,14,141,248,80,173,242,80,77,246,80,133,8,173,244,80,77,248,80,133,10,250,96,8,139,226,48,169,127,72,171,100,5,162]},{"1060509":[191,102,175,160,197,4,144,3,232,128,245,191,103,175,160,133,6,100,7,194,32,138,10,10,170,191,104,175,160,141,232,80,191,106,175,160,141,234,80,173]},{"1060550":[81,141,224,80,173,2,81,141,226,80,173,232,80,74,74,41,3]},{"1060568":[141,240,80,165,4,58,141,236,80,240,56,10,10,170,189,252,80,141,228,80,189,254,80,141,230,80,32,82,173,173,236,80,10,10,170,189]},{"1060605":[81,56,229,8,157]},{"1060611":[81,141,224,80,189,2,81,229,10,157,2,81,141,226,80,173,236,80,58,141,236,80,128,198,165,4,58,10,10,170,189]},{"1060643":[81,141,228,80,189,2,81,141,230,80,32,82,173,173]},{"1060658":[81,56,229,8,141]},{"1060664":[81,141,224,80,173,2,81,229,10,141,2,81,141,226,80,173,232,80,56,239,78,173,160,141,232,80,173,234,80,239,80,173,160,141,234,80,198,6,240,3,130,109,255,171,40,107,1,32,32,55,239,198,72,175,17,244,126,9,1,143,17,244,126,104,107,72,175,17,244,126,9,2,143,17,244,126,104,107,175,17,244,126,41,1,107,175,17,244,126,41,2,107,34,155,142,160,72,165,138,201,3,240,6,34,121,175,160,128,4,34,108,175,160,104,107,34,26,135,160,72,34,84,147,160,169,1,143,51,80,127,143,52,80,127,34,148,175,160,169,235,143]},{"1060806":[254,127,34,93,246,29,104,153,128,14,165,34,153,16,13,165,35,153,48,13,165,32,153]},{"1060830":[13,165,33,153,32,13,169]},{"1060838":[153,32,15,169,127,153,112,15,107,72,8,34,25,176,160,144,31,156,18,1,156,239,3,169]},{"1060863":[133,93,194,32,165,138,201,48]},{"1060872":[208,10,226,32,169,2,133,47,169,60,133,70,226,32,40,104,107,194,32,165,138,201,3]},{"1060896":[208,13,165,34,201,98,7,176,4,56,130,19]},{"1060909":[128,16,201,48]},{"1060914":[208,11,165,34,201]},{"1060920":[2,144,4,56,130,1]},{"1060927":[24,226,32,107,191,200,204,160,145,146,107,201,2,240,44,194,32,165,8,133]},{"1060948":[226,32,34,16,247,8,169,52,145,144,200,191,200,205,160,16,2,165,116,10,9,48,145,144,200,90,152,56,233,4,74,74,168,169]},{"1060983":[145,146,122,107,175,36,128,48,143,114,243,126,107,175,36,128,48,143,114,243,126,175,37,128,48,143,115,243,126,107,175,36,128,48,240,10,175,109,243,126,207,108,243,126,208,17,175,37,128,48,240,8,175,110,243,126,201,128,208,3,169]},{"1061045":[107,169,1,107,175,126,129,48,208,7,169,72,34,240,225,5,107,90,34,47,241,6,144,88,175,92,243,126,201,2,208,5,169,28,72,128,55,175,93,243,126,201,2,208,5,169,29,72,128,42,175,94,243,126,201,2,208,5,169,30,72,128,29,175,95,243,126,201,2,208,5,169,31,72,128,16,169,10,157,128,13,169,81,160,1,34,240,225,5,76,33,177,169,2,157,128,13,100,47,169,1,141,228,2,104,141,232,28,158,176,14,24,122,107,165,160,201,21,8,208,83,169,114,34,93,246,29,173,216,15,153,16,13,173,217,15,153,48,13,173,218,15,56,233,64,153]},{"1061192":[13,173,219,15,233]},{"1061198":[153,32,13,169,1,153,160,13,169,187,34,93,246,29,169,8,153,208,13,173,216,15,153,16,13,173,217,15,153,48,13,173,218,15,56,233,32,153]},{"1061237":[13,173,219,15,233]},{"1061243":[153,32,13,158,208,13,40,107,175,1,254,127,207,32,128,48,176,5,34,113,186,13,107,175]},{"1061268":[254,127,208,245,169,4,107,34,10,218,160,173,196,4,207,33,128,48,240,15,34,113,186,13,41,7,201,7,240,19,34,28,218,160,107,169,51,133,200,173,3,4,41,64,208,3,169,7,107,34,28,218,160,34,113,186,13,41,7,201,7,208,2,169]},{"1061333":[107,169]},{"1061336":[128,107,169,1,128,103,165,160,201,32,208,51,169,2,34,74,178,160,72,175,134,128,48,240,4,104,9,1,107,104,107,169,3,128,74,169,4,128,70,169,5,128,66,169,6,128,62,169,7,128,58,169,8,128,54,169,9,128,50,169,10,128,46,169,11,34,74,178,160,72,175,134,128,48,240,4,104,9,1,107,104,107,169,12,128,23,169,13,128,19,169,14,34,74,178,160,72,175,134,128,48,240,4,104,41,254,107,104,107,34,74,178,160,107,218,8,194,32,41,127]},{"1061457":[10,170,191]},{"1061461":[82,127,26,41,255,3,159]},{"1061469":[82,127,170,10,191]},{"1061475":[128,175,40,250,107,218,8,194,48,162]},{"1061487":[191,159,178,160,159]},{"1061493":[82,127,232,232,191,159,178,160,159]},{"1061503":[82,127,232,232,191,159,178,160,159]},{"1061513":[82,127,232,232,191,159,178,160,159]},{"1061523":[82,127,232,232,224,127]},{"1061530":[144,211,40,250,107]},{"1061537":[64]},{"1061539":[128]},{"1061541":[192]},{"1061544":[1,64,1,128,1,192,1]},{"1061552":[2,64,2,128,2,192,2]},{"1061560":[3,64,3,128,3,192,3,165,138,201,112,208,25,175,240,242,126,41,32,208,17,160,2,34,241,182,8,144,9,169,3,141,198,4,100,176,100,200,107,165,138,201,71,208,25,175,199,242,126,41,32,208,17,160,3,34,241,182,8,144,9,169,4,141,198,4,100,176,100,200,107,100,80,156,193,15,72,175,34,128,48,208,4,34,191,178,160,175,35,128,48,208,4,34,223,178,160,104,107,72,169]},{"1061662":[143,65,80,127,175,34,128,48,201,1,208,4,34,191,178,160,175,35,128,48,201,1,208,4,34,223,178,160,104,107,72,175,34,128,48,201,2,208,4,34,191,178,160,175,35,128,48,201,2,208,4,34,223,178,160,104,107,165,244,137,64,208,63,137,32,208,39,165,240,137,32,208,31,175,22,244,126,41,32,240,19,175,22,244,126,41,223,143,22,244,126,165,27,240,5,169,32,141,47,1,34,65,223,13,24,107,175,22,244,126,9,32,143,22,244,126,169,32,141,47,1,34,65,223,13,107,169,16,141,7,2,173,2,2,201,2,208,28,175,140,243,126,41,192,201,192,208,108,175,65,243,126,73,3,143,65,243,126,169,32,141,47,1,130,205]},{"1061828":[201,1,208,84,175,142,243,126,41,192,201,192,208,76,218,162]},{"1061845":[224,10,176,13,189,74,12,201,9,208,3,250,128,95,232,128,239,250,175,129,129,48,240,23,165,160,5,161,240,17,175,64,243,126,201,3,144,35,56,233,2,143,64,243,126,128,62,175,64,243,126,56,233,1,73,2,24,105,1,143,64,243,126,169,32,141,47,1,130,117]},{"1061916":[128,2,128,34,201,5,208,28,175,140,243,126,41,48,201,48,208,240,175,68,243,126,73,3,143,68,243,126,169,32,141,47,1,130,81]},{"1061952":[128,2,128,72,201,13,208,56,173,122,3,201,1,240,61,175,140,243,126,137,4,240,53,41,3,240,49,175,76,243,126,201,1,208,16,175,140,243,126,41,1,240,4,169,3,128,6,169,2,128,2,169,1,143,76,243,126,169,32,141,47,1,128,17,201,16,208,8,34,147,180,160,128,7,24,107,169,60,141,46,1,56,107,165,244,41,64,240,37,175,79,243,126,240,28,218,26,201,5,144,2,169,1,170,191,91,243,126,208,2,162,1,138,143,79,243,126,169,32,141,47,1,250,169]},{"1062077":[107,165,244,41,12,107,165,246,41,64,240,15,169,16,141,7,2,169,32,141,47,1,169,7,141]},{"1062103":[2,107,165,246,41,64,240,19,169,16,141,7,2,169,32,141,47,1,238]},{"1062123":[2,156,5,2,169]},{"1062129":[107,165,244,41,12,107,175,67,244,126,240,1,107,72,218,8,76,220,181,72,218,8,192,12,208,13,175,140,243,126,9,128,143,140,243,126,130,196]},{"1062168":[192,42,208,13,175,140,243,126,9,64,143,140,243,126,130,179]},{"1062185":[192,41,208,13,175,140,243,126,9,32,143,140,243,126,130,162]},{"1062202":[192,13,208,13,175,140,243,126,9,16,143,140,243,126,130,145]},{"1062219":[192,19,208,13,175,140,243,126,9,4,143,140,243,126,130,128]},{"1062236":[192,20,208,13,175,140,243,126,9,2,143,140,243,126,130,111]},{"1062253":[192,74,208,13,175,140,243,126,9,1,143,140,243,126,130,94]},{"1062270":[192,11,208,19,175,117,129,48,208,10,175,142,243,126,9,128,143,142,243,126,130,71]},{"1062293":[192,58,208,13,175,142,243,126,9,128,143,142,243,126,130,54]},{"1062310":[192,59,208,13,175,142,243,126,9,64,143,142,243,126,130,37]},{"1062327":[192,67,208,19,175,117,129,48,240,10,175,142,243,126,9,128,143,142,243,126,130,14]},{"1062350":[192,88,208,10,175,142,243,126,9,64,143,142,243,126,175,67,244,126,240,3,130,188,4,192,32,208,3,130,118,2,192,38,208,3,130,111,2,192,46,208,3,130,104,2,192,47,208,3,130,97,2,192,48,208,3,130,90,2,192,55,208,3,130,83,2,192,56,208,3,130,76,2,192,57,208,3,130,69,2,192]},{"1062431":[208,3,130,62,2,192,4,144,14,192,73,240,10,192,80,240,6,192,94,240,2,128,3,130,103]},{"1062457":[192,59,208,3,130,96]},{"1062464":[165,27,240,92,173,233,2,201,1,240,85,8,194,32,173,142,4,201,18,1,208,3,130,67]},{"1062489":[201,15,1,208,3,130,59]},{"1062497":[201,16,1,208,3,130,51]},{"1062505":[201,28,1,208,3,130,43]},{"1062513":[201,31,1,208,3,130,35]},{"1062521":[201,255]},{"1062524":[208,3,130,27]},{"1062529":[201,20,1,208,3,130,19]},{"1062537":[201,21,1,208,3,130,11]},{"1062545":[201,22,1,208,3,130,3]},{"1062553":[40,128,4,40,130,1,4,165,27,208,3,130,134,1,226,32,173,12,4,201]},{"1062574":[208,2,128,4,201,2,208,21,192,50,208,3,130,165,1,175,52,244,126,24,105,16,143,52,244,126,130,98,1,201,4,208,30,175,54,244,126,26,41,7,170,175,54,244,126,41,248,143,54,244,126,138,15,54,244,126,143,54,244,126,130,64,1,201,6,208,14,175,53,244,126,24,105,32,143,53,244,126,130,46,1,201,8,208,30,175,53,244,126,26,41,3,170,175,53,244,126,41,252,143,53,244,126,138,15,53,244,126,143,53,244,126,130,12,1,201,10,208,34,72,218,175,57,244,126,26,41,15,170,175,57,244,126,41,240,143,57,244,126,138,15,57,244,126,143,57,244,126,250,104,130,230]},{"1062727":[201,12,208,34,72,218,175,52,244,126,26,41,15,170,175,52,244,126,41,240,143,52,244,126,138,15,52,244,126,143,52,244,126,250,104,130,192]},{"1062765":[201,14,208,34,72,218,175,56,244,126,26,41,15,170,175,56,244,126,41,240,143,56,244,126,138,15,56,244,126,143,56,244,126,250,104,130,154]},{"1062803":[201,16,208,14,175,55,244,126,24,105,16,143,55,244,126,130,136]},{"1062821":[201,18,208,14,175,56,244,126,24,105,16,143,56,244,126,130,118]},{"1062839":[201,20,208,32,175,53,244,126,24,105,4,41,28,170,175,53,244,126,41,227,143,53,244,126,138,15,53,244,126,143,53,244,126,130,82]},{"1062875":[201,22,208,34,72,218,175,55,244,126,26,41,15,170,175,55,244,126,41,240,143,55,244,126,138,15,55,244,126,143,55,244,126,250,104,130,44]},{"1062913":[201,24,208,14,175,57,244,126,24,105,16,143,57,244,126,130,26]},{"1062931":[201,26,208,22,175,54,244,126,24,105,8,143,54,244,126,175,102,243,126,41,4,208,3,32,143,188,192,59,208,10,175,42,244,126,137,32,240,2,128,39,175,85,243,126,208,9,175,50,244,126,26,143,50,244,126,175,83,243,126,208,9,175,51,244,126,26,143,51,244,126,175,35,244,126,26,143,35,244,126,192]},{"1063012":[208,9,32,41,187,32,90,187,130,50,2,192,1,208,6,32,41,187,130,40,2,192,2,208,6,32,41,187,130,30,2,192,3,208,6,32,41,187,130,20,2,192,4,208,6,32,90,187,130,10,2,192,5,208,6,32,90,187,130]},{"1063072":[2,192,6,208,6,32,90,187,130,246,1,192,7,144,10,192,14,176,6,32,139,187,130,232,1,192,20,208,9,32,231,186,32,139,187,130,219,1,192,15,144,10,192,23,176,6,32,139,187,130,205,1,192,23,208,6,32,239,187,130,195,1,192,24,144,10,192,26,176,6,32,139,187,130,181,1,192,26,208,9,32,8,187,32,139,187,130,168,1,192,29,208,6,32,139,187,130,158,1,192,27,144,10,192,32,176,6,32,151,187,130,144,1,192,32,208,6,32,23,188,130,134,1,192,33,208,6,32,139,187,130,124,1,192,34,144,10,192,36,176,6,32,51,188,130,110,1,192,36,208,6,32,67,188,130,100,1,192,37,208,6,32,99,188,130,90,1,192,38,208,3,130,83,1,192,39,208,6,32,171,188,130,73,1,192,40,208,6,32,171,188,130,63,1,192,41,208,6,32,139,187,130,53,1,192,42,144,10,192,46,176,6,32,139,187,130,39,1,192,49,208,6,32,171,188,130,29,1,192,50,208,6,32,131,188,130,19,1,192,51,208,6,32,193,188,130,9,1,192,55,144,10,192,58,176,6,32,179,187,130,251]},{"1063334":[192,58,144,10,192,60,176,6,32,120,187,130,237]},{"1063348":[192,60,208,6,32,139,187,130,227]},{"1063358":[192,61,208,6,32,139,187,130,217]},{"1063368":[192,62,144,10,192,64,176,6,32,11,188,130,203]},{"1063382":[192,72,208,6,32,139,187,130,193]},{"1063392":[192,73,208,6,32,41,187,130,183]},{"1063402":[192,74,208,9,32,231,186,32,139,187,130,170]},{"1063415":[192,75,208,9,32,198,186,32,151,187,130,157]},{"1063428":[192,76,208,9,32,207,187,32,171,188,130,144]},{"1063441":[192,77,144,10,192,80,176,6,32,207,187,130,130]},{"1063455":[192,80,208,6,32,41,187,130,120]},{"1063465":[192,81,144,10,192,85,176,6,32,207,187,130,106]},{"1063479":[192,88,208,6,32,120,187,130,96]},{"1063489":[192,94,208,6,32,41,187,130,86]},{"1063499":[192,95,208,6,32,90,187,130,76]},{"1063509":[192,96,208,6,32,51,188,130,66]},{"1063519":[192,97,208,6,32,151,187,130,56]},{"1063529":[192,112,144,10,192,128,176,6,32,193,188,130,42]},{"1063543":[192,128,144,10,192,144,176,6,32,99,188,130,28]},{"1063557":[192,144,144,10,192,160,176,6,32,131,188,130,14]},{"1063571":[192,160,144,10,192,176,176,6,32,67,188,130]},{"1063585":[40,250,104,107,194,32,175,88,244,126,208,22,175,90,244,126,208,16,175,62,244,126,143,88,244,126,175,64,244,126,143,90,244,126,226,32,96,194,32,175,92,244,126,208,22,175,94,244,126,208,16,175,62,244,126,143,92,244,126,175,64,244,126,143,94,244,126,226,32,96,194,32,175,96,244,126,208,22,175,98,244,126,208,16,175,62,244,126,143,96,244,126,175,64,244,126,143,98,244,126,226,32,96,194,32,175,100,244,126,208,22,175,102,244,126,208,16,175,62,244,126,143,100,244,126,175,64,244,126,143,102,244,126,226,32,96,32,165,186,152,201,80,208,2,169,1,201,73,208,2,169]},{"1063737":[26,207,23,244,126,144,14,72,175,23,244,126,41,248,3,1,143,23,244,126,104,175,34,244,126,24,105,32,143,34,244,126,96,175,34,244,126,24,105,8,41,24,170,175,34,244,126,41,231,143,34,244,126,138,15,34,244,126,143,34,244,126,96,192,59,208,15,175,42,244,126,137,32,240,1,96,9,32,143,42,244,126,175,33,244,126,24,105,8,143,33,244,126,96,175,33,244,126,26,41,7,170,175,33,244,126,41,248,143,33,244,126,138,15,33,244,126,143,33,244,126,96,175,41,244,126,26,41,3,170,175,41,244,126,41,252,143,41,244,126,138,15,41,244,126,143,41,244,126,96,72,218,175,82,244,126,26,41,15,170,175,82,244,126,41,240,143,82,244,126,138,15,82,244,126,143,82,244,126,250,104,96,175,72,244,126,26,41,31,170,175,72,244,126,41,224,143,72,244,126,138,15,72,244,126,143,72,244,126,96,175,41,244,126,24,105,16,143,41,244,126,96,175,34,244,126,26,41,7,170,175,34,244,126,41,248,143,34,244,126,138,15,34,244,126,143,34,244,126,96,175,36,244,126,24,105,64,143,36,244,126,96,32,67,188,107,72,218,175,36,244,126,26,41,63,170,175,36,244,126,41,192,143,36,244,126,138,15,36,244,126,143,36,244,126,250,104,96,72,218,175,40,244,126,26,41,15,170,175,40,244,126,41,240,143,40,244,126,138,15,40,244,126,143,40,244,126,250,104,96,175,39,244,126,24,105,16,143,39,244,126,96,175,42,244,126,26,41,31,170,175,42,244,126,41,224,143,42,244,126,138,15,42,244,126,143,42,244,126,96,175,42,244,126,41,128,208,13,175,42,244,126,9,128,143,42,244,126,32,139,187,96,175,40,244,126,24,105,16,143,40,244,126,96,32,209,188,107,175,89,243,126,208,12,175,82,244,126,24,105,16,143,82,244,126,96,201,255,240,240,201,1,208,12,175,37,244,126,24,105,16,143,37,244,126,96,201,2,208,32,72,218,175,37,244,126,26,41,15,170,175,37,244,126,41,240,143,37,244,126,138,15,37,244,126,143,37,244,126,250,104,96,201,3,208,12,175,38,244,126,24,105,16,143,38,244,126,96,201,4,208,31,72,218,175,38,244,126,26,41,15,170,175,38,244,126,41,240,143,38,244,126,138,15,38,244,126,143,38,244,126,250,104,96,175,67,243,126,208,17,175,117,243,126,240,11,58,143,117,243,126,169,1,143,67,243,126,34,127,219,13,34,69,232,160,107,143,117,243,126,173,3,3,208,14,169,4,141,2,2,169,1,141,3,3,34,120,250,13,107,173,2,2,41,255]},{"1064333":[201,2]},{"1064336":[208,14,175,140,243,126,41,192]},{"1064345":[201,192]},{"1064348":[240,79,128,64,201,1]},{"1064355":[208,14,175,142,243,126,41,192]},{"1064364":[201,192]},{"1064367":[240,60,128,45,201,5]},{"1064374":[208,14,175,140,243,126,41,48]},{"1064383":[201,48]},{"1064386":[240,41,128,26,201,13]},{"1064393":[208,16,175,140,243,126,137,4]},{"1064402":[240,12,41,3]},{"1064407":[208,20,128,5,201,16]},{"1064414":[240,5,169,96,124,128,19,173,7,2,41,32]},{"1064427":[208,5,169,79,61,128,6,32,252,189,169,62,45,153,196,255,107,185,192,255,41,255,239,153,192,255,185,194,255,41,255,239,153,194,255,185,254,255,41,255,239,153,254,255,185,4]},{"1064474":[41,255,239,153,4]},{"1064480":[185,62]},{"1064483":[41,255,239,153,62]},{"1064489":[185,68]},{"1064492":[41,255,239,153,68]},{"1064498":[185,128]},{"1064501":[41,255,239,153,128]},{"1064507":[185,130]},{"1064510":[41,255,239,153,130]},{"1064516":[185,190,255,41,255,239,153,190,255,185,196,255,41,255,239,153,196,255,185,132]},{"1064537":[41,255,239,153,132]},{"1064543":[185,126]},{"1064546":[41,255,239,153,126]},{"1064552":[96,175,140,243,126,41,252,9,1,143,140,243,126,169,3,143,76,243,126,107,175,114,129,48,240,1,107,173,12,4,201,255,107,165,4,41,255]},{"1064590":[201,144]},{"1064593":[208,3,169,127]},{"1064598":[9]},{"1064600":[36,143,100,199,126,165,5,41,255]},{"1064610":[9]},{"1064612":[36,143,102,199,126,107,175,114,129,48,240,5,175,139,243,126,107,191,124,243,126,107,72,175,114,129,48,240,6,104,143,139,243,126,107,104,159,124,243,126,107,72,34,141,234,160,34,81,130,160,32,222,128,175,114,129,48,240,10,104,175,139,243,126,143,111,243,126,107,104,143,111,243,126,107,100,2,100,3,194,48,107,34,93,246,29,175,135,128,48,208,6,175,20,128,48,128,35,218,8,194,48,165]},{"1064716":[72,165,2,72,169,16,128,133]},{"1064725":[169,48]},{"1064728":[133,2,169,4]},{"1064733":[34,233,146,164,250,134,2,250,134,1,40,250,153,160,13,34,84,147,160,107,159,92,243,126,72,175,79,243,126,208,6,138,26,143,79,243,126,104,107,173,218,2,208,28,175]},{"1064779":[80,127,240,15,189,160,13,34,84,147,160,169]},{"1064792":[143]},{"1064794":[80,127,128,7,189,160,13,34,186,147,160,107,169]},{"1064808":[157,192,13,72,169,1,143]},{"1064816":[80,127,165,93,201,20,240,60,169]},{"1064826":[143]},{"1064828":[80,127,175,135,128,48,208,6,175,19,128,48,128,35,218,8,194,48,165]},{"1064848":[72,165,2,72,169,16,128,133]},{"1064857":[169,48]},{"1064860":[133,2,169,3]},{"1064865":[34,233,146,164,250,134,2,250,134,1,40,250,157,128,14,34,84,147,160,104,107,72,90,175]},{"1064890":[80,127,240,6,34,107,191,160,128,7,189,128,14,34,186,147,160,122,104,107,188,160,13,208,48,175,135,128,48,208,6,175,20,128,48,128,35,218,8,194,48,165]},{"1064933":[72,165,2,72,169,16,128,133]},{"1064942":[169,48]},{"1064945":[133,2,169,4]},{"1064950":[34,233,146,164,250,134,2,250,134,1,40,250,168,156,233,2,34,157,153,7,34,18,142,160,107,175,140,243,126,41,223,143,140,243,126,41,16,240,7,169,2,143,68,243,126,107,169]},{"1064998":[143,68,243,126,107,175,123,243,126,41,255]},{"1065010":[201,2]},{"1065013":[240,22,169,247,40,143,4,199,126,169,81,40,143,6,199,126,169,250,40,143,8,199,126,107,169,247,40,143,4,199,126,169]},{"1065046":[40,143,6,199,126,169,1,40,143,8,199,126,107,143]},{"1065061":[254,127,72,169,27,141,47,1,104,107,224,7,208,12,165,160,201,6,208,6,169,27,141,47,1,107,169,14,141,47,1,107,169,1,143]},{"1065097":[80,127,173,252,3,240,7,34,75,253,29,130,144]},{"1065111":[173,91,3,41,1,208,3,130,134]},{"1065121":[90,8,139,75,171,226,48,165,27,240,3,76,36,193,165,138,201,42,240,111,201,104,240,107,34,113,186,13,137,3,208,99,74,74,170,191]},{"1065158":[129,48,143]},{"1065162":[254,127,34,93,246,29,162]},{"1065170":[165,47,201,4,240,1,232,191,40,193,160,153,80,13,169]},{"1065186":[153,64,13,169,24,153,128,15,169,255,153,88,11,169,48,153,16,15,165,34,24,127,42,193,160,41,240,153,16,13,165,35,105]},{"1065220":[153,48,13,165,32,24,105,22,41,240,153]},{"1065232":[13,165,33,105]},{"1065237":[153,32,13,169]},{"1065242":[153,32,15,187,169,48,34,138,187,13,171,40,122,107,240,16]},{"1065259":[19,175,204,243,126,201,8,240,10,201,7,240,6,201,12,240,2,24,107,56,107,175,197,243,126,201,2,176,20,169]},{"1065290":[143,200,80,127,143,201,80,127,143,202,80,127,169,2,143,197,243,126,107,169]},{"1065311":[143,145,80,127,156,216,2,156,218,2,100,46,169,2,133,47,175,122,243,126,41,127,201,127,208,6,169,8,143,199,243,126,34,206,149,160,92,53,207,30,175,195,225,29,34,84,147,160,107,189,144,13,201,255,208,4,92,78,223,29,201]},{"1065373":[92,82,223,29,175,133,225,29,34,84,147,160,107,165,138,201,129,208,12,169,1,143]},{"1065396":[80,127,175,195,225,29,128,4,175,133,225,29,34,186,147,160,107,34,157,153,7,165,138,201,129,208,6,34,111,141,160,128,4,34,175,141,160,107,165,138,201,42,240,1,107,165,27,240,1,107,175,135,128,48,208,6,175,74,129,48,128,35,218,8,194,48,165]},{"1065464":[72,165,2,72,169,64,129,133]},{"1065473":[169,48]},{"1065476":[133,2,169,10]},{"1065481":[34,233,146,164,250,134,2,250,134,1,40,250,34,84,147,160,169,235,143]},{"1065501":[254,127,34,93,246,29,162]},{"1065509":[165,47,201,4,240,1,232,191,130,194,160,153,80,13,169]},{"1065525":[153,64,13,169,24,153,128,15,169,255,153,88,11,169,48,153,16,15,165,34,24,127,132,194,160,41,240,153,16,13,165,35,105]},{"1065559":[153,48,13,165,32,24,105,22,41,240,153]},{"1065571":[13,165,33,105]},{"1065576":[153,32,13,169]},{"1065581":[153,32,15,187,166,138,191,128,242,126,41,64,208,6,169,27,34,138,187,13,107,240,16]},{"1065605":[19,165,16,201,26,240,9,169,1,141,221,15,92,93,175,6,189,128,13,201,3,92,94,175,6,175,74,128,48,240,56,175,76,243,126,201,3,240,48,165,138,201,24,208,42,194,32,165,32,201,96,7,144,33,201,224,7,176,28,165,34,201,207,1,144,21,201,48,2,176,16,226,32,169,45,133,17,160]},{"1065684":[169,55,34,253,140,9,128,10,226,32,169,128,141,240,3,169,19,107,226,32,169,128,141,240,3,169]},{"1065711":[107,173,12,4,201,8,240,8,191,252,198,1,34,29,165,5,107,34,81,141,160,175,135,128,48,208,6,175,21,128,48,128,35,218,8,194,48,165]},{"1065750":[72,165,2,72,169,16,128,133]},{"1065759":[169,48]},{"1065762":[133,2,169,5]},{"1065767":[34,233,146,164,250,134,2,250,134,1,40,250,201,255,240,9,168,156,233,2,34,157,153,7,107,175,210,251,5,143,123,243,126,107,201,12,208,6,160,92,92,71,213]},{"1065811":[201,35,208,6,160,93,92,71,213]},{"1065821":[201,72,208,6,160,96,92,71,213]},{"1065831":[201,36,176,6,160,91,92,71,213]},{"1065841":[201,55,176,6,160,92,92,71,213]},{"1065851":[201,57,176,6,160,93,92,71,213]},{"1065861":[160,50,92,71,213]},{"1065867":[192,9,48]},{"1065871":[96]},{"1065873":[144]},{"1065875":[192]},{"1065878":[3,24,3,48,3,72,3,96,3,120,3,144,3,48,9,240,3,32,4,80,4,104,4]},{"1065902":[6,48,6,96,6,144,6,192,6,240,6,32,7,80,7,104,7]},{"1065920":[9,48,9,96,9,144,9,240,9]},{"1065931":[240]},{"1065933":[32,10,80,10,96,6]},{"1065940":[6,24,6,48,6,72,6,120,6,216,6,168,6,8,7,56,7,104,7,96,9]},{"1065962":[9,192,3,144,9,168,9,192,9,216,9,8,10,56,10]},{"1065978":[6,48,6]},{"1065982":[6,48,6,96,6,144,6,192,6,240,6,32,7,80,7]},{"1065998":[9,216,9,48,9,96,9,144,9,192,9,240,9,192,9,32,10,80,10,165]},{"1066019":[127,139,195,160,107,165]},{"1066026":[72,165,1,72,165,2,72,90,8,139,169,175,72,171,173,216,2,201,224,208,68,194,48,175,80,244,126,10,170,191]},{"1066057":[132,175,24,105]},{"1066062":[136,133]},{"1066065":[226,32,169,175,133,2,34,67,221,160,175,80,244,126,26,143,80,244,126,226,16,175,103,129,48,240,19,175,24,244,126,26,143,24,244,126,207,103,129,48,144,4,34,225,213,160,162,1,128,2,162]},{"1066117":[171,40,122,104,133,2,104,133,1,104,133]},{"1066129":[96,218,173,216,2,34,121,221,160,201,11,208,23,175,142,243,126,41,64,240,12,175,129,129,48,208,6,169,3,143,64,243,126,130,94,3,201,76,208,20,169,50,56,239,52,128,48,143,112,243,126,169,50,143,117,243,126,130,70,3,201,77,208,20,169,70,56,239,53,128,48,143,113,243,126,169,70,143,118,243,126,130,46,3,201,78,208,22,175,123,243,126,201,2,176,5,26,143,123,243,126,169,128,143,115,243,126,130,20,3,201,79,208,15,169,2,143,123,243,126,169,128,143,115,243,126,130,1,3,201,80,208,17,175,89,243,126,201,2,176,9,169,2,143,89,243,126,130,236,2,201,81,208,22,175,112,243,126,24,105,5,143,112,243,126,175,128,128,48,143,117,243,126,130,210,2,201,82,208,22,175,112,243,126,24,105,10,143,112,243,126,175,129,128,48,143,117,243,126,130,184,2,201,83,208,22,175,113,243,126,24,105,5,143,113,243,126,175,130,128,48,143,118,243,126,130,158,2,201,84,208,22,175,113,243,126,24,105,10,143,113,243,126,175,131,128,48,143,118,243,126,130,132,2,201,85,208,27,175,97,128,48,208,14,175,98,128,48,208,8,175,99,128,48,208,2,128,4,34,96,128,48,130,101,2,201,86,208,27,175,102,128,48,208,14,175,103,128,48,208,8,175,104,128,48,208,2,128,4,34,101,128,48,130,70,2,201,87,208,27,175,107,128,48,208,14,175,108,128,48,208,8,175,109,128,48,208,2,128,4,34,106,128,48,130,39,2,201,88,208,43,175,129,129,48,208,25,175,130,129,48,41,1,240,17,175,64,243,126,240,11,201,3,176,7,24,105,2,143,64,243,126,175,117,129,48,240,6,169,1,143,118,243,126,201,89,208,20,194,32,175,96,243,126,56,239,54,128,48,143,96,243,126,226,32,130,224,1,201,90,208,3,130,217,1,201,91,208,32,194,32,175,84,244,126,24,111]},{"1066567":[130,48,143,84,244,126,175,86,244,126,111,2,130,48,143,86,244,126,226,32,130,181,1,201,92,208,32,194,32,175,84,244,126,24,111,4,130,48,143,84,244,126,175,86,244,126,111,6,130,48,143,86,244,126,226,32,130,145,1,201,93,208,32,194,32,175,84,244,126,24,111,8,130,48,143,84,244,126,175,86,244,126,111,10,130,48,143,86,244,126,226,32,130,109,1,201,94,208,3,130,102,1,201,95,208,3,130,95,1,201,96,208,3,130,88,1,201,97,208,3,130,81,1,201,98,208,3,130,74,1,201,99,208,3,130,67,1,201,106,208,7,34,225,213,160,130,56,1,201,107,208,2,128,4,201,108,208,28,175,103,129,48,240,19,175,24,244,126,26,143,24,244,126,207,103,129,48,144,4,34,225,213,160,130,18,1,201,112,144,63,201,128,176,59,41,15,201,8,176,22,170,169,1,224]},{"1066772":[240,4,10,202,128,248,15,104,243,126,143,104,243,126,130,238]},{"1066789":[56,233,8,170,169,1,224]},{"1066797":[240,4,10,202,128,248,137,192,240,2,169,192,15,105,243,126,143,105,243,126,130,207]},{"1066820":[201,128,144,63,201,144,176,59,41,15,201,8,176,22,170,169,1,224]},{"1066839":[240,4,10,202,128,248,15,100,243,126,143,100,243,126,130,171]},{"1066856":[56,233,8,170,169,1,224]},{"1066864":[240,4,10,202,128,248,137,192,240,2,169,192,15,101,243,126,143,101,243,126,130,140]},{"1066887":[201,144,144,63,201,160,176,59,41,15,201,8,176,22,170,169,1,224]},{"1066906":[240,4,10,202,128,248,15,102,243,126,143,102,243,126,130,104]},{"1066923":[56,233,8,170,169,1,224]},{"1066931":[240,4,10,202,128,248,137,192,240,2,169,192,15,103,243,126,143,103,243,126,130,73]},{"1066954":[201,160,144,69,201,176,176,65,41,15,170,191,124,243,126,26,159,124,243,126,224]},{"1066976":[208,4,143,125,243,126,224,1,208,4,143,124,243,126,175,114,129,48,240,31,175,111,243,126,26,143,111,243,126,130,19]},{"1067008":[138,10,205,12,4,208,9,175,111,243,126,26,143,111,243,126,130]},{"1067027":[250,173,233,2,201,1,107,72,218,34,62,232,160,173,216,2,32,144,213,141,216,2,32,102,213,201,22,208,19,32,193,213,207,150,128,48,144,7,175,151,128,48,141,216,2,130,173,1,201,43,208,19,32,193,213,207,150,128,48,144,7,175,151,128,48,141,216,2,130,150,1,201,44,208,19,32,193,213,207,150,128,48,144,7,175,151,128,48,141,216,2,130,127,1,201,45,208,19,32,193,213,207,150,128,48,144,7,175,151,128,48,141,216,2,130,104,1,201,60,208,19,32,193,213,207,150,128,48,144,7,175,151,128,48,141,216,2,130,81,1,201,61,208,19,32,193,213,207,150,128,48,144,7,175,151,128,48,141,216,2,130,58,1,201,72,208,19,32,193,213,207,150,128,48,144,7,175,151,128,48,141,216,2,130,35,1,201,78,208,14,175,123,243,126,240,5,169,79,141,216,2,130,17,1,201,94,208,64,175,89,243,126,207,144,128,48,144,10,175,145,128,48,141,216,2,130,249]},{"1067255":[201]},{"1067257":[208,8,169,73,141,216,2,130,237]},{"1067267":[201,1,208,8,169,80,141,216,2,130,225]},{"1067279":[201,2,208,8,169,2,141,216,2,130,213]},{"1067291":[169,3,141,216,2,130,205]},{"1067299":[201,95,208,93,175,22,244,126,74,74,74,74,74,74,207,146,128,48,144,10,175,147,128,48,141,216,2,130,175]},{"1067329":[175,22,244,126,41,192,208,19,169,4,141,216,2,175,22,244,126,24,105,64,143,22,244,126,130,148]},{"1067356":[201,64,208,18,169,5,141,216,2,175,22,244,126,24,105,64,143,22,244,126,128,126,169,6,141,216,2,175,22,244,126,24,105,64,143,22,244,126,128,108,201,96,208,38,175,91,243,126,207,148,128,48,144,10,175,149,128,48,141,216,2,130,84]},{"1067420":[201]},{"1067422":[208,7,169,34,141,216,2,128,73,169,35,141,216,2,128,66,201,97,208,20,175,84,243,126,208,7,169,27,141,216,2,128,49,169,28,141,216,2,128,42,201,98,208,19,34,121,212,160,141,216,2,235,32,4,213,169,255,143,144,80,127,128,19,201,99,208,15,34,53,213,160,141,216,2,169,255,143,144,80,127,128]},{"1067504":[250,104,139,75,92,228,133,9,251,251,251,251,251,252,252,251,251,252,252,252,254,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,251,252,252,252,252,252,252,254,252,252,252,252,252,252,252,252,252,254,254,254,252,252,252,252,252,252,252,252,252,252,252,254,254,252,254,252,252,252,251,252,252,252,252,252,252,251,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,4,4,4,4,4]},{"1067759":[4,4,4,4,4,5]},{"1067771":[4]},{"1067773":[4]},{"1067776":[4]},{"1067788":[4]},{"1067794":[5]},{"1067804":[4,4,4]},{"1067818":[4,4]},{"1067821":[4]},{"1067825":[4]},{"1067832":[4]},{"1067841":[4]},{"1067912":[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]},{"1067992":[6,24,24,24,45,32,46,9,9,10,8,5,16,11,44,27,26,28,20,25,12,7,29,47,7,21,18,13,13,14,17,23,40,39,4,4,15,22,3,19,1,30,16]},{"1068041":[48,34,33,36,36,36,35,35,35,41,42,44,43,3,3,52,53,49,51,2,50,54,55,44,6,12,56,57,58,59,60,24,61,62,63,64]},{"1068080":[65,36,71,72,72,72,255,255,4,13,255,255,255,255,255,255,255,255,73,74,73,255,255,255,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73]},{"1068237":[2,2]},{"1068245":[2,2,2,2,2,2]},{"1068252":[2]},{"1068254":[2,2]},{"1068257":[2,2,2,2,2,2,2,2,2,2,2]},{"1068269":[2,2,2,2,2]},{"1068275":[2,2,2,2,2,2,2,2,2]},{"1068287":[2,2,2,2,2,2,2,2,2,2,2]},{"1068300":[2]},{"1068302":[2,2,2]},{"1068306":[2,2,2,2,2,2]},{"1068313":[2,2,2,2,2,2,2,2]},{"1068322":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]},{"1068408":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,255,5,5,5,5,5,1,2,1,1,1,2,2,2,4,4,4,1,1,2,1,1,1,2,1,2,1,4,4,2,1,6,1,2,1,2,2,1,2,2,4,1,1,4,2,1,4,2,2,4,4,4,2,1,4,1,2,2,1,2,2,1,1,4,4,1,2,2,4,4,4,2,5,2,1,4,4,4,4,5,4,4,4,4,4,4,4,1,3,1,1,2,4,255,255,255,255,255,255]},{"1068594":[4,4,4]},{"1068600":[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,89,243,89,243,89,243,89,243,90,243,90,243,90,243,69,243,70,243,75,243,66,243,64,243,65,243,68,243,92,243,71,243,72,243,73,243,74,243,76,243,76,243,80,243,92,243,107,243,81,243,82,243,83,243,84,243,84,243,78,243,86,243,87,243,122,243,77,243,91,243,91,243,111,243,100,243,108,243,117,243,117,243,68,243,65,243,92,243,92,243,92,243,109,243,110,243,110,243,117,243,102,243,104,243,96,243,96,243,96,243,116,243,116,243,116,243,64,243,64,243,92,243,92,243,108,243,108,243,96,243,96,243,114,243,118,243,118,243,115,243,96,243,96,243,92,243,89,243,76,243,85,243,117,243,118,243,115,243,115,243,89,243,117,243,117,243,118,243,118,243,26,244,28,244,30,244,64,243,96,243,106,243,84,244,84,244,84,244,89,243,90,243,91,243,84,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,1,2,3,4,1,2,3,1,1,1,1,1,1,2,255,1,1,1,1,1,2,1,255,255,1,1,2,1,2,1,1,1,255,1,255,2,255,255,255,255,255,255,2,255,255,255,255,255,255,255,255,255,255,251,236,255,255,255,1,3,255,255,255,255,156,206,255,1,10,255,255,255,255,1,3,1,50,70,128,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1069513":[128]},{"1069515":[64]},{"1069517":[32]},{"1069519":[16]},{"1069521":[8]},{"1069523":[4]},{"1069525":[2]},{"1069527":[1,128]},{"1069530":[64]},{"1069532":[32]},{"1069534":[16]},{"1069536":[8]},{"1069538":[4]},{"1069769":[22,43,44,45,61,60,72,46,47,48,255,14,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,53,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,139,75,171,152,32,144,213,133,3,196,3,208,4,169,255,133,3,171,107,175,117,129,48,240,9,34,14,212,160,175,64,243,126,107,175,64,243,126,208,16,175,142,243,126,41,64,240,4,34,14,212,160,175,64,243,126,107,175,117,129,48,240,51,175,119,243,126,240,70,175,64,243,126,208,10,175,142,243,126,41,64,208,31,128,4,201,3,176,25,169,167,143,32,199,126,169,32,143,33,199,126,169,169,143,34,199,126,169,32,143,35,199,126,107,169,134,143,32,199,126,169,36,143,33,199,126,169,135,143,34,199,126,169,36,143,35,199,126,107,169,127,143,32,199,126,169,36,143,33,199,126,169,127,143,34,199,126,169,36,143,35,199,126,107,90,175,144,80,127,201,255,240,7,170,235,191]},{"1070214":[160,48,107,162]},{"1070219":[34,113,186,13,41,127,232,224,127,144,4,169]},{"1070232":[128,6,207,127,160,48,176,235,143,32,80,127,162]},{"1070246":[168,152,32,224,212,240,30,175,32,80,127,26,207,127,160,48,144,2,169]},{"1070266":[143,32,80,127,232,168,138,207,127,160,48,144,224,169,90,128,4,175,32,80,127,170,191]},{"1070290":[160,48,235,175,32,80,127,143,144,80,127,235,122,107,74,74,74,170,191,80,244,126,143,34,80,127,218,175,32,80,127,41,7,170,175,34,80,127,224]},{"1070330":[240,4,74,202,128,248,250,41,1,96,74,74,74,143,33,80,127,170,191,80,244,126,143,34,80,127,175,32,80,127,41,7,170,169,1,224]},{"1070367":[240,4,10,202,128,248,72,175,33,80,127,170,104,15,34,80,127,159,80,244,126,96,175,144,80,127,201,255,240,7,170,235,191,128,160,48,107,162]},{"1070406":[34,113,186,13,41,127,232,224,127,144,4,165]},{"1070419":[128,6,207,255,160,48,176,235,143,144,80,127,170,235,191,128,160,48,107,218,72,162]},{"1070442":[191]},{"1070444":[192,48,201,255,240,27,195,1,208,17,218,138,74,74,170,191,144,243,126,26,159,144,243,126,250,240,6,232,232,232,232,128,221,104,250,96,218,72,162]},{"1070484":[191]},{"1070486":[192,48,201,255,240,34,195,1,208,24,218,138,74,74,170,191,144,243,126,250,223,1,192,48,144,6,191,2,192,48,131,1,240,6,232,232,232,232,128,214,104,250,96,162]},{"1070531":[175,92,243,126,240,1,232,175,93,243,126,240,1,232,175,94,243,126,240,1,232,175,95,243,126,240,1,232,138,96,100,17,100,176,92,206,218,160,175,198,243,126,41,4,240,15,169,10,157,16,13,169,3,157,48,13,169,144,157,208,14,189]},{"1070594":[13,24,105,3,107,189,32,14,201,136,208,9,32,63,214,201,4,144,1,58,107,32,63,214,107,224,24,9,208,5,175,157,80,127,107,8,194,32,138,74,170,176,10,40,191]},{"1070640":[200,49,74,74,74,74,107,40,191]},{"1070650":[200,49,41,15,107,175,192,80,127,240,18,24,111,89,243,126,208,3,169,1,96,201,5,144,3,169,4,96,96,175,89,243,126,96,72,175,91,243,126,24,111,194,80,127,201,255,208,2,169]},{"1070700":[201,3,144,2,169,2,143,32,80,127,104,24,111,32,80,127,107,175,195,80,127,240,19,24,111,123,243,126,201,255,208,3,169]},{"1070734":[107,201,3,144,2,169,2,107,175,123,243,126,107,165,160,201,145,240,42,201,146,240,38,201,147,240,34,165,93,201,1,240,28,201,23,240,24,201,28,240,20,165,94,201,2,240,14,165,91,208,10,173,72,3,15,199,80,127,41,17,107,173,72,3,41,17,107,165,160,201,145,240,42,201,146,240,38,201,147,240,34,165,93,201,1,240,28,201,23,240,24,201,28,240,20,165,94,201,2,240,14,165,91,208,10,173,72,3,15,199,80,127,41,1,107,173,72,3,41,1,107,175,68,128,48,240,9,175,75,243,126,240,3,169,2,107,175,89,243,126,107,175,93,128,48,240,3,169,255,107,175,89,243,126,107,175,63,128,48,240,6,189,32,14,201,216,107,189,32,14,201,214,107,34,201,140,160,240,4,92,157,180,6,175,41,128,48,208,4,92,145,180,6,194,32,175,96,243,126,201,10]},{"1070936":[226,32,176,19,194,16,169,122,160,1,34,25,226,5,169,60,141,46,1,226,16,128,34,175,42,128,48,168,156,233,2,218,34,157,153,7,250,194,32,175,96,243,126,56,233,10]},{"1070983":[143,96,243,126,226,32,34,68,141,160,92,157,180,6,139,218,90,175,65,128,48,208,3,130,205]},{"1071009":[165,27,240,121,194,32,165,160,201,14]},{"1071020":[208,33,165,34,41,255,1,201,104,1,144,98,201,136,1,176,93,165,32,41,255,1,201,122,1,144,83,201,154,1,176,78,130,167]},{"1071055":[201,126]},{"1071058":[208,33,165,34,41,255,1,201,104]},{"1071068":[144,60,201,136]},{"1071073":[176,55,165,32,41,255,1,201,122,1,144,45,201,154,1,176,40,130,129]},{"1071093":[201,222]},{"1071096":[208,32,165,34,41,255,1,201,104,1,144,22,201,136,1,176,17,165,32,41,255,1,201,122]},{"1071121":[144,7,201,154]},{"1071126":[176,2,128,92,226,32,128,80,165,138,201,112,208,36,175,34,128,48,170,191,126,216,160,205,3,3,208,60,175,240,242,126,41,32,208,52,169,8,72,171,160,2,34,241,182,8,176,48,128,38,201,71,208,34,175,35,128,48,170,191,126,216,160,205,3,3,208,20,175,199,242,126,41,32,208,12,169,8,72,171,160,3,34,241,182,8,176,8,122,250,171,175,89,243,126,107,226,32,122,250,171,169,2,107,15,16,17,72,175,67,244,126,208,34,175,46,244,126,56,239,63,80,127,201,30,144,21,175,46,244,126,143,63,80,127,175,32,244,126,26,201,100,240,4,143,32,244,126,104,34,223,147,9,107,72,175,67,244,126,208,19,165,16,201,23,208,13,175,45,244,126,26,201,100,240,4,143,45,244,126,104,107,72,175,67,244,126,208,9,175,45,244,126,58,143,45,244,126,104,107,191,31,195,1,128,71,34,61,137]},{"1071336":[175,130,129,48,41,2,240,32,173,14,1,201,123,208,25,175,142,243,126,41,64,240,17,175,64,243,126,240,11,201,3,176,7,24,105,2,143,64,243,126,128,25,34,97,184,2,128,19,175,199,80,127,240,9,34,179,145,7,169]},{"1071396":[141,1,3,169,15,133,16,72,8,175,67,244,126,208,16,194,32,175,60,244,126,26,201,231,3,240,4,143,60,244,126,40,104,107,175,67,244,126,208,9,175,75,244,126,26,143,75,244,126,34,43,217,160,107,143,111,243,126,218,175,67,244,126,208,4,34,63,188,160,34,48,152,160,90,160,24,34,247,180,160,122,34,120,250,13,250,107,143,111,243,126,218,175,67,244,126,208,4,34,63,188,160,34,48,152,160,165,27,240,23,8,194,32,173,142,4,201,135]},{"1071515":[208,11,40,90,160,24,34,247,180,160,122,128,1,40,34,120,250,13,250,107,143,111,243,126,34,48,152,160,107,72,175,67,244,126,208,4,34,205,188,160,104,107,72,175,67,244,126,208,15,175,109,243,126,208,9,175,73,244,126,26,143,73,244,126,104,107,159,92,243,126,72,175,67,244,126,208,9,175,83,244,126,26,143,83,244,126,104,107,169,1,141,233,2,72,175,67,244,126,208,9,175,66,244,126,26,143,66,244,126,104,107,72,175,67,244,126,208,9,175,66,244,126,58,143,66,244,126,104,107,72,175,67,244,126,208,9,175,35,244,126,58,143,35,244,126,104,107,34,97,184,2,72,175,67,244,126,208,31,72,218,175,39,244,126,26,41,15,170,175,39,244,126,41,240,143,39,244,126,138,15,39,244,126,143,39,244,126,250,104,104,107,72,175,67,244,126,208,15,175,202,243,126,240,9,175,58,244,126,26,143,58,244,126,104,76,43,217,72,175,67,244,126,208,20,173,12,4,201,255,240,13,175,59,244,126,26,143,59,244,126,34,43,217,160,104,34,168,160,2,107,58,16,8,169]},{"1071771":[143,96,243,126,107,72,8,175,67,244,126,41,255]},{"1071785":[208,14,175,43,244,126,26,201,15,39,240,4,143,43,244,126,40,104,107,76,43,217,169,1,143]},{"1071811":[80,127,156,70,6,156,66,6,76,43,217,72,218,8,226,48,175,67,244,126,208,29,26,143,67,244,126,34,205,188,160,175,36,244,126,24,105,64,143,36,244,126,175,60,244,126,58,143,60,244,126,175,37,244,126,74,74,74,74,24,111,37,244,126,143,55,80,127,175,38,244,126,74,74,74,74,24,111,38,244,126,24,111,55,80,127,41,15,143,55,80,127,175,62,244,126,56,239,46,244,126,143,56,80,127,175,63,244,126,239,47,244,126,143,57,80,127,175,64,244,126,239,48,244,126,143,58,80,127,175,65,244,126,239,49,244,126,143,59,80,127,175,43,244,126,24,111,98,243,126,143,60,80,127,175,44,244,126,111,99,243,126,143,61,80,127,175,35,244,126,56,239,66,244,126,143,62,80,127,40,250,104,169,25,133,16,100,17,100,176,107,226,32,173,16,66,194,32,173,2,32,201,83,45,240,6,226,48,92,220,128]},{"1072023":[173,4,32,201,77,83,208,242,173,6,32,201,85,49,208,234,226,48,174,44,1,208,116,175,155,80,127,240,65,173]},{"1072054":[32,137,64,240,4,92,220,128]},{"1072063":[173]},{"1072065":[32,137,8,208,28,169,255,141,41,1,141,39,1,141,6,32,175,155,80,127,141,7,32,169]},{"1072090":[143,155,80,127,92,220,128]},{"1072098":[156,7,32,156,43,1,156,41,1,156,39,1,156,6,32,92,220,128]},{"1072117":[173,39,1,205,41,1,208,4,92,220,128]},{"1072129":[144,15,233,2,176,17,156,39,1,156,7,32,156,43,1,128,6,105,16,144,2,169,255,141,39,1,141,6,32,92,220,128]},{"1072162":[224,255,208,4,92,220,128]},{"1072170":[224,243,208,12,142,64,33,169,255,141,41,1,92,220,128]},{"1072186":[224,242,208,12,142,64,33,169,128,141,41,1,92,220,128]},{"1072202":[224,241,208,10,142,64,33,156,41,1,92,220,128]},{"1072216":[236,43,1,208,8,224,27,240,4,92,220,128]},{"1072229":[142,4,32,156,5,32,156,7,32,191]},{"1072240":[208,48,143,155,80,127,142,43,1,92,220,128]},{"1072253":[175,19,130,48,208,45,194,32,173,2,32,201,83,45,208,35,173,4,32,201,77,83,208,27,173,6,32,201,85,49,208,19,226,32,175,155,80,127,208,7,173]},{"1072295":[32,137,16,240,11,92,38,196,8,226,32,173,64,33,208,245,92,43,196,8,175,19,130,48,208,45,194,32,173,2,32,201,83,45,208,35,173,4,32,201,77,83,208,27,173,6,32,201,85,49,208,19,226,32,175,155,80,127,208,7,173]},{"1072357":[32,137,16,240,11,92,55,198,8,226,32,173,64,33,208,245,92,47,198,8,194,32,173,2,32,201,83,45,208,25,173,4,32,201,77,83,208,17,173,6,32,201,85,49,208,9,226,32,173]},{"1072407":[32,137,16,208,249,226,32,169,34,107,175,53,80,127,240,5,191]},{"1072425":[87,127,107,191]},{"1072430":[18,127,107,156,240,28,156,241,28,169]},{"1072441":[143,53,80,127,169,28,141,233,28,107,156,240,28,156,241,28,169,1,143,53,80,127,194,32,175,148,80,127,170,160]},{"1072473":[226,32,183]},{"1072477":[159]},{"1072479":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1072498":[143,148,80,127,226,32,107,143,64,80,127,72,218,90,8,139,75,171,226,32,194,16,165]},{"1072522":[72,165,1,72,165,2,72,175,106,129,48,208,3,130,18,7,169]},{"1072540":[143,16,80,127,175,64,80,127,201,36,208,119,169,170,133]},{"1072556":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1072574":[226,32,183]},{"1072578":[159]},{"1072580":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1072599":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1072619":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1072637":[226,32,183]},{"1072641":[159]},{"1072643":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1072662":[143,148,80,127,226,32,130,108,6,201,37,208,119,169,52,133]},{"1072679":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1072697":[226,32,183]},{"1072701":[159]},{"1072703":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1072722":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1072742":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1072760":[226,32,183]},{"1072764":[159]},{"1072766":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1072785":[143,148,80,127,226,32,130,241,5,201,51,208,119,169]},{"1072800":[133]},{"1072802":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1072820":[226,32,183]},{"1072824":[159]},{"1072826":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1072845":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1072865":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1072883":[226,32,183]},{"1072887":[159]},{"1072889":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1072908":[143,148,80,127,226,32,130,118,5,201,50,208,119,169,112,133]},{"1072925":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1072943":[226,32,183]},{"1072947":[159]},{"1072949":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1072968":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1072988":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073006":[226,32,183]},{"1073010":[159]},{"1073012":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073031":[143,148,80,127,226,32,130,251,4,41,240,201,112,208,56,169]},{"1073048":[133]},{"1073050":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073068":[226,32,183]},{"1073072":[159]},{"1073074":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073093":[143,148,80,127,226,32,130,213]},{"1073102":[201,128,208,56,169,52,133]},{"1073110":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073128":[226,32,183]},{"1073132":[159]},{"1073134":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073153":[143,148,80,127,226,32,130,153]},{"1073162":[201,144,208,55,169,112,133]},{"1073170":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073188":[226,32,183]},{"1073192":[159]},{"1073194":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073213":[143,148,80,127,226,32,128,94,201,160,208,87,175,64,80,127,201,175,208,3,130,88,4,169,170,133]},{"1073240":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073258":[226,32,183]},{"1073262":[159]},{"1073264":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073283":[143,148,80,127,226,32,104,41,15,143,32,80,127,169,15,56,239,32,80,127,72,169,1,143,16,80,127,128,3,130,9,4,175,150,80,127,58,58,143,148,80,127,175,64,80,127,41,15,143,17,80,127,175,16,80,127,240,15,175,16,80,127,169,15,56,239,17,80,127,143,17,80,127,175,17,80,127,201]},{"1073362":[208,56,169,216,133]},{"1073368":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073386":[226,32,183]},{"1073390":[159]},{"1073392":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073411":[143,148,80,127,226,32,130,127,3,201,1,208,56,169,241,133]},{"1073428":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073446":[226,32,183]},{"1073450":[159]},{"1073452":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073471":[143,148,80,127,226,32,130,67,3,201,2,208,56,169,8,133]},{"1073488":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073506":[226,32,183]},{"1073510":[159]},{"1073512":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073531":[143,148,80,127,226,32,130,7,3,201,3,208,56,169,35,133]},{"1073548":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073566":[226,32,183]},{"1073570":[159]},{"1073572":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073591":[143,148,80,127,226,32,130,203,2,201,4,208,56,169,60,133]},{"1073608":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073626":[226,32,183]},{"1073630":[159]},{"1073632":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073651":[143,148,80,127,226,32,130,143,2,201,5,208,56,169,87,133]},{"1073668":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073686":[226,32,183]},{"1073690":[159]},{"1073692":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073711":[143,148,80,127,226,32,130,83,2,201,6,208,56,169,116,133]},{"1073728":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073746":[226,32,183]},{"1073750":[159]},{"1073752":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073771":[143,148,80,127,226,32,130,23,2,201,7,208,56,169,139,133]},{"1073788":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073806":[226,32,183]},{"1073810":[159]},{"1073812":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073831":[143,148,80,127,226,32,130,219,1,201,8,208,56,169,164,133]},{"1073848":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073866":[226,32,183]},{"1073870":[159]},{"1073872":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073891":[143,148,80,127,226,32,130,159,1,201,9,208,56,169,189,133]},{"1073908":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073926":[226,32,183]},{"1073930":[159]},{"1073932":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073951":[143,148,80,127,226,32,130,99,1,201,10,208,56,169,214,133]},{"1073968":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073986":[226,32,183]},{"1073990":[159]},{"1073992":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074011":[143,148,80,127,226,32,130,39,1,201,11,208,56,169,241,133]},{"1074028":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074046":[226,32,183]},{"1074050":[159]},{"1074052":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074071":[143,148,80,127,226,32,130,235]},{"1074080":[201,12,208,56,169,12,133]},{"1074088":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074106":[226,32,183]},{"1074110":[159]},{"1074112":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074131":[143,148,80,127,226,32,130,175]},{"1074140":[201,13,208,55,169,41,133]},{"1074148":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074166":[226,32,183]},{"1074170":[159]},{"1074172":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074191":[143,148,80,127,226,32,128,116,201,14,208,55,169,72,133]},{"1074207":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074225":[226,32,183]},{"1074229":[159]},{"1074231":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074250":[143,148,80,127,226,32,128,57,201,15,208,53,169,101,133]},{"1074266":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074284":[226,32,183]},{"1074288":[159]},{"1074290":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074309":[143,148,80,127,226,32,156,240,28,156,241,28,169,1,143,53,80,127,169,1,143,160,80,127,104,133,2,104,133,1,104,133]},{"1074342":[171,40,122,250,104,107,104,133,2,104,133,1,104,133]},{"1074357":[171,40,122,250,104,107,34,78,216]},{"1074367":[156,232,28,107,176,4,192,152,144,5,169,255,255,128,3,185,1,195,201,255,255,107,175,126,129,48,240,32,175,92,243,126,15,93,243,126,15,94,243,126,15,95,243,126,208,14,189,128,13,24,105,8,157,128,13,169,81,160,1,107,169,136,160]},{"1074431":[107,34,207,129,164,176,12,194,32,169,140,1,141,240,28,226,32,128,10,194,32,169,109,1,141,240,28,226,32,34,229,229,160,107,34,207,129,164,176,12,194,32,169,141,1,141,240,28,226,32,128,10,194,32,169,110,1,141,240,28,226,32,34,229,229,160,107,72,173,2,2,201,15,240,6,104,34,25,226,5,107,36,244,80,246,175,68,128,48,240,8,175,75,243,126,240,14,128,22,175,89,243,126,201,255,240,4,201,2,176,10,104,169,12,160,1,34,25,226,5,107,104,107,72,173,2,2,201,15,240,6,104,34,25,226,5,107,36,244,80,246,175,68,128,48,240,8,175,75,243,126,240,14,128,22,175,89,243,126,201,255,240,4,201,2,176,10,104,169,13,160,1,34,25,226,5,107,104,107,175,116,243,126,41,4,240,8,169,47,160]},{"1074622":[34,25,226,5,107,175,122,243,126,41,5,201,5,240,9,169,21,160,1,34,25,226,5,107,169,22,160,1,34,25,226,5,107,165,16,201,14,240,109,100,17,218,90,165]},{"1074667":[72,165,1,72,165,2,72,169,28,133,2,194,48,173,240,28,10,170,191,192,113,127,133]},{"1074691":[226,48,160]},{"1074695":[183]},{"1074697":[201,254,208,39,200,183]},{"1074704":[201,110,208,32,200,183]},{"1074711":[208,27,200,183]},{"1074716":[201,254,208,20,200,183]},{"1074723":[201,107,208,13,200,183]},{"1074730":[201,4,208,6,156,232,28,130,19]},{"1074740":[156,35,2,156,216,28,169,2,133,17,165,16,141,12,1,169,14,133,16,104,133,2,104,133,1,104,133]},{"1074768":[122,250,107,165,17,201,3,208,5,169,6,133,20,107,34,183,147,164,34,173,144,164,107,34,149,240,160,34,239,169,164,34]},{"1074801":[128,191,92,21,253,13,72,34,171,129,160,34,113,131,160,34,123,130,160,104,107,72,8,226,32,34,74,129,160,40,104,141,12,4,156,172,4,72,8,34,120,250,13,34,1,132,160,34,113,131,160,40,104,107,34,74,129,160,169,16,133,28,107,34,157,153,7,175,77,128,48,137,4,240,4,143,202,80,127,137,2,240,4,143,201,80,127,137,1,240,4,143,200,80,127,175,78,128,48,137,4,240,6,169,128,143,115,243,126,175,78,128,48,137,2,240,6,169,50,143,117,243,126,175,78,128,48,137,1,240,39,169,70,143,118,243,126,175,117,129,48,240,27,175,142,243,126,9,128,143,142,243,126,194,32,175,96,243,126,24,111,131,129,48,143,96,243,126,226,32,107,34,190,160,2,34,184,217,160,107,194,16,34,61,137]},{"1074987":[169,7,141,12,33,175,240,244,126,208,10,34,140,231,160,169,255,143,240,244,126,173,10,1,208,10,175,17,192,126,208,4,34,119,129,160,34,96,130,160,34,79,130,164,169,255,143,144,80,127,169]},{"1075039":[143,1,80,127,175,114,129,48,240,8,175,139,243,126,143,111,243,126,34,113,131,160,34,123,130,160,34,32,131,160,175,135,128,48,201,1,208,4,34,208,146,164,226,16,107,218,8,194,32,175,70,128,48,143,98,243,126,143,96,243,126,175,12,130,48,143,84,244,126,175,14,130,48,143,86,244,126,162]},{"1075119":[191]},{"1075121":[176,48,159,64,243,126,232,232,224,79]},{"1075132":[144,241,226,32,175,64,128,48,240,12,169,128,143,97,240,126,169,128,143,147,240,126,175,67,128,48,143,89,243,126,40,250,107,169,81,141,162,10,34,61,137]},{"1075174":[107,34,68,149,160,34,154,241,160,107,34,183,149,160,34,192,149,160,162,4,107,34,154,241,160,169,20,133,17,107,34,154,241,160,107,34,211,131,160,34,156,149,160,34,43,217,160,8,226,32,169,255,143,144,80,127,40,107,175,156,80,127,208,13,26,143,156,80,127,34,79,186,10,206]},{"1075249":[2,107,169]},{"1075253":[143,156,80,127,34,153,186,10,107,169,1,143,145,80,127,107,34,206,149,160,107,169]},{"1075276":[143,145,80,127,175,160,80,127,240,16,156,240,28,156,241,28,34,223,229,160,169]},{"1075298":[143,160,80,127,156,233,2,189,94,12,107,175,105,129,48,41,255]},{"1075316":[208,4,169]},{"1075321":[107,201,1]},{"1075325":[208,16,175,197,243,126,41,15]},{"1075334":[201,2]},{"1075337":[176,82,32,225,232,107,201,2]},{"1075346":[208,51,32,225,232,240,68,175,122,243,126,41,127]},{"1075360":[201,127]},{"1075363":[240,4,169,1]},{"1075368":[107,175,74,128,48,41,255]},{"1075376":[240,43,175,195,242,126,41,32]},{"1075385":[208,34,173,8,3,41,128]},{"1075393":[240,4,169,1]},{"1075398":[107,226,48,34,111,155,9,175,195,242,126,9,32,143,195,242,126,194,48,169,1]},{"1075420":[107,169]},{"1075424":[107,165,34,201,200,7,144,16,201,40,8,176,11,165,32,201,184,6,176,4,169,1]},{"1075447":[96,169]},{"1075451":[96,175,76,128,48,41,255]},{"1075459":[240,4,92,90,189,27,224,118]},{"1075468":[176,4,92,240,188,27,92,90,189,27,175,200,243,126,41,255]},{"1075485":[72,170,191,64,130,48,208,3,130,175]},{"1075496":[58,133]},{"1075499":[74,74,24,101]},{"1075504":[74,74,170,169,22]},{"1075510":[143,66,193,126,191,85,130,48,143,68,193,126,191,87,130,48,143,70,193,126,191,89,130,48,24,105,16]},{"1075538":[143,72,193,126,191,91,130,48,143,74,193,126,191,93,130,48,143,80,193,126,191,95,130,48,143,82,193,126,191,83,130,48,143,78,193,126,191,97,130,48,41,255]},{"1075581":[137,128]},{"1075584":[240,3,9]},{"1075588":[255,143,106,193,126,191,98,130,48,41,255]},{"1075600":[137,128]},{"1075603":[240,3,9]},{"1075607":[255,143,110,193,126,169]},{"1075615":[56,239,106,193,126,143,108,193,126,169]},{"1075627":[56,239,110,193,126,143,112,193,126,191,82,130,48,41,255]},{"1075643":[143,76,193,126,143,64,193,126,156,152,6,156,153,6,226,32,166]},{"1075661":[191,71,130,48,143,153,80,127,194,32,104,107,174,232,28,191,80,131,48,208,8,175,200,243,126,92,154,132,2,191,129,132,2,10,170,191,210,216,2,133,160,191,211,216,2,133,161,169,8,133,16,100,17,100,176,156,10,1,156,170,4,34,149,227,13,34,136,250,13,34,50,221,13,107,162,36]},{"1075738":[165]},{"1075740":[223]},{"1075742":[184,27,208,9,173,10,4,223,38,184,27,240,32,202,202,16,235,162,30]},{"1075762":[165]},{"1075764":[223]},{"1075766":[131,48,208,9,173,10,4,223,32,131,48,240,12,202,202,16,235,92,164,184,27,92,175,184,27,226,48,138,74,170,191,64,131,48,141,14,1,156,15,1,92,189,184,27,133]},{"1075812":[175,74,128,48,41,255]},{"1075819":[240,25,175,93]},{"1075825":[41,255]},{"1075828":[201,20]},{"1075831":[208,13,165,138,41,64]},{"1075838":[197,123,240,4,92,119,189,27,162,2,1,92,10,189,27,175,137,128,48,240,16,165,138,201,71,208,10,175,199,242,126,9,32,143,199,242,126,107,72,175,74,128,48,240,13,165,138,41,64,208,7,104,156,198,4,169]},{"1075895":[107,104,141,228,2,141,193,15,141,16,7,107,34,204,234,160,34,57,235,160,107,169,14,143,1,40]},{"1075922":[169,4,143,1,40]},{"1075928":[169,13,143,1,40]},{"1075934":[169,14,143,1,40]},{"1075940":[169]},{"1075942":[143,1,40]},{"1075946":[169]},{"1075948":[143,1,40]},{"1075952":[169]},{"1075954":[143,1,40]},{"1075958":[169]},{"1075960":[143,1,40]},{"1075964":[169]},{"1075966":[143,1,40]},{"1075970":[169]},{"1075972":[143,1,40]},{"1075976":[169]},{"1075978":[143,1,40]},{"1075982":[169,1,143,1,40]},{"1075988":[169]},{"1075990":[143,1,40]},{"1075994":[169,1,143,1,40]},{"1076000":[169]},{"1076002":[143,1,40]},{"1076006":[169]},{"1076008":[143,1,40]},{"1076012":[169,10,143,1,40]},{"1076018":[169,13,143,1,40]},{"1076024":[107,72,218,162]},{"1076029":[175]},{"1076031":[40]},{"1076033":[41,15,201,15,240,10,224,14,144,3,24,128,4,232,128,236,56,250,104,107,72,218,8,226,48,162]},{"1076060":[175]},{"1076062":[40]},{"1076064":[41,15,201,15,240,12,224,14,144,4,24,130,250]},{"1076078":[232,128,235,56,175]},{"1076084":[40]},{"1076086":[72,175]},{"1076089":[40]},{"1076091":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133]},{"1076109":[175]},{"1076111":[40]},{"1076113":[72,175]},{"1076116":[40]},{"1076118":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,1,175]},{"1076138":[40]},{"1076140":[72,175]},{"1076143":[40]},{"1076145":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,2,175]},{"1076165":[40]},{"1076167":[72,175]},{"1076170":[40]},{"1076172":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,3,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,41,255]},{"1076257":[10,10,72,10,10,10,10,56,227,1,131,1,104,100,1,24,101]},{"1076275":[133]},{"1076277":[165,3,41,255]},{"1076282":[10,10,10,72,10,24,99,1,131,1,104,100,3,24,101,2,10,10,72,10,10,10,10,56,227,1,131,1,104,160,96,34,108,236,160,132,2,100,3,24,101]},{"1076324":[144,2,230,2,40,250,104,107,226,32,140,2,66,141,3,66,234,234,234,234,173,22,66,172,23,66,235,141,3,66,234,234,152,24,109,22,66,172,23,66,144,1,200,235,194,32,107,72,218,90,8,226,48,162]},{"1076379":[175]},{"1076381":[40]},{"1076383":[41,15,201,15,240,12,224,14,144,4,24,130,249]},{"1076397":[232,128,235,56,175]},{"1076403":[40]},{"1076405":[72,175]},{"1076408":[40]},{"1076410":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133]},{"1076428":[175]},{"1076430":[40]},{"1076432":[72,175]},{"1076435":[40]},{"1076437":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,1,175]},{"1076457":[40]},{"1076459":[72,175]},{"1076462":[40]},{"1076464":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,2,175]},{"1076484":[40]},{"1076486":[72,175]},{"1076489":[40]},{"1076491":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,3,175]},{"1076511":[40]},{"1076513":[133,4,175]},{"1076517":[40]},{"1076519":[72,175]},{"1076522":[40]},{"1076524":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,5,175]},{"1076544":[40]},{"1076546":[133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,41,255]},{"1076615":[10,72,10,10,24,99,1,131,1,104,10,72,10,10,24,99,1,131,1,104,24,105,232,3,100,6,24,101,5,133,5,40,122,250,104,107,165,12,201,56,208,4,9,64,133,12,165,13,157,2,8,165,12,157,3,8,107,175,127,129,48,208,6,173,29,3,201,11,107,175,65,80,127,26,143,65,80,127,175,127,129,48,207,65,80,127,208,8,169]},{"1076705":[143,65,80,127,128,10,74,207,65,80,127,144,3,226,2,107,194,2,107,175,127,129,48,208,7,34,182,233,29,165,95,107,169]},{"1076739":[107,175,51,128,48,240,9,141,202,4,169,43,141,46,1,107,169,255,141,202,4,107,175,112,243,126,24,111,52,128,48,58,207,67,243,126,144,13,175,67,243,126,201,99,176,5,26,143,67,243,126,107,175,113,243,126,24,111,53,128,48,58,207,119,243,126,144,13,175,119,243,126,201,99,176,5,26,143,119,243,126,107,175,112,243,126,24,111,52,128,48,207,67,243,126,107,169]},{"1076838":[143,128,80,127,143,130,80,127,143,132,80,127,143,134,80,127,143,136,80,127,143,138,80,127,175,144,129,48,41,255]},{"1076869":[201,2]},{"1076872":[208,27,175,62,244,126,56,239,84,244,126,143,140,80,127,175,64,244,126,239,86,244,126,143,142,80,127,128,30,201,1]},{"1076904":[208,25,175,84,244,126,56,239,62,244,126,143,140,80,127,175,86,244,126,239,64,244,126,143,142,80,127,175,142,80,127,207,147,240,160,144,10,208,8,175,140,80,127,207,145,240,160,144,114,175,145,129,48,41,255]},{"1076960":[208,24,169,2]},{"1076965":[143,126,80,127,175,62,244,126,143,84,244,126,175,64,244,126,143,86,244,126,96,201,1]},{"1076989":[208,38,175,140,80,127,73,255,255,24,105,1]},{"1077002":[143,140,80,127,175,142,80,127,73,255,255,105]},{"1077016":[143,142,80,127,169,1]},{"1077023":[143,126,80,127,128,54,201,2]},{"1077032":[208,24,169,2]},{"1077037":[143,126,80,127,175,62,244,126,143,84,244,126,175,64,244,126,143,86,244,126,96,226,48,34,225,213,160,194,48,96,175,146,129,48,41,255]},{"1077074":[240,7,169]},{"1077079":[143,126,80,127,175,142,80,127,207,135,240,160,144,10,208,8,175,140,80,127,207,133,240,160,144,53,175,128,80,127,26,201,10]},{"1077113":[144,12,175,130,80,127,26,143,130,80,127,169]},{"1077127":[143,128,80,127,175,140,80,127,56,239,133,240,160,143,140,80,127,175,142,80,127,239,135,240,160,143,142,80,127,128,181,175,142,80,127,207,139,240,160,144,10,208,8,175,140,80,127,207,137,240,160,144,53,175,132,80,127,26,201,10]},{"1077188":[144,12,175,134,80,127,26,143,134,80,127,169]},{"1077202":[143,132,80,127,175,140,80,127,56,239,137,240,160,143,140,80,127,175,142,80,127,239,139,240,160,143,142,80,127,128,181,175,142,80,127,207,143,240,160,144,10,208,8,175,140,80,127,207,141,240,160,144,53,175,136,80,127,26,201,10]},{"1077263":[144,12,175,138,80,127,26,143,138,80,127,169]},{"1077277":[143,136,80,127,175,140,80,127,56,239,141,240,160,143,140,80,127,175,142,80,127,239,143,240,160,143,142,80,127,128,181,175,128,80,127,24,105,144,36,143,128,80,127,175,130,80,127,24,105,144,36,143,130,80,127,175,132,80,127,24,105,144,36,143,132,80,127,175,134,80,127,24,105,144,36,143,134,80,127,175,136,80,127,24,105,144,36,143,136,80,127,175,138,80,127,24,105,144,36,143,138,80,127,96,192,75,3]},{"1077385":[16,14]},{"1077389":[60]},{"1077393":[255,255,255,127,175,204,80,127,41,255]},{"1077404":[240,29,169,7,40,143,144,199,126,169,10,40,143,146,199,126,169,11,40,143,148,199,126,169,12,40,143,150,199,126,107,169,127,36,143,144,199,126,143,146,199,126,143,148,199,126,143,150,199,126,175,144,129,48,208,1,107,169,7,40,143,146,199,126,175,126,80,127,41,2]},{"1077475":[240,93,175,145,129,48,41,255]},{"1077484":[208,27,169,8,40,143,148,199,126,169,9,40,143,150,199,126,169,127,36,143,152,199,126,143,154,199,126,128,28,169,10,40,143,148,199,126,169,11,40,143,150,199,126,169,12,40,143,152,199,126,169,127,36,143,154,199,126,143,156,199,126,143,158,199,126,143,160,199,126,143,162,199,126,143,164,199,126,175,146,129,48,208,1,107,128,77,175,126,80,127,41,1]},{"1077577":[24,105,4,40,143,148,199,126,175,130,80,127,143,150,199,126,175,128,80,127,143,152,199,126,169,6,40,143,154,199,126,175,134,80,127,143,156,199,126,175,132,80,127,143,158,199,126,169,6,40,143,160,199,126,175,138,80,127,143,162,199,126,175,136,80,127,143,164,199,126,165,26,41,31]},{"1077652":[208,3,32,99,238,107,175,204,80,127,208,16,175,145,129,48,201,2,208,14,175,126,80,127,41,2,240,6,169]},{"1077682":[143,109,243,126,175,109,243,126,107,138,26,143,153,80,127,191,115,187,27,141,14,1,107,175,153,80,127,240,19,58,10,170,191]},{"1077716":[161,48,141,150,6,191,2,162,48,141,152,6,128,9,189,36,215,141,150,6,156,152,6,107,175,153,80,127,201,67,107,32,33,129,160,88,162,2,165,138,9,64,201,67,240,62,201,69,240,58,201,71,240,54,160,90,165,138,201,64,176,34,162,7,175,197,243,126,201,3,144,2,162,2,165,138,201,24,240,28,162,5,175]},{"1077800":[243,126,41,64,240,2,162,2,165,138,240,12,162,2,175,197,243,126,201,2,176,2,162,3,175,202,243,126,240,30,162,13,165,138,201,64,240,14,201,67,240,10,201,69,240,6,201,71,240,2,162,9,175,87,243,126,208,2,162,4,173,50,1,201,242,208,7,236,48,1,208,2,162,243,92,137,131,2,173,10,4,201,24,208,2,165,27,107,34,188,218,160,34,58,135,1,194,16,166,160,191,74,244,160,226,16,34,156,135]},{"1077910":[162,242,160,163,242,160,48,243,160,189,243,160,107,175,65,128,48,208,1,107,194,48,162,92,25,169,208,8,159]},{"1077940":[32,126,232,232,159]},{"1077946":[32,126,232,232,159]},{"1077952":[32,126,232,232,159]},{"1077958":[32,126,232,232,162,220,25,159]},{"1077967":[32,126,232,232,169,202,12,159]},{"1077976":[32,126,232,232,169,203,12,159]},{"1077985":[32,126,232,232,169,208,8,159]},{"1077994":[32,126,232,232,162,92,26,159]},{"1078003":[32,126,232,232,169,218,12,159]},{"1078012":[32,126,232,232,169,219,12,159]},{"1078021":[32,126,232,232,169,208,8,159]},{"1078030":[32,126,232,232,162,220,26,159]},{"1078039":[32,126,232,232,159]},{"1078045":[32,126,232,232,159]},{"1078051":[32,126,232,232,159]},{"1078057":[32,126,232,232,226,48,107,175,65,128,48,208,1,107,194,48,162,28,25,169,208,8,159]},{"1078081":[32,126,232,232,159]},{"1078087":[32,126,232,232,159]},{"1078093":[32,126,232,232,159]},{"1078099":[32,126,232,232,162,156,25,159]},{"1078108":[32,126,232,232,169,202,12,159]},{"1078117":[32,126,232,232,169,203,12,159]},{"1078126":[32,126,232,232,169,208,8,159]},{"1078135":[32,126,232,232,162,28,26,159]},{"1078144":[32,126,232,232,169,218,12,159]},{"1078153":[32,126,232,232,169,219,12,159]},{"1078162":[32,126,232,232,169,208,8,159]},{"1078171":[32,126,232,232,162,156,26,159]},{"1078180":[32,126,232,232,159]},{"1078186":[32,126,232,232,159]},{"1078192":[32,126,232,232,159]},{"1078198":[32,126,232,232,226,48,107,175,65,128,48,208,1,107,194,48,162,92,9,169,208,8,159]},{"1078222":[32,126,232,232,159]},{"1078228":[32,126,232,232,159]},{"1078234":[32,126,232,232,159]},{"1078240":[32,126,232,232,162,220,9,159]},{"1078249":[32,126,232,232,169,202,12,159]},{"1078258":[32,126,232,232,169,203,12,159]},{"1078267":[32,126,232,232,169,208,8,159]},{"1078276":[32,126,232,232,162,92,10,159]},{"1078285":[32,126,232,232,169,218,12,159]},{"1078294":[32,126,232,232,169,219,12,159]},{"1078303":[32,126,232,232,169,208,8,159]},{"1078312":[32,126,232,232,162,220,10,159]},{"1078321":[32,126,232,232,159]},{"1078327":[32,126,232,232,159]},{"1078333":[32,126,232,232,159]},{"1078339":[32,126,232,232,226,48,107]},{"1078360":[1]},{"1078472":[2]},{"1078568":[3]},{"1078666":[192,10,208,7,173,12,4,201,18,240,2,24,96,56,96,100]},{"1078683":[134,1,133,2,32,138,245,176,4,92,83,230]},{"1078696":[175,255,255,255,169,49,133,2,194,32,169]},{"1078708":[192,133]},{"1078711":[162,128,167]},{"1078715":[141,24,33,230]},{"1078720":[230]},{"1078722":[167]},{"1078724":[141,24,33,230]},{"1078729":[230]},{"1078731":[167]},{"1078733":[141,24,33,230]},{"1078738":[230]},{"1078740":[167]},{"1078742":[141,24,33,230]},{"1078747":[230]},{"1078749":[167]},{"1078751":[141,24,33,230]},{"1078756":[230]},{"1078758":[167]},{"1078760":[141,24,33,230]},{"1078765":[230]},{"1078767":[167]},{"1078769":[141,24,33,230]},{"1078774":[230]},{"1078776":[167]},{"1078778":[141,24,33,230]},{"1078783":[230]},{"1078785":[202,208,181,226,32,92,81,230]},{"1078794":[226,48,175,248,194,126,168,32,138,245,194,48,176,10,162]},{"1078811":[160,64]},{"1078814":[92,104,223]},{"1078818":[162]},{"1078820":[192,160]},{"1078824":[169]},{"1078826":[8,139,84,127,177,171,162]},{"1078834":[8,169]},{"1078837":[102,133,3,92,110,223]},{"1081344":[34,181,128]},{"1081348":[72,8,175,67,244,126,208,51,194,32,175,46,244,126,26,143,46,244,126,208,9,175,48,244,126,26,143,48,244,126,165,16,201,14,1,208,20,175,68,244,126,26,143,68,244,126,208,9,175,70,244,126,26,143,70,244,126,226,32,40,104,107,72,218,90,11,175,67,244,126,41,255]},{"1081421":[208,20,175,62,244,126,26,143,62,244,126,208,9,175,64,244,126,26,143,64,244,126,92,208,128]},{"1083056":[127,32,127,32,80,40,86,168,82,40,91,40,91,40,92,40,127,32,2,60,3,60,127,32,127,32,136,44,137,44,127,32,167,32,169,32,127,32,113,40,127,32,127,32,139,40,143,40,171,36,172,36,143,104,139,104,127,32,127,32,127,32,127,32,127,32,127,32,84,40,113,40,88,40,127,32,127,32,93,40,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,78,48,88,40,127,32,127,32,93,40,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,94,48,89,40,91,168,91,168,92,168,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,94,48,84,104,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,80,168,86,40,80,232]},{"1083392":[226,40,169,255,24,105,255,201,100,216,240,10,194,32,169,255,1,27,92,39,128]},{"1083414":[226,48,169,128,141]},{"1083420":[33,169,3,141,5,33,156,6,33,169,1,141,11,33,156,13,33,156,13,33,169,1,141,44,33,169,255,141,14,33,141,14,33,156,46,33,156,47,33,169,48,141,48,33,156,49,33,169,224,141,50,33,156,51,33,156]},{"1083477":[66,194,16,156,22,33,169,12,141,7,33,141,23,33,169,128,141,21,33,162,1,24,142]},{"1083501":[67,162,64,224,142,2,67,169,56,141,4,67,162]},{"1083515":[8,142,5,67,169,1,141,11,66,162]},{"1083526":[128,142,2,67,169,55,141,4,67,162]},{"1083537":[128,142,5,67,169,1,141,11,66,162]},{"1083548":[128,142,2,67,169,56,141,4,67,162,64,96,142,5,67,169,1,141,11,66,156,33,33,162]},{"1083573":[34,142]},{"1083576":[67,162,64,232,142,2,67,169,56,141,4,67,162]},{"1083590":[2,142,5,67,169,1,141,11,66,169,15,141]},{"1083603":[33,219]},{"1089536":[226,32,165,138,201,71,240,8,191,148,253,15,92,114,136]},{"1089552":[191,251,150,164,92,114,136]},{"1113856":[169]},{"1113858":[162]},{"1113860":[159,37,192,126,159]},{"1113866":[80,127,232,224,16,144,243,162,16,159]},{"1113877":[80,127,232,224,255,144,247,162]},{"1113886":[191]},{"1113888":[32,112,223,192,255]},{"1113894":[208,7,232,224,21,144,241,128,32,194,48,169]},{"1113908":[159]},{"1113911":[112,232,224]},{"1113915":[32,144,246,226,48,162]},{"1113922":[191,192,255]},{"1113926":[159]},{"1113928":[32,112,232,224,21,144,243,169,1,141,13,66,169,16,133,188,169,129,141]},{"1113948":[66,107]},{"1114112":[141,240,28,140,241,28,34,47,241,6,144,107,34,170,244,7,176,101,165,246,16,97,189,16,15,208,92,165,77,201,2,240,86,34,166,234,6,218,187,191,163,225,5,250,197,47,208,71,90,173,240,28,172,241,28,165,160,201,5,240,6,201,28,240,24,128,42,194,32,175,122,129,48,15,20,244,126,143,20,244,126,226,32,34,178,229,160,128,20,194,32,175,124,129,48,15,20,244,126,143,20,244,126,226,32,34,195,229,160,169,64,157,16,15,104,73,3,56,107,189,224,13,24,107]},{"1146880":[6,37,40,43,34,32,34,39,26,37,159,32,26,38,30,159,44,45,26,31,31]},{"1146902":[1,159,7,35,60,79,60,58,76,75,64,77,60,159,71,73,70,59,76,58,60,73,8,31,100,101,110,107,111,100,101,159,117,93,105,93,113,95,100,101,8,31,138,139,148,145,149,138,139,159,155,131,143,131,151,133,138,139,12,15,41,43,40,29,46,28,30,43,8,31,111,100,101,99,97,110,113,159,105,101,117,93,105,107,112,107,8,31,149,138,139,137,135,148,151,159,143,139,155,131,143,145,150,145,12,15,3,8,17,4,2,19,14,17,9,27,112,93,103,93,111,100,101,159,112,97,118,113,103,93,9,27,150,131,141,131,149,138,139,159,150,135,156,151,141,131,9,25,74,58,73,64,71,75,159,78,73,64,75,60,73,9,27,103,97,106,111,113,103,97,159,112,93,106,93,94,97,9,27,141,135,144,149,151,141,135,159,150,131,144,131,132,135,6,37,26,44,44,34,44,45,26,39,45,159,29,34,43,30,28,45,40,43,44,7,33,117,93,111,113,100,101,111,93,159,117,93,105,93,105,113,110,93,7,33,155,131,149,151,138,139,149,131,159,155,131,143,131,143,151,148,131,9,25,117,107,101,95,100,101,159,117,93,105,93,96,93,9,25,155,145,139,133,138,139,159,155,131,143,131,134,131,3,49,74,58,73,60,60,69,159,62,73,56,71,63,64,58,74,159,59,60,74,64,62,69,60,73,74,8,31,40,27,35,30,28,45,159,29,30,44,34,32,39,30,43,44,8,29,111,107,101,95,100,101,110,107,159,112,107,105,101,112,93,8,29,149,145,139,133,138,139,148,145,159,150,145,143,139,150,131,9,27,112,93,103,93,117,93,159,101,105,93,105,113,110,93,9,27,150,131,141,131,155,131,159,139,143,131,143,151,148,131,5,41,27,26,28,36,159,32,43,40,46,39,29,159,29,30,44,34,32,39,30,43,44,8,29,105,93,111,93,106,93,107,159,93,110,101,105,107,112,107,8,29,143,131,149,131,144,131,145,159,131,148,139,143,145,150,145,7,33,112,111,113,117,107,111,100,101,159,115,93,112,93,106,93,94,97,7,33,150,149,151,155,145,149,138,139,159,153,131,150,131,144,131,132,135,8,31,15,17,14,6,17]},{"1147398":[12,159,3,8,17,4,2,19,14,17,8,31,112,107,111,100,101,100,101,103,107,159,106,93,103,93,99,107,8,31,150,145,149,138,139,138,139,141,145,159,144,131,141,131,137,145,8,29,68,56,64,69,159,71,73,70,62,73,56,68,68,60,73,8,31,117,93,111,113,106,93,110,101,159,111,107,97,102,101,105,93,8,31,155,131,149,151,144,131,148,139,159,149,145,135,140,139,143,131,7,33,70,57,65,60,58,75,159,71,73,70,62,73,56,68,68,60,73,9,27,103,93,118,113,93,103,101,159,105,107,110,101,112,93,9,27,141,131,156,151,131,141,139,159,143,145,148,139,150,131,10,21,41,43,40,32,43,26,38,38,30,43,44,8,31,112,93,112,111,113,107,159,106,101,111,100,101,117,93,105,93,8,31,150,131,150,149,151,145,159,144,139,149,138,139,155,131,143,131,8,29,117,113,101,95,100,101,159,117,93,105,93,105,107,112,107,8,29,155,151,139,133,138,139,159,155,131,143,131,143,145,150,145,8,31,117,107,111,100,101,100,101,110,107,159,106,107,105,107,112,107,8,31,155,145,149,138,139,138,139,148,145,159,144,145,143,145,150,145,11,17,97,101,102,101,159,106,107,112,107,11,17,135,139,140,139,159,144,145,150,145,8,29,111,93,112,107,110,113,159,112,93,103,93,100,93,112,93,8,29,149,131,150,145,148,151,159,150,131,141,131,138,131,150,131,9,27,112,107,111,100,101,107,159,101,115,93,115,93,103,101,9,27,150,145,149,138,139,145,159,139,153,131,153,131,141,139,6,37,111,100,101,99,97,100,101,110,107,159,103,93,111,93,105,93,112,111,113,6,37,149,138,139,137,135,138,139,148,145,159,141,131,149,131,143,131,150,149,151,8,31,117,93,111,113,106,93,110,101,159,106,101,111,100,101,96,93,8,31,155,131,149,151,144,131,148,139,159,144,139,149,138,139,134,131,9,27,18,14,20,13,3,159,2,14,12,15,14,18,4,17,11,19,103,107,102,101,159,103,107,106,96,107,11,19,141,145,140,139,159,141,145,144,134,145,10,23,58,70,70,73,59,64,69,56,75,70,73,74,11,19,103,97,101,118,107,159,103,93,112,107,11,19,141,135,139,156,145,159,141,131,150,145,9,25,112,93,103,93,107,159,111,100,101,105,101,118,113,9,25,150,131,141,131,145,159,149,138,139,143,139,156,151,8,31,41,43,34,39,45,30,29,159,26,43,45,159,48,40,43,36,9,25,117,107,101,95,100,101,159,103,107,112,93,94,97,9,25,155,145,139,133,138,139,159,141,145,150,131,132,135,10,23,100,101,96,97,103,101,159,98,113,102,101,101,10,23,138,139,134,135,141,139,159,136,151,140,139,139,8,31,117,107,111,100,101,93,103,101,159,103,107,101,118,113,105,101,8,31,155,145,149,138,139,131,141,139,159,141,145,139,156,151,143,139,9,27,117,93,111,113,100,101,110,107,159,111,93,103,93,101,9,27,155,131,149,151,138,139,148,145,159,149,131,141,131,139,8,29,112,107,105,107,93,103,101,159,103,113,110,107,113,105,97,8,29,150,145,143,145,131,141,139,159,141,151,148,145,151,143,135,7,33,18,15,4,2,8]},{"1148127":[11,159,19,7]},{"1148132":[13,10,18,159,19,14,9,25,106,107,94,113,107,159,107,103,93,102,101,105,93,9,25,144,145,132,151,145,159,145,141,131,140,139,143,131,7,33,117,93,111,113,106,107,110,101,159,112,93,103,97,112,93,106,101,7,33,155,131,149,151,144,145,148,139,159,150,131,141,135,150,131,144,139,10,23,103,101,117,107,111,100,101,159,103,107,96,93,10,23,141,139,155,145,149,138,139,159,141,145,134,131,7,35,112,93,103,93,105,101,112,111,113,159,103,113,118,113,100,93,110,93,7,35,150,131,141,131,143,139,150,149,151,159,141,151,156,151,138,131,148,131,9,27,100,101,110,107,106,107,94,113,159,103,93,103,113,101,9,27,138,139,148,145,144,145,132,151,159,141,131,141,151,139,7,33,111,100,101,99,97,103,101,159,117,93,105,93,111,100,101,110,107,7,33,149,138,139,137,135,141,139,159,155,131,143,131,149,138,139,148,145,4,45,17]},{"1148348":[13,3,14,12,8,25,4,17,159,2,14,13,19,17,8,1,20,19,14,17,18,8,29,34,45,30,38,159,43,26,39,29,40,38,34,51,30,43,2,55,103,93,110,103,93,112,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,114,97,97,112,107,110,108,2,55,141,131,148,141,131,150,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,152,135,135,150,145,148,146,2,55,95,100,110,101,111,112,107,111,107,115,97,106,159,159,159,159,159,159,159,96,97,111,111,117,110,97,109,112,2,55,133,138,148,139,149,150,145,149,145,153,135,144,159,159,159,159,159,159,159,134,135,149,149,155,148,135,147,150,10,21,111,105,93,104,104,100,93,95,103,97,110,10,21,149,143,131,142,142,138,131,133,141,135,148,6,37,60,69,75,73,56,69,58,60,159,73,56,69,59,70,68,64,81,60,73,2,55,93,105,93,118,101,106,99,93,105,108,100,93,110,107,111,159,159,159,104,104,95,107,107,104,96,93,114,97,2,55,131,143,131,156,139,144,137,131,143,146,138,131,148,145,149,159,159,159,142,142,133,145,145,142,134,131,152,135,9,25,103,97,114,101,106,95,93,112,100,95,93,110,112,9,25,141,135,152,139,144,133,131,150,138,133,131,148,150,8,31,30,39,30,38,50,159,43,26,39,29,40,38,34,51,30,43,2,55,118,93,110,94,117,91,92,159,159,159,159,159,159,159,159,159,159,159,159,159,159,111,107,111,113,103,97,86,2,55,156,131,148,132,155,129,130,159,159,159,159,159,159,159,159,159,159,159,159,159,159,149,145,149,151,141,135,124,10,23,97,106,96,97,110,107,98,99,93,105,97,111,10,23,135,144,134,135,148,145,136,137,131,143,135,149,7,35,74,71,73,64,75,60,159,59,60,77,60,67,70,71,68,60,69,75,2,55,105,101,103,97,112,110,97,112,100,97,115,97,117,159,159,159,159,159,159,159,159,159,101,94,93,118,104,117,2,55,143,139,141,135,150,148,135,150,138,135,153,135,155,159,159,159,159,159,159,159,159,159,139,132,131,156,142,155,2,55,98,101,111,100,166,115,93,98,98,104,97,89,87,159,159,159,98,93,112,105,93,106,111,108,93,106,96,93,2,55,136,139,149,138,198,153,131,136,136,142,135,127,125,159,159,159,136,131,150,143,131,144,149,146,131,144,134,131,2,55,103,110,97,104,94,97,104,159,159,159,159,159,159,159,159,159,159,159,159,159,159,112,115,110,107,116,93,111,2,55,141,148,135,142,132,135,142,159,159,159,159,159,159,159,159,159,159,159,159,159,159,150,153,148,145,154,131,149,14,7,99,104,93,106,14,7,137,142,131,144,9,27,18,15,4,2,8]},{"1148969":[11,159,19,7]},{"1148974":[13,10,18,2,55,111,113,108,97,110,111,103,113,102,159,159,159,159,159,159,159,159,159,159,97,114,101,104,93,111,100,85,88,2,55,149,151,146,135,148,149,141,151,140,159,159,159,159,159,159,159,159,159,159,135,152,139,142,131,149,138,123,126,2,55,105,117,110,93,105,107,106,99,159,159,159,159,159,159,159,159,159,159,159,159,159,102,107,111,100,110,112,93,2,55,143,155,148,131,143,145,144,137,159,159,159,159,159,159,159,159,159,159,159,159,159,140,145,149,138,148,150,131,2,55,115,93,104,103,101,106,99,97,117,97,159,159,159,159,159,105,93,112,100,107,106,106,93,108,103,101,106,111,2,55,153,131,142,141,139,144,137,135,155,135,159,159,159,159,159,143,131,150,138,145,144,144,131,146,141,139,144,149,9,25,111,93,103,113,110,93,112,111,113,94,93,111,93,9,25,149,131,141,151,148,131,150,149,151,132,131,149,131,13,11,93,106,96,160,160,160,13,11,131,144,134,192,192,192,1,59,112,100,97,159,93,104,112,112,108,159,110,93,106,96,107,105,101,118,97,110,159,95,107,105,105,113,106,101,112,117,1,59,150,138,135,159,131,142,150,150,146,159,148,131,144,134,145,143,139,156,135,148,159,133,145,143,143,151,144,139,150,155,7,33,58,70,68,68,76,69,64,75,80,159,59,64,74,58,70,73,59,3,51,100,112,112,108,111,163,162,162,96,101,111,95,107,110,96,160,99,99,162,112,95,95,89,117,87,85,3,51,138,150,150,146,149,195,194,194,134,139,149,133,145,148,134,192,137,137,194,150,133,133,127,155,125,123,6,37,45,33,30,159,34,38,41,40,43,45,26,39,45,159,44,45,46,31,31,11,19,75,64,68,60,159,61,70,76,69,59,2,21,98,101,110,111,112,159,111,115,107,110,96,2,21,136,139,148,149,150,159,149,153,145,148,134,2,25,108,97,99,93,111,113,111,159,94,107,107,112,111,2,25,146,135,137,131,149,151,149,159,132,145,145,150,149,2,9,98,104,113,112,97,2,9,136,142,151,150,135,2,11,105,101,110,110,107,110,2,11,143,139,148,148,145,148,11,19,27,40,44,44,159,36,34,37,37,44,2,55,111,115,107,110,96,104,97,111,111,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,149,153,145,148,134,142,135,149,149,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,98,101,99,100,112,97,110,119,111,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,136,139,137,138,150,135,148,157,149,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,105,93,111,112,97,110,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,143,131,149,150,135,148,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,112,97,105,108,97,110,97,96,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,150,135,143,146,135,148,135,134,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,99,107,104,96,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,137,145,142,134,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,11,19,6]},{"1149777":[12,4,159,18,19]},{"1149783":[19,18,2,55,99,112,159,94,101,99,159,103,97,117,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,85,85,2,55,137,150,159,132,139,137,159,141,135,155,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,123,123,2,9,94,107,106,103,111,2,9,132,145,144,141,149,2,27,111,93,114,97,159,93,106,96,159,109,113,101,112,111,2,27,149,131,152,135,159,131,144,134,159,147,151,139,150,149,2,11,96,97,93,112,100,111,2,11,134,135,131,150,138,149,2,29,98,93,97,110,101,97,159,110,97,114,101,114,93,104,111,2,29,136,131,135,148,139,135,159,148,135,152,139,152,131,142,149,2,29,112,107,112,93,104,159,105,97,106,113,159,112,101,105,97,2,29,150,145,150,131,142,159,143,135,144,151,159,150,139,143,135,2,27,112,107,112,93,104,159,104,93,99,159,112,101,105,97,2,27,150,145,150,131,142,159,142,131,137,159,150,139,143,135,2,55,95,107,104,104,97,95,112,101,107,106,159,110,93,112,97,159,159,159,159,159,159,159,159,159,162,85,84,89,2,55,133,145,142,142,135,133,150,139,145,144,159,148,131,150,135,159,159,159,159,159,159,159,159,159,194,123,122,127,2,19,112,107,112,93,104,159,112,101,105,97,2,19,150,145,150,131,142,159,150,139,143,135,255]},{"1150093":[128,139,140,139,140,21,128,24,128,139,140,139,140,44,128,62,128,139,140,139,140,139,140,80,128,139,140,139,140,90,128,108,128,139,140,139,140,139,140,126,128,139,140,139,140,136,128,152,128,139,140,139,140,139,140,168,128,139,140,139,140,183,128,199,128,139,140,139,140,139,140,215,128,139,140,139,140,236,128,255,128,139,140,18,129,33,129,139,140,139,140,139,140,48,129,139,140,139,140,21,128,75,129,139,140,139,140,93,129,110,129,139,140,127,129,143,129,139,140,139,140,139,140,159,129,139,140,139,140,182,129,199,129,139,140,216,129,235,129,139,140,139,140,139,140,254,129,139,140,139,140,16,130,34,130,139,140,139,140,139,140,52,130,139,140,139,140,69,130,87,130,139,140,139,140,139,140,105,130,139,140,139,140,124,130,140,130,139,140,139,140,139,140,156,130,139,140,139,140,169,130,187,130,139,140,205,130,222,130,139,140,239,130,1,131,139,140,19,131,30,131,139,140,41,131,58,131,139,140,75,131,91,131,139,140,107,131,128,131,139,140,149,131,167,131,139,140,139,140,139,140,185,131,139,140,139,140,201,131,213,131,139,140,139,140,139,140,225,131,139,140,139,140,239,131,251,131,139,140,7,132,22,132,139,140,139,140,139,140,37,132,139,140,139,140,55,132,70,132,139,140,85,132,99,132,139,140,113,132,131,132,139,140,149,132,165,132,139,140,181,132,198,132,139,140,139,140,139,140,215,132,139,140,139,140,234,132,249,132,139,140,8,133,27,133,139,140,46,133,60,133,139,140,74,133,94,133,139,140,114,133,130,133,139,140,146,133,165,133,139,140,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,184,133,139,140,139,140,21,128,209,133,139,140,139,140,226,133]},{"1150521":[134,139,140,30,134,60,134,139,140,90,134,103,134,139,140,139,140,139,140,116,134,139,140,139,140,137,134,167,134,139,140,197,134,212,134,139,140,139,140,139,140,227,134,139,140,139,140,245,134,19,135,139,140,49,135,63,135,139,140,139,140,139,140,77,135,139,140,139,140,97,135,127,135,139,140,157,135,187,135,139,140,217,135,247,135,139,140,21,136,27,136,139,140,139,140,139,140,33,136,139,140,139,140,49,136,79,136,139,140,109,136,139,136,139,140,169,136,199,136,139,140,229,136,244,136,139,140,3,137,11,137,139,140,19,137,51,137,139,140,139,140,139,140,83,137,139,140,139,140,102,137,130,137,139,140,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,21,128,158,137,139,140,139,140,21,128,179,137,139,140,139,140,191,137,204,137,139,140,217,137,232,137,139,140,247,137,254,137,139,140,5,138,13,138,139,140,139,140,139,140,21,138,139,140,139,140,33,138,63,138,139,140,93,138,123,138,139,140,153,138,183,138,139,140,213,138,243,138,139,140,17,139,47,139,139,140,139,140,139,140,77,139,139,140,139,140,89,139,119,139,139,140,149,139,156,139,139,140,163,139,179,139,139,140,195,139,203,139,139,140,211,139,228,139,139,140,245,139,6,140,139,140,23,140,39,140,21,128,21,128,21,128,21,128,21,128,55,140,85,140,139,140,115,140,127,140,21,128,21,128,21,128,21,128,21,128,21,128]},{"1150884":[56]},{"1150886":[239,16,129,126,239,16]},{"1150902":[192]},{"1150904":[71,128,69,130]},{"1150916":[120]},{"1150918":[76,48,118,8,126]},{"1150932":[120]},{"1150934":[78,48,114,12,255]},{"1150948":[127]},{"1150950":[89,38,222,33,3,252]},{"1150964":[248]},{"1150966":[108,144,119,136,185,70]},{"1150980":[14]},{"1150982":[202,4,123,132,97,158]},{"1150996":[28]},{"1150998":[20,8,23,8,16,15]},{"1151012":[56]},{"1151014":[111,16,109,18,238,17]},{"1151028":[56]},{"1151030":[239,16,128,127,247,8]},{"1151044":[14]},{"1151046":[26,4,54,8,108,16]},{"1151058":[7]},{"1151060":[197,2,69,130,125,130,96,159]},{"1151078":[126]},{"1151080":[67,60,125,2]},{"1151092":[224]},{"1151094":[160,64,191,64,17,238]},{"1151106":[56]},{"1151108":[40,16,239,16,1,254,223,32]},{"1151124":[56]},{"1151126":[40,16,40,16,104,16,109,18,193,62,172,83,106,149,102,153,110,145,157,98,247]},{"1151148":[70,129,66,129,66,129,66,129,123,128,104,144,152,96,240]},{"1151164":[195,60,61,194,253,2,13,2,27,4,118,8,76,48,120]},{"1151180":[1,254,251,4,54,8,100,24,214,40,187,68,104,135,207]},{"1151196":[223,32,193,62,158,97,94,161,94,161,94,161,153,102,255]},{"1151212":[166,89,30,225,222,33,217,38,95,32,110,16,40,16,56]},{"1151228":[90,165,58,197,58,197,106,149,241,14,59,4,38,24,60]},{"1151244":[23,8,22,8,246,8,131,124,116,139,119,136,140,112,248]},{"1151260":[6,249,218,37,219,36,219,36,186,68,186,68,102,152,252]},{"1151276":[128,127,251,4,195,60,189,66,191,64,190,64,194,60,126]},{"1151292":[216,32,176,64,176,64,216,32,108,16,54,8,26,4,14]},{"1151308":[125,130,69,130,69,130,69,130,69,130,125,130,179,76,254]},{"1151324":[11,4,14]},{"1151332":[227]},{"1151334":[190,65,193,62,127]},{"1151340":[174,81,154,97,178,65,34,193,166,65,189,66,179,76,254]},{"1151356":[191,64,140,115,99,156,215,40,183,72,191,64,192,63,127]},{"1151372":[88,32,216,32,175,80,150,105,182,73,118,137,89,134,207]},{"1151396":[112]},{"1151398":[88,32,239,16]},{"1151403":[255]},{"1151412":[224]},{"1151414":[160,64,160,64,160,64]},{"1151426":[14]},{"1151428":[10,4,10,4,251,4]},{"1151435":[255]},{"1151444":[14]},{"1151446":[234,4,187,68,187,68]},{"1151460":[255]},{"1151462":[129,126,251,4,246,8]},{"1151472":[15]},{"1151474":[26,5,58,5,47,16,45,18,238,17]},{"1151488":[15]},{"1151490":[10,5,58,5,239,16,128,127,247,8]},{"1151504":[15]},{"1151506":[10,5,10,5,31]},{"1151512":[54,8,108,16]},{"1151524":[248]},{"1151526":[216,32,223,32,1,254]},{"1151540":[56]},{"1151542":[40,16,239,16]},{"1151547":[255]},{"1151560":[254]},{"1151562":[3,252]},{"1151574":[31]},{"1151576":[240,15,13,242]},{"1151588":[112]},{"1151590":[80,32,80,32,95,32]},{"1151600":[15]},{"1151602":[10,5,202,5,77,130,125,130,96,159]},{"1151616":[15]},{"1151618":[10,5,10,5,127]},{"1151624":[67,60,125,2]},{"1151632":[15]},{"1151634":[10,5,122,5,95,32,239,16]},{"1151643":[255,247,8,250,4,131,124,125,130,127,128,126,128,130,124,254]},{"1151660":[160,64,160,64,163,64,162,65,166,65,189,66,195,60,126]},{"1151676":[251,4,98,28,90,36,90,36,98,28,122,4,70,56,124]},{"1151692":[176,79,11,244,186,68,178,76,190,64,191,64,193,62,127]},{"1151708":[207,48]},{"1151711":[255,247,8,108,16,108,16,111,16,49,14,31]},{"1151724":[6,249,218,37,219,36,219,36,186,68,186,68,102,152,252]},{"1151740":[128,127,251,4,195,60,189,66,191,64,191,64,194,60,126]},{"1151756":[216,32,176,64,176,64,216,32,108,16,54,8,26,4,14]},{"1151772":[223,32,223,32,176,79,191,64,183,72,111,144,112,143,223]},{"1151788":[239,16,223,32,193,62,190,65,254,1,125,2,67,60,126]},{"1151804":[253,2,62,1,30,1,30,1,62,1,125,2,67,60,126]},{"1151820":[251,4,118,8,108,16,108,16,108,16,55,8,25,6,15]},{"1151836":[89,38,71,56,220,32,176,64,96,128,127,128,129,126,255]},{"1151852":[125,130,69,130,69,130,69,130,69,130,125,130,179,76,254]},{"1151868":[59,4,14]},{"1151876":[227]},{"1151878":[190,65,193,62,127]},{"1151884":[247,8,250,4,131,124,125,130,127,128,126,128,130,124,254]},{"1151908":[119]},{"1151910":[93,34,222,33,7,248]},{"1151924":[192]},{"1151926":[95,128,112,143,111,144]},{"1151940":[238]},{"1151942":[186,68,186,68,163,92]},{"1151956":[224]},{"1151958":[160,64,176,64,31,224]},{"1151974":[126]},{"1151976":[195,60,173,82]},{"1151984":[15]},{"1151986":[10,5,234,5,175,64,160,64,160,64]},{"1152000":[15]},{"1152002":[10,5,10,5,15]},{"1152008":[251,4]},{"1152011":[255]},{"1152016":[15]},{"1152018":[10,5,10,5,239]},{"1152024":[187,68,187,68]},{"1152036":[206]},{"1152038":[74,132,123,132,64,191]},{"1152052":[248]},{"1152054":[14,240,218,36,187,68]},{"1152068":[120]},{"1152070":[78,48,114,12,118,8]},{"1152086":[24]},{"1152088":[44,16,68,56]},{"1152100":[255]},{"1152102":[64,191,123,132,123,132]},{"1152112":[15]},{"1152114":[10,5,250,5,129,126,251,4,247,8]},{"1152128":[15]},{"1152130":[10,5,122,5,95,32,223,32,1,254]},{"1152144":[15]},{"1152146":[26,5,58,5,47,16,239,16]},{"1152155":[255,223,32,187,68,187,68,97,158,218,37,91,36,102,24,60]},{"1152172":[120,128,96,128,96,128,120,128,111,144,112,143,223]},{"1152188":[153,102,186,69,86,169,86,169,104,151,102,153,153,102,255]},{"1152204":[177,78,174,81,158,97,190,65,50,205,173,82,178,77,255]},{"1152220":[174,81,110,145,110,145,110,145,94,161,189,66,242,12,28]},{"1152236":[160,64,160,64,163,64,162,65,166,65,189,66,195,60,126]},{"1152252":[251,4,98,28,90,36,90,36,98,28,122,4,70,56,124]},{"1152268":[176,79,11,244,186,68,178,76,190,64,191,64,193,62,127]},{"1152284":[123,132,122,132,122,132,99,156,89,166,90,165,167,88,252]},{"1152300":[185,70,122,133,123,132,122,132,122,132,182,72,204,48,120]},{"1152316":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1152332":[214,40,186,68,59,196,109,130,197,2,6,1,2,1,3]},{"1152348":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1152364":[207,48]},{"1152367":[255,247,8,111,16,110,16,111,16,49,14,31]},{"1152380":[223,32,223,32,176,79,191,64,183,72,111,144,112,143,223]},{"1152396":[239,16,223,32,193,62,190,65,254,1,125,2,67,60,126]},{"1152420":[28]},{"1152422":[20,8,247,8,1,254]},{"1152436":[254]},{"1152438":[134,120,246,8,55,8]},{"1152452":[112]},{"1152454":[223,32,221,34,6,249]},{"1152468":[238]},{"1152470":[186,68,186,68,163,92]},{"1152484":[56]},{"1152486":[44,16,238,16,2,252]},{"1152496":[15]},{"1152498":[10,5,10,5,15]},{"1152504":[255]},{"1152506":[3,252]},{"1152512":[15]},{"1152514":[10,5,10,5,31]},{"1152520":[240,15,13,242]},{"1152528":[15]},{"1152530":[10,5,122,5,95,32,94,32,95,32]},{"1152548":[56]},{"1152550":[46,16,242,12,190,64]},{"1152564":[206]},{"1152566":[122,132,122,132,122,132]},{"1152580":[255]},{"1152582":[129,126,251,4,54,8]},{"1152596":[224]},{"1152598":[160,64,191,64,25,230]},{"1152612":[255]},{"1152614":[129,126,251,4,118,8]},{"1152624":[15]},{"1152626":[10,5,234,5,127,128,123,132,64,191]},{"1152640":[15]},{"1152642":[10,5,250,5,15,240,219,36,187,68]},{"1152656":[15]},{"1152658":[122,5,122,5,79,48,115,12,119,8,247,8,129,126,247,8,134,120,115,140,117,138,143,112,254]},{"1152684":[53,10,237,18,133,122,105,150,108,147,93,162,187,68,238]},{"1152700":[222,33,159,96,95,160,95,160,30,225,222,33,97,30,63]},{"1152716":[153,102,186,69,90,165,86,169,102,153,110,145,157,98,255]},{"1152732":[238,16,238,16,3,252,222,33,222,33,222,33,97,30,63]},{"1152748":[253,2,6,1,6,1,6,1,6,1,125,2,67,60,126]},{"1152764":[251,4,54,8,44,16,44,16,44,16,55,8,25,6,15]},{"1152780":[89,38,71,56,220,32,176,64,112,128,127,128,129,126,255]},{"1152796":[191,64,177,78,174,81,158,97,190,65,253,2,67,60,126]},{"1152812":[122,132,58,196,122,132,250,4,118,8,118,8,76,48,120]},{"1152828":[110,16,195,60,189,66,254,1,206,49,181,74,195,60,126]},{"1152844":[181,74,173,82,157,98,189,66,61,194,188,67,189,66,231]},{"1152860":[110,16,195,60,189,66,230,1,6,1,61,2,35,28,62]},{"1152876":[123,132,123,132,123,132,99,156,89,166,90,165,167,88,252]},{"1152892":[185,70,122,133,123,132,123,132,123,132,182,72,204,48,120]},{"1152908":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1152928":[15]},{"1152930":[10,5,10,5,63]},{"1152936":[108,16,68,56]},{"1152944":[15]},{"1152946":[10,5,250,5,64,191,123,132,123,132]},{"1152960":[15]},{"1152962":[8,7,202,5,124,131,123,132,64,191]},{"1152976":[15]},{"1152978":[8,7,250,5,12,243,219,36,187,68]},{"1152992":[15]},{"1152994":[8,7,122,5,76,51,115,12,55,8]},{"1153008":[15]},{"1153010":[8,7,10,5,60,3,111,16,70,56]},{"1153024":[15]},{"1153026":[8,7,250,5,64,191,123,132,123,132]},{"1153048":[252]},{"1153050":[182,72]},{"1153064":[28]},{"1153066":[246,8]},{"1153080":[28]},{"1153082":[23,8]},{"1153098":[126]},{"1153112":[112]},{"1153114":[220,32]},{"1153130":[220]},{"1153144":[240]},{"1153146":[152,96]},{"1153158":[112]},{"1153160":[92,32,100,24]},{"1153176":[124]},{"1153178":[214,40,214,40,186,68,59,196,109,130,197,2,2,1,2,1,3]},{"1153196":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153212":[123,132,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153228":[185,70,122,133,123,132,123,132,123,132,182,72,204,48,120]},{"1153244":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1153260":[214,40,186,68,59,196,125,130,205,2,6,1,2,1,3]},{"1153276":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153292":[163,92,21,234,189,66,218,36,94,32,104,16,56]},{"1153308":[99,156,85,170,53,202,101,154,243,12,46,16,56]},{"1153324":[17,14,247,8,135,120,115,140,117,138,143,112,248]},{"1153340":[195,60,61,194,253,2,29,2,59,4,38,24,60]},{"1153356":[132,120,220,32,134,120,90,164,82,172,106,148,150,104,252]},{"1153372":[118,136,122,132,122,132,122,132,126,128,188,64,200,48,120]},{"1153388":[236,16,198,56,58,196,250,4,250,4,230,24,156,96,112]},{"1153404":[254]},{"1153406":[98,156,154,100,246,8,238,16,215,40,57,198,239]},{"1153420":[10,244,222,32,195,60,157,98,93,162,93,162,147,108,254]},{"1153444":[255]},{"1153447":[255,254,1,62,1]},{"1153458":[3]},{"1153460":[6,1,13,2,27,4,118,8]},{"1153474":[28]},{"1153476":[20,8,247,8]},{"1153481":[255,126,129]},{"1153492":[255]},{"1153494":[1,254,239,16,40,16]},{"1153506":[14]},{"1153508":[10,4,10,4,251,4]},{"1153515":[255]},{"1153522":[56]},{"1153524":[40,16,40,16,239,16]},{"1153531":[255]},{"1153542":[254]},{"1153544":[130,124,250,4]},{"1153558":[255]},{"1153561":[255,254,1]},{"1153570":[28]},{"1153572":[20,8,20,8,247,8]},{"1153579":[255]},{"1153586":[56]},{"1153588":[40,16,40,16,239,16,1,254]},{"1153602":[56]},{"1153604":[40,16,111,16,64,63,222,33]},{"1153618":[224]},{"1153620":[160,64,191,64,128,127,187,68]},{"1153638":[255]},{"1153641":[255,254,1]},{"1153652":[255]},{"1153655":[255,126,129,66,129]},{"1153668":[255]},{"1153671":[255,254,1,2,1]},{"1153684":[224]},{"1153686":[48,192,208,32,115]},{"1153692":[45,18,43,20,46,16,108,16,88,32,208,32,176,64,224]},{"1153708":[202,52,58,196,234,4,10,4,10,4,10,4,10,4,14]},{"1153724":[126,129,70,129,198,1,5,2,13,2,59,4,38,24,60]},{"1153740":[40,16,40,16,40,16,40,16,40,16,239,16,1,254,255]},{"1153756":[251,4,18,12,50,12,42,20,218,36,58,196,234,4,14]},{"1153772":[238,17,45,18,43,20,46,16,40,16,40,16,40,16,56]},{"1153788":[26,4,26,4,26,4,26,4,26,4,251,4]},{"1153801":[255,255]},{"1153804":[6,1,254,1,128,127,254,1,6,1,254,1]},{"1153817":[255,255]},{"1153820":[238,17,110,17,110,17,94,33,222,33,189,66,105,134,207]},{"1153836":[239,16,239,16]},{"1153841":[255,247,8,20,8,20,8,20,8,28]},{"1153852":[190,65,102,129,197,2,13,2,59,4,230,24,156,96,120]},{"1153868":[122,132,74,132,202,4,26,4,22,8,116,8,76,48,120]},{"1153884":[2,1,2,1,2,1,2,1,2,1,254,1]},{"1153897":[255,255]},{"1153900":[66,129,194,1,6,1,5,2,13,2,59,4,38,24,60]},{"1153916":[254,1,128,127,126,1,5,2,13,2,123,4,70,56,124]},{"1153932":[2,1,2,1,6,1,13,2,25,6,243,12,14,240,248]},{"1153954":[119]},{"1153956":[93,34,93,34,221,34]},{"1153963":[255]},{"1153972":[224]},{"1153974":[48,192,208,32,243]},{"1153988":[255]},{"1153990":[1,254,253,2,13,2]},{"1154004":[112]},{"1154006":[80,32,80,32,223,32]},{"1154022":[195]},{"1154024":[98,129,162,65]},{"1154032":[15]},{"1154034":[10,5,26,5,23,8,247,8]},{"1154043":[255]},{"1154048":[15]},{"1154050":[58,5,42,21,47,16,239,16,1,254]},{"1154064":[15]},{"1154066":[58,5,42,21,111,16,64,63,222,33]},{"1154082":[56]},{"1154084":[40,16,111,16,64,63,222,33]},{"1154100":[15]},{"1154102":[249,6,135,120,247,8]},{"1154116":[251]},{"1154118":[110,145,110,145,182,73]},{"1154132":[255]},{"1154134":[129,126,255]},{"1154138":[255]},{"1154146":[56]},{"1154148":[40,16,40,16,40,16,40,16]},{"1154160":[15]},{"1154162":[234,5,186,69,191,64,128,127,187,68]},{"1154176":[15]},{"1154178":[10,5,10,5,255]},{"1154185":[255,254,1]},{"1154192":[15]},{"1154194":[122,5,90,37,93,34,221,34]},{"1154203":[255,221,34,93,34,93,34,125,2,61,2,59,4,38,24,60]},{"1154220":[54,193,214,33,253,2,29,2,251,4,230,24,28,224,248]},{"1154236":[11,4,26,4,22,8,51,12,109,18,222,33,50,193,227]},{"1154253":[255,222,33,93,34,91,36,95,32,95,32,96,31,63]},{"1154268":[178,65,214,33,117,2,13,2,59,4,230,24,156,96,240]},{"1154284":[238,17,110,17,110,17,94,33,222,33,189,66,121,134,207]},{"1154300":[239,16,239,16]},{"1154305":[255,247,8,54,8,54,8,54,8,28]},{"1154316":[190,65,102,129,197,2,13,2,59,4,230,24,156,96,240]},{"1154332":[190,65,102,153,249,6,13,2,59,4,230,24,156,96,248]},{"1154348":[247,8]},{"1154351":[255,247,8,54,8,54,8,236,16,152,96,240]},{"1154364":[182,73,126,1,5,2,13,2,27,4,118,8,76,48,120]},{"1154381":[255,247,8,54,8,52,8,44,16,104,16,88,32,112]},{"1154396":[46,16,35,28,44,19,47,16,40,16,40,16,40,16,56]},{"1154412":[122,132,74,132,202,4,26,4,22,8,116,8,76,48,120]},{"1154428":[2,1,2,1,2,1,2,1,2,1,254,1]},{"1154441":[255,255]},{"1154444":[221,34,93,34,93,34,125,2,13,2,59,4,38,24,60]},{"1154466":[28]},{"1154468":[20,8,20,8,247,8]},{"1154475":[255]},{"1154484":[255]},{"1154486":[129,126,255]},{"1154500":[255]},{"1154503":[255,254,1,126,1]},{"1154514":[28]},{"1154516":[20,8,247,8]},{"1154521":[255,254,1]},{"1154532":[7]},{"1154534":[5,2,5,2,5,2]},{"1154544":[15]},{"1154546":[10,5,234,5,63,192,208,32,243]},{"1154560":[15]},{"1154562":[10,5,250,5,1,254,253,2,29,2]},{"1154576":[15]},{"1154578":[10,5,122,5,95,32,95,32,223,32]},{"1154596":[126]},{"1154598":[90,36,91,36,93,34]},{"1154612":[192]},{"1154614":[67,128,78,129,121,134]},{"1154628":[255]},{"1154631":[255,254,1,2,1]},{"1154646":[56]},{"1154648":[108,16,68,56]},{"1154658":[28]},{"1154660":[20,8,247,8]},{"1154665":[255,247,8]},{"1154672":[15]},{"1154674":[10,5,10,5,207]},{"1154680":[102,129,166,65]},{"1154688":[15]},{"1154690":[58,5,42,21,111,16,64,63,222,33]},{"1154704":[15]},{"1154706":[10,5,10,5,251,4,134,120,246,8,247,8,54,8,54,8,54,8,108,16,236,16,152,96,240]},{"1154740":[255]},{"1154743":[255,255]},{"1154748":[126,1,77,50,117,10,123,4,245,10,206,49,63,192,240]},{"1154764":[61,2,59,4,243,12,197,58,54,201,247,8,20,8,28]},{"1154780":[5,2,13,2,11,4,26,4,54,8,236,16,152,96,240]},{"1154796":[50,193,214,33,53,2,13,2,59,4,230,24,28,224,248]},{"1154812":[27,4,27,4,55,8,51,12,109,18,222,33,50,193,227]},{"1154829":[255,222,33,221,34,219,36,223,32,223,32,96,31,63]},{"1154844":[213,34,181,66,165,66,166,65,162,65,98,129,66,129,195]},{"1154860":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1154876":[2,1,6,1,5,2,13,2,59,4,230,24,156,96,240]},{"1154892":[214,40,186,68,43,196,109,130,197,2,2,1,2,1,3]},{"1154908":[247,8,181,74,182,73,182,73,118,137,247,8,20,8,28]},{"1154924":[182,65,214,33,125,2,29,2,59,4,230,24,156,96,248]},{"1154940":[190,65,102,153,249,6,61,2,59,4,230,24,156,96,240]},{"1154956":[247,8]},{"1154959":[255,247,8,52,8,52,8,236,16,152,96,240]},{"1154982":[255]},{"1154985":[255,254,1]},{"1154996":[248]},{"1154998":[30,224,227,28,124,3]},{"1155012":[28]},{"1155014":[20,8,52,8,44,16]},{"1155028":[7]},{"1155030":[5,2,5,2,125,2]},{"1155044":[255]},{"1155046":[129,126,239,16,110,16]},{"1155056":[15]},{"1155058":[10,5,250,5,111,144,110,145,182,73]},{"1155072":[15]},{"1155074":[10,5,250,5,129,126,255]},{"1155082":[255]},{"1155088":[15]},{"1155090":[58,5,42,21,47,16,44,16,44,16]},{"1155106":[255]},{"1155108":[129,126,255]},{"1155112":[255]},{"1155115":[255]},{"1155122":[227]},{"1155124":[162,65,162,65,162,65,162,65]},{"1155140":[124]},{"1155142":[84,40,84,40,84,40]},{"1155156":[224]},{"1155158":[160,64,160,64,160,64]},{"1155174":[255]},{"1155177":[255,126,129]},{"1155184":[15]},{"1155186":[10,5,122,5,95,32,91,36,93,34]},{"1155200":[15]},{"1155202":[10,5,202,5,79,128,78,129,121,134]},{"1155216":[15]},{"1155218":[10,5,10,5,255]},{"1155225":[255,254,1,6,1,5,2,125,2,75,52,118,8,27,4,13,2,7]},{"1155244":[255]},{"1155246":[143,112,241,14,255]},{"1155252":[31,224,227,28,60,3,7]},{"1155260":[104,16,88,32,215,32,181,66,189,66]},{"1155271":[255,254,1,3]},{"1155276":[77,50,115,12,25,6,26,5,55,8,236,16,152,96,240]},{"1155292":[239,16]},{"1155295":[255,239,16,108,16,108,16,111,16,48,15,31]},{"1155308":[182,73,254,1,13,2,13,2,59,4,118,8,76,48,120]},{"1155325":[255,247,8,20,8,52,8,44,16,104,16,88,32,112]},{"1155340":[46,16,35,28,44,19,47,16,40,16,40,16,40,16,56]},{"1155356":[254,1,6,1,5,2,29,2,115,12,78,48,124]},{"1155372":[162,65,162,65,166,65,229,2,13,2,59,4,38,24,28]},{"1155388":[84,40,87,40,86,41,214,41,181,74,181,74,115,140,222]},{"1155404":[163,64,162,65,166,65,165,66,189,66,179,76,142,112,252]},{"1155420":[66,129,66,129,66,129,66,129,66,129,126,129]},{"1155433":[255,255]},{"1155436":[213,34,181,66,165,66,166,65,162,65,98,129,66,129,195]},{"1155452":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1155468":[2,1,6,1,5,2,13,2,59,4,230,24,156,96,240]},{"1155488":[15]},{"1155490":[10,5,10,5,63]},{"1155496":[108,16,68,56]},{"1155504":[15]},{"1155506":[10,5,26,5,247,8]},{"1155513":[255,247,8]},{"1155520":[15]},{"1155522":[8,7,122,5,92,35,91,36,93,34]},{"1155536":[15]},{"1155538":[8,7,202,5,72,135,79,128,121,134]},{"1155552":[15]},{"1155554":[8,7,250,5]},{"1155559":[255,254,1,6,1]},{"1155568":[15]},{"1155570":[8,7,26,5,56,7,111,16,68,56]},{"1155584":[15]},{"1155586":[8,7,26,5,244,11]},{"1155593":[255,247,8]},{"1155606":[112]},{"1155608":[80,32,94,32]},{"1155624":[252]},{"1155626":[132,120]},{"1155640":[252]},{"1155642":[4,248]},{"1155656":[254]},{"1155658":[90,164]},{"1155672":[254]},{"1155674":[2,252]},{"1155686":[14]},{"1155688":[10,4,26,4]},{"1155702":[56]},{"1155704":[40,16,238,16]},{"1155720":[254]},{"1155722":[2,252]},{"1155734":[28]},{"1155736":[246,8,2,252,214,40,186,68,43,196,109,130,197,2,6,1,2,1,3]},{"1155756":[247,8,181,74,182,73,182,73,118,137,215,8,21,8,28]},{"1155772":[221,34,189,66,189,66,190,65,166,65,102,129,102,129,195]},{"1155788":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1155804":[6,1,6,1,5,2,13,2,59,4,230,24,156,96,248]},{"1155820":[214,40,186,68,43,196,109,130,197,2,6,1,2,1,3]},{"1155836":[247,8,181,74,182,73,182,73,118,137,215,8,20,8,28]},{"1155852":[194,60,26,228,214,40,92,32,88,32,80,32,112]},{"1155868":[244,8,20,8,20,8,20,8,247,8,1,254,255]},{"1155884":[244,8,244,8,4,248,244,8,244,8,4,248,252]},{"1155900":[90,164,90,164,246,8,244,8,236,16,152,96,240]},{"1155916":[250,4,250,4,218,36,214,40,220,32,56,192,224]},{"1155932":[118,8,204,48,40,208,232,16,40,16,40,16,56]},{"1155948":[2,252,122,132,122,132,250,4,118,8,76,48,120]},{"1155964":[238,16,108,16,108,16,108,16,238,16,2,252,254]},{"1155980":[246,8,52,8,100,24,212,40,180,72,116,136,220]},{"1156002":[126]},{"1156004":[195,60,153,102,153,102,153,102]},{"1156018":[60]},{"1156020":[100,24,68,56,68,56,100,24]},{"1156034":[124]},{"1156036":[194,60,153,102,153,102,153,102]},{"1156050":[126]},{"1156052":[195,60,153,102,153,102,153,102]},{"1156066":[30]},{"1156068":[18,12,34,28,98,28,66,60]},{"1156082":[255]},{"1156084":[129,126,159,96,152,96,158,96]},{"1156098":[126]},{"1156100":[195,60,153,102,153,102,159,96]},{"1156114":[255]},{"1156116":[129,126,153,102,153,102,249,6]},{"1156130":[126]},{"1156132":[195,60,153,102,153,102,153,102]},{"1156146":[126]},{"1156148":[195,60,153,102,153,102,153,102]},{"1156162":[60]},{"1156164":[66,60,153,102,153,102,153,102]},{"1156178":[252]},{"1156180":[130,124,153,102,153,102,153,102]},{"1156194":[126]},{"1156196":[195,60,153,102,153,102,153,102]},{"1156210":[254]},{"1156212":[131,124,153,102,153,102,153,102]},{"1156226":[255]},{"1156228":[129,126,159,96,144,96,144,96]},{"1156242":[255]},{"1156244":[129,126,159,96,144,96,144,96,153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156268":[36,24,36,24,36,24,36,24,36,24,102,24,66,60,126]},{"1156284":[233,6,25,6,51,12,102,24,204,48,159,96,129,126,255]},{"1156300":[249,6,35,28,249,6,153,102,153,102,153,102,195,60,126]},{"1156316":[210,44,146,108,146,108,147,108,129,126,115,12,18,12,30]},{"1156332":[131,124,153,102,249,6,249,6,153,102,153,102,195,60,126]},{"1156348":[131,124,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156364":[51,12,38,24,36,24,36,24,36,24,36,24,36,24,60]},{"1156380":[153,102,195,60,153,102,153,102,153,102,153,102,195,60,126]},{"1156396":[153,102,153,102,193,62,249,6,153,102,153,102,195,60,126]},{"1156412":[153,102,129,126,153,102,153,102,153,102,153,102,153,102,255]},{"1156428":[153,102,131,124,153,102,153,102,153,102,153,102,130,124,252]},{"1156444":[159,96,156,96,159,96,153,102,153,102,153,102,195,60,126]},{"1156460":[153,102,153,102,153,102,153,102,153,102,153,102,131,124,254]},{"1156476":[158,96,130,124,158,96,144,96,144,96,159,96,129,126,255]},{"1156492":[158,96,130,124,158,96,144,96,144,96,144,96,144,96,240]},{"1156514":[126]},{"1156516":[195,60,153,102,153,102,153,102]},{"1156530":[255]},{"1156532":[153,102,153,102,153,102,153,102]},{"1156546":[126]},{"1156548":[66,60,102,24,36,24,36,24]},{"1156562":[15]},{"1156564":[9,6,9,6,9,6,9,6]},{"1156578":[255]},{"1156580":[153,102,153,102,147,108,146,108]},{"1156594":[240]},{"1156596":[144,96,144,96,144,96,144,96]},{"1156610":[247]},{"1156612":[157,98,137,118,129,126,149,106]},{"1156626":[255]},{"1156628":[153,102,153,102,153,102,137,118]},{"1156642":[126]},{"1156644":[195,60,153,102,153,102,153,102]},{"1156658":[254]},{"1156660":[131,124,153,102,153,102,153,102]},{"1156674":[126]},{"1156676":[195,60,153,102,153,102,153,102]},{"1156690":[254]},{"1156692":[131,124,153,102,153,102,153,102]},{"1156706":[126]},{"1156708":[195,60,153,102,153,102,159,96]},{"1156722":[255]},{"1156724":[129,126,231,24,36,24,36,24]},{"1156738":[255]},{"1156740":[153,102,153,102,153,102,153,102]},{"1156754":[247]},{"1156756":[149,98,149,98,149,98,149,98,159,96,159,96,145,110,153,102,153,102,153,102,193,62,127]},{"1156780":[153,102,129,126,153,102,153,102,153,102,153,102,153,102,255]},{"1156796":[36,24,36,24,36,24,36,24,36,24,102,24,66,60,126]},{"1156812":[9,6,9,6,9,6,249,6,153,102,153,102,195,60,124]},{"1156828":[134,120,134,120,134,120,146,108,147,108,153,102,153,102,255]},{"1156844":[144,96,144,96,144,96,144,96,144,96,159,96,129,126,255]},{"1156860":[149,106,149,106,157,98,157,98,157,98,157,98,157,98,255]},{"1156876":[137,118,129,126,145,110,145,110,153,102,153,102,153,102,255]},{"1156892":[153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156908":[153,102,131,124,158,96,144,96,144,96,144,96,144,96,240]},{"1156924":[153,102,153,102,153,102,157,98,155,100,157,98,194,61,127]},{"1156940":[153,102,131,124,153,102,153,102,153,102,153,102,153,102,255]},{"1156956":[158,96,195,60,121,6,249,6,153,102,153,102,195,60,126]},{"1156972":[36,24,36,24,36,24,36,24,36,24,36,24,36,24,60]},{"1156988":[153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1157004":[157,98,203,52,74,52,74,52,74,52,36,24,36,24,60]},{"1157026":[255]},{"1157028":[149,106,149,106,149,106,149,106]},{"1157042":[247]},{"1157044":[149,98,157,98,203,52,74,52]},{"1157058":[247]},{"1157060":[149,98,149,98,157,98,203,52]},{"1157074":[255]},{"1157076":[129,126,249,6,19,12,18,12]},{"1157088":[255]},{"1157091":[255,126,129,64,191,95,160,80,160]},{"1157112":[15]},{"1157114":[8,7]},{"1157120":[255]},{"1157122":[129,126,60,195,60,195,60,195,249,6]},{"1157136":[30]},{"1157138":[18,12,18,12,18,12,18,12,18,12]},{"1157184":[3]},{"1157186":[6,1,12,3,24,7,49,14,97,30]},{"1157200":[192]},{"1157202":[96,128,48,192,24,224,140,112,134,120]},{"1157258":[248]},{"1157276":[149,106,149,106,149,106,149,106,129,126,195,60,106,20,126]},{"1157292":[102,24,36,24,38,24,82,44,211,44,185,70,185,70,239]},{"1157308":[74,52,102,24,36,24,36,24,36,24,36,24,36,24,60]},{"1157324":[50,12,38,24,36,24,100,24,76,48,207,48,129,126,255]},{"1157340":[80,160,80,160,16,224,240]},{"1157356":[10,5,10,5,10,5,250,5,2,253,126,129]},{"1157369":[255,255]},{"1157372":[51,12,38,24,36,24,36,24,60]},{"1157382":[36,24,36,24,60]},{"1157388":[18,12,18,12,18,12,30]},{"1157396":[30]},{"1157398":[18,12,18,12,30]},{"1157410":[192]},{"1157412":[96,128,32,192,160,64,224]},{"1157422":[255]},{"1157425":[255,255]},{"1157436":[192,63,192,63,97,30,49,14,24,7,12,3,6,1,3]},{"1157452":[3,252,3,252,134,120,140,112,24,224,48,192,96,128,192]},{"1157488":[240]},{"1157490":[152,96,104,144,104,144,152,96,240]},{"1157500":[143,112,102,153,241,14,31]},{"1157516":[60,60,102,126,219,255,153,255,153,255,129,255,153,255,255,255]},{"1157568":[7]},{"1157570":[25,6,34,29,68,59,72,55,185,70]},{"1157584":[192]},{"1157586":[32,192,16,224,240]},{"1157592":[248]},{"1157594":[248]},{"1157664":[120]},{"1157666":[72,48,72,48,104,16,88,32,112]},{"1157686":[120,120,72,120,72,120]},{"1157744":[247]},{"1157746":[24,231,151,96,151,96,168,87,183,72]},{"1157760":[60]},{"1157762":[102,24,90,36,90,36,90,36,231,24]},{"1157776":[3]},{"1157778":[118,1,220,35,137,118,35,220,118,136,254,254,131,255,153,255,131,255,153,255,153,255,131,255,254,254,126,126,195,255,153,255,159,255,159,255,153,255,195,255,126,126,171,84,171,84,167,88,54,201,18,237,248,7,30,1,7]},{"1157836":[120,128,80,160,120,128,8,240,120,128,32,192,192]},{"1157850":[128]},{"1157852":[252,252,134,254,155,255,153,255,153,255,155,255,134,254,252,252,255,255,129,255,159,255,130,254,158,254,159,255,129,255,255,255,255,255,129,255,159,255,130,254,158,254,144,240,144,240,240,240,126,126,195,255,153,255,159,255,145,255,153,255,193,255,127,127]},{"1157932":[104,120,88,120,112,112]},{"1157954":[255,255,129,255,255,255]},{"1157972":[120,120,72,120,72,120,120,120]},{"1157984":[30,30,18,30,18,30,30,30]},{"1157996":[194,60,109,18,54,9,40,23,43,20,42,20,66,60,60]},{"1158012":[126,129,129,126,126,129,229,24,36,24,36,24,36,24,60]},{"1158028":[207]},{"1158030":[118,1,220,35,137,118,35,220,118,136,220]},{"1158068":[126]},{"1158070":[90,36,219,36,129,126]},{"1158082":[15]},{"1158084":[9,6,25,6,17,14,51,12]},{"1158102":[60]},{"1158104":[36,24,36,24]},{"1158112":[127]},{"1158114":[73,54,73,54,109,18,91,36,118]},{"1158136":[60]},{"1158138":[102,24]},{"1158146":[3]},{"1158148":[2,1,6,1,4,3,12,3]},{"1158162":[128]},{"1158164":[128]},{"1158166":[192]},{"1158168":[64,128,96,128]},{"1158176":[56]},{"1158178":[68,56,187,124,124,255,127,255,127,255]},{"1158192":[128]},{"1158194":[64,128,160,192,208,224,208,224,208,224]},{"1158208":[56]},{"1158210":[68,56,187,124,124,255,127,255,127,255]},{"1158224":[128]},{"1158226":[64,128,160,192,208,224,208,224,208,224]},{"1158308":[60]},{"1158310":[36,24,36,24,60]},{"1158316":[219,36,90,36,219,36,129,126,219,36,90,36,126]},{"1158332":[34,28,102,24,68,56,204,48,136,112,152,96,144,96,240]},{"1158348":[60]},{"1158352":[60]},{"1158354":[36,24,36,24,60]},{"1158380":[66,60,66,60,102,24,60]},{"1158396":[8,7,24,7,16,15,48,15,32,31,96,31,64,63,127]},{"1158412":[32,192,48,192,16,224,24,224,8,240,12,240,4,248,252]},{"1158428":[126,255,190,127,94,63,46,31,22,15,10,7,4,3,3]},{"1158444":[16,224,160,64,64,128,128]},{"1158460":[127,255,191,127,95,63,47,31,23,15,11,7,4,3,3]},{"1158476":[208,224,160,192,64,128,128]},{"1158492":[255,255,153,255,153,255,129,255,153,255,153,255,153,255,255,255,126,126,66,126,102,126,36,60,36,60,102,126,66,126,126,126,63,63,33,63,51,63,18,30,242,254,146,254,198,254,124,124,255,255,153,255,147,255,134,254,134,254,147,255,153,255,255,255]},{"1158812":[240,240,144,240,144,240,144,240,144,240,159,255,129,255,255,255,247,247,157,255,137,255,129,255,149,255,157,255,149,247,247,247,247,247,157,255,141,255,133,255,145,255,153,255,157,255,247,247,126,126,195,255,153,255,153,255,153,255,153,255,195,255,126,126,254,254,131,255,153,255,153,255,131,255,158,254,144,240,240,240,126,126,195,255,153,255,153,255,129,255,155,255,193,255,127,127,254,254,131,255,153,255,153,255,131,255,147,255,153,255,255,255,126,126,194,254,158,254,195,255,249,255,153,255,195,255,126,126,255,255,129,255,231,255,36,60,36,60,36,60,36,60,60,60,255,255,153,255,153,255,153,255,153,255,153,255,195,255,126,126,255,255,153,255,153,255,153,255,219,255,66,126,102,126,60,60,255,255,149,255,149,255,149,255,149,255,129,255,235,255,60,60,247,247,157,255,139,255,198,254,99,127,209,255,185,255,239,239,255,255,153,255,153,255,195,255,102,126,36,60,36,60,60,60,255,255,129,255,241,255,99,127,198,254,143,255,129,255,255,255]},{"1159068":[169]},{"1159070":[35,133,125,169,140,140,133,124,183,124,133,124,160]},{"1159085":[107]},{"1159088":[9]},{"1159090":[99]},{"1159092":[231,3,15,39,255,255,1]},{"1159100":[3]},{"1159102":[7]},{"1159104":[15]},{"1159106":[31]},{"1159108":[63]},{"1159110":[127]},{"1159112":[255]},{"1159114":[255,1,255,3,255,7,255,15,255,31,255,63,255,127,72,72,169]},{"1159133":[143,3,80,127,143,5,80,127,143,6,80,127,104,201,16,39,144,21,72,226,32,175,3,80,127,26,143,3,80,127,194,32,104,56,233,16,39,128,230,201,232,3,144,21,72,226,32,175,4,80,127,26,143,4,80,127,194,32,104,56,233,232,3,128,230,201,100]},{"1159201":[144,21,72,226,32,175,5,80,127,26,143,5,80,127,194,32,104,56,233,100]},{"1159222":[128,230,201,10]},{"1159227":[144,21,72,226,32,175,6,80,127,26,143,6,80,127,194,32,104,56,233,10]},{"1159248":[128,230,201,1]},{"1159253":[144,21,72,226,32,175,7,80,127,26,143,7,80,127,194,32,104,56,233,1]},{"1159274":[128,230,104,107,152,41,15]},{"1159282":[72,152,74,74,74,74,168,24,165,181,208,5,104,105,64,61,96,104,105,80,61,96,160]},{"1159307":[185,217,181,100,181,201,255,255,240,27,235,41,255,1,197,202,240,17,26,230,181,197,202,240,10,200,200,200,200,200,200,200,200,128,221,56,96,24,96,139,75,171,32,136,176,176,3,130,233]},{"1159357":[185,217,181,74,41,3]},{"1159364":[201]},{"1159367":[240,3,130,220]},{"1159372":[185,217,181,74,74,74,41,31]},{"1159381":[24,101,200,235,157,2,16,169,7]},{"1159391":[235,157,4,16,218,165,181,208,5,169,64,61,128,3,169,80,61,133,179,185,222,181,133,183,185,223,181,133,184,167,183,133,186,185,219,181,41,15]},{"1159430":[240,9,170,165,186,74,202,208,252,133,186,185,219,181,74,74,74,41,30]},{"1159450":[170,191,184,175,35,37,186,133,186,185,220,181,74,74,74,74,74,41,7]},{"1159470":[240,12,10,170,191,174,175,35,197,186,176,2,133,186,165,186,34,216,175,35,250,100,120,175,4,80,127,41,255]},{"1159500":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,5,80,127,41,255]},{"1159526":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,6,80,127,41,255]},{"1159552":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159578":[24,101,179,157,6,16,232,232,232,232,232,232,171,107,185,217,181,74,74,74,41,31]},{"1159601":[24,101,200,235,157,2,16,169,21]},{"1159611":[235,157,4,16,218,185,222,181,133,183,185,223,181,133,184,167,183,133,186,230,183,230,183,167,183,133,188,201,198]},{"1159641":[176,88,100,114,165,186,56,233,192,75,133,179,165,188,233,3]},{"1159658":[144,10,133,188,165,179,133,186,230,114,128,231,100,116,165,186,56,233,16,14,133,179,165,188,233]},{"1159685":[144,10,133,188,165,179,133,186,230,116,128,231,100,118,165,186,56,233,60]},{"1159705":[133,179,165,188,233]},{"1159712":[144,10,133,188,165,179,133,186,230,118,128,231,165,114,201,100]},{"1159729":[144,14,169,99]},{"1159734":[133,114,169,59]},{"1159739":[133,116,133,118,133,186,165,181,208,5,169,64,61,128,3,169,80,61,133,179,250,165,114,34,216,175,35,175,6,80,127,41,255]},{"1159773":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159788":[24,101,179,157,6,16,232,232,169,131]},{"1159799":[24,101,179,157,6,16,232,232,165,116,34,216,175,35,175,6,80,127,41,255]},{"1159820":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159835":[24,101,179,157,6,16,232,232,169,131]},{"1159846":[24,101,179,157,6,16,232,232,165,118,34,216,175,35,175,6,80,127,41,255]},{"1159867":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159882":[24,101,179,157,6,16,232,232,169,128]},{"1159893":[24,101,179,157,6,16,232,232,165,186,34,216,175,35,175,6,80,127,41,255]},{"1159914":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159929":[24,101,179,157,6,16,232,232,232,232,232,232,130,158,254,165,200,24,105]},{"1159950":[235,157,2,16,169,5]},{"1159957":[235,169]},{"1159960":[5,157,4,16,100,181,165,202,168,41,1]},{"1159972":[240,3,136,230,181,32,110,176,72,32,110,176,72,32,110,176,157,6,16,232,232,104,157,6,16,232,232,104,157,6,16,232,232,232,232,232,232,96,169,2,141,1,33,169,128,141,21,33,169,35,133,2,194,48,169]},{"1160028":[112,141,22,33,169,156,143,133]},{"1160037":[162,255,15,167]},{"1160042":[141,24,33,230]},{"1160047":[230]},{"1160049":[202,16,244,226,48,34,123,179,35,107,169,128,141,21,33,169,49,133,2,194,48,169]},{"1160072":[128,141,22,33,169]},{"1160078":[208,133]},{"1160081":[162,255,7,167]},{"1160086":[141,24,33,230]},{"1160091":[230]},{"1160093":[202,16,244,226,48,107,168,139,75,171,185,217,179,171,107,156,42,1,34,69,145,164,194,16,34,96,143,164,32,202,179,92,3,236]},{"1160128":[194,16,32,202,179,194,32,162,14,107,34,94,145,164,34,201,143,164,226,48,169,1,133,20,96,159,57,176,57,177,57,180,57,181,57,182,57,183,57,220,57,221,57,222,57,223,57,240,57,241,57,242,57,243,57,244,57,245,57,246,57,247,57,248,57,249,57,250,57,251,57,252,57,253,57,254,57,159,45,176,45,177,45,180,45,181,45,182,45,183,45,220,45,221,45,222,45,223,45,240,45,241,45,242,45,243,45,244,45,245,45,246,45,247,45,248,45,249,45,250,45,251,45,252,45,253,45,254,45,169,45,185,45,186,45,187,45,159,41,176,41,177,41,180,41,181,41,182,41,183,41,220,41,221,41,222,41,223,41,240,41,241,41,242,41,243,41,244,41,245,41,246,41,247,41,248,41,249,41,250,41,251,41,252,41,253,41,254,41,188,41,64,61,65,61,66,61,67,61,68,61,69,61,70,61,71,61,72,61,73,61,74,61,75,61,76,61,77,61,78,61,79,61,96,61,97,61,98,61,99,61,100,61,101,61,102,61,103,61,104,61,105,61,106,61,107,61,108,61,109,61,110,61,111,61,128,61,129,61,130,61,131,61,168,61,135,61,80,61,81,61,82,61,83,61,84,61,85,61,86,61,87,61,88,61,89,61,90,61,91,61,92,61,93,61,94,61,95,61,112,61,113,61,114,61,115,61,116,61,117,61,118,61,119,61,120,61,121,61,122,61,123,61,124,61,125,61,126,61,127,61,144,61,145,61,146,61,147,61,184,61,151,61,136,61,192,61,193,61,194,61,195,61,136,61,134,61,137,61,196,61,137,61,197,61,198,61,199,61,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,61,209,61,210,61,211,61,152,61,150,61,153,189,212,61,153,61,213,61,214,61,215,61,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,155,63]},{"1160668":[128]},{"1160670":[88,244,126,155,66]},{"1160676":[128]},{"1160678":[92,244,126,155,69]},{"1160684":[128]},{"1160686":[96,244,126,155,72]},{"1160692":[128]},{"1160694":[100,244,126,185,80,68,64]},{"1160702":[82,244,126,185,83,68,64]},{"1160710":[37,244,126,185,86,64,64]},{"1160718":[37,244,126,185,89,68,64]},{"1160726":[38,244,126,185,92,64,64]},{"1160734":[38,244,126,185,100,80,64]},{"1160742":[42,244,126,209,103,128,96]},{"1160750":[32,244,126,209,106,128,64]},{"1160758":[45,244,126,209,109,128,64]},{"1160766":[73,244,126,209,112,128,96]},{"1160774":[83,244,126,155,115,8,128]},{"1160782":[68,244,126,155,118]},{"1160788":[128]},{"1160790":[56,80,127,177,125,128,96]},{"1160798":[35,244,126,155,128]},{"1160804":[128]},{"1160806":[62,244,126,255,255]},{"1179648":[165,160,201,13,208,3,169,7,107,169,11,107,157,160,11,165,160,201,13,208,29,175,163,128,48,240,20,175,74,128,48,240,8,169]},{"1179683":[143,202,243,126,128,6,169,64,143,202,243,126,169,1,107,175,163,128,48,240,20,175,74,128,48,240,8,169,64,143,202,243,126,128,6,169]},{"1179720":[143,202,243,126,169]},{"1179726":[107,165,160,201,13,208,4,169,6,128,2,169,1,107,218,165,160,201,13,208,6,169,1,92,123,213,30,169]},{"1179755":[92,123,213,30,254,48,14,165,160,201,13,208,3,169,1,107,169]},{"1179773":[107,175,66,128,48,240,14,173,3,4,41,128,240,7,173,18,1,13,228,2,107,173,18,1,13,228,2,13,252,15,107,173,10,4,41,255]},{"1179810":[201,5]},{"1179813":[208,7,169,1,1,143,152,45,126,162,30]},{"1179825":[169,190,13,107,194,32,165,160,201,23,1,226,32,208,8,175,104,129,48,141,115,3,107,185,85,208,141,115,3,107,165,27,240,44,194,32,165,160,201,95]},{"1179866":[240,24,201,172]},{"1179871":[240,19,201,179]},{"1179876":[240,14,201,213]},{"1179881":[240,9,201,23,1,240,4,226,32,128,11,226,32,218,187,191,107,129,48,133]},{"1179902":[250,175,110,243,126,107,165,27,240,39,194,32,165,160,201,95]},{"1179919":[240,19,201,179]},{"1179924":[240,14,201,213]},{"1179929":[240,9,201,23,1,240,4,226,32,128,11,226,32,218,187,191,110,129,48,133,76,250,175,110,243,126,107,165,27,240,36,194,32,165,160,201,95]},{"1179967":[240,19,201,179]},{"1179972":[240,14,201,213]},{"1179977":[240,9,201,23,1,240,4,226,32,128,8,226,32,169,1,141,123,3,107,175,79,128,48,141,123,3,107,224,3,240,29,224,4,240,25,224,5,240,21,224,57,240,27,224,59,240,23,224,60,240,19,224,61,240,15,191,241,184,13,107,175,128,129,48,41,1,208,243,128,8,175,128,129,48,41,2,208,233,169]},{"1180057":[107,133,5,218,162]},{"1180063":[189,74,12,232,224,10,240,8,197,5,208,244,169,1,128,2,169]},{"1180081":[250,96,189,32,14,201,214,208,16,34,207,129,164,176,10,189,128,13,201,17,144,3,169]},{"1180105":[107,165,68,201,128,107,175,62,128,48,240,106,201,1,240,100,201,2,208,40,175,116,243,126,41,7,201,7,208,86,175,122,243,126,41,127,201,127,208,76,175,197,243,126,201,3,144,68,175,219,242,126,41,32,201,32,208,58,128,58,201,4,208,12,175,122,243,126,41,127,201,127,208,42,128,42,201,3,208,22,175,122,243,126,41,127,201,127,208,26,175,219,242,126,41,32,201,32,208,16,128,16,201,5,208,10,175,24,244,126,201,100,144,2,128,2,24,107,56,107,175,50,128,48,240,1,107,169,1,143,197,243,126,107,175,50,128,48,240,49,175,197,243,126,201,2,176,41,169,2,143,197,243,126,175,198,243,126,9,20,143,198,243,126,175,200,243,126,201,5,240,2,169,1,143,200,243,126,175,155,242,126,9,32,143,155,242,126,107,107,165,246,41,48,240,103,235,175,75,128,48,240,96,173,2,2,240,91,175,19,130,48,240,10,175,17,130,48,41,2,208,2,128,75,218,235,201,48,208,5,174,2,2,128,26,137,16,240,11,32,249,130,165,242,137,32,208,13,128,36,32,51,131,165,242,137,16,208,2,128,25,224,2,240,14,224,1,240,10,224,5,240,6,224,13,240,2,128,7,142,2,2,34,156,179,160,169,32,141,47,1,142,2,2,34,127,219,13,250,165,246,41,64,107,173,2,2,170,224,15,208,4,162]},{"1180419":[128,9,224,16,208,28,175,79,243,126,170,224,4,240,15,232,191,91,243,126,240,245,138,143,79,243,126,162,16,96,162,17,128,7,224,20,208,2,162]},{"1180459":[232,34,102,132,164,240,203,96,173,2,2,170,224,17,208,4,162,5,128,9,224,16,208,28,175,79,243,126,170,224,1,240,15,202,191,91,243,126,240,245,138,143,79,243,126,162,16,96,162,15,128,7,224,1,208,2,162,21,202,34,102,132,164,240,203,96,90,218,187,191]},{"1180530":[149,48,250,157,8,16,122,107,90,218,187,191]},{"1180543":[149,48,41,255]},{"1180548":[250,122,107,72,218,90,8,226,48,165,27,208,24,160,10,169,11,34,95,246,29,48,14,34,100,174,9,169,36,153,160,13,169,1,153,176,13,40,122,250,104,107,138,69,26,41,15,5,27,208,119,169,11,160,10,34,95,246,29,48,109,218,187,169,30,34,138,187,13,250,169,1,153,176,13,218,34,113,186,13,133,15,41,2,240,36,165,15,101,226,153,16,13,165,227,105]},{"1180645":[153,48,13,165,15,41,1,170,189,60,159,101,232,153]},{"1180660":[13,165,233,105]},{"1180665":[153,32,13,128,34,165,15,101,232,153]},{"1180676":[13,165,233,105]},{"1180681":[153,32,13,165,15,41,1,170,189,60,159,101,226,153,16,13,165,227,105]},{"1180701":[153,48,13,187,169,32,34,24,234,6,250,169,48,34,124,187,13,107,165,27,240,37,166,160,224,255]},{"1180728":[208,30,166,162,224,239]},{"1180735":[208,23,174,24,1,224]},{"1180742":[24,240,21,224]},{"1180747":[26,240,16,224]},{"1180752":[28,240,5,224]},{"1180757":[30,240]},{"1180760":[169,1,141,11,66,107,162,192]},{"1180769":[142,5,67,128,242,175,201,80,127,240,7,224,4,208,3,169,1,107,191,63,243,126,107,175,201,80,127,208,4,175,67,243,126,107,175,201,80,127,41,255]},{"1180810":[208,4,175,67,243,126,107,72,175,201,80,127,240,4,104,169,1,107,104,143,67,243,126,107,175,200,80,127,208,8,175,117,129,48,208,19,128,3,169,1,107,175,119,243,126,240,69,58,143,119,243,126,26,128,61,175,64,243,126,41,1,240,11,165,153,208,7,165,154,208,3,169]},{"1180883":[107,218,194,32,175,96,243,126,240,30,72,175,64,243,126,58,41,2]},{"1180902":[170,104,56,255,118,129,48,48,9,143,96,243,126,169,1]},{"1180918":[128,3,169]},{"1180923":[226,32,250,201]},{"1180928":[107,173,153,11,240,48,206,153,11,175,117,129,48,208,11,175,119,243,126,26,26,143,119,243,126,107,218,194,32,175,64,243,126,58,41,2]},{"1180965":[170,175,96,243,126,24,127,118,129,48,143,96,243,126,226,32,250,107,175,203,80,127,208,3,130,154]},{"1180992":[58,240,125,58,240,93,58,240,45,194,32,173,24,66,137,64,8,240,3,73,64,8,137,128,1,240,3,73,128,1,137]},{"1181024":[66,240,3,73]},{"1181029":[66,137]},{"1181032":[132,240,3,73]},{"1181037":[132,133]},{"1181040":[226,32,92,222,131]},{"1181046":[194,32,173,24,66,137,64,128,240,3,73,64,128,137,128,64,240,3,73,128,64,137]},{"1181069":[12,240,3,73]},{"1181074":[12,137]},{"1181077":[3,240,3,73]},{"1181082":[3,133]},{"1181085":[226,32,92,222,131]},{"1181091":[194,32,173,24,66,137,64,128,240,3,73,64,128,137,128,64,240,3,73,128,64,133]},{"1181114":[226,32,92,222,131]},{"1181120":[173,24,66,133]},{"1181125":[173,25,66,137,12,240,2,73,12,137,3,240,2,73,3,133,1,92,222,131]},{"1181146":[173,24,66,133]},{"1181151":[173,25,66,133,1,92,222,131]},{"1181160":[72,175,206,80,127,201,1,208,8,104,47,121,243,126,9,4,107,201,2,208,8,104,47,121,243,126,41,251,107,104,47,121,243,126,107,189]},{"1181198":[153]},{"1181201":[189,2]},{"1181204":[153,2]},{"1181207":[189,4]},{"1181210":[153,64]},{"1181213":[189,6]},{"1181216":[153,66]},{"1181219":[96,189]},{"1181223":[41,255,227,9]},{"1181228":[16,153]},{"1181232":[189,2]},{"1181235":[41,255,227,9]},{"1181240":[16,153,2]},{"1181244":[189,4]},{"1181247":[41,255,227,9]},{"1181252":[16,153,64]},{"1181256":[189,6]},{"1181259":[41,255,227,9]},{"1181264":[16,153,66]},{"1181268":[96,41,255]},{"1181272":[240,3,76,11,134,76,36,134,41,255]},{"1181283":[208,6,162,65,141,76,36,134,58,58,208,6,162,65,141,76,11,134,58,208,6,162,73,141,76,11,134,58,208,6,162,81,141,76,11,134,58,208,6,162,89,141,76,11,134,58,208,6,162,97,141,76,11,134,58,208,6,162,105,141,76,11,134,162,113,141,76,11,134,165,26,41,1]},{"1181357":[240,2,128,14,32,206,134,238,16,7,169,97,1,141,2,16,128,9,156,16,7,169,255,255,141,2,16,169,4]},{"1181387":[133,2,107,218,90,139,226,32,169,164,72,171,194,32,175]},{"1181403":[5,112,9]},{"1181407":[28,141,142,17,24,105,16]},{"1181415":[141,206,17,175,2,5,112,9]},{"1181424":[28,141,144,17,24,105,16]},{"1181432":[141,208,17,175,4,5,112,9]},{"1181441":[28,141,146,17,24,105,16]},{"1181449":[141,210,17,175,6,5,112,9]},{"1181458":[28,141,148,17,24,105,16]},{"1181466":[141,212,17,175,8,5,112,9]},{"1181475":[28,141,78,18,24,105,16]},{"1181483":[141,142,18,175,10,5,112,9]},{"1181492":[28,141,80,18,24,105,16]},{"1181500":[141,144,18,175,12,5,112,9]},{"1181509":[28,141,82,18,24,105,16]},{"1181517":[141,146,18,175,14,5,112,9]},{"1181526":[28,141,84,18,24,105,16]},{"1181534":[141,148,18,32,121,141,175,142,3,112,41,64]},{"1181547":[240,31,175,64,3,112,41,255]},{"1181556":[240,11,162,193,139,160,220,16,32,11,134,128,40,162,209,139,160,220,16,32,11,134,128,29,175,64,3,112,41,255]},{"1181587":[240,11,162,185,139,160,220,16,32,11,134,128,9,162,185,139,160,220,16,32,36,134,175,140,3,112,41,192]},{"1181616":[201,192]},{"1181619":[208,11,162,233,139,160,224,16,32,11,134,128,49,175,140,3,112,41,64]},{"1181639":[240,11,162,225,139,160,224,16,32,11,134,128,29,175,140,3,112,41,128]},{"1181659":[240,11,162,217,139,160,224,16,32,11,134,128,9,162,217,139,160,224,16,32,36,134,162,241,139,160,228,16,175,66,3,112,32,85,134,175,140,3,112,41,16]},{"1181701":[240,11,162,201,140,160,236,16,32,11,134,128,9,162,201,140,160,236,16,32,36,134,175,140,3,112,41,32]},{"1181730":[240,11,162,193,140,160,232,16,32,11,134,128,9,162,193,140,160,232,16,32,36,134,175,140,3,112,41,3]},{"1181759":[240,11,162,73,140,160,228,17,32,11,134,128,9,162,73,140,160,228,17,32,36,134,175,140,3,112,41,4]},{"1181788":[240,11,162,65,140,160,92,18,32,11,134,128,9,162,65,140,160,92,18,32,36,134,162,1,140,160,92,17,175,69,3,112,32,85,134,162,9,140,160,96,17,175,70,3,112,32,85,134,162,17,140,160,100,17,175,71,3,112,32,85,134,162,25,140,160,104,17,175,72,3,112,32,85,134,162,33,140,160,108,17,175,73,3,112,32,85,134,162,41,140,160,220,17,175,74,3,112,32,85,134,162,49,140,160,224,17,175,75,3,112,32,85,134,162,57,140,160,232,17,175,77,3,112,32,85,134,162,81,140,160,236,17,175,78,3,112,32,85,134,162,89,140,160,96,18,175,80,3,112,32,85,134,162,97,140,160,100,18,175,81,3,112,32,85,134,162,105,140,160,104,18,175,82,3,112,32,85,134,162,113,140,160,108,18,175,83,3,112,32,85,134,160,242,16,175,92,3,112,32,96,134,160,114,17,175,93,3,112,32,96,134,160,242,17,175,94,3,112,32,96,134,160,114,18,175,95,3,112,32,96,134,175,89,3,112,41,255]},{"1182026":[208,11,162,209,140,160,248,16,32,36,134,128,65,58,208,11,162,209,140,160,248,16,32,11,134,128,51,58,208,11,162,217,140,160,248,16,32,11,134,128,37,58,208,11,162,225,140,160,248,16,32,11,134,128,23,58,208,11,162,233,140,160,248,16,32,11,134,128,9,162,209,140,160,248,16,32,36,134,175,90,3,112,41,255]},{"1182111":[208,11,162,241,140,160,120,17,32,36,134,128,37,58,208,11,162,241,140,160,120,17,32,11,134,128,23,58,208,11,162,249,140,160,120,17,32,11,134,128,9,162,1,141,160,120,17,32,11,134,175,91,3,112,41,255]},{"1182168":[208,11,162,9,141,160,248,17,32,11,134,128,23,58,208,11,162,17,141,160,248,17,32,11,134,128,9,162,25,141,160,248,17,32,11,134,175,107,3,112,41,255]},{"1182211":[208,11,162,33,141,160,120,18,32,11,134,128,37,58,208,11,162,41,141,160,120,18,32,11,134,128,23,58,208,11,162,49,141,160,120,18,32,11,134,128,9,162,57,141,160,120,18,32,11,134,175,72,4,112,41,255]},{"1182268":[34,248,148,160,175,6,80,127,41,255]},{"1182279":[24,105,16,30,141,248,18,175,7,80,127,41,255]},{"1182293":[24,105,16,30,141,250,18,162,129,140,160,252,16,175,85,3,112,32,85,134,175,84,3,112,41,255]},{"1182320":[208,11,162,177,140,160,124,17,32,36,134,128,23,58,208,11,162,177,140,160,124,17,32,11,134,128,9,162,185,140,160,124,17,32,11,134,162,121,140,160,252,17,175,86,3,112,32,85,134,162,137,140,160,124,18,175,87,3,112,32,85,134,175,116,3,112,41,4]},{"1182389":[240,11,162,153,140,160,28,19,32,11,134,128,9,162,145,140,160,28,19,32,11,134,175,116,3,112,41,2]},{"1182418":[240,11,162,161,140,160,32,19,32,11,134,128,9,162,145,140,160,32,19,32,11,134,175,116,3,112,41,1]},{"1182447":[240,11,162,169,140,160,36,19,32,11,134,128,9,162,145,140,160,36,19,32,11,134,175,122,3,112,41,2]},{"1182476":[240,5,169,151,14,128,3,169,135,18,141,104,19,26,141,106,19,175,122,3,112,41,16]},{"1182500":[240,5,169,151,14,128,3,169,135,18,141,42,19,26,141,44,19,175,122,3,112,41,64]},{"1182524":[240,5,169,151,14,128,3,169,135,18,141,108,19,26,141,110,19,175,122,3,112,41,32]},{"1182548":[240,5,169,151,14,128,3,169,135,18,141,46,19,26,141,48,19,175,122,3,112,41,4]},{"1182572":[240,5,169,151,6,128,3,169,135,18,141,112,19,26,141,114,19,175,122,3,112,41,1]},{"1182596":[240,5,169,151,6,128,3,169,135,18,141,50,19,26,141,52,19,175,122,3,112,41,8]},{"1182620":[240,5,169,151,14,128,3,169,135,18,141,116,19,26,141,118,19,171,122,250,96,1,10,184,10,183,10,18,10,1,10,2,10,17,10,18,10,1,10,4,10,3,6,18,10]},{"1182666":[10,186,10,185,6]},{"1182672":[10]},{"1182674":[10,20,10,19,6]},{"1182680":[10,5,14,6,14]},{"1182686":[30,22,14,5,6,6,6]},{"1182694":[30,22,6,182,14,182,6,182,142,182,134]},{"1182706":[6,21,6,48,6]},{"1182712":[30,12,14,13,14,28,14,28,78,32,6,16,6,48,6,49,6,32,14,33,14,48,14,49,14,7,10,23,202,23,10,7,202,8,10,24,202,24,10,8,202,9,10,25,202,25,10,9,202,44,6,44,70,60,6,61,6,34,2,35,2,50,2,51,2,40,10,41,10,56,10,57,10,36,2,37,2,52,2,53,2,38,14,39,14,54,14,55,14,42,26,43,26,58,26,59,26,29,6,30,6,45,6,46,6,29,14,30,14,45,14,46,14,72,6,73,6,88,6,89,6,74,14,75,14,90,14,91,14,14,14,15,14,31,78,31,14,76,22,77,22,92,22,93,22,100,6,101,6,116,6,117,6,133,18,134,18,178,18,150,18,133,26,134,26,149,26,150,26,133,14,134,14,149,14,150,14,133,6,134,6,149,6,150,6,78,2,79,2,94,2,95,2,96,10,97,10,112,10,113,10,98,6,99,6,114,6,115,6,10,2,11,2,26,2,27,2,102,14,103,14,118,14,119,14,104,14,105,14,120,6,121,14,104,6,105,6,120,26,106,6,104,10,105,10,120,14,122,10,107,14,107,78,123,14,123,78,108,22,108,86,124,22,124,86,109,10,110,10,125,10,126,10,111,26,111,90,127,26,179,26,111,14,111,78,127,14,180,14,111,6,111,70,127,6,181,6,128,6,128,70,144,6,144,70,129,6,128,70,144,6,144,70,129,6,128,70,145,6,144,70,129,6,129,70,145,6,144,70,64,30,65,30,80,30,81,30,66,6,66,70,82,6,67,6,66,26,66,90,82,26,68,26,66,14,66,78,82,14,69,14,71,74,71,10,86,14,87,14,64,30,65,30,84,10,85,10,64,30,65,30,84,10,70,10,169,155,26,141,24,16,26,141,26,16,175,98,3,112,34,248,148,160,175,4,80,127,41,255]},{"1183122":[24,105,16,30,141,86,16,175,5,80,127,41,255]},{"1183136":[24,105,16,30,141,88,16,175,6,80,127,41,255]},{"1183150":[24,105,16,30,141,90,16,175,7,80,127,41,255]},{"1183164":[24,105,16,30,141,92,16,169,139,14,141,32,16,26,141,34,16,175,67,3,112,41,255]},{"1183188":[34,248,148,160,175,6,80,127,41,255]},{"1183199":[24,105,16,30,141,96,16,175,7,80,127,41,255]},{"1183213":[24,105,16,30,141,98,16,175,142,3,112,41,64]},{"1183227":[240,12,169,153,6,141,38,16,26,141,40,16,128,10,169,137,2,141,38,16,26,141,40,16,175,119,3,112,41,255]},{"1183258":[34,248,148,160,175,6,80,127,41,255]},{"1183269":[24,105,16,30,141,102,16,175,7,80,127,41,255]},{"1183283":[24,105,16,30,141,104,16,96,169,2,141,12,33,194,32,162]},{"1183300":[4,169,136,1,157]},{"1183306":[16,202,202,208,249,169,97,1,141,2,16,169,97,33,141,66,16,169,97,65,141,130,16,169,97,97,141,194,16,169,97,129,141,2,17,169,97,161,141,66,17,169,97,193,141,130,17,169,97,225,141,194,17,169,98,1,141,2,18,169,98,33,141,66,18,169,98,65,141,130,18,169,98,97,141,194,18,169,98,129,141,2,19,169,98,161,141,66,19,169,98,193,141,130,19,169,98,225,141,194,19,169]},{"1183409":[59,141,4,16,141,68,16,141,132,16,141,196,16,141,4,17,141,68,17,141,132,17,141,196,17,141,4,18,141,68,18,141,132,18,141,196,18,141,4,19,141,68,19,141,132,19,141,196,19,169,255]},{"1183461":[141,2,20,165,16,41,255]},{"1183469":[201,1]},{"1183472":[208,107,175,135,128,48,41,255]},{"1183481":[201,2]},{"1183484":[208,95,8,226,48,218,90,34,47,176,164,122,250,40,41,255]},{"1183501":[208,78,169,110,29,141,142,19,24,105,16]},{"1183513":[141,206,19,169,103,29,141,144,19,24,105,16]},{"1183526":[141,208,19,169,101,29,141,146,19,24,105,16]},{"1183539":[141,210,19,169,104,29,141,148,19,24,105,16]},{"1183552":[141,212,19,169,76,29,141,150,19,24,105,16]},{"1183565":[141,214,19,169,100,29,141,152,19,24,105,16]},{"1183578":[141,216,19,226,32,107,34,64,142,164,194,32,169,104,97,141,2,16,169,104,129,141,66,16,169,104,161,141,130,16,169,104,193,141,194,16,169,104,225,141,2,17,169,105,1,141,66,17,169,105,33,141,130,17,169,105,65,141,194,17,169,105,97,141,2,18,169,105,129,141,66,18,169,105,161,141,130,18,169,105,193,141,194,18,169,105,225,141,2,19,169,106,1,141,66,19,169,106,33,141,130,19,169,106,65,141,194,19,226,32,107,194,48,162,60]},{"1183694":[189,4,16,9]},{"1183699":[32,157,4,16,202,202,208,243,162,60]},{"1183710":[189,68,16,9]},{"1183715":[32,157,68,16,202,202,208,243,162,60]},{"1183726":[189,132,16,9]},{"1183731":[32,157,132,16,202,202,208,243,162,60]},{"1183742":[189,196,16,9]},{"1183747":[32,157,196,16,202,202,208,243,162,60]},{"1183758":[189,4,17,9]},{"1183763":[32,157,4,17,202,202,208,243,162,60]},{"1183774":[189,68,17,9]},{"1183779":[32,157,68,17,202,202,208,243,162,60]},{"1183790":[189,132,17,9]},{"1183795":[32,157,132,17,202,202,208,243,162,60]},{"1183806":[189,196,17,9]},{"1183811":[32,157,196,17,202,202,208,243,162,60]},{"1183822":[189,4,18,9]},{"1183827":[32,157,4,18,202,202,208,243,162,60]},{"1183838":[189,68,18,9]},{"1183843":[32,157,68,18,202,202,208,243,162,60]},{"1183854":[189,132,18,9]},{"1183859":[32,157,132,18,202,202,208,243,162,60]},{"1183870":[189,196,18,9]},{"1183875":[32,157,196,18,202,202,208,243,162,60]},{"1183886":[189,4,19,9]},{"1183891":[32,157,4,19,202,202,208,243,162,60]},{"1183902":[189,68,19,9]},{"1183907":[32,157,68,19,202,202,208,243,107,107,72,218,173]},{"1183921":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,128,141,21,33,169,1,141]},{"1183956":[67,169,24,141,1,67,169]},{"1183964":[141,22,33,169,48,141,23,33,169,49,141,4,67,169]},{"1183979":[141,2,67,169,208,141,3,67,173]},{"1183989":[33,72,169,128,141]},{"1183995":[33,156,5,67,169,16,141,6,67,169,1,141,11,66,104,141]},{"1184012":[33,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1184040":[67,250,104,107,165,16,201,4,208,11,169,1,141,178,10,34,82,238,27,128,4,34,69,145,164,92,150,239,27,72,218,194,32,162,64,191]},{"1184077":[128,51,159]},{"1184081":[197,126,202,202,16,244,226,32,230,21,250,104,107,194,32,175,217,3,112,9]},{"1184102":[28,141,206,16,24,105,16]},{"1184110":[141,14,17,175,219,3,112,9]},{"1184119":[28,141,208,16,24,105,16]},{"1184127":[141,16,17,175,221,3,112,9]},{"1184136":[28,141,210,16,24,105,16]},{"1184144":[141,18,17,175,223,3,112,9]},{"1184153":[28,141,212,16,24,105,16]},{"1184161":[141,20,17,175,108,3,112,41,255]},{"1184171":[74,74,74,133,2,160,44,16,169,143,6,162,10]},{"1184185":[153]},{"1184188":[200,200,202,208,8,72,152,24,105,44]},{"1184199":[168,104,198,2,208,236,32,206,134,107,165,200,208,4,169,4,128,28,201,3,208,4,169]},{"1184223":[128,20,175,135,128,48,201,2,208,10,175,158,80,127,208,4,169,3,128,2,169]},{"1184245":[133,200,107,165,200,208,22,175,135,128,48,201,2,208,10,175,158,80,127,208,4,169,3,128,14,169,4,128,10,201,3,208,4,169,4,128,2,169]},{"1184284":[133,200,107,175,135,128,48,201,2,208,18,156,46,1,218,90,34,47,176,164,240,16,122,250,169,44,141,46,1,169,241,141,44,1,92,118,206,12,122,250,169,3,133,200,169,60,141,46,1,92,177,206,12,143]},{"1184339":[5,112,143,2,5,112,143,4,5,112,143,6,5,112,143,8,5,112,143,10,5,112,143,12,5,112,143,14,5,112,159,217,3,112,107,224,8]},{"1184377":[144,4,159,248,4,112,159,217,3,112,107,224,8]},{"1184391":[144,4,191,248,4,112,191,217,3,112,107,139,75,171,25,172,146,235,171,107,173,18,11,16,2,169,11,201,12,144,2,169]},{"1184424":[141,18,11,107,110]},{"1184430":[111]},{"1184432":[112]},{"1184434":[113]},{"1184436":[115]},{"1184438":[116]},{"1184440":[117]},{"1184442":[118]},{"1184444":[120]},{"1184446":[121]},{"1184448":[122]},{"1184450":[123]},{"1184452":[112,120,128,136,152,160,168,176,192,200,208,216,139,72,218,90,8,194,48,162,176,128,160,208,80,169,15]},{"1184480":[84,127,48,40,122,250,104,171,107,218,90,72,164,4,90,164,6,90,164,8,90,164,10,90,164,12,90,164,14,90,41,248,255,168,183]},{"1184516":[143]},{"1184518":[81,127,200,200,183]},{"1184524":[143,2,81,127,200,200,183]},{"1184532":[143,4,81,127,200,200,183]},{"1184540":[143,6,81,127,169,2]},{"1184547":[133,4,34,145,174,160,104,133,14,104,133,12,104,133,10,104,133,8,104,133,6,104,133,4,104,41,7]},{"1184575":[170,191]},{"1184578":[81,127,72,169]},{"1184584":[143]},{"1184586":[81,127,143,2,81,127,143,4,81,127,143,6,81,127,104,122,250,107,175,135,128,48,208,9,230,14,162,253,255,92,240,235,1,230,14,162,254,255,232,232,224,80,1,240,60,191,108,233,1,41,255,127,197,160,208,238,198,14,208,234,165]},{"1184648":[72,165,2,72,169,188,234,133]},{"1184657":[169,1]},{"1184660":[133,2,138,74,34,233,146,164,133,12,104,133,2,104,133]},{"1184676":[191,108,233,1,10,144,4,92,20,236,1,92,56,236,1,92,222,235,1,139,72,218,90,8,75,171,226,16,194,32,162]},{"1184708":[189,156,149,159]},{"1184713":[201,126,232,232,224,128,144,243,160]},{"1184723":[162]},{"1184725":[218,187,191,21,130,48,250,41,31]},{"1184735":[10,10,10,90,168,185,156,148,159,24,201,126,185,158,148,159,26,201,126,185,160,148,159,88,201,126,185,162,148,159,90,201,126,122,232,232,232,232,232,232,200,224,25,144,201,226,32,32,23,148,40,122,250,104,171,107,72,218,173]},{"1184795":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,1,141]},{"1184825":[67,169,128,141,21,33,169,24,141,1,67,169,96,141,22,33,141,23,33,169]},{"1184846":[141,2,67,169,201,141,3,67,169,126,141,4,67,169,128,141,5,67,156,6,67,173]},{"1184869":[33,72,169,128,141]},{"1184875":[33,169,1,141,11,66,104,141]},{"1184884":[33,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1184912":[67,250,104,96,134,29,134,29,150,29,150,29,1,10,2,10,17,10,18,10,5,14,6,14]},{"1184937":[30,22,14]},{"1184941":[6,21,6,48,6]},{"1184947":[30,12,14,13,14,28,14,28,78,98,6,99,6,114,6,115,6,10,2,11,2,26,2,27,2,32,14,33,14,48,14,49,14,133,26,134,26,149,26,150,26,7,10,23,202,23,10,7,202,8,10,24,202,24,10,8,202,9,10,25,202,25,10,9,202,44,6,44,70,60,6,61,6,34,2,35,2,50,2,51,2,36,2,37,2,52,2,53,2,38,14,39,14,54,14,55,14,40,10,41,10,56,10,57,10,42,26,43,26,58,26,59,26,64,30,65,30,80,30,81,30,66,26,66,90,82,26,83,26,29,6,30,6,45,6,46,6,72,6,73,6,88,6,89,6,74,14,75,14,90,14,91,14,76,22,77,22,92,22,93,22,78,2,79,2,94,2,95,2,14,14,15,14,31,78,31,14,100,6,101,6,116,6,117,6,109,10,110,10,125,10,126,10,111,26,111,90,127,26,127,90,129,6,129,70,145,6,145,70,130,10,131,10,146,10,147,10,132,6,132,70,148,6,148,70,47,74,47,10,62,10,63,10,136,1,136,1,136,1,136,1,138,29,136,1,76,29,104,29,77,29,78,29,136,1,136,1,160,5,161,5,136,1,164,5,165,5,136,1,168,5,169,5,136,1,172,5,173,5,136,1,176,5,177,5,136,1,139,29,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,154,29,136,1,92,29,120,29,93,29,94,29,136,1,136,1,162,5,163,5,136,1,166,5,167,5,136,1,170,5,171,5,136,1,174,5,175,5,136,1,178,5,179,5,136,1,155,29,136,1,136,1,136,1,136,1,175,74,128,48,208,3,130,76]},{"1185317":[194,48,162,64,4,169,57,14,34,124,201,27,162,188,4,169,58,14,34,172,194,27,34,172,194,27,34,172,194,27,34,172,194,27,162,60,5,34,172,194,27,34,172,194,27,34,172,194,27,34,172,194,27,162,190,5,169,144,4,34,172,194,27,34,172,194,27,169,255,255,153,18,16,130,62]},{"1185393":[194,48,162,188,3,169,57,14,34,124,201,27,162,190,3,169,58,14,34,172,194,27,34,172,194,27,162,60,4,34,172,194,27,34,172,194,27,34,172,194,27,162,188,4,34,172,194,27,34,172,194,27,34,172,194,27,169,255,255,153,18,16,169,21,53,141,45,1,226,48,175,219,242,126,9,32,143,219,242,126,169,3,141,47,1,169,1,133,20,107,175,74,128,48,41,255]},{"1185490":[208,38,169,57,14,141,188,35,26,141,190,35,26,141,192,35,26,141,60,36,26,141,62,36,26,141,64,36,26,141,188,36,26,141,190,36,26,141,192,36,107,39,39,39,39,39,39,2,2,1,1,1]},{"1185547":[39,1,1,1,1,1,2,2,39,39,39]},{"1185563":[39,1,1,1,32,1,2,2,39,39,39]},{"1185579":[39,1,1,1,1,32,2,2,2,2,2]},{"1185595":[1,1,1,1,26,1,18,1,1,2,1,1,40,46,42,43,1,1,24,24,26,1,18,1,1,44,2,45,41,47,2,2,1,1,1,1,1,1,2,1,2,46]},{"1185639":[44]},{"1185641":[78,79,1,1,1,1,1,1,2,1,2]},{"1185653":[46]},{"1185657":[2,34,1,1,2]},{"1185665":[24,18,2,2]},{"1185670":[72]},{"1185675":[1,1,2]},{"1185679":[1,1,16,26,2]},{"1185686":[72]},{"1185691":[16,16,2]},{"1185695":[1,1,1,1]},{"1185701":[72]},{"1185704":[9]},{"1185707":[2,2,2]},{"1185711":[1,1,43]},{"1185716":[9]},{"1185723":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1185739":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1185755":[1,1,1,70,1,1,2,2,2,2,2,2,2]},{"1185771":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1185787":[2,2,66,2,2,2,2,2,2,2,41,34]},{"1185803":[2,2,2,2,2,2,2,2,2,2,41,34]},{"1185820":[2,2,2]},{"1185825":[2,2,2,2]},{"1185836":[2,2,2,2,41,2,2,2,2]},{"1185851":[1,1,1,1,1,1,1,1,1,1,1]},{"1185865":[2,68,1,1,1,1,1,1,1,1,2,2,2]},{"1185881":[2,68,1,1,1,1,1,1,1,1,2,2,2]},{"1185899":[1,1,67,1,1,1,1,1,2,2,2]},{"1185915":[80,2,84,81,87,87,86,86,39,39,39]},{"1185927":[64,64,72,72,80,2,84,81,87,42,86,86,39,39,39]},{"1185943":[64,64,87,72,39,2,82,83,2,1,18,24,85,85]},{"1185959":[72,2,2]},{"1185963":[39,2,82,83,9,1,26,16,85,85]},{"1185975":[72,2,2]},{"1185979":[2,2,24,8,8,8,9,9,8,8,41,2,2,2,26,2,8,8,16,8,18]},{"1186001":[9,9,9,9,9,72,9,41]},{"1186010":[75,2,2,2]},{"1186015":[8,2,2]},{"1186022":[1]},{"1186025":[32]},{"1186027":[2,2,2,2,2,2,2]},{"1186036":[1,1,1,2]},{"1186041":[8]},{"1186043":[175,74,128,48,240,10,191,128,242,126,9,64,159,128,242,126,191,128,242,126,107,175,74,128,48,240,42,169,27,141,47,1,156,198,4,100,176,156,16,7,156,228,2,156,193,15,156,26,1,156,27,1,156,28,1,156,29,1,169,2,141,44,1,169,9,141,45,1,107,169,5,141,198,4,100,176,100,200,107,175,74,128,48,240,3,169,1,107,165,138,201,67,107,175,74,128,48,41,255]},{"1186143":[240,2,128,23,169,15,2,166,138,224,51]},{"1186155":[208,4,143,168,34,126,224,47]},{"1186164":[208,4,143,178,43,126,107,175,74,128,48,41,255]},{"1186178":[208,5,175,135,242,126,107,169,32]},{"1186188":[107,175,74,128,48,240,69,218,8,139,75,171,165,138,41,64,240,55,194,48,162]},{"1186211":[191,228,153,164,197,34,176,29,191,230,153,164,197,34,144,21,191,232,153,164,197,32,176,13,191,234,153,164,197,32,144,5,171,40,250,128,24,138,24,105,8]},{"1186253":[201,184]},{"1186256":[240,3,170,128,206,171,40,250,165,12,5,14,92,176,169,7,92,209,169,7,144,2,200,2,168,12,248,12,248,5]},{"1186287":[10]},{"1186289":[6,96,6,176,5,160,6,96,6,48,8,160,6,112,7,96,6,128,6,128,8,80,9,96,6,136,6,80,9]},{"1186319":[10,96,6,48,8,184,7,72,8,224,8,112,9,239,2,33,3,22,12,162,12,72]},{"1186342":[143]},{"1186344":[16,11,72,11,88,3,64,4,8,14,208,14,184,3,32,4,208,14,232,15,96,3,200,3,192,14,32,15,104,12]},{"1186375":[13,120,13,200,13,64,15,112,15,24,6,64,6,40,14,120,14,152,2,232,2,16,15,128,15,248,1,56,2,168,10,144,11,200,2,32,3,24,13,128,13,64]},{"1186418":[112]},{"1186420":[240,14,48,15,32,1,96,1,208,10]},{"1186431":[11,80,11,112,11,48,11,96,11,80,11,112,11,120,6,240,6,16]},{"1186450":[64]},{"1186452":[168,2,232,2,144,12,192,12,226,48,175,74,128,48,240,20,139,169,126,72,171,194,48,165,138,201,128]},{"1186480":[176,5,10,170,252,193,154,171,194,48,162,30]},{"1186493":[169,190,13,107,193,155,193,155,193,155,194,155,193,155,237,155,193,155,231,156,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,54,157,193,155,193,155,193,155,61,157,193,155,193,155,193,155,193,155,193,155,193,155,92,157,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,232,159,193,155,193,155,193,155,193,155,193,155,193,155,4,160,193,155,198,163,73,166,193,155,80,166,193,155,193,155,193,155,193,155,135,166,193,155,92,163,193,155,193,155,193,155,193,155,193,155,193,155,253,166,193,155,116,167,193,155,82,167,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,123,167,193,155,193,155,193,155,130,167,193,155,193,155,193,155,193,155,193,155,193,155,158,167,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,112,169,126,169,193,155,193,155,119,169,193,155,133,169,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,193,155,96,169,26,2,141,182,41,169,243,1,141,184,41,169,160]},{"1186769":[141,186,41,169,4,1,141,188,41,169,198]},{"1186781":[141,52,42,141,56,42,141,58,42,169,52]},{"1186793":[141,224,43,96,169,17,1,141,110,32,141,236,32,169,19,1,141,112,32,141,114,32,169,18,1,141,116,32,141,238,32,141,108,33,169,22,1,141,240,32,141,110,33,169,23,1,141,242,32,169,24,1,141,244,32,169,28,1,141,112,33,169,29,1,141,114,33,169,30,1,141,116,33,169,48,1,141,226,33,141,240,33,141,226,34,141,240,34,169,35,1,141,236,33,169,36,1,141,238,33,169,52]},{"1186896":[141,242,33,169,38,1,141,244,33,169,53,1,141,98,34,141,112,34,141,98,35,141,112,35,169,54,1,141,100,34,141,102,34,141,108,34,141,110,34,169,55,1,141,104,34,141,106,34,169,60,1,141,228,34,141,230,34,141,236,34,141,238,34,169,61,1,141,232,34,141,234,34,169,68,1,141,100,35,169,69,1,141,102,35,169,70,1,141,104,35,169,71,1,141,106,35,169,179,1,141,108,35,169,180,1,141,110,35,169,57,1,141,112,41,141,108,44,169,75,1,141,114,41,141,110,44,169,107,1,141,240,41,141,236,44,169,130,1,141,242,41,141,238,44,169,52]},{"1187043":[141,74,61,96,169,27,2,141,158,37,141,162,37,141,164,37,141,28,38,141,38,38,141,154,38,141,168,38,141,26,39,141,40,39,141,154,39,141,168,39,141,30,40,141,32,40,141,34,40,141,36,40,141,40,40,141,156,40,141,166,40,141,30,41,141,36,41,169,52,1,141,158,38,141,164,38,169,52]},{"1187122":[141,38,40,96,169,52]},{"1187129":[141,46,43,96,169,241,2,141,34,36,169,242,2,141,36,36,169,132,1,141,162,36,141,34,37,169,133,1,141,164,36,141,36,37,96,169,133,4,141,36,36,141,38,36,169,84,4,141,164,36,141,166,36,169,118,4,141,34,37,169,96,4,141,36,37,141,38,37,169,215,4,141,40,37,169,221,4,141,36,38,169,222,4,141,38,38,169,224,4,141,164,38,169,225,4,141,166,38,169,228,4,141,36,39,169,229,4,141,38,39,169,52]},{"1187242":[141,164,39,141,166,39,169,109,4,141,62,36,141,188,36,141,190,36,141,62,37,141,64,36,141,192,36,141,194,36,141,64,37,169,53]},{"1187278":[141,40,44,141,174,47,169,52]},{"1187287":[141,44,44,141,46,44,141,182,44,141,54,45,141,182,45,141,182,46,141,48,47,141,54,47,141,170,47,141,176,47,141,180,47,141,182,47,169,226]},{"1187326":[141,54,44,141,168,47,169,174]},{"1187335":[141,172,44,169,175]},{"1187341":[141,174,44,169,126]},{"1187347":[141,176,44,169,127]},{"1187353":[141,178,44,169,186,4,141,180,44,141,180,45,141,180,46,169,176]},{"1187371":[141,44,45,169,20]},{"1187377":[141,46,45,169,21]},{"1187383":[141,48,45,169,168]},{"1187389":[141,50,45,169,187,4,141,52,45,141,52,46,141,52,47,169,137]},{"1187407":[141,172,45,169,28]},{"1187413":[141,174,45,169,29]},{"1187419":[141,176,45,169,118]},{"1187425":[141,178,45,169,241]},{"1187431":[141,44,46,169,78]},{"1187437":[141,46,46,169,79]},{"1187443":[141,48,46,169,217]},{"1187449":[141,50,46,169,154]},{"1187455":[141,172,46,169,155]},{"1187461":[141,174,46,169,156]},{"1187467":[141,176,46,169,149]},{"1187473":[141,178,46,169,52]},{"1187479":[141,40,48,141,44,48,169,53]},{"1187488":[141,42,48,141,50,48,169,218]},{"1187497":[141,46,48,169,226]},{"1187503":[141,48,48,169,133,4,141,36,36,141,38,36,169,84,4,141,164,36,141,166,36,169,118,4,141,34,37,169,96,4,141,36,37,141,38,37,169,215,4,141,40,37,169,221,4,141,36,38,169,222,4,141,38,38,169,224,4,141,164,38,169,225,4,141,166,38,169,228,4,141,36,39,169,229,4,141,38,39,169,52]},{"1187584":[141,164,39,141,166,39,169,134,4,141,176,38,169,135,4,141,178,38,169,84,4,141,44,39,141,46,39,169,142,4,141,48,39,169,143,4,141,50,39,169,202,4,141,172,39,169,94,4,141,174,39,169,148,4,141,176,39,169,149,4,141,178,39,169,158,4,141,180,39,169,153,4,141,44,40,169,81,4,141,48,40,169,52]},{"1187668":[141,172,40,141,174,40,141,176,40,169,84,4,141,78,39,141,80,39,169,8,6,141,82,39,169,89,4,141,206,39,141,208,39,169,94,4,141,210,39,169,81,4,141,78,40,141,80,40,141,82,40,141,46,40,169,52]},{"1187725":[141,206,40,141,208,40,141,210,40,175,219,242,126,41,32]},{"1187741":[240,72,169,109,4,141,62,36,169,58,14,141,188,36,169,59,14,141,190,36,169,62,14,141,60,37,169,63,14,141,62,37,169,144,4,141,190,37,169,57,14,141,64,36,169,60,14,141,192,36,169,61,14,141,194,36,169,64,14,141,64,37,169,65,14,141,66,37,169,145,4,141,192,37,96,169,52]},{"1187819":[141,136,34,141,8,35,141,136,35,141,8,36,141,136,36,141,138,36,169,54]},{"1187840":[141,134,35,96,169,126,1,141,80,32,141,206,32,169,209]},{"1187856":[141,82,32,141,84,32,141,86,32,141,88,32,141,90,32,141,92,32,141,94,32,141,230,33,141,232,33,141,234,33,141,236,33,141,238,33,141,240,33,169,210]},{"1187898":[141,96,32,141,226,32,141,100,33,169,131,1,141,208,32,141,78,33,169,201]},{"1187919":[141,210,32,141,212,32,141,214,32,141,216,32,141,218,32,141,220,32,141,222,32,141,82,33,141,84,33,141,86,33,141,88,33,141,90,33,141,92,33,141,94,33,141,102,34,141,104,34,141,106,34,141,108,34,141,110,34,141,112,34,141,204,34,169,208]},{"1187985":[141,224,32,141,98,33,141,228,33,169,83,1,141,80,33,141,206,33,141,208,33,141,80,34,141,206,34,169,200]},{"1188015":[141,96,33,141,226,33,141,100,34,141,218,40,141,92,41,169,220]},{"1188033":[141,210,33,141,212,33,141,214,33,141,216,33,141,218,33,141,220,33,141,222,33,141,76,34,169,202]},{"1188060":[141,224,33,141,98,34,141,90,40,141,220,40,169,120,1,141,78,34,169,227]},{"1188081":[141,82,34,141,84,34,169,134,1,141,208,34,141,78,35,169,52]},{"1188099":[141,210,34,141,212,34,141,214,34,141,80,35,141,82,35,141,84,35,141,86,35,141,208,35,141,210,35,141,212,35,141,214,35,141,82,36,141,84,36,141,86,36,141,88,36,141,212,36,141,214,36,141,84,37,141,86,37,141,212,37,141,214,37,141,86,38,169,211]},{"1188168":[141,226,34,169,2,3,141,228,34,169,204]},{"1188180":[141,230,34,141,232,34,141,234,34,141,236,34,141,238,34,141,240,34,141,76,35,169,206]},{"1188204":[141,98,35,141,226,35,141,216,37,141,88,38,141,216,38,141,88,39,169,197]},{"1188225":[141,100,35,141,228,35,141,220,37,141,92,38,141,220,38,141,92,39,169,171,6,141,102,35,141,230,35,141,102,36,141,228,36,141,230,36,141,96,39,169,170]},{"1188267":[141,104,35,169,132,3,141,106,35,141,110,35,141,236,35,141,106,36,141,232,36,141,234,36,141,236,36,141,238,36,169,171]},{"1188300":[141,108,35,169,89,7,141,200,35,141,74,36,141,204,36,141,78,37,141,208,38,141,82,39,141,212,39,169,87,7,141,202,35,141,76,36,141,206,36,141,80,37,141,210,38,141,84,39,169,255,1,141,204,35,141,78,36,141,208,36,141,82,38,141,212,38,141,86,39,169,124,1,141,206,35,141,80,36,141,210,36,141,84,38,141,214,38,169,92,1,141,224,35,169]},{"1188395":[1,141,90,36,141,216,36,169,194,1,141,92,36,169,24,2,141,94,36,169,98,1,141,96,36,169,6,1,141,98,36,141,224,36,141,92,37,169,7,1,141,100,36,141,226,36,169,4,1,141,218,36,141,88,37,169,212,1,141,220,36,169,25,2,141,222,36,169,121,1,141,82,37,141,210,37,169,5,1,141,90,37,169,102,1,141,94,37,169,102,7,141,96,37,169,180,6,141,98,37,141,100,37,141,102,37,141,104,37,141,106,37,141,108,37,141,110,37,141,112,37,169,229,6,141,208,37,141,80,38,169,196]},{"1188528":[141,218,37,141,90,38,141,218,38,141,90,39,169,113,1,141,222,37,169,101,1,141,228,37,141,230,37,141,232,37,141,234,37,141,236,37,141,238,37,141,240,37,169,228,6,141,210,39,141,82,40,141,84,40,141,86,40,141,212,40,141,214,40,141,86,41,141,88,41,141,216,41,141,218,41,169,225,6,141,214,39,169,253,2,141,216,39,141,88,40,169,207]},{"1188621":[141,218,39,169,231,6,141,216,40,141,90,41,141,220,41,169,105,7,141,248,56,169,225,6,141,250,56,141,252,56,141,254,56,169,227,6,141,120,57,169,229,2,141,122,57,141,126,57,169,236,2,141,124,57,169,240,2,141,248,57,169,243,2,141,250,57,141,252,57,141,254,57,169,52]},{"1188696":[141,148,61,96,169,229,2,141,174,39,141,44,40,141,46,40,141,50,40,141,172,40,141,174,40,141,40,41,141,44,41,141,168,41,141,176,41,141,40,42,141,48,42,141,172,42,141,178,42,169,138,7,141,170,40,141,176,40,141,170,42,141,42,43,141,48,43,141,174,43,169,235,2,141,180,40,141,48,41,141,174,41,141,44,42,141,50,42,141,174,42,169,236,2,141,52,41,141,40,43,141,44,43,141,46,43,141,50,43,96,169,213,1,141,134,36,169,101,1,141,6,37,169,102,1,141,8,37,141,138,37,169,198]},{"1188830":[141,134,37,141,8,38,141,136,38,141,8,39,141,136,39,141,6,40,141,8,40,169,113,1,141,136,37,169,28,2,141,10,38,141,138,38,141,10,39,141,138,39,169,52]},{"1188875":[141,14,39,141,142,39,141,144,39,141,14,40,141,16,40,141,18,40,141,20,40,141,22,40,141,24,40,141,26,40,141,28,40,141,142,40,141,146,40,141,148,40,141,150,40,141,152,40,141,154,40,141,156,40,141,158,40,141,14,41,141,16,41,141,18,41,141,24,41,141,26,41,141,28,41,141,30,41,141,32,41,141,140,41,141,142,41,141,144,41,141,146,41,141,152,41,141,154,41,141,158,41,141,160,41,141,6,42,141,8,42,141,10,42,141,12,42,141,16,42,141,18,42,141,20,42,141,22,42,141,24,42,141,28,42,141,30,42,141,132,42,141,134,42,141,136,42,141,140,42,141,142,42,141,144,42,141,146,42,141,148,42,141,150,42,141,152,42,141,154,42,141,156,42,141,6,43,141,10,43,141,14,43,141,18,43,141,26,43,141,132,43,141,134,43,141,136,43,141,138,43,141,142,43,141,146,43,141,148,43,141,152,43,141,154,43,141,4,44,141,8,44,141,10,44,141,14,44,141,18,44,141,20,44,141,24,44,141,134,44,141,136,44,141,138,44,141,144,44,141,146,44,141,148,44,141,152,44,141,10,45,141,12,45,141,16,45,141,20,45,141,22,45,141,138,45,141,140,45,141,142,45,141,148,45,169,106,1,141,140,39,141,12,40,141,130,42,141,2,43,141,130,43,141,2,44,141,130,44,169,250,1,141,140,40,169,218]},{"1189193":[141,144,40,141,156,41,141,20,43,141,22,43,141,24,43,141,150,43,141,22,44,141,150,44,141,8,45,141,146,45,169,134,1,141,12,41,141,138,41,141,4,42,169,54]},{"1189238":[141,20,41,141,22,41,141,148,41,141,150,41,141,18,45,169,228]},{"1189256":[141,134,41,169,229]},{"1189262":[141,136,41,169]},{"1189267":[1,141,162,41,169,113]},{"1189274":[141,14,42,141,26,42,141,140,44,169,92,1,141,32,42,141,158,42,141,28,43,141,154,44,141,24,45,141,150,45,169,4,1,141,34,42,169,212,1,141,36,42,169,53]},{"1189319":[141,138,42,141,8,43,141,6,44,141,14,45,141,144,45,169,98,1,141,160,42,141,30,43,141,156,43,141,26,45,141,152,45,169,226]},{"1189355":[141,4,43,141,12,43,141,16,43,141,140,43,141,144,43,141,12,44,141,16,44,141,142,44,169,248]},{"1189382":[141,26,44,169,206]},{"1189388":[141,28,44,141,156,44,169,96,1,141,132,44,141,6,45,141,136,45,169,103,1,141,4,45,141,134,45,169,114,1,141,8,46,169,94,1,141,10,46,141,12,46,141,14,46,141,16,46,141,18,46,141,20,46,169,116,1,141,22,46,96,169,125,3,141,168,34,96,169,241,2,141,176,43,169,242,2,141,178,43,169,132,1,141,48,44,169,133,1,141,50,44,169,146,3,141,176,44,169,147,3,141,178,44,169,148,3,141,48,45,169,149,3,141,50,45,169,52]},{"1189507":[141,86,47,96,169,116,7,141]},{"1189516":[40,169,225,6,141,2,40,169,87,7,141,4,40,141,134,40,169,121,7,141,128,40,169,236,2,141,130,40,169,89,7,141,132,40,141,6,41,169,229,2,141]},{"1189558":[41,141,2,41,141,4,41,169,106,7,141,8,41,169,243,2,141,128,41,141,130,41,169,241,2,141,132,41,169,242,2,141,134,41,169,138,3,141,136,41,169,132,1,141,4,42,141,132,42,141,4,43,141,132,43,169,133,1,141,6,42,141,134,42,141,6,43,141,134,43,96,169,150,14,141,94,35,141,222,35,141,94,36,141,222,36,141,94,37,169,151,14,141,96,35,141,224,35,141,96,36,141,224,36,141,96,37,169,148,14,141,222,37,169,149,14,141,224,37,169,128,1,141,94,39,169,129,1,141,96,39,169,132,1,141,222,39,141,94,40,169,133,1,141,224,39,141,96,40,169,18,2,141,224,43,96,169,152,3,141,160,37,169,34,5,141,162,37,169,37,1,141,32,38,169,38,1,141,34,38,169,57,2,141,158,38,141,164,38,96,169,57,2,141,74,61,96,169,15,2,141,46,43,96,169,243,2,141,34,36,141,36,36,169,201]},{"1189774":[141,162,36,141,164,36,169,227]},{"1189783":[141,34,37,141,36,37,96,169,35,3,141,182,57,169,36,3,141,184,57,141,186,57,141,188,57,141,190,57,169,254,2,141,52,58,169,255,2,141,54,58,169,38,3,141,56,58,141,58,58,141,60,58,141,62,58,169,157,3,141,178,58,169,3,3,141,180,58,169,50,2,141,182,58,141,52,59,169,51,2,141,184,58,141,186,58,141,188,58,141,190,58,169,162,3,141,50,59,169,53,2,141,54,59,141,180,59,169,106,4,141,56,59,169,51,3,141,58,59,141,60,59,141,62,59,169,52]},{"1189910":[141,182,59,141,186,59,141,188,59,141,58,60,141,60,60,141,62,60,141,28,50,141,156,50,141,160,50,169,113]},{"1189940":[141,30,50,169,218]},{"1189946":[141,32,50,141,154,50,169,225]},{"1189955":[141,158,50,169,130,3,141,24,51,169,124,3,141,34,51,169,27,2,141,24,50,141,34,50,141,152,50,141,162,50,141,26,51,141,28,51,141,30,51,141,32,51,169,226]},{"1190000":[141,26,50,169,242]},{"1190006":[141,184,59,169,8,1,141,56,60,169,52]},{"1190018":[141,190,59,175,197,243,126,41,255]},{"1190028":[201,3]},{"1190031":[208,6,169,18,2,141,190,59,169,36,3,141,192,57,141,194,57,141,196,57,169,37,3,141,198,57,169,213,2,141,200,57,141,210,57,169,204,2,141,204,57,141,212,57,169,38,3,141,64,58,141,66,58,141,68,58,169,39,3,141,70,58,169,247,2,141,72,58,169,227,2,141,76,58,141,78,58,169,51,2,141,192,58,141,194,58,141,196,58,169,52,2,141,198,58,141,72,59,169,246,2,141,200,58,169,150,3,141,202,58,169,51,3,141,64,59,141,66,59,169,170,3,141,68,59,169,163,3,141,70,59,141,200,59,169,151,3,141,74,59,169,52]},{"1190174":[141,192,59,141,194,59,141,198,59,141,64,60,141,66,60,169,156,2,141,196,59,169,10,1,141,68,60,169,11,1,141,70,60,141,72,60,141,74,60,141,76,60,141,78,60,141,80,60,141,82,60,141,84,60,141,86,60,141,88,60,141,90,60,141,92,60,141,94,60,141,96,60,141,98,60,141,100,60,141,102,60,96,169,15,2,141,178,43,96,169,15,2,141,168,34,96,169,57,2,141,148,61,96,169,57,2,141,80,47,169,163,11,141,82,47,141,206,47,141,208,47,169,163,11,141,84,48,141,86,48,141,88,48,141,90,48,141,84,50,141,86,50,141,88,50,141,90,50,169,172,11,141,212,48,169,173,11,141,214,48,141,86,49,141,214,49,169,169,11,141,216,48,141,88,49,141,216,49,169,170,11,141,218,48,169,197,11,141,84,49,169,200,11,141,90,49,169,202,11,141,212,49,169,205,11,141,218,49,96,226,48,175,201,80,127,208,31,175,67,243,126,32,212,172,194,32,166,6,138,9]},{"1190405":[36,143,90,199,126,166,7,138,9]},{"1190415":[36,143,92,199,126,128,14,194,32,169,49,36,143,90,199,126,26,143,92,199,126,175,98,243,126,32,114,172,166,4,138,9]},{"1190448":[36,143,80,199,126,166,5,138,9]},{"1190458":[36,143,82,199,126,166,6,138,9]},{"1190468":[36,143,84,199,126,166,7,138,9]},{"1190478":[36,143,86,199,126,226,32,175,117,129,48,208,51,175,200,80,127,208,31,175,119,243,126,32,212,172,194,32,166,6,138,9]},{"1190511":[36,143,96,199,126,166,7,138,9]},{"1190521":[36,143,98,199,126,128,14,194,32,169,49,36,143,96,199,126,26,143,98,199,126,226,32,175,103,129,48,208,3,130,122]},{"1190553":[175,24,244,126,32,173,172,194,32,175,101,129,48,143,42,199,126,166,5,138,9]},{"1190575":[36,143,44,199,126,166,6,138,9]},{"1190585":[36,143,46,199,126,166,7,138,9]},{"1190595":[36,143,48,199,126,226,32,175,103,129,48,201,255,240,48,175,103,129,48,32,173,172,194,32,169,48,40,143,50,199,126,166,5,138,9]},{"1190631":[36,143,52,199,126,166,6,138,9]},{"1190641":[36,143,54,199,126,166,7,138,9]},{"1190651":[36,143,56,199,126,128,17,194,32,169,127,32,143,50,199,126,143,52,199,126,143,54,199,126,194,32,175,60,128,48,41,255]},{"1190684":[240,4,34,238,172,164,226,32,175,111,243,126,201,255,240,34,32,212,172,194,32,166,6,138,224,144,208,3,169,127]},{"1190715":[9]},{"1190717":[36,143,100,199,126,166,7,138,9]},{"1190727":[36,143,102,199,126,128,17,194,32,169,127,36,143,100,199,126,143,102,199,126,143,38,199,126,175,110,243,126,41,255]},{"1190758":[24,105,7]},{"1190762":[41,248,255,170,175,202,80,127,41,255]},{"1190773":[208,3,130,215]},{"1190778":[226,32,169,128,143,110,243,126,194,48,162,128]},{"1190791":[165,26,41,12]},{"1190796":[74,74,240,58,201,1]},{"1190803":[240,98,201,2]},{"1190808":[208,3,130,180]},{"1190813":[191,15,254,13,41,255,239,143,70,199,126,191,17,254,13,41,255,239,143,134,199,126,191,19,254,13,41,255,239,143,198,199,126,191,21,254,13,41,255,239,143,6,200,126,107,191,15,254,13,41,255,231,143,70,199,126,191,17,254,13,41,255,231,143,134,199,126,191,19,254,13,41,255,231,143,198,199,126,191,21,254,13,41,255,231,143,6,200,126,107,191,15,254,13,41,255,235,143,70,199,126,191,17,254,13,41,255,235,143,134,199,126,191,19,254,13,41,255,235,143,198,199,126,191,21,254,13,41,255,235,143,6,200,126,107,191,15,254,13,41,255,227,143,70,199,126,191,17,254,13,41,255,227,143,134,199,126,191,19,254,13,41,255,227,143,198,199,126,191,21,254,13,41,255,227,143,6,200,126,107,191,15,254,13,143,70,199,126,191,17,254,13,143,134,199,126,191,19,254,13,143,198,199,126,191,21,254,13,143,6,200,126,107,160,144,201,232,3,144,6,200,233,232,3,128,245,132,4,160,144,201,100]},{"1191046":[144,6,200,233,100]},{"1191052":[128,245,132,5,160,144,201,10]},{"1191061":[144,6,200,233,10]},{"1191067":[128,245,132,6,160,144,201,1]},{"1191076":[144,4,200,58,208,252,132,7,96,160,144,201,100,144,5,200,233,100,128,247,132,5,160,144,201,10,144,5,200,233,10,128,247,132,6,160,144,201,1,144,4,200,58,208,252,132,7,96,160,144,201,10,144,5,200,233,10,128,247,132,6,160,144,201,1,144,4,200,58,208,252,132,7,96,166,27,208,1,107,174,12,4,224,255,208,1,107,201,2]},{"1191166":[240,11,175,100,243,126,63,47,173,164,208,1,107,124,75,173,32,212,172,194,32,166,6,138,9]},{"1191192":[36,143,148,199,126,166,7,138,9]},{"1191202":[36,143,150,199,126,169,48,40,143,152,199,126,107]},{"1191216":[128]},{"1191218":[64]},{"1191220":[32]},{"1191222":[16]},{"1191224":[8]},{"1191226":[4]},{"1191228":[2]},{"1191230":[1,128]},{"1191233":[64]},{"1191235":[32]},{"1191237":[16]},{"1191239":[8]},{"1191241":[4]},{"1191243":[103,173,103,173,130,173,155,173,183,173,208,173,233,173,2,174,27,174,54,174,81,174,108,174,133,174,160,174,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,52,244,126,74,74,74,74,76,14,173,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,54,244,126,41,7,76,14,173,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,53,244,126,74,74,74,74,74,76,14,173,169,144,36,143,154,199,126,169,146,36,143,156,199,126,226,32,175,53,244,126,41,2,76,14,173,169,145,36,143,154,199,126,169,144,36,143,156,199,126,226,32,175,57,244,126,41,15,76,14,173,169,145,36,143,154,199,126,169,148,36,143,156,199,126,226,32,175,52,244,126,41,15,76,14,173,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,56,244,126,41,15,76,14,173,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,55,244,126,74,74,74,74,76,14,173,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,56,244,126,74,74,74,74,76,14,173,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,53,244,126,41,28,74,74,76,14,173,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,55,244,126,41,15,76,14,173,169,145,36,143,154,199,126,169,146,36,143,156,199,126,226,32,175,57,244,126,74,74,74,74,76,14,173,169,146,36,143,154,199,126,169,151,36,143,156,199,126,226,32,175,54,244,126,74,74,74,76,14,173,165,17,34,156,135]},{"1191616":[207,174,164,231,174,164,6,175,164,7,176,164,29,176,164,169,128,141,16,7,34,61,137]},{"1191640":[34,51,131]},{"1191644":[34,69,145,164,169,7,133,20,230,17,107,32,38,177,100,200,100,201,34,47,176,164,208,11,162,15,169]},{"1191672":[159,16,5,112,202,16,249,169,15,133,19,230,17,107,139,75,171,32,150,177,165,246,41,16,240,3,32,226,178,165,246,41,32,240,3,32,239,178,165,244,41,1,240,17,165,201,26,201,36,144,3,56,233,36,133,201,169,32,141,47,1,165,244,41,2,240,15,165,201,58,16,3,24,105,36,133,201,169,32,141,47,1,165,244,41,4,240,19,165,201,24,105,9,201,36,144,3,56,233,36,133,201,169,32,141,47,1,165,244,41,8,240,17,165,201,56,233,9,16,3,24,105,36,133,201,169,32,141,47,1,165,244,5,246,41,192,240,77,166,201,191,227,175,164,16,43,201,240,208,4,230,17,128,69,201,241,208,5,32,239,178,128,52,201,242,208,5,32,226,178,128,43,201,243,208,11,230,17,230,17,169,44,141,46,1,128,36,128,26,166,200,159,16,5,112,138,26,41,15,133,200,208,7,156,46,1,230,17,128,13,169,43,141,46,1,165,244,41,16,240,2,230,17,32,148,178,32,73,178,169,1,133,20,171,107,1,2,3,4,5,6,7,8,240,9,10,11,12,13,14,15,16,241,17,18,19,20,21,22,23,24,242,25,26,27,28,29,30,31,32,243,34,47,176,164,208,8,169,60,141,46,1,198,17,107,169,27,141,47,1,230,17,107,169,1,133,16,169,1,133,17,100,176,156,157,11,100,200,100,201,107,218,90,162,15,191,16,5,112,208,3,130,161]},{"1191996":[202,16,244,194,32,162,14,169]},{"1192006":[159,208,80,127,202,202,16,248,32,226,176,175,186,128,48,143,218,80,127,175,188,128,48,143,220,80,127,175,190,128,48,143,222,80,127,175,192,128,48,143]},{"1192047":[81,127,175,194,128,48,143,2,81,127,175,196,128,48,143,4,81,127,175,198,128,48,143,6,81,127,169,2]},{"1192076":[133,4,34,145,174,160,226,32,175]},{"1192086":[81,127,201,49,208,65,175,1,81,127,201,65,208,57,175,2,81,127,201,89,208,49,175,3,81,127,201,38,208,41,175,4,81,127,201,83,208,33,175,5,81,127,201,88,208,25,175,6,81,127,201,151,208,17,175,7,81,127,201,147,208,9,122,250,169,1,143,158,80,127,107,122,250,169]},{"1192161":[107,169]},{"1192165":[133]},{"1192167":[133,2,169,11]},{"1192172":[133,4,166]},{"1192176":[191,16,5,112,58,41,31]},{"1192184":[164,4,240,4,10,136,128,250,235,166,2,31,208,80,127,159,208,80,127,165,4,56,233,5]},{"1192209":[16,6,24,105,8]},{"1192215":[230,2,133,4,165]},{"1192221":[26,133]},{"1192224":[201,16]},{"1192227":[144,201,96,173]},{"1192232":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169]},{"1192260":[141]},{"1192262":[67,169,128,141,1,67,169,2,141,129,33,169,16,141,130,33,169,126,141,131,33,169,190,141,2,67,169,180,141,3,67,169,164,141,4,67,169,98,141,5,67,169,1,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1192340":[67,96,194,32,165,200,41,255]},{"1192349":[10,170,191,225,177,164,24,105,132,96,235,143,2,17]},{"1192364":[165,201,41,255]},{"1192369":[10,170,191,1,178,164,24,105,163,97,235,143,18,17]},{"1192384":[235,24,105,32]},{"1192389":[235,143,30,17]},{"1192394":[235,24,105,3]},{"1192399":[235,143,38,17]},{"1192404":[235,24,105,61]},{"1192409":[235,143,46,17]},{"1192414":[226,32,96,64]},{"1192419":[67]},{"1192421":[70]},{"1192423":[73]},{"1192425":[76]},{"1192427":[79]},{"1192429":[82]},{"1192431":[85]},{"1192433":[160]},{"1192435":[163]},{"1192437":[166]},{"1192439":[169]},{"1192441":[172]},{"1192443":[175]},{"1192445":[178]},{"1192447":[181]},{"1192449":[223,255,226,255,229,255,232,255,235,255,238,255,241,255,244,255,247,255,63]},{"1192469":[66]},{"1192471":[69]},{"1192473":[72]},{"1192475":[75]},{"1192477":[78]},{"1192479":[81]},{"1192481":[84]},{"1192483":[87]},{"1192485":[159]},{"1192487":[162]},{"1192489":[165]},{"1192491":[168]},{"1192493":[171]},{"1192495":[174]},{"1192497":[177]},{"1192499":[180]},{"1192501":[183]},{"1192503":[255]},{"1192505":[2,1,5,1,8,1,11,1,14,1,17,1,20,1,23,1,194,32,165,200,41,255]},{"1192528":[10,170,191,225,177,164,24,105,132,96,235,143,10,17]},{"1192543":[165,201,41,255]},{"1192548":[10,170,191,1,178,164,24,105,163,97,235,143,58,17]},{"1192563":[235,24,105,32]},{"1192568":[235,143,70,17]},{"1192573":[235,24,105,3]},{"1192578":[235,143,78,17]},{"1192583":[235,24,105,61]},{"1192588":[235,143,86,17]},{"1192593":[226,32,96,194,48,162,15]},{"1192601":[191,16,5,112,41,255]},{"1192608":[155,10,10,10,133]},{"1192614":[152,10,10,10,10,133,3,166]},{"1192623":[191,148,148,164,166,3,157,6,16,166]},{"1192634":[191,150,148,164,166,3,157,8,16,166]},{"1192645":[191,152,148,164,166,3,157,14,16,166]},{"1192656":[191,154,148,164,166,3,157,16,16,187,202,48,2,128,186,226,48,96,169,43,141,46,1,165,200,26,41,15,133,200,96,169,43,141,46,1,165,200,58,41,15,133,200,96,97,163]},{"1192703":[51,1,10,2,10]},{"1192709":[2,5,14,6,14]},{"1192715":[2]},{"1192717":[6,21,6]},{"1192721":[2,12,14,13,14]},{"1192727":[2,98,6,99,6]},{"1192733":[2,10,2,11,2]},{"1192739":[2,32,14,33,14]},{"1192745":[2,133,26,134,26]},{"1192751":[2,171,30,171,30,97,195]},{"1192759":[51,17,10,18,10]},{"1192765":[2]},{"1192767":[30,22,14]},{"1192771":[2,48,6]},{"1192775":[30]},{"1192777":[2,28,14,28,78]},{"1192783":[2,114,6,115,6]},{"1192789":[2,26,2,27,2]},{"1192795":[2,48,14,49,14]},{"1192801":[2,149,26,150,26]},{"1192807":[2,171,30,171,30,98,3]},{"1192815":[51,7,10,23,202]},{"1192821":[2,8,10,24,202]},{"1192827":[2,9,10,25,202]},{"1192833":[2,44,6,44,70]},{"1192839":[2,34,2,35,2]},{"1192845":[2,36,2,37,2]},{"1192851":[2,38,14,39,14]},{"1192857":[2,40,10,41,10]},{"1192863":[2,138,29]},{"1192867":[2,98,35]},{"1192871":[51,23,10,7,202]},{"1192877":[2,24,10,8,202]},{"1192883":[2,25,10,9,202]},{"1192889":[2,60,6,61,6]},{"1192895":[2,50,2,51,2]},{"1192901":[2,52,2,53,2]},{"1192907":[2,54,14,55,14]},{"1192913":[2,56,10,57,10]},{"1192919":[2,154,29]},{"1192923":[2,98,99]},{"1192927":[51,42,26,43,26]},{"1192933":[2,64,30,65,30]},{"1192939":[2,66,26,66,90]},{"1192945":[2,29,6,30,6]},{"1192951":[2,72,6,73,6]},{"1192957":[2,74,14,75,14]},{"1192963":[2,76,22,77,22]},{"1192969":[2,78,2,79,2]},{"1192975":[2]},{"1192977":[2,139,29,98,131]},{"1192983":[51,58,26,59,26]},{"1192989":[2,80,30,81,30]},{"1192995":[2,82,26,83,26]},{"1193001":[2,45,6,46,6]},{"1193007":[2,88,6,89,6]},{"1193013":[2,90,14,91,14]},{"1193019":[2,92,22,93,22]},{"1193025":[2,94,2,95,2]},{"1193031":[2]},{"1193033":[2,155,29,98,195]},{"1193039":[51,14,14,15,14]},{"1193045":[2,100,6,101,6]},{"1193051":[2,109,10,110,10]},{"1193057":[2,111,26,111,90]},{"1193063":[2,129,6,129,70]},{"1193069":[2,130,10,131,10]},{"1193075":[2,132,6,132,70]},{"1193081":[2,47,74,47,10]},{"1193087":[2,103,94,103,30,98,227]},{"1193095":[51,31,78,31,14]},{"1193101":[2,116,6,117,6]},{"1193107":[2,125,10,126,10]},{"1193113":[2,127,26,127,90]},{"1193119":[2,145,6,145,70]},{"1193125":[2,146,10,147,10]},{"1193131":[2,148,6,148,70]},{"1193137":[2,62,10,63,10]},{"1193143":[2,103,222,103,158,255,255,96,132]},{"1193153":[3,134,29,134,29,96,164]},{"1193161":[3,150,29,150,29,96,135]},{"1193169":[3,134,29,134,29,96,167]},{"1193177":[3,150,29,150,29,96,138]},{"1193185":[3,134,29,134,29,96,170]},{"1193193":[3,150,29,150,29,96,141]},{"1193201":[3,134,29,134,29,96,173]},{"1193209":[3,150,29,150,29,96,144]},{"1193217":[3,134,29,134,29,96,176]},{"1193225":[3,150,29,150,29,96,147]},{"1193233":[3,134,29,134,29,96,179]},{"1193241":[3,150,29,150,29,96,150]},{"1193249":[3,134,29,134,29,96,182]},{"1193257":[3,150,29,150,29,96,153]},{"1193265":[3,134,29,134,29,96,185]},{"1193273":[3,150,29,150,29,96,228]},{"1193281":[3,134,29,134,29,97,4]},{"1193289":[3,150,29,150,29,96,231]},{"1193297":[3,134,29,134,29,97,7]},{"1193305":[3,150,29,150,29,96,234]},{"1193313":[3,134,29,134,29,97,10]},{"1193321":[3,150,29,150,29,96,237]},{"1193329":[3,134,29,134,29,97,13]},{"1193337":[3,150,29,150,29,96,240]},{"1193345":[3,134,29,134,29,97,16]},{"1193353":[3,150,29,150,29,96,243]},{"1193361":[3,134,29,134,29,97,19]},{"1193369":[3,150,29,150,29,96,246]},{"1193377":[3,134,29,134,29,97,22]},{"1193385":[3,150,29,150,29,96,249]},{"1193393":[3,134,29,134,29,97,25]},{"1193401":[3,150,29,150,29,96,196]},{"1193409":[3]},{"1193411":[2]},{"1193413":[2,96,196]},{"1193417":[3,103,222,103,158,97,130]},{"1193425":[7]},{"1193427":[2]},{"1193429":[2]},{"1193431":[2]},{"1193433":[2,97,162,128,3]},{"1193439":[2]},{"1193441":[2,97,165,128,3]},{"1193447":[2]},{"1193449":[2,97,226]},{"1193453":[7]},{"1193455":[2]},{"1193457":[2]},{"1193459":[2]},{"1193461":[2,97,130]},{"1193465":[7,187,26,188,26,188,90,187,90,97,162,128,3,189,26,189,154,97,165,128,3,189,90,189,218,97,226]},{"1193493":[7,187,154,188,154,188,218,187,218,255,255,165,160,201,240,208,2,128,33,201,241,208,2,128,27,201,176,208,2,128,21,201,208,208,2,128,15,192]},{"1193532":[240,11,169,133,157,210,12,169,4,157,80,14,107,169,128,157,210,12,169,1,157,80,14,107]},{"1343488":[107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107]},{"1540096":[144,43,128,183,162,225,201,79,28,185,230,32,88,103,101,166,17,207,121,76,199,97,209,212,211,155,120,59,251,170,163,21,124,54,215,139,11,173,38,181,59,105,227,131,127,17,226,146,128,103,225,156,207,213,69,245,107,54,182,122,26,57,132,19,71,236,216,174,87,158,244,11,97,187,141,10,77,98,142,34,227,114,197,113,247,153,11,16,177,19,82,94,120,67,116,143,55,105,7,154,37,14,48,106,3,158,142,15,119,146,56,51,137,93,51,179,1,161,191,105,141,151,39,108,76,155,168,24,153,126,178,219,167,68,39,168,165,188,245,170,238,46,202,161,254,193,254,73,173,59,202,66,243,108,217,113,25,3,123,227,169,134,108,208,162,43,251,25,217,219,71,136,122,32,31,213,62,199,63,127,135,212,144,156,209,235,249,120,17,47,185,155,119,1,128,223,57,23,35,155,98,227,166,83,60,220,249,201,52,204,61,71,47,158,28,37,238,132,158,69,184,36,1,170,227,178,181,147,5,161,8,9,56,25,214,247,166,44,245,29,77,231,59,45,27,188,134,64,216,235,117,242,139,234,140,212,183,241,166,179,99,107,130,146,218,145,93,51,253,102,50,146,200,42,194,16,131,73,27,185,48,120,170,214,2,170,146,33,230,4]},{"1540387":[240,238,64,63,94,110,23,136,169,167,112,206,202,226,65,161,34,7,36,247,200,224,86,80,224,133,246,98,129,67,225,183,107,126,158,14,34,45,243,86,73,115,204,178,67,27,89,64,94,118,169,213,246,134,48,242,46,64,225,119,216,41,243,184,63,195,132,25,229,141,113,140,32,169,116,43,59,48,58,131,225,184,61,251,72,239,125,69,219,119,182,106,224,187,88,85,180,197,106,162,54,174,194,173,175,102,130,171,249,15,217,88,149,101,152,220,153,71,226,113,205,111,162,249,93,43,191,103,106,232,147,56,23,192,122,216,116,19,45,148,123,101,81,109,254,5,250,30,179,60,202,4,222,231]},{"1540542":[151,126,164,77,47,114,162,79,143,169,63,102,56,32,61,212,170,165,119,171,243,200,190,54,240,175,20,87,3,57,31,219,169,240,40,5,31,230,40,181,210,118,26,164,186,124,191,127,176,40,39,145,211,52,67,71,170,93,3,119,244,131,207,55,85,8,79,141,109,163,10,107,53,226,201,118,208,65,196,73,75,171,63,214,126,4,219,253,24,129,140,23,92,62,52,23,116,19,242,252,14,58,239,226,214,118,8,99,3,39,200,9,69,193,134,107,50,247,243,56,57,128,255,131,226,117,111,137,136,166,115,119,243,36,233,30,225,178,224,24,243,143,216,34,203,234,142,242,30,194,133,68,40,54,200,154,180,122,160,154,18,217,151,55,29,167,87,161,247,39,171,141,171,84,78,52,148,153,130,157,249,29,40,228,114,206,213,115,217,170,241,235,124,138,10,85,228,189,132,54,4,78,231,157,64,105,15,219,226,227,6,8,126,19,91,118,166,68,214,121,132,42,16,112,55,207,8,254,225,117,248,26,74,100,151,213,127,226,252,202,239,186,255,43,179,20,204,112,62,154,51,219,53,105,53,155,224,182,146,65,147,192,93,180,131,212,15,12,215,246,101,237,47,18,118,194,218,212,67,187,128,231,17,169,70,124,193,102,32,23,117,197,9,112,69,23,156,67,102,233,78,76,2,223,78,61,3,236,73,210,146,24,223,246,83,103,156,177,75,148,120,46,248,249,74,16,233,192,184,141,168,226,68,179,62,78,99,198,74,242,95,50,53,212,28,71,56,155,219,168,241,75,17,156,99,158,114,32,173,29,68,69,234,179,160,176,138,148,184,9,53,59,139,96,47,197,70,237,208,51,141,151,37,205,192,222,116,178,241,8,236,90,104,234,60,98,70,233,126,132,255,115,54,124,133,62,154,181,206,188,87,120,83,82,10,60,136,160,228,66,172,232,62,93,236,130,250,111,168,211,201,102,154,221,245,93,234,115,57,6,53,12,115,243,220,108,224,156,234,15,168,216,93,240,139,106,228,37,186,12,12,229,119,2,153,178,105,167,236,217,75,255,238,236,226,10,22,48,211,149,171,247,26,61,247,215,6,121,176,110,87,62,185,199,182,102,5,149,153,207,1,108,98,244,132,212,112,59,224,86,102,164,188,28,143,218,59,151,25,235,64,193,195,250,177,23,93,138,36,222,61,119,85,218,159,153,123,68,114,104,67,51,114,130,168,9,246,196,211,159]},{"1541093":[63,247,66,174,232,46,160,187,48,55,94,226,231,16,35,51,9,237,162]},{"1541113":[112,204,35,248,130,224,246]},{"1541122":[30]},{"1541124":[60]},{"1541126":[90]},{"1541128":[120]},{"1541130":[150]},{"1541132":[180]},{"1541134":[210]},{"1541136":[240]},{"1541138":[14,1,44,1,74,1,104,1,134,1,164,1,194,1,224,1,254,1,28,2,58,2,88,2,118,2,148,2,178,2,208,2,238,2,12,3,42,3,72,3,102,3,132,3,162,3,192,3,222,3,252,3,26,4,56,4,86,4,116,4,146,4,176,4,206,4,236,4,10,5,40,5,70,5,100,5,130,5,160,5,190,5,220,5,250,5,24,6,54,6,84,6,114,6,144,6,174,6,204,6,234,6,8,7,38,7,68,7,98,7,128,7,158,7,188,7,218,7,248,7,22,8,52,8,82,8,112,8,142,8,172,8,202,8,232,8,6,9,36,9,66,9,96,9,126,9,156,9,186,9,216,9,246,9,20,10,50,10,80,10,110,10,140,10,170,10,200,10,230,10,4,11,34,11,64,11,94,11,124,11,154,11,184,11,214,11,244,11,18,12,48,12,78,12,108,12,138,12,168,12,198,12,228,12,2,13,32,13,62,13,92,13,122,13,152,13,182,13,212,13,242,13,16,14,46,14,76,14,106,14,136,14,166,14,196,14,226,14]},{"1541377":[15,30,15,60,15,90,15,120,15,150,15,180,15,210,15,240,15,14,16,44,16,74,16,104,16,134,16,164,16,194,16,224,16,254,16,28,17,58,17,88,17,118,17,148,17,178,17,208,17,238,17,12,18,42,18,72,18,102,18,132,18,162,18,192,18,222,18,252,18,26,19,56,19,86,19,116,19,146,19,176,19,206,19,236,19,10,20,40,20,70,20,100,20,130,20,160,20,190,20,220,20,250,20,24,21,54,21,84,21,114,21,144,21,174,21,204,21,234,21,8,22,38,22,68,22,98,22,128,22,158,22,188,22,218,22,248,22,22,23,52,23,82,23,112,23,142,23,172,23,202,23,232,23,6,24,36,24,66,24,96,24,126,24,156,24,186,24,216,24,246,24,20,25,50,25,80,25,110,25,140,25,170,25,200,25,230,25,4,26,34,26,64,26,94,26,124,26,154,26,184,26,214,26,244,26,18,27,48,27,78,27,108,27,138,27,168,27,198,27,228,27,2,28,32,28,62,28,92,28,122,28,152,28,182,28,212,28,242,28,16,29,46,29,76,29,106,29,136,29,166,29,196,29,226,29]},{"1541633":[30,30,30,60,30,90,30,120,30,150,30,180,30,210,30,240,30,14,31,44,31,74,31,104,31,134,31,164,31,194,31,224,31,254,31,28,32,58,32,88,32,118,32,148,32,178,32,208,32,238,32,12,33,42,33,72,33,102,33,132,33,162,33,192,33,222,33,252,33,26,34,56,34,86,34,116,34,146,34,176,34,206,34,236,34,10,35,40,35,70,35,100,35,130,35,160,35,190,35,220,35,250,35,24,36,54,36,84,36,114,36,144,36,174,36,204,36,234,36,8,37,38,37,68,37,98,37,128,37,158,37,188,37,218,37,248,37,22,38,52,38,82,38,112,38,142,38,172,38,202,38,232,38,6,39,36,39,66,39,96,39,126,39,156,39,186,39,216,39,246,39,20,40,50,40,80,40,110,40,140,40,170,40,200,40,230,40,4,41,34,41,64,41,94,41,124,41,154,41,184,41,214,41,244,41,18,42,48,42,78,42,108,42,138,42,168,42,198,42,228,42,2,43,32,43,62,43,92,43,122,43,152,43,182,43,212,43,242,43,16,44,46,44,76,44,106,44,136,44,166,44,196,44,226,44]},{"1541889":[45,30,45,60,45,90,45,120,45,150,45,180,45,210,45,240,45,14,46,44,46,74,46,104,46,134,46,164,46,194,46,224,46,254,46,28,47,58,47,88,47,118,47,148,47,178,47,208,47,238,47,12,48,42,48,72,48,102,48,132,48,162,48,192,48,222,48,252,48,26,49,56,49,86,49,116,49,146,49,176,49,206,49,236,49,10,50,40,50,70,50,100,50,130,50,160,50,190,50,220,50,250,50,24,51,54,51,84,51,114,51,144,51,174,51,204,51,234,51,8,52,38,52,68,52,98,52,128,52,158,52,188,52,218,52,248,52,22,53,52,53,82,53,112,53,142,53,172,53,202,53,232,53,6,54,36,54,66,54,96,54,126,54,156,54,186,54,216,54,246,54,20,55,50,55,80,55,110,55,140,55,170,55,200,55,230,55,4,56,34,56,64,56,94,56,124,56,154,56,184,56,214,56,244,56,18,57,48,57,78,57,108,57,138,57,168,57,198,57,228,57,2,58,32,58,62,58,92,58,122,58,152,58,182,58,212,58,242,58,16,59,46,59,76,59,106,59,136,59,166,59,196,59,226,59,117]},{"1542146":[255]},{"1542148":[255]},{"1542150":[255]},{"1542152":[185]},{"1542154":[181]},{"1542156":[170]},{"1542158":[194]},{"1542160":[174]},{"1542162":[187]},{"1542164":[255]},{"1542166":[161]},{"1542168":[255]},{"1542170":[255]},{"1542172":[255,127,117]},{"1542176":[255]},{"1542178":[255]},{"1542180":[255]},{"1542182":[185]},{"1542184":[181]},{"1542186":[170]},{"1542188":[194]},{"1542190":[174]},{"1542192":[187]},{"1542194":[255]},{"1542196":[162]},{"1542198":[255]},{"1542200":[255]},{"1542202":[255,127,117]},{"1542206":[255]},{"1542208":[255]},{"1542210":[255]},{"1542212":[185]},{"1542214":[181]},{"1542216":[170]},{"1542218":[194]},{"1542220":[174]},{"1542222":[187]},{"1542224":[255]},{"1542226":[163]},{"1542228":[255]},{"1542230":[255]},{"1542232":[255,127,117]},{"1542236":[255]},{"1542238":[255]},{"1542240":[255]},{"1542242":[185]},{"1542244":[181]},{"1542246":[170]},{"1542248":[194]},{"1542250":[174]},{"1542252":[187]},{"1542254":[255]},{"1542256":[164]},{"1542258":[255]},{"1542260":[255]},{"1542262":[255,127,117]},{"1542266":[255]},{"1542268":[255]},{"1542270":[255]},{"1542272":[185]},{"1542274":[181]},{"1542276":[170]},{"1542278":[194]},{"1542280":[174]},{"1542282":[187]},{"1542284":[255]},{"1542286":[165]},{"1542288":[255]},{"1542290":[255]},{"1542292":[255,127,117]},{"1542296":[255]},{"1542298":[255]},{"1542300":[255]},{"1542302":[185]},{"1542304":[181]},{"1542306":[170]},{"1542308":[194]},{"1542310":[174]},{"1542312":[187]},{"1542314":[255]},{"1542316":[166]},{"1542318":[255]},{"1542320":[255]},{"1542322":[255,127,117]},{"1542326":[255]},{"1542328":[255]},{"1542330":[255]},{"1542332":[185]},{"1542334":[181]},{"1542336":[170]},{"1542338":[194]},{"1542340":[174]},{"1542342":[187]},{"1542344":[255]},{"1542346":[167]},{"1542348":[255]},{"1542350":[255]},{"1542352":[255,127,117]},{"1542356":[255]},{"1542358":[255]},{"1542360":[255]},{"1542362":[185]},{"1542364":[181]},{"1542366":[170]},{"1542368":[194]},{"1542370":[174]},{"1542372":[187]},{"1542374":[255]},{"1542376":[168]},{"1542378":[255]},{"1542380":[255]},{"1542382":[255,127,117]},{"1542386":[255]},{"1542388":[255]},{"1542390":[255]},{"1542392":[185]},{"1542394":[181]},{"1542396":[170]},{"1542398":[194]},{"1542400":[174]},{"1542402":[187]},{"1542404":[255]},{"1542406":[169]},{"1542408":[255]},{"1542410":[255]},{"1542412":[255,127,117]},{"1542416":[255]},{"1542418":[255]},{"1542420":[185]},{"1542422":[181]},{"1542424":[170]},{"1542426":[194]},{"1542428":[174]},{"1542430":[187]},{"1542432":[255]},{"1542434":[161]},{"1542436":[160]},{"1542438":[255]},{"1542440":[255]},{"1542442":[255,127,117]},{"1542446":[255]},{"1542448":[255]},{"1542450":[185]},{"1542452":[181]},{"1542454":[170]},{"1542456":[194]},{"1542458":[174]},{"1542460":[187]},{"1542462":[255]},{"1542464":[161]},{"1542466":[161]},{"1542468":[255]},{"1542470":[255]},{"1542472":[255,127,117]},{"1542476":[255]},{"1542478":[255]},{"1542480":[185]},{"1542482":[181]},{"1542484":[170]},{"1542486":[194]},{"1542488":[174]},{"1542490":[187]},{"1542492":[255]},{"1542494":[161]},{"1542496":[162]},{"1542498":[255]},{"1542500":[255]},{"1542502":[255,127,117]},{"1542506":[255]},{"1542508":[255]},{"1542510":[185]},{"1542512":[181]},{"1542514":[170]},{"1542516":[194]},{"1542518":[174]},{"1542520":[187]},{"1542522":[255]},{"1542524":[161]},{"1542526":[163]},{"1542528":[255]},{"1542530":[255]},{"1542532":[255,127,117]},{"1542536":[255]},{"1542538":[255]},{"1542540":[185]},{"1542542":[181]},{"1542544":[170]},{"1542546":[194]},{"1542548":[174]},{"1542550":[187]},{"1542552":[255]},{"1542554":[161]},{"1542556":[164]},{"1542558":[255]},{"1542560":[255]},{"1542562":[255,127,117]},{"1542566":[255]},{"1542568":[255]},{"1542570":[185]},{"1542572":[181]},{"1542574":[170]},{"1542576":[194]},{"1542578":[174]},{"1542580":[187]},{"1542582":[255]},{"1542584":[161]},{"1542586":[165]},{"1542588":[255]},{"1542590":[255]},{"1542592":[255,127,117]},{"1542596":[255]},{"1542598":[255]},{"1542600":[185]},{"1542602":[181]},{"1542604":[170]},{"1542606":[194]},{"1542608":[174]},{"1542610":[187]},{"1542612":[255]},{"1542614":[161]},{"1542616":[166]},{"1542618":[255]},{"1542620":[255]},{"1542622":[255,127,117]},{"1542626":[255]},{"1542628":[255]},{"1542630":[185]},{"1542632":[181]},{"1542634":[170]},{"1542636":[194]},{"1542638":[174]},{"1542640":[187]},{"1542642":[255]},{"1542644":[161]},{"1542646":[167]},{"1542648":[255]},{"1542650":[255]},{"1542652":[255,127,117]},{"1542656":[255]},{"1542658":[255]},{"1542660":[185]},{"1542662":[181]},{"1542664":[170]},{"1542666":[194]},{"1542668":[174]},{"1542670":[187]},{"1542672":[255]},{"1542674":[161]},{"1542676":[168]},{"1542678":[255]},{"1542680":[255]},{"1542682":[255,127,117]},{"1542686":[255]},{"1542688":[255]},{"1542690":[185]},{"1542692":[181]},{"1542694":[170]},{"1542696":[194]},{"1542698":[174]},{"1542700":[187]},{"1542702":[255]},{"1542704":[161]},{"1542706":[169]},{"1542708":[255]},{"1542710":[255]},{"1542712":[255,127,117]},{"1542716":[255]},{"1542718":[255]},{"1542720":[185]},{"1542722":[181]},{"1542724":[170]},{"1542726":[194]},{"1542728":[174]},{"1542730":[187]},{"1542732":[255]},{"1542734":[162]},{"1542736":[160]},{"1542738":[255]},{"1542740":[255]},{"1542742":[255,127,117]},{"1542746":[255]},{"1542748":[255]},{"1542750":[185]},{"1542752":[181]},{"1542754":[170]},{"1542756":[194]},{"1542758":[174]},{"1542760":[187]},{"1542762":[255]},{"1542764":[162]},{"1542766":[161]},{"1542768":[255]},{"1542770":[255]},{"1542772":[255,127,117]},{"1542776":[255]},{"1542778":[255]},{"1542780":[185]},{"1542782":[181]},{"1542784":[170]},{"1542786":[194]},{"1542788":[174]},{"1542790":[187]},{"1542792":[255]},{"1542794":[162]},{"1542796":[162]},{"1542798":[255]},{"1542800":[255]},{"1542802":[255,127,117]},{"1542806":[255]},{"1542808":[255]},{"1542810":[185]},{"1542812":[181]},{"1542814":[170]},{"1542816":[194]},{"1542818":[174]},{"1542820":[187]},{"1542822":[255]},{"1542824":[162]},{"1542826":[163]},{"1542828":[255]},{"1542830":[255]},{"1542832":[255,127,117]},{"1542836":[255]},{"1542838":[255]},{"1542840":[185]},{"1542842":[181]},{"1542844":[170]},{"1542846":[194]},{"1542848":[174]},{"1542850":[187]},{"1542852":[255]},{"1542854":[162]},{"1542856":[164]},{"1542858":[255]},{"1542860":[255]},{"1542862":[255,127,117]},{"1542866":[255]},{"1542868":[255]},{"1542870":[185]},{"1542872":[181]},{"1542874":[170]},{"1542876":[194]},{"1542878":[174]},{"1542880":[187]},{"1542882":[255]},{"1542884":[162]},{"1542886":[165]},{"1542888":[255]},{"1542890":[255]},{"1542892":[255,127,117]},{"1542896":[255]},{"1542898":[255]},{"1542900":[185]},{"1542902":[181]},{"1542904":[170]},{"1542906":[194]},{"1542908":[174]},{"1542910":[187]},{"1542912":[255]},{"1542914":[162]},{"1542916":[166]},{"1542918":[255]},{"1542920":[255]},{"1542922":[255,127,117]},{"1542926":[255]},{"1542928":[255]},{"1542930":[185]},{"1542932":[181]},{"1542934":[170]},{"1542936":[194]},{"1542938":[174]},{"1542940":[187]},{"1542942":[255]},{"1542944":[162]},{"1542946":[167]},{"1542948":[255]},{"1542950":[255]},{"1542952":[255,127,117]},{"1542956":[255]},{"1542958":[255]},{"1542960":[185]},{"1542962":[181]},{"1542964":[170]},{"1542966":[194]},{"1542968":[174]},{"1542970":[187]},{"1542972":[255]},{"1542974":[162]},{"1542976":[168]},{"1542978":[255]},{"1542980":[255]},{"1542982":[255,127,117]},{"1542986":[255]},{"1542988":[255]},{"1542990":[185]},{"1542992":[181]},{"1542994":[170]},{"1542996":[194]},{"1542998":[174]},{"1543000":[187]},{"1543002":[255]},{"1543004":[162]},{"1543006":[169]},{"1543008":[255]},{"1543010":[255]},{"1543012":[255,127,117]},{"1543016":[255]},{"1543018":[255]},{"1543020":[185]},{"1543022":[181]},{"1543024":[170]},{"1543026":[194]},{"1543028":[174]},{"1543030":[187]},{"1543032":[255]},{"1543034":[163]},{"1543036":[160]},{"1543038":[255]},{"1543040":[255]},{"1543042":[255,127,117]},{"1543046":[255]},{"1543048":[255]},{"1543050":[185]},{"1543052":[181]},{"1543054":[170]},{"1543056":[194]},{"1543058":[174]},{"1543060":[187]},{"1543062":[255]},{"1543064":[163]},{"1543066":[161]},{"1543068":[255]},{"1543070":[255]},{"1543072":[255,127,117]},{"1543076":[255]},{"1543078":[255]},{"1543080":[185]},{"1543082":[181]},{"1543084":[170]},{"1543086":[194]},{"1543088":[174]},{"1543090":[187]},{"1543092":[255]},{"1543094":[163]},{"1543096":[162]},{"1543098":[255]},{"1543100":[255]},{"1543102":[255,127,117]},{"1543106":[255]},{"1543108":[255]},{"1543110":[185]},{"1543112":[181]},{"1543114":[170]},{"1543116":[194]},{"1543118":[174]},{"1543120":[187]},{"1543122":[255]},{"1543124":[163]},{"1543126":[163]},{"1543128":[255]},{"1543130":[255]},{"1543132":[255,127,117]},{"1543136":[255]},{"1543138":[255]},{"1543140":[185]},{"1543142":[181]},{"1543144":[170]},{"1543146":[194]},{"1543148":[174]},{"1543150":[187]},{"1543152":[255]},{"1543154":[163]},{"1543156":[164]},{"1543158":[255]},{"1543160":[255]},{"1543162":[255,127,117]},{"1543166":[255]},{"1543168":[255]},{"1543170":[185]},{"1543172":[181]},{"1543174":[170]},{"1543176":[194]},{"1543178":[174]},{"1543180":[187]},{"1543182":[255]},{"1543184":[163]},{"1543186":[165]},{"1543188":[255]},{"1543190":[255]},{"1543192":[255,127,117]},{"1543196":[255]},{"1543198":[255]},{"1543200":[185]},{"1543202":[181]},{"1543204":[170]},{"1543206":[194]},{"1543208":[174]},{"1543210":[187]},{"1543212":[255]},{"1543214":[163]},{"1543216":[166]},{"1543218":[255]},{"1543220":[255]},{"1543222":[255,127,117]},{"1543226":[255]},{"1543228":[255]},{"1543230":[185]},{"1543232":[181]},{"1543234":[170]},{"1543236":[194]},{"1543238":[174]},{"1543240":[187]},{"1543242":[255]},{"1543244":[163]},{"1543246":[167]},{"1543248":[255]},{"1543250":[255]},{"1543252":[255,127,117]},{"1543256":[255]},{"1543258":[255]},{"1543260":[185]},{"1543262":[181]},{"1543264":[170]},{"1543266":[194]},{"1543268":[174]},{"1543270":[187]},{"1543272":[255]},{"1543274":[163]},{"1543276":[168]},{"1543278":[255]},{"1543280":[255]},{"1543282":[255,127,117]},{"1543286":[255]},{"1543288":[255]},{"1543290":[185]},{"1543292":[181]},{"1543294":[170]},{"1543296":[194]},{"1543298":[174]},{"1543300":[187]},{"1543302":[255]},{"1543304":[163]},{"1543306":[169]},{"1543308":[255]},{"1543310":[255]},{"1543312":[255,127,117]},{"1543316":[255]},{"1543318":[255]},{"1543320":[185]},{"1543322":[181]},{"1543324":[170]},{"1543326":[194]},{"1543328":[174]},{"1543330":[187]},{"1543332":[255]},{"1543334":[164]},{"1543336":[160]},{"1543338":[255]},{"1543340":[255]},{"1543342":[255,127,117]},{"1543346":[255]},{"1543348":[255]},{"1543350":[185]},{"1543352":[181]},{"1543354":[170]},{"1543356":[194]},{"1543358":[174]},{"1543360":[187]},{"1543362":[255]},{"1543364":[164]},{"1543366":[161]},{"1543368":[255]},{"1543370":[255]},{"1543372":[255,127,117]},{"1543376":[255]},{"1543378":[255]},{"1543380":[185]},{"1543382":[181]},{"1543384":[170]},{"1543386":[194]},{"1543388":[174]},{"1543390":[187]},{"1543392":[255]},{"1543394":[164]},{"1543396":[162]},{"1543398":[255]},{"1543400":[255]},{"1543402":[255,127,117]},{"1543406":[255]},{"1543408":[255]},{"1543410":[185]},{"1543412":[181]},{"1543414":[170]},{"1543416":[194]},{"1543418":[174]},{"1543420":[187]},{"1543422":[255]},{"1543424":[164]},{"1543426":[163]},{"1543428":[255]},{"1543430":[255]},{"1543432":[255,127,117]},{"1543436":[255]},{"1543438":[255]},{"1543440":[185]},{"1543442":[181]},{"1543444":[170]},{"1543446":[194]},{"1543448":[174]},{"1543450":[187]},{"1543452":[255]},{"1543454":[164]},{"1543456":[164]},{"1543458":[255]},{"1543460":[255]},{"1543462":[255,127,117]},{"1543466":[255]},{"1543468":[255]},{"1543470":[185]},{"1543472":[181]},{"1543474":[170]},{"1543476":[194]},{"1543478":[174]},{"1543480":[187]},{"1543482":[255]},{"1543484":[164]},{"1543486":[165]},{"1543488":[255]},{"1543490":[255]},{"1543492":[255,127,117]},{"1543496":[255]},{"1543498":[255]},{"1543500":[185]},{"1543502":[181]},{"1543504":[170]},{"1543506":[194]},{"1543508":[174]},{"1543510":[187]},{"1543512":[255]},{"1543514":[164]},{"1543516":[166]},{"1543518":[255]},{"1543520":[255]},{"1543522":[255,127,117]},{"1543526":[255]},{"1543528":[255]},{"1543530":[185]},{"1543532":[181]},{"1543534":[170]},{"1543536":[194]},{"1543538":[174]},{"1543540":[187]},{"1543542":[255]},{"1543544":[164]},{"1543546":[167]},{"1543548":[255]},{"1543550":[255]},{"1543552":[255,127,117]},{"1543556":[255]},{"1543558":[255]},{"1543560":[185]},{"1543562":[181]},{"1543564":[170]},{"1543566":[194]},{"1543568":[174]},{"1543570":[187]},{"1543572":[255]},{"1543574":[164]},{"1543576":[168]},{"1543578":[255]},{"1543580":[255]},{"1543582":[255,127,117]},{"1543586":[255]},{"1543588":[255]},{"1543590":[185]},{"1543592":[181]},{"1543594":[170]},{"1543596":[194]},{"1543598":[174]},{"1543600":[187]},{"1543602":[255]},{"1543604":[164]},{"1543606":[169]},{"1543608":[255]},{"1543610":[255]},{"1543612":[255,127,117]},{"1543616":[255]},{"1543618":[255]},{"1543620":[185]},{"1543622":[181]},{"1543624":[170]},{"1543626":[194]},{"1543628":[174]},{"1543630":[187]},{"1543632":[255]},{"1543634":[165]},{"1543636":[160]},{"1543638":[255]},{"1543640":[255]},{"1543642":[255,127,117]},{"1543646":[255]},{"1543648":[255]},{"1543650":[185]},{"1543652":[181]},{"1543654":[170]},{"1543656":[194]},{"1543658":[174]},{"1543660":[187]},{"1543662":[255]},{"1543664":[165]},{"1543666":[161]},{"1543668":[255]},{"1543670":[255]},{"1543672":[255,127,117]},{"1543676":[255]},{"1543678":[255]},{"1543680":[185]},{"1543682":[181]},{"1543684":[170]},{"1543686":[194]},{"1543688":[174]},{"1543690":[187]},{"1543692":[255]},{"1543694":[165]},{"1543696":[162]},{"1543698":[255]},{"1543700":[255]},{"1543702":[255,127,117]},{"1543706":[255]},{"1543708":[255]},{"1543710":[185]},{"1543712":[181]},{"1543714":[170]},{"1543716":[194]},{"1543718":[174]},{"1543720":[187]},{"1543722":[255]},{"1543724":[165]},{"1543726":[163]},{"1543728":[255]},{"1543730":[255]},{"1543732":[255,127,117]},{"1543736":[255]},{"1543738":[255]},{"1543740":[185]},{"1543742":[181]},{"1543744":[170]},{"1543746":[194]},{"1543748":[174]},{"1543750":[187]},{"1543752":[255]},{"1543754":[165]},{"1543756":[164]},{"1543758":[255]},{"1543760":[255]},{"1543762":[255,127,117]},{"1543766":[255]},{"1543768":[255]},{"1543770":[185]},{"1543772":[181]},{"1543774":[170]},{"1543776":[194]},{"1543778":[174]},{"1543780":[187]},{"1543782":[255]},{"1543784":[165]},{"1543786":[165]},{"1543788":[255]},{"1543790":[255]},{"1543792":[255,127,117]},{"1543796":[255]},{"1543798":[255]},{"1543800":[185]},{"1543802":[181]},{"1543804":[170]},{"1543806":[194]},{"1543808":[174]},{"1543810":[187]},{"1543812":[255]},{"1543814":[165]},{"1543816":[166]},{"1543818":[255]},{"1543820":[255]},{"1543822":[255,127,117]},{"1543826":[255]},{"1543828":[255]},{"1543830":[185]},{"1543832":[181]},{"1543834":[170]},{"1543836":[194]},{"1543838":[174]},{"1543840":[187]},{"1543842":[255]},{"1543844":[165]},{"1543846":[167]},{"1543848":[255]},{"1543850":[255]},{"1543852":[255,127,117]},{"1543856":[255]},{"1543858":[255]},{"1543860":[185]},{"1543862":[181]},{"1543864":[170]},{"1543866":[194]},{"1543868":[174]},{"1543870":[187]},{"1543872":[255]},{"1543874":[165]},{"1543876":[168]},{"1543878":[255]},{"1543880":[255]},{"1543882":[255,127,117]},{"1543886":[255]},{"1543888":[255]},{"1543890":[185]},{"1543892":[181]},{"1543894":[170]},{"1543896":[194]},{"1543898":[174]},{"1543900":[187]},{"1543902":[255]},{"1543904":[165]},{"1543906":[169]},{"1543908":[255]},{"1543910":[255]},{"1543912":[255,127,117]},{"1543916":[255]},{"1543918":[255]},{"1543920":[185]},{"1543922":[181]},{"1543924":[170]},{"1543926":[194]},{"1543928":[174]},{"1543930":[187]},{"1543932":[255]},{"1543934":[166]},{"1543936":[160]},{"1543938":[255]},{"1543940":[255]},{"1543942":[255,127,117]},{"1543946":[255]},{"1543948":[255]},{"1543950":[185]},{"1543952":[181]},{"1543954":[170]},{"1543956":[194]},{"1543958":[174]},{"1543960":[187]},{"1543962":[255]},{"1543964":[166]},{"1543966":[161]},{"1543968":[255]},{"1543970":[255]},{"1543972":[255,127,117]},{"1543976":[255]},{"1543978":[255]},{"1543980":[185]},{"1543982":[181]},{"1543984":[170]},{"1543986":[194]},{"1543988":[174]},{"1543990":[187]},{"1543992":[255]},{"1543994":[166]},{"1543996":[162]},{"1543998":[255]},{"1544000":[255]},{"1544002":[255,127,117]},{"1544006":[255]},{"1544008":[255]},{"1544010":[185]},{"1544012":[181]},{"1544014":[170]},{"1544016":[194]},{"1544018":[174]},{"1544020":[187]},{"1544022":[255]},{"1544024":[166]},{"1544026":[163]},{"1544028":[255]},{"1544030":[255]},{"1544032":[255,127,117]},{"1544036":[255]},{"1544038":[255]},{"1544040":[185]},{"1544042":[181]},{"1544044":[170]},{"1544046":[194]},{"1544048":[174]},{"1544050":[187]},{"1544052":[255]},{"1544054":[166]},{"1544056":[164]},{"1544058":[255]},{"1544060":[255]},{"1544062":[255,127,117]},{"1544066":[255]},{"1544068":[255]},{"1544070":[185]},{"1544072":[181]},{"1544074":[170]},{"1544076":[194]},{"1544078":[174]},{"1544080":[187]},{"1544082":[255]},{"1544084":[166]},{"1544086":[165]},{"1544088":[255]},{"1544090":[255]},{"1544092":[255,127,117]},{"1544096":[255]},{"1544098":[255]},{"1544100":[185]},{"1544102":[181]},{"1544104":[170]},{"1544106":[194]},{"1544108":[174]},{"1544110":[187]},{"1544112":[255]},{"1544114":[166]},{"1544116":[166]},{"1544118":[255]},{"1544120":[255]},{"1544122":[255,127,117]},{"1544126":[255]},{"1544128":[255]},{"1544130":[185]},{"1544132":[181]},{"1544134":[170]},{"1544136":[194]},{"1544138":[174]},{"1544140":[187]},{"1544142":[255]},{"1544144":[166]},{"1544146":[167]},{"1544148":[255]},{"1544150":[255]},{"1544152":[255,127,117]},{"1544156":[255]},{"1544158":[255]},{"1544160":[185]},{"1544162":[181]},{"1544164":[170]},{"1544166":[194]},{"1544168":[174]},{"1544170":[187]},{"1544172":[255]},{"1544174":[166]},{"1544176":[168]},{"1544178":[255]},{"1544180":[255]},{"1544182":[255,127,117]},{"1544186":[255]},{"1544188":[255]},{"1544190":[185]},{"1544192":[181]},{"1544194":[170]},{"1544196":[194]},{"1544198":[174]},{"1544200":[187]},{"1544202":[255]},{"1544204":[166]},{"1544206":[169]},{"1544208":[255]},{"1544210":[255]},{"1544212":[255,127,117]},{"1544216":[255]},{"1544218":[255]},{"1544220":[185]},{"1544222":[181]},{"1544224":[170]},{"1544226":[194]},{"1544228":[174]},{"1544230":[187]},{"1544232":[255]},{"1544234":[167]},{"1544236":[160]},{"1544238":[255]},{"1544240":[255]},{"1544242":[255,127,117]},{"1544246":[255]},{"1544248":[255]},{"1544250":[185]},{"1544252":[181]},{"1544254":[170]},{"1544256":[194]},{"1544258":[174]},{"1544260":[187]},{"1544262":[255]},{"1544264":[167]},{"1544266":[161]},{"1544268":[255]},{"1544270":[255]},{"1544272":[255,127,117]},{"1544276":[255]},{"1544278":[255]},{"1544280":[185]},{"1544282":[181]},{"1544284":[170]},{"1544286":[194]},{"1544288":[174]},{"1544290":[187]},{"1544292":[255]},{"1544294":[167]},{"1544296":[162]},{"1544298":[255]},{"1544300":[255]},{"1544302":[255,127,117]},{"1544306":[255]},{"1544308":[255]},{"1544310":[185]},{"1544312":[181]},{"1544314":[170]},{"1544316":[194]},{"1544318":[174]},{"1544320":[187]},{"1544322":[255]},{"1544324":[167]},{"1544326":[163]},{"1544328":[255]},{"1544330":[255]},{"1544332":[255,127,117]},{"1544336":[255]},{"1544338":[255]},{"1544340":[185]},{"1544342":[181]},{"1544344":[170]},{"1544346":[194]},{"1544348":[174]},{"1544350":[187]},{"1544352":[255]},{"1544354":[167]},{"1544356":[164]},{"1544358":[255]},{"1544360":[255]},{"1544362":[255,127,117]},{"1544366":[255]},{"1544368":[255]},{"1544370":[185]},{"1544372":[181]},{"1544374":[170]},{"1544376":[194]},{"1544378":[174]},{"1544380":[187]},{"1544382":[255]},{"1544384":[167]},{"1544386":[165]},{"1544388":[255]},{"1544390":[255]},{"1544392":[255,127,117]},{"1544396":[255]},{"1544398":[255]},{"1544400":[185]},{"1544402":[181]},{"1544404":[170]},{"1544406":[194]},{"1544408":[174]},{"1544410":[187]},{"1544412":[255]},{"1544414":[167]},{"1544416":[166]},{"1544418":[255]},{"1544420":[255]},{"1544422":[255,127,117]},{"1544426":[255]},{"1544428":[255]},{"1544430":[185]},{"1544432":[181]},{"1544434":[170]},{"1544436":[194]},{"1544438":[174]},{"1544440":[187]},{"1544442":[255]},{"1544444":[167]},{"1544446":[167]},{"1544448":[255]},{"1544450":[255]},{"1544452":[255,127,117]},{"1544456":[255]},{"1544458":[255]},{"1544460":[185]},{"1544462":[181]},{"1544464":[170]},{"1544466":[194]},{"1544468":[174]},{"1544470":[187]},{"1544472":[255]},{"1544474":[167]},{"1544476":[168]},{"1544478":[255]},{"1544480":[255]},{"1544482":[255,127,117]},{"1544486":[255]},{"1544488":[255]},{"1544490":[185]},{"1544492":[181]},{"1544494":[170]},{"1544496":[194]},{"1544498":[174]},{"1544500":[187]},{"1544502":[255]},{"1544504":[167]},{"1544506":[169]},{"1544508":[255]},{"1544510":[255]},{"1544512":[255,127,117]},{"1544516":[255]},{"1544518":[255]},{"1544520":[185]},{"1544522":[181]},{"1544524":[170]},{"1544526":[194]},{"1544528":[174]},{"1544530":[187]},{"1544532":[255]},{"1544534":[168]},{"1544536":[160]},{"1544538":[255]},{"1544540":[255]},{"1544542":[255,127,117]},{"1544546":[255]},{"1544548":[255]},{"1544550":[185]},{"1544552":[181]},{"1544554":[170]},{"1544556":[194]},{"1544558":[174]},{"1544560":[187]},{"1544562":[255]},{"1544564":[168]},{"1544566":[161]},{"1544568":[255]},{"1544570":[255]},{"1544572":[255,127,117]},{"1544576":[255]},{"1544578":[255]},{"1544580":[185]},{"1544582":[181]},{"1544584":[170]},{"1544586":[194]},{"1544588":[174]},{"1544590":[187]},{"1544592":[255]},{"1544594":[168]},{"1544596":[162]},{"1544598":[255]},{"1544600":[255]},{"1544602":[255,127,117]},{"1544606":[255]},{"1544608":[255]},{"1544610":[185]},{"1544612":[181]},{"1544614":[170]},{"1544616":[194]},{"1544618":[174]},{"1544620":[187]},{"1544622":[255]},{"1544624":[168]},{"1544626":[163]},{"1544628":[255]},{"1544630":[255]},{"1544632":[255,127,117]},{"1544636":[255]},{"1544638":[255]},{"1544640":[185]},{"1544642":[181]},{"1544644":[170]},{"1544646":[194]},{"1544648":[174]},{"1544650":[187]},{"1544652":[255]},{"1544654":[168]},{"1544656":[164]},{"1544658":[255]},{"1544660":[255]},{"1544662":[255,127,117]},{"1544666":[255]},{"1544668":[255]},{"1544670":[185]},{"1544672":[181]},{"1544674":[170]},{"1544676":[194]},{"1544678":[174]},{"1544680":[187]},{"1544682":[255]},{"1544684":[168]},{"1544686":[165]},{"1544688":[255]},{"1544690":[255]},{"1544692":[255,127,117]},{"1544696":[255]},{"1544698":[255]},{"1544700":[185]},{"1544702":[181]},{"1544704":[170]},{"1544706":[194]},{"1544708":[174]},{"1544710":[187]},{"1544712":[255]},{"1544714":[168]},{"1544716":[166]},{"1544718":[255]},{"1544720":[255]},{"1544722":[255,127,117]},{"1544726":[255]},{"1544728":[255]},{"1544730":[185]},{"1544732":[181]},{"1544734":[170]},{"1544736":[194]},{"1544738":[174]},{"1544740":[187]},{"1544742":[255]},{"1544744":[168]},{"1544746":[167]},{"1544748":[255]},{"1544750":[255]},{"1544752":[255,127,117]},{"1544756":[255]},{"1544758":[255]},{"1544760":[185]},{"1544762":[181]},{"1544764":[170]},{"1544766":[194]},{"1544768":[174]},{"1544770":[187]},{"1544772":[255]},{"1544774":[168]},{"1544776":[168]},{"1544778":[255]},{"1544780":[255]},{"1544782":[255,127,117]},{"1544786":[255]},{"1544788":[255]},{"1544790":[185]},{"1544792":[181]},{"1544794":[170]},{"1544796":[194]},{"1544798":[174]},{"1544800":[187]},{"1544802":[255]},{"1544804":[168]},{"1544806":[169]},{"1544808":[255]},{"1544810":[255]},{"1544812":[255,127,117]},{"1544816":[255]},{"1544818":[255]},{"1544820":[185]},{"1544822":[181]},{"1544824":[170]},{"1544826":[194]},{"1544828":[174]},{"1544830":[187]},{"1544832":[255]},{"1544834":[169]},{"1544836":[160]},{"1544838":[255]},{"1544840":[255]},{"1544842":[255,127,117]},{"1544846":[255]},{"1544848":[255]},{"1544850":[185]},{"1544852":[181]},{"1544854":[170]},{"1544856":[194]},{"1544858":[174]},{"1544860":[187]},{"1544862":[255]},{"1544864":[169]},{"1544866":[161]},{"1544868":[255]},{"1544870":[255]},{"1544872":[255,127,117]},{"1544876":[255]},{"1544878":[255]},{"1544880":[185]},{"1544882":[181]},{"1544884":[170]},{"1544886":[194]},{"1544888":[174]},{"1544890":[187]},{"1544892":[255]},{"1544894":[169]},{"1544896":[162]},{"1544898":[255]},{"1544900":[255]},{"1544902":[255,127,117]},{"1544906":[255]},{"1544908":[255]},{"1544910":[185]},{"1544912":[181]},{"1544914":[170]},{"1544916":[194]},{"1544918":[174]},{"1544920":[187]},{"1544922":[255]},{"1544924":[169]},{"1544926":[163]},{"1544928":[255]},{"1544930":[255]},{"1544932":[255,127,117]},{"1544936":[255]},{"1544938":[255]},{"1544940":[185]},{"1544942":[181]},{"1544944":[170]},{"1544946":[194]},{"1544948":[174]},{"1544950":[187]},{"1544952":[255]},{"1544954":[169]},{"1544956":[164]},{"1544958":[255]},{"1544960":[255]},{"1544962":[255,127,117]},{"1544966":[255]},{"1544968":[255]},{"1544970":[185]},{"1544972":[181]},{"1544974":[170]},{"1544976":[194]},{"1544978":[174]},{"1544980":[187]},{"1544982":[255]},{"1544984":[169]},{"1544986":[165]},{"1544988":[255]},{"1544990":[255]},{"1544992":[255,127,117]},{"1544996":[255]},{"1544998":[255]},{"1545000":[185]},{"1545002":[181]},{"1545004":[170]},{"1545006":[194]},{"1545008":[174]},{"1545010":[187]},{"1545012":[255]},{"1545014":[169]},{"1545016":[166]},{"1545018":[255]},{"1545020":[255]},{"1545022":[255,127,117]},{"1545026":[255]},{"1545028":[255]},{"1545030":[185]},{"1545032":[181]},{"1545034":[170]},{"1545036":[194]},{"1545038":[174]},{"1545040":[187]},{"1545042":[255]},{"1545044":[169]},{"1545046":[167]},{"1545048":[255]},{"1545050":[255]},{"1545052":[255,127,117]},{"1545056":[255]},{"1545058":[255]},{"1545060":[185]},{"1545062":[181]},{"1545064":[170]},{"1545066":[194]},{"1545068":[174]},{"1545070":[187]},{"1545072":[255]},{"1545074":[169]},{"1545076":[168]},{"1545078":[255]},{"1545080":[255]},{"1545082":[255,127,117]},{"1545086":[255]},{"1545088":[255]},{"1545090":[185]},{"1545092":[181]},{"1545094":[170]},{"1545096":[194]},{"1545098":[174]},{"1545100":[187]},{"1545102":[255]},{"1545104":[169]},{"1545106":[169]},{"1545108":[255]},{"1545110":[255]},{"1545112":[255,127,117]},{"1545116":[255]},{"1545118":[255]},{"1545120":[185]},{"1545122":[181]},{"1545124":[170]},{"1545126":[194]},{"1545128":[174]},{"1545130":[187]},{"1545132":[255]},{"1545134":[161]},{"1545136":[160]},{"1545138":[160]},{"1545140":[255]},{"1545142":[255,127,117]},{"1545146":[255]},{"1545148":[255]},{"1545150":[185]},{"1545152":[181]},{"1545154":[170]},{"1545156":[194]},{"1545158":[174]},{"1545160":[187]},{"1545162":[255]},{"1545164":[161]},{"1545166":[160]},{"1545168":[161]},{"1545170":[255]},{"1545172":[255,127,117]},{"1545176":[255]},{"1545178":[255]},{"1545180":[185]},{"1545182":[181]},{"1545184":[170]},{"1545186":[194]},{"1545188":[174]},{"1545190":[187]},{"1545192":[255]},{"1545194":[161]},{"1545196":[160]},{"1545198":[162]},{"1545200":[255]},{"1545202":[255,127,117]},{"1545206":[255]},{"1545208":[255]},{"1545210":[185]},{"1545212":[181]},{"1545214":[170]},{"1545216":[194]},{"1545218":[174]},{"1545220":[187]},{"1545222":[255]},{"1545224":[161]},{"1545226":[160]},{"1545228":[163]},{"1545230":[255]},{"1545232":[255,127,117]},{"1545236":[255]},{"1545238":[255]},{"1545240":[185]},{"1545242":[181]},{"1545244":[170]},{"1545246":[194]},{"1545248":[174]},{"1545250":[187]},{"1545252":[255]},{"1545254":[161]},{"1545256":[160]},{"1545258":[164]},{"1545260":[255]},{"1545262":[255,127,117]},{"1545266":[255]},{"1545268":[255]},{"1545270":[185]},{"1545272":[181]},{"1545274":[170]},{"1545276":[194]},{"1545278":[174]},{"1545280":[187]},{"1545282":[255]},{"1545284":[161]},{"1545286":[160]},{"1545288":[165]},{"1545290":[255]},{"1545292":[255,127,117]},{"1545296":[255]},{"1545298":[255]},{"1545300":[185]},{"1545302":[181]},{"1545304":[170]},{"1545306":[194]},{"1545308":[174]},{"1545310":[187]},{"1545312":[255]},{"1545314":[161]},{"1545316":[160]},{"1545318":[166]},{"1545320":[255]},{"1545322":[255,127,117]},{"1545326":[255]},{"1545328":[255]},{"1545330":[185]},{"1545332":[181]},{"1545334":[170]},{"1545336":[194]},{"1545338":[174]},{"1545340":[187]},{"1545342":[255]},{"1545344":[161]},{"1545346":[160]},{"1545348":[167]},{"1545350":[255]},{"1545352":[255,127,117]},{"1545356":[255]},{"1545358":[255]},{"1545360":[185]},{"1545362":[181]},{"1545364":[170]},{"1545366":[194]},{"1545368":[174]},{"1545370":[187]},{"1545372":[255]},{"1545374":[161]},{"1545376":[160]},{"1545378":[168]},{"1545380":[255]},{"1545382":[255,127,117]},{"1545386":[255]},{"1545388":[255]},{"1545390":[185]},{"1545392":[181]},{"1545394":[170]},{"1545396":[194]},{"1545398":[174]},{"1545400":[187]},{"1545402":[255]},{"1545404":[161]},{"1545406":[160]},{"1545408":[169]},{"1545410":[255]},{"1545412":[255,127,117]},{"1545416":[255]},{"1545418":[255]},{"1545420":[185]},{"1545422":[181]},{"1545424":[170]},{"1545426":[194]},{"1545428":[174]},{"1545430":[187]},{"1545432":[255]},{"1545434":[161]},{"1545436":[161]},{"1545438":[160]},{"1545440":[255]},{"1545442":[255,127,117]},{"1545446":[255]},{"1545448":[255]},{"1545450":[185]},{"1545452":[181]},{"1545454":[170]},{"1545456":[194]},{"1545458":[174]},{"1545460":[187]},{"1545462":[255]},{"1545464":[161]},{"1545466":[161]},{"1545468":[161]},{"1545470":[255]},{"1545472":[255,127,117]},{"1545476":[255]},{"1545478":[255]},{"1545480":[185]},{"1545482":[181]},{"1545484":[170]},{"1545486":[194]},{"1545488":[174]},{"1545490":[187]},{"1545492":[255]},{"1545494":[161]},{"1545496":[161]},{"1545498":[162]},{"1545500":[255]},{"1545502":[255,127,117]},{"1545506":[255]},{"1545508":[255]},{"1545510":[185]},{"1545512":[181]},{"1545514":[170]},{"1545516":[194]},{"1545518":[174]},{"1545520":[187]},{"1545522":[255]},{"1545524":[161]},{"1545526":[161]},{"1545528":[163]},{"1545530":[255]},{"1545532":[255,127,117]},{"1545536":[255]},{"1545538":[255]},{"1545540":[185]},{"1545542":[181]},{"1545544":[170]},{"1545546":[194]},{"1545548":[174]},{"1545550":[187]},{"1545552":[255]},{"1545554":[161]},{"1545556":[161]},{"1545558":[164]},{"1545560":[255]},{"1545562":[255,127,117]},{"1545566":[255]},{"1545568":[255]},{"1545570":[185]},{"1545572":[181]},{"1545574":[170]},{"1545576":[194]},{"1545578":[174]},{"1545580":[187]},{"1545582":[255]},{"1545584":[161]},{"1545586":[161]},{"1545588":[165]},{"1545590":[255]},{"1545592":[255,127,117]},{"1545596":[255]},{"1545598":[255]},{"1545600":[185]},{"1545602":[181]},{"1545604":[170]},{"1545606":[194]},{"1545608":[174]},{"1545610":[187]},{"1545612":[255]},{"1545614":[161]},{"1545616":[161]},{"1545618":[166]},{"1545620":[255]},{"1545622":[255,127,117]},{"1545626":[255]},{"1545628":[255]},{"1545630":[185]},{"1545632":[181]},{"1545634":[170]},{"1545636":[194]},{"1545638":[174]},{"1545640":[187]},{"1545642":[255]},{"1545644":[161]},{"1545646":[161]},{"1545648":[167]},{"1545650":[255]},{"1545652":[255,127,117]},{"1545656":[255]},{"1545658":[255]},{"1545660":[185]},{"1545662":[181]},{"1545664":[170]},{"1545666":[194]},{"1545668":[174]},{"1545670":[187]},{"1545672":[255]},{"1545674":[161]},{"1545676":[161]},{"1545678":[168]},{"1545680":[255]},{"1545682":[255,127,117]},{"1545686":[255]},{"1545688":[255]},{"1545690":[185]},{"1545692":[181]},{"1545694":[170]},{"1545696":[194]},{"1545698":[174]},{"1545700":[187]},{"1545702":[255]},{"1545704":[161]},{"1545706":[161]},{"1545708":[169]},{"1545710":[255]},{"1545712":[255,127,117]},{"1545716":[255]},{"1545718":[255]},{"1545720":[185]},{"1545722":[181]},{"1545724":[170]},{"1545726":[194]},{"1545728":[174]},{"1545730":[187]},{"1545732":[255]},{"1545734":[161]},{"1545736":[162]},{"1545738":[160]},{"1545740":[255]},{"1545742":[255,127,117]},{"1545746":[255]},{"1545748":[255]},{"1545750":[185]},{"1545752":[181]},{"1545754":[170]},{"1545756":[194]},{"1545758":[174]},{"1545760":[187]},{"1545762":[255]},{"1545764":[161]},{"1545766":[162]},{"1545768":[161]},{"1545770":[255]},{"1545772":[255,127,117]},{"1545776":[255]},{"1545778":[255]},{"1545780":[185]},{"1545782":[181]},{"1545784":[170]},{"1545786":[194]},{"1545788":[174]},{"1545790":[187]},{"1545792":[255]},{"1545794":[161]},{"1545796":[162]},{"1545798":[162]},{"1545800":[255]},{"1545802":[255,127,117]},{"1545806":[255]},{"1545808":[255]},{"1545810":[185]},{"1545812":[181]},{"1545814":[170]},{"1545816":[194]},{"1545818":[174]},{"1545820":[187]},{"1545822":[255]},{"1545824":[161]},{"1545826":[162]},{"1545828":[163]},{"1545830":[255]},{"1545832":[255,127,117]},{"1545836":[255]},{"1545838":[255]},{"1545840":[185]},{"1545842":[181]},{"1545844":[170]},{"1545846":[194]},{"1545848":[174]},{"1545850":[187]},{"1545852":[255]},{"1545854":[161]},{"1545856":[162]},{"1545858":[164]},{"1545860":[255]},{"1545862":[255,127,117]},{"1545866":[255]},{"1545868":[255]},{"1545870":[185]},{"1545872":[181]},{"1545874":[170]},{"1545876":[194]},{"1545878":[174]},{"1545880":[187]},{"1545882":[255]},{"1545884":[161]},{"1545886":[162]},{"1545888":[165]},{"1545890":[255]},{"1545892":[255,127,117]},{"1545896":[255]},{"1545898":[255]},{"1545900":[185]},{"1545902":[181]},{"1545904":[170]},{"1545906":[194]},{"1545908":[174]},{"1545910":[187]},{"1545912":[255]},{"1545914":[161]},{"1545916":[162]},{"1545918":[166]},{"1545920":[255]},{"1545922":[255,127,117]},{"1545926":[255]},{"1545928":[255]},{"1545930":[185]},{"1545932":[181]},{"1545934":[170]},{"1545936":[194]},{"1545938":[174]},{"1545940":[187]},{"1545942":[255]},{"1545944":[161]},{"1545946":[162]},{"1545948":[167]},{"1545950":[255]},{"1545952":[255,127,117]},{"1545956":[255]},{"1545958":[255]},{"1545960":[185]},{"1545962":[181]},{"1545964":[170]},{"1545966":[194]},{"1545968":[174]},{"1545970":[187]},{"1545972":[255]},{"1545974":[161]},{"1545976":[162]},{"1545978":[168]},{"1545980":[255]},{"1545982":[255,127,117]},{"1545986":[255]},{"1545988":[255]},{"1545990":[185]},{"1545992":[181]},{"1545994":[170]},{"1545996":[194]},{"1545998":[174]},{"1546000":[187]},{"1546002":[255]},{"1546004":[161]},{"1546006":[162]},{"1546008":[169]},{"1546010":[255]},{"1546012":[255,127,117]},{"1546016":[255]},{"1546018":[255]},{"1546020":[185]},{"1546022":[181]},{"1546024":[170]},{"1546026":[194]},{"1546028":[174]},{"1546030":[187]},{"1546032":[255]},{"1546034":[161]},{"1546036":[163]},{"1546038":[160]},{"1546040":[255]},{"1546042":[255,127,117]},{"1546046":[255]},{"1546048":[255]},{"1546050":[185]},{"1546052":[181]},{"1546054":[170]},{"1546056":[194]},{"1546058":[174]},{"1546060":[187]},{"1546062":[255]},{"1546064":[161]},{"1546066":[163]},{"1546068":[161]},{"1546070":[255]},{"1546072":[255,127,117]},{"1546076":[255]},{"1546078":[255]},{"1546080":[185]},{"1546082":[181]},{"1546084":[170]},{"1546086":[194]},{"1546088":[174]},{"1546090":[187]},{"1546092":[255]},{"1546094":[161]},{"1546096":[163]},{"1546098":[162]},{"1546100":[255]},{"1546102":[255,127,117]},{"1546106":[255]},{"1546108":[255]},{"1546110":[185]},{"1546112":[181]},{"1546114":[170]},{"1546116":[194]},{"1546118":[174]},{"1546120":[187]},{"1546122":[255]},{"1546124":[161]},{"1546126":[163]},{"1546128":[163]},{"1546130":[255]},{"1546132":[255,127,117]},{"1546136":[255]},{"1546138":[255]},{"1546140":[185]},{"1546142":[181]},{"1546144":[170]},{"1546146":[194]},{"1546148":[174]},{"1546150":[187]},{"1546152":[255]},{"1546154":[161]},{"1546156":[163]},{"1546158":[164]},{"1546160":[255]},{"1546162":[255,127,117]},{"1546166":[255]},{"1546168":[255]},{"1546170":[185]},{"1546172":[181]},{"1546174":[170]},{"1546176":[194]},{"1546178":[174]},{"1546180":[187]},{"1546182":[255]},{"1546184":[161]},{"1546186":[163]},{"1546188":[165]},{"1546190":[255]},{"1546192":[255,127,117]},{"1546196":[255]},{"1546198":[255]},{"1546200":[185]},{"1546202":[181]},{"1546204":[170]},{"1546206":[194]},{"1546208":[174]},{"1546210":[187]},{"1546212":[255]},{"1546214":[161]},{"1546216":[163]},{"1546218":[166]},{"1546220":[255]},{"1546222":[255,127,117]},{"1546226":[255]},{"1546228":[255]},{"1546230":[185]},{"1546232":[181]},{"1546234":[170]},{"1546236":[194]},{"1546238":[174]},{"1546240":[187]},{"1546242":[255]},{"1546244":[161]},{"1546246":[163]},{"1546248":[167]},{"1546250":[255]},{"1546252":[255,127,117]},{"1546256":[255]},{"1546258":[255]},{"1546260":[185]},{"1546262":[181]},{"1546264":[170]},{"1546266":[194]},{"1546268":[174]},{"1546270":[187]},{"1546272":[255]},{"1546274":[161]},{"1546276":[163]},{"1546278":[168]},{"1546280":[255]},{"1546282":[255,127,117]},{"1546286":[255]},{"1546288":[255]},{"1546290":[185]},{"1546292":[181]},{"1546294":[170]},{"1546296":[194]},{"1546298":[174]},{"1546300":[187]},{"1546302":[255]},{"1546304":[161]},{"1546306":[163]},{"1546308":[169]},{"1546310":[255]},{"1546312":[255,127,117]},{"1546316":[255]},{"1546318":[255]},{"1546320":[185]},{"1546322":[181]},{"1546324":[170]},{"1546326":[194]},{"1546328":[174]},{"1546330":[187]},{"1546332":[255]},{"1546334":[161]},{"1546336":[164]},{"1546338":[160]},{"1546340":[255]},{"1546342":[255,127,117]},{"1546346":[255]},{"1546348":[255]},{"1546350":[185]},{"1546352":[181]},{"1546354":[170]},{"1546356":[194]},{"1546358":[174]},{"1546360":[187]},{"1546362":[255]},{"1546364":[161]},{"1546366":[164]},{"1546368":[161]},{"1546370":[255]},{"1546372":[255,127,117]},{"1546376":[255]},{"1546378":[255]},{"1546380":[185]},{"1546382":[181]},{"1546384":[170]},{"1546386":[194]},{"1546388":[174]},{"1546390":[187]},{"1546392":[255]},{"1546394":[161]},{"1546396":[164]},{"1546398":[162]},{"1546400":[255]},{"1546402":[255,127,117]},{"1546406":[255]},{"1546408":[255]},{"1546410":[185]},{"1546412":[181]},{"1546414":[170]},{"1546416":[194]},{"1546418":[174]},{"1546420":[187]},{"1546422":[255]},{"1546424":[161]},{"1546426":[164]},{"1546428":[163]},{"1546430":[255]},{"1546432":[255,127,117]},{"1546436":[255]},{"1546438":[255]},{"1546440":[185]},{"1546442":[181]},{"1546444":[170]},{"1546446":[194]},{"1546448":[174]},{"1546450":[187]},{"1546452":[255]},{"1546454":[161]},{"1546456":[164]},{"1546458":[164]},{"1546460":[255]},{"1546462":[255,127,117]},{"1546466":[255]},{"1546468":[255]},{"1546470":[185]},{"1546472":[181]},{"1546474":[170]},{"1546476":[194]},{"1546478":[174]},{"1546480":[187]},{"1546482":[255]},{"1546484":[161]},{"1546486":[164]},{"1546488":[165]},{"1546490":[255]},{"1546492":[255,127,117]},{"1546496":[255]},{"1546498":[255]},{"1546500":[185]},{"1546502":[181]},{"1546504":[170]},{"1546506":[194]},{"1546508":[174]},{"1546510":[187]},{"1546512":[255]},{"1546514":[161]},{"1546516":[164]},{"1546518":[166]},{"1546520":[255]},{"1546522":[255,127,117]},{"1546526":[255]},{"1546528":[255]},{"1546530":[185]},{"1546532":[181]},{"1546534":[170]},{"1546536":[194]},{"1546538":[174]},{"1546540":[187]},{"1546542":[255]},{"1546544":[161]},{"1546546":[164]},{"1546548":[167]},{"1546550":[255]},{"1546552":[255,127,117]},{"1546556":[255]},{"1546558":[255]},{"1546560":[185]},{"1546562":[181]},{"1546564":[170]},{"1546566":[194]},{"1546568":[174]},{"1546570":[187]},{"1546572":[255]},{"1546574":[161]},{"1546576":[164]},{"1546578":[168]},{"1546580":[255]},{"1546582":[255,127,117]},{"1546586":[255]},{"1546588":[255]},{"1546590":[185]},{"1546592":[181]},{"1546594":[170]},{"1546596":[194]},{"1546598":[174]},{"1546600":[187]},{"1546602":[255]},{"1546604":[161]},{"1546606":[164]},{"1546608":[169]},{"1546610":[255]},{"1546612":[255,127,117]},{"1546616":[255]},{"1546618":[255]},{"1546620":[185]},{"1546622":[181]},{"1546624":[170]},{"1546626":[194]},{"1546628":[174]},{"1546630":[187]},{"1546632":[255]},{"1546634":[161]},{"1546636":[165]},{"1546638":[160]},{"1546640":[255]},{"1546642":[255,127,117]},{"1546646":[255]},{"1546648":[255]},{"1546650":[185]},{"1546652":[181]},{"1546654":[170]},{"1546656":[194]},{"1546658":[174]},{"1546660":[187]},{"1546662":[255]},{"1546664":[161]},{"1546666":[165]},{"1546668":[161]},{"1546670":[255]},{"1546672":[255,127,117]},{"1546676":[255]},{"1546678":[255]},{"1546680":[185]},{"1546682":[181]},{"1546684":[170]},{"1546686":[194]},{"1546688":[174]},{"1546690":[187]},{"1546692":[255]},{"1546694":[161]},{"1546696":[165]},{"1546698":[162]},{"1546700":[255]},{"1546702":[255,127,117]},{"1546706":[255]},{"1546708":[255]},{"1546710":[185]},{"1546712":[181]},{"1546714":[170]},{"1546716":[194]},{"1546718":[174]},{"1546720":[187]},{"1546722":[255]},{"1546724":[161]},{"1546726":[165]},{"1546728":[163]},{"1546730":[255]},{"1546732":[255,127,117]},{"1546736":[255]},{"1546738":[255]},{"1546740":[185]},{"1546742":[181]},{"1546744":[170]},{"1546746":[194]},{"1546748":[174]},{"1546750":[187]},{"1546752":[255]},{"1546754":[161]},{"1546756":[165]},{"1546758":[164]},{"1546760":[255]},{"1546762":[255,127,117]},{"1546766":[255]},{"1546768":[255]},{"1546770":[185]},{"1546772":[181]},{"1546774":[170]},{"1546776":[194]},{"1546778":[174]},{"1546780":[187]},{"1546782":[255]},{"1546784":[161]},{"1546786":[165]},{"1546788":[165]},{"1546790":[255]},{"1546792":[255,127,117]},{"1546796":[255]},{"1546798":[255]},{"1546800":[185]},{"1546802":[181]},{"1546804":[170]},{"1546806":[194]},{"1546808":[174]},{"1546810":[187]},{"1546812":[255]},{"1546814":[161]},{"1546816":[165]},{"1546818":[166]},{"1546820":[255]},{"1546822":[255,127,117]},{"1546826":[255]},{"1546828":[255]},{"1546830":[185]},{"1546832":[181]},{"1546834":[170]},{"1546836":[194]},{"1546838":[174]},{"1546840":[187]},{"1546842":[255]},{"1546844":[161]},{"1546846":[165]},{"1546848":[167]},{"1546850":[255]},{"1546852":[255,127,117]},{"1546856":[255]},{"1546858":[255]},{"1546860":[185]},{"1546862":[181]},{"1546864":[170]},{"1546866":[194]},{"1546868":[174]},{"1546870":[187]},{"1546872":[255]},{"1546874":[161]},{"1546876":[165]},{"1546878":[168]},{"1546880":[255]},{"1546882":[255,127,117]},{"1546886":[255]},{"1546888":[255]},{"1546890":[185]},{"1546892":[181]},{"1546894":[170]},{"1546896":[194]},{"1546898":[174]},{"1546900":[187]},{"1546902":[255]},{"1546904":[161]},{"1546906":[165]},{"1546908":[169]},{"1546910":[255]},{"1546912":[255,127,117]},{"1546916":[255]},{"1546918":[255]},{"1546920":[185]},{"1546922":[181]},{"1546924":[170]},{"1546926":[194]},{"1546928":[174]},{"1546930":[187]},{"1546932":[255]},{"1546934":[161]},{"1546936":[166]},{"1546938":[160]},{"1546940":[255]},{"1546942":[255,127,117]},{"1546946":[255]},{"1546948":[255]},{"1546950":[185]},{"1546952":[181]},{"1546954":[170]},{"1546956":[194]},{"1546958":[174]},{"1546960":[187]},{"1546962":[255]},{"1546964":[161]},{"1546966":[166]},{"1546968":[161]},{"1546970":[255]},{"1546972":[255,127,117]},{"1546976":[255]},{"1546978":[255]},{"1546980":[185]},{"1546982":[181]},{"1546984":[170]},{"1546986":[194]},{"1546988":[174]},{"1546990":[187]},{"1546992":[255]},{"1546994":[161]},{"1546996":[166]},{"1546998":[162]},{"1547000":[255]},{"1547002":[255,127,117]},{"1547006":[255]},{"1547008":[255]},{"1547010":[185]},{"1547012":[181]},{"1547014":[170]},{"1547016":[194]},{"1547018":[174]},{"1547020":[187]},{"1547022":[255]},{"1547024":[161]},{"1547026":[166]},{"1547028":[163]},{"1547030":[255]},{"1547032":[255,127,117]},{"1547036":[255]},{"1547038":[255]},{"1547040":[185]},{"1547042":[181]},{"1547044":[170]},{"1547046":[194]},{"1547048":[174]},{"1547050":[187]},{"1547052":[255]},{"1547054":[161]},{"1547056":[166]},{"1547058":[164]},{"1547060":[255]},{"1547062":[255,127,117]},{"1547066":[255]},{"1547068":[255]},{"1547070":[185]},{"1547072":[181]},{"1547074":[170]},{"1547076":[194]},{"1547078":[174]},{"1547080":[187]},{"1547082":[255]},{"1547084":[161]},{"1547086":[166]},{"1547088":[165]},{"1547090":[255]},{"1547092":[255,127,117]},{"1547096":[255]},{"1547098":[255]},{"1547100":[185]},{"1547102":[181]},{"1547104":[170]},{"1547106":[194]},{"1547108":[174]},{"1547110":[187]},{"1547112":[255]},{"1547114":[161]},{"1547116":[166]},{"1547118":[166]},{"1547120":[255]},{"1547122":[255,127,117]},{"1547126":[255]},{"1547128":[255]},{"1547130":[185]},{"1547132":[181]},{"1547134":[170]},{"1547136":[194]},{"1547138":[174]},{"1547140":[187]},{"1547142":[255]},{"1547144":[161]},{"1547146":[166]},{"1547148":[167]},{"1547150":[255]},{"1547152":[255,127,117]},{"1547156":[255]},{"1547158":[255]},{"1547160":[185]},{"1547162":[181]},{"1547164":[170]},{"1547166":[194]},{"1547168":[174]},{"1547170":[187]},{"1547172":[255]},{"1547174":[161]},{"1547176":[166]},{"1547178":[168]},{"1547180":[255]},{"1547182":[255,127,117]},{"1547186":[255]},{"1547188":[255]},{"1547190":[185]},{"1547192":[181]},{"1547194":[170]},{"1547196":[194]},{"1547198":[174]},{"1547200":[187]},{"1547202":[255]},{"1547204":[161]},{"1547206":[166]},{"1547208":[169]},{"1547210":[255]},{"1547212":[255,127,117]},{"1547216":[255]},{"1547218":[255]},{"1547220":[185]},{"1547222":[181]},{"1547224":[170]},{"1547226":[194]},{"1547228":[174]},{"1547230":[187]},{"1547232":[255]},{"1547234":[161]},{"1547236":[167]},{"1547238":[160]},{"1547240":[255]},{"1547242":[255,127,117]},{"1547246":[255]},{"1547248":[255]},{"1547250":[185]},{"1547252":[181]},{"1547254":[170]},{"1547256":[194]},{"1547258":[174]},{"1547260":[187]},{"1547262":[255]},{"1547264":[161]},{"1547266":[167]},{"1547268":[161]},{"1547270":[255]},{"1547272":[255,127,117]},{"1547276":[255]},{"1547278":[255]},{"1547280":[185]},{"1547282":[181]},{"1547284":[170]},{"1547286":[194]},{"1547288":[174]},{"1547290":[187]},{"1547292":[255]},{"1547294":[161]},{"1547296":[167]},{"1547298":[162]},{"1547300":[255]},{"1547302":[255,127,117]},{"1547306":[255]},{"1547308":[255]},{"1547310":[185]},{"1547312":[181]},{"1547314":[170]},{"1547316":[194]},{"1547318":[174]},{"1547320":[187]},{"1547322":[255]},{"1547324":[161]},{"1547326":[167]},{"1547328":[163]},{"1547330":[255]},{"1547332":[255,127,117]},{"1547336":[255]},{"1547338":[255]},{"1547340":[185]},{"1547342":[181]},{"1547344":[170]},{"1547346":[194]},{"1547348":[174]},{"1547350":[187]},{"1547352":[255]},{"1547354":[161]},{"1547356":[167]},{"1547358":[164]},{"1547360":[255]},{"1547362":[255,127,117]},{"1547366":[255]},{"1547368":[255]},{"1547370":[185]},{"1547372":[181]},{"1547374":[170]},{"1547376":[194]},{"1547378":[174]},{"1547380":[187]},{"1547382":[255]},{"1547384":[161]},{"1547386":[167]},{"1547388":[165]},{"1547390":[255]},{"1547392":[255,127,117]},{"1547396":[255]},{"1547398":[255]},{"1547400":[185]},{"1547402":[181]},{"1547404":[170]},{"1547406":[194]},{"1547408":[174]},{"1547410":[187]},{"1547412":[255]},{"1547414":[161]},{"1547416":[167]},{"1547418":[166]},{"1547420":[255]},{"1547422":[255,127,117]},{"1547426":[255]},{"1547428":[255]},{"1547430":[185]},{"1547432":[181]},{"1547434":[170]},{"1547436":[194]},{"1547438":[174]},{"1547440":[187]},{"1547442":[255]},{"1547444":[161]},{"1547446":[167]},{"1547448":[167]},{"1547450":[255]},{"1547452":[255,127,117]},{"1547456":[255]},{"1547458":[255]},{"1547460":[185]},{"1547462":[181]},{"1547464":[170]},{"1547466":[194]},{"1547468":[174]},{"1547470":[187]},{"1547472":[255]},{"1547474":[161]},{"1547476":[167]},{"1547478":[168]},{"1547480":[255]},{"1547482":[255,127,117]},{"1547486":[255]},{"1547488":[255]},{"1547490":[185]},{"1547492":[181]},{"1547494":[170]},{"1547496":[194]},{"1547498":[174]},{"1547500":[187]},{"1547502":[255]},{"1547504":[161]},{"1547506":[167]},{"1547508":[169]},{"1547510":[255]},{"1547512":[255,127,117]},{"1547516":[255]},{"1547518":[255]},{"1547520":[185]},{"1547522":[181]},{"1547524":[170]},{"1547526":[194]},{"1547528":[174]},{"1547530":[187]},{"1547532":[255]},{"1547534":[161]},{"1547536":[168]},{"1547538":[160]},{"1547540":[255]},{"1547542":[255,127,117]},{"1547546":[255]},{"1547548":[255]},{"1547550":[185]},{"1547552":[181]},{"1547554":[170]},{"1547556":[194]},{"1547558":[174]},{"1547560":[187]},{"1547562":[255]},{"1547564":[161]},{"1547566":[168]},{"1547568":[161]},{"1547570":[255]},{"1547572":[255,127,117]},{"1547576":[255]},{"1547578":[255]},{"1547580":[185]},{"1547582":[181]},{"1547584":[170]},{"1547586":[194]},{"1547588":[174]},{"1547590":[187]},{"1547592":[255]},{"1547594":[161]},{"1547596":[168]},{"1547598":[162]},{"1547600":[255]},{"1547602":[255,127,117]},{"1547606":[255]},{"1547608":[255]},{"1547610":[185]},{"1547612":[181]},{"1547614":[170]},{"1547616":[194]},{"1547618":[174]},{"1547620":[187]},{"1547622":[255]},{"1547624":[161]},{"1547626":[168]},{"1547628":[163]},{"1547630":[255]},{"1547632":[255,127,117]},{"1547636":[255]},{"1547638":[255]},{"1547640":[185]},{"1547642":[181]},{"1547644":[170]},{"1547646":[194]},{"1547648":[174]},{"1547650":[187]},{"1547652":[255]},{"1547654":[161]},{"1547656":[168]},{"1547658":[164]},{"1547660":[255]},{"1547662":[255,127,117]},{"1547666":[255]},{"1547668":[255]},{"1547670":[185]},{"1547672":[181]},{"1547674":[170]},{"1547676":[194]},{"1547678":[174]},{"1547680":[187]},{"1547682":[255]},{"1547684":[161]},{"1547686":[168]},{"1547688":[165]},{"1547690":[255]},{"1547692":[255,127,117]},{"1547696":[255]},{"1547698":[255]},{"1547700":[185]},{"1547702":[181]},{"1547704":[170]},{"1547706":[194]},{"1547708":[174]},{"1547710":[187]},{"1547712":[255]},{"1547714":[161]},{"1547716":[168]},{"1547718":[166]},{"1547720":[255]},{"1547722":[255,127,117]},{"1547726":[255]},{"1547728":[255]},{"1547730":[185]},{"1547732":[181]},{"1547734":[170]},{"1547736":[194]},{"1547738":[174]},{"1547740":[187]},{"1547742":[255]},{"1547744":[161]},{"1547746":[168]},{"1547748":[167]},{"1547750":[255]},{"1547752":[255,127,117]},{"1547756":[255]},{"1547758":[255]},{"1547760":[185]},{"1547762":[181]},{"1547764":[170]},{"1547766":[194]},{"1547768":[174]},{"1547770":[187]},{"1547772":[255]},{"1547774":[161]},{"1547776":[168]},{"1547778":[168]},{"1547780":[255]},{"1547782":[255,127,117]},{"1547786":[255]},{"1547788":[255]},{"1547790":[185]},{"1547792":[181]},{"1547794":[170]},{"1547796":[194]},{"1547798":[174]},{"1547800":[187]},{"1547802":[255]},{"1547804":[161]},{"1547806":[168]},{"1547808":[169]},{"1547810":[255]},{"1547812":[255,127,117]},{"1547816":[255]},{"1547818":[255]},{"1547820":[185]},{"1547822":[181]},{"1547824":[170]},{"1547826":[194]},{"1547828":[174]},{"1547830":[187]},{"1547832":[255]},{"1547834":[161]},{"1547836":[169]},{"1547838":[160]},{"1547840":[255]},{"1547842":[255,127,117]},{"1547846":[255]},{"1547848":[255]},{"1547850":[185]},{"1547852":[181]},{"1547854":[170]},{"1547856":[194]},{"1547858":[174]},{"1547860":[187]},{"1547862":[255]},{"1547864":[161]},{"1547866":[169]},{"1547868":[161]},{"1547870":[255]},{"1547872":[255,127,117]},{"1547876":[255]},{"1547878":[255]},{"1547880":[185]},{"1547882":[181]},{"1547884":[170]},{"1547886":[194]},{"1547888":[174]},{"1547890":[187]},{"1547892":[255]},{"1547894":[161]},{"1547896":[169]},{"1547898":[162]},{"1547900":[255]},{"1547902":[255,127,117]},{"1547906":[255]},{"1547908":[255]},{"1547910":[185]},{"1547912":[181]},{"1547914":[170]},{"1547916":[194]},{"1547918":[174]},{"1547920":[187]},{"1547922":[255]},{"1547924":[161]},{"1547926":[169]},{"1547928":[163]},{"1547930":[255]},{"1547932":[255,127,117]},{"1547936":[255]},{"1547938":[255]},{"1547940":[185]},{"1547942":[181]},{"1547944":[170]},{"1547946":[194]},{"1547948":[174]},{"1547950":[187]},{"1547952":[255]},{"1547954":[161]},{"1547956":[169]},{"1547958":[164]},{"1547960":[255]},{"1547962":[255,127,117]},{"1547966":[255]},{"1547968":[255]},{"1547970":[185]},{"1547972":[181]},{"1547974":[170]},{"1547976":[194]},{"1547978":[174]},{"1547980":[187]},{"1547982":[255]},{"1547984":[161]},{"1547986":[169]},{"1547988":[165]},{"1547990":[255]},{"1547992":[255,127,117]},{"1547996":[255]},{"1547998":[255]},{"1548000":[185]},{"1548002":[181]},{"1548004":[170]},{"1548006":[194]},{"1548008":[174]},{"1548010":[187]},{"1548012":[255]},{"1548014":[161]},{"1548016":[169]},{"1548018":[166]},{"1548020":[255]},{"1548022":[255,127,117]},{"1548026":[255]},{"1548028":[255]},{"1548030":[185]},{"1548032":[181]},{"1548034":[170]},{"1548036":[194]},{"1548038":[174]},{"1548040":[187]},{"1548042":[255]},{"1548044":[161]},{"1548046":[169]},{"1548048":[167]},{"1548050":[255]},{"1548052":[255,127,117]},{"1548056":[255]},{"1548058":[255]},{"1548060":[185]},{"1548062":[181]},{"1548064":[170]},{"1548066":[194]},{"1548068":[174]},{"1548070":[187]},{"1548072":[255]},{"1548074":[161]},{"1548076":[169]},{"1548078":[168]},{"1548080":[255]},{"1548082":[255,127,117]},{"1548086":[255]},{"1548088":[255]},{"1548090":[185]},{"1548092":[181]},{"1548094":[170]},{"1548096":[194]},{"1548098":[174]},{"1548100":[187]},{"1548102":[255]},{"1548104":[161]},{"1548106":[169]},{"1548108":[169]},{"1548110":[255]},{"1548112":[255,127,117]},{"1548116":[255]},{"1548118":[255]},{"1548120":[185]},{"1548122":[181]},{"1548124":[170]},{"1548126":[194]},{"1548128":[174]},{"1548130":[187]},{"1548132":[255]},{"1548134":[162]},{"1548136":[160]},{"1548138":[160]},{"1548140":[255]},{"1548142":[255,127,117]},{"1548146":[255]},{"1548148":[255]},{"1548150":[185]},{"1548152":[181]},{"1548154":[170]},{"1548156":[194]},{"1548158":[174]},{"1548160":[187]},{"1548162":[255]},{"1548164":[162]},{"1548166":[160]},{"1548168":[161]},{"1548170":[255]},{"1548172":[255,127,117]},{"1548176":[255]},{"1548178":[255]},{"1548180":[185]},{"1548182":[181]},{"1548184":[170]},{"1548186":[194]},{"1548188":[174]},{"1548190":[187]},{"1548192":[255]},{"1548194":[162]},{"1548196":[160]},{"1548198":[162]},{"1548200":[255]},{"1548202":[255,127,117]},{"1548206":[255]},{"1548208":[255]},{"1548210":[185]},{"1548212":[181]},{"1548214":[170]},{"1548216":[194]},{"1548218":[174]},{"1548220":[187]},{"1548222":[255]},{"1548224":[162]},{"1548226":[160]},{"1548228":[163]},{"1548230":[255]},{"1548232":[255,127,117]},{"1548236":[255]},{"1548238":[255]},{"1548240":[185]},{"1548242":[181]},{"1548244":[170]},{"1548246":[194]},{"1548248":[174]},{"1548250":[187]},{"1548252":[255]},{"1548254":[162]},{"1548256":[160]},{"1548258":[164]},{"1548260":[255]},{"1548262":[255,127,117]},{"1548266":[255]},{"1548268":[255]},{"1548270":[185]},{"1548272":[181]},{"1548274":[170]},{"1548276":[194]},{"1548278":[174]},{"1548280":[187]},{"1548282":[255]},{"1548284":[162]},{"1548286":[160]},{"1548288":[165]},{"1548290":[255]},{"1548292":[255,127,117]},{"1548296":[255]},{"1548298":[255]},{"1548300":[185]},{"1548302":[181]},{"1548304":[170]},{"1548306":[194]},{"1548308":[174]},{"1548310":[187]},{"1548312":[255]},{"1548314":[162]},{"1548316":[160]},{"1548318":[166]},{"1548320":[255]},{"1548322":[255,127,117]},{"1548326":[255]},{"1548328":[255]},{"1548330":[185]},{"1548332":[181]},{"1548334":[170]},{"1548336":[194]},{"1548338":[174]},{"1548340":[187]},{"1548342":[255]},{"1548344":[162]},{"1548346":[160]},{"1548348":[167]},{"1548350":[255]},{"1548352":[255,127,117]},{"1548356":[255]},{"1548358":[255]},{"1548360":[185]},{"1548362":[181]},{"1548364":[170]},{"1548366":[194]},{"1548368":[174]},{"1548370":[187]},{"1548372":[255]},{"1548374":[162]},{"1548376":[160]},{"1548378":[168]},{"1548380":[255]},{"1548382":[255,127,117]},{"1548386":[255]},{"1548388":[255]},{"1548390":[185]},{"1548392":[181]},{"1548394":[170]},{"1548396":[194]},{"1548398":[174]},{"1548400":[187]},{"1548402":[255]},{"1548404":[162]},{"1548406":[160]},{"1548408":[169]},{"1548410":[255]},{"1548412":[255,127,117]},{"1548416":[255]},{"1548418":[255]},{"1548420":[185]},{"1548422":[181]},{"1548424":[170]},{"1548426":[194]},{"1548428":[174]},{"1548430":[187]},{"1548432":[255]},{"1548434":[162]},{"1548436":[161]},{"1548438":[160]},{"1548440":[255]},{"1548442":[255,127,117]},{"1548446":[255]},{"1548448":[255]},{"1548450":[185]},{"1548452":[181]},{"1548454":[170]},{"1548456":[194]},{"1548458":[174]},{"1548460":[187]},{"1548462":[255]},{"1548464":[162]},{"1548466":[161]},{"1548468":[161]},{"1548470":[255]},{"1548472":[255,127,117]},{"1548476":[255]},{"1548478":[255]},{"1548480":[185]},{"1548482":[181]},{"1548484":[170]},{"1548486":[194]},{"1548488":[174]},{"1548490":[187]},{"1548492":[255]},{"1548494":[162]},{"1548496":[161]},{"1548498":[162]},{"1548500":[255]},{"1548502":[255,127,117]},{"1548506":[255]},{"1548508":[255]},{"1548510":[185]},{"1548512":[181]},{"1548514":[170]},{"1548516":[194]},{"1548518":[174]},{"1548520":[187]},{"1548522":[255]},{"1548524":[162]},{"1548526":[161]},{"1548528":[163]},{"1548530":[255]},{"1548532":[255,127,117]},{"1548536":[255]},{"1548538":[255]},{"1548540":[185]},{"1548542":[181]},{"1548544":[170]},{"1548546":[194]},{"1548548":[174]},{"1548550":[187]},{"1548552":[255]},{"1548554":[162]},{"1548556":[161]},{"1548558":[164]},{"1548560":[255]},{"1548562":[255,127,117]},{"1548566":[255]},{"1548568":[255]},{"1548570":[185]},{"1548572":[181]},{"1548574":[170]},{"1548576":[194]},{"1548578":[174]},{"1548580":[187]},{"1548582":[255]},{"1548584":[162]},{"1548586":[161]},{"1548588":[165]},{"1548590":[255]},{"1548592":[255,127,117]},{"1548596":[255]},{"1548598":[255]},{"1548600":[185]},{"1548602":[181]},{"1548604":[170]},{"1548606":[194]},{"1548608":[174]},{"1548610":[187]},{"1548612":[255]},{"1548614":[162]},{"1548616":[161]},{"1548618":[166]},{"1548620":[255]},{"1548622":[255,127,117]},{"1548626":[255]},{"1548628":[255]},{"1548630":[185]},{"1548632":[181]},{"1548634":[170]},{"1548636":[194]},{"1548638":[174]},{"1548640":[187]},{"1548642":[255]},{"1548644":[162]},{"1548646":[161]},{"1548648":[167]},{"1548650":[255]},{"1548652":[255,127,117]},{"1548656":[255]},{"1548658":[255]},{"1548660":[185]},{"1548662":[181]},{"1548664":[170]},{"1548666":[194]},{"1548668":[174]},{"1548670":[187]},{"1548672":[255]},{"1548674":[162]},{"1548676":[161]},{"1548678":[168]},{"1548680":[255]},{"1548682":[255,127,117]},{"1548686":[255]},{"1548688":[255]},{"1548690":[185]},{"1548692":[181]},{"1548694":[170]},{"1548696":[194]},{"1548698":[174]},{"1548700":[187]},{"1548702":[255]},{"1548704":[162]},{"1548706":[161]},{"1548708":[169]},{"1548710":[255]},{"1548712":[255,127,117]},{"1548716":[255]},{"1548718":[255]},{"1548720":[185]},{"1548722":[181]},{"1548724":[170]},{"1548726":[194]},{"1548728":[174]},{"1548730":[187]},{"1548732":[255]},{"1548734":[162]},{"1548736":[162]},{"1548738":[160]},{"1548740":[255]},{"1548742":[255,127,117]},{"1548746":[255]},{"1548748":[255]},{"1548750":[185]},{"1548752":[181]},{"1548754":[170]},{"1548756":[194]},{"1548758":[174]},{"1548760":[187]},{"1548762":[255]},{"1548764":[162]},{"1548766":[162]},{"1548768":[161]},{"1548770":[255]},{"1548772":[255,127,117]},{"1548776":[255]},{"1548778":[255]},{"1548780":[185]},{"1548782":[181]},{"1548784":[170]},{"1548786":[194]},{"1548788":[174]},{"1548790":[187]},{"1548792":[255]},{"1548794":[162]},{"1548796":[162]},{"1548798":[162]},{"1548800":[255]},{"1548802":[255,127,117]},{"1548806":[255]},{"1548808":[255]},{"1548810":[185]},{"1548812":[181]},{"1548814":[170]},{"1548816":[194]},{"1548818":[174]},{"1548820":[187]},{"1548822":[255]},{"1548824":[162]},{"1548826":[162]},{"1548828":[163]},{"1548830":[255]},{"1548832":[255,127,117]},{"1548836":[255]},{"1548838":[255]},{"1548840":[185]},{"1548842":[181]},{"1548844":[170]},{"1548846":[194]},{"1548848":[174]},{"1548850":[187]},{"1548852":[255]},{"1548854":[162]},{"1548856":[162]},{"1548858":[164]},{"1548860":[255]},{"1548862":[255,127,117]},{"1548866":[255]},{"1548868":[255]},{"1548870":[185]},{"1548872":[181]},{"1548874":[170]},{"1548876":[194]},{"1548878":[174]},{"1548880":[187]},{"1548882":[255]},{"1548884":[162]},{"1548886":[162]},{"1548888":[165]},{"1548890":[255]},{"1548892":[255,127,117]},{"1548896":[255]},{"1548898":[255]},{"1548900":[185]},{"1548902":[181]},{"1548904":[170]},{"1548906":[194]},{"1548908":[174]},{"1548910":[187]},{"1548912":[255]},{"1548914":[162]},{"1548916":[162]},{"1548918":[166]},{"1548920":[255]},{"1548922":[255,127,117]},{"1548926":[255]},{"1548928":[255]},{"1548930":[185]},{"1548932":[181]},{"1548934":[170]},{"1548936":[194]},{"1548938":[174]},{"1548940":[187]},{"1548942":[255]},{"1548944":[162]},{"1548946":[162]},{"1548948":[167]},{"1548950":[255]},{"1548952":[255,127,117]},{"1548956":[255]},{"1548958":[255]},{"1548960":[185]},{"1548962":[181]},{"1548964":[170]},{"1548966":[194]},{"1548968":[174]},{"1548970":[187]},{"1548972":[255]},{"1548974":[162]},{"1548976":[162]},{"1548978":[168]},{"1548980":[255]},{"1548982":[255,127,117]},{"1548986":[255]},{"1548988":[255]},{"1548990":[185]},{"1548992":[181]},{"1548994":[170]},{"1548996":[194]},{"1548998":[174]},{"1549000":[187]},{"1549002":[255]},{"1549004":[162]},{"1549006":[162]},{"1549008":[169]},{"1549010":[255]},{"1549012":[255,127,117]},{"1549016":[255]},{"1549018":[255]},{"1549020":[185]},{"1549022":[181]},{"1549024":[170]},{"1549026":[194]},{"1549028":[174]},{"1549030":[187]},{"1549032":[255]},{"1549034":[162]},{"1549036":[163]},{"1549038":[160]},{"1549040":[255]},{"1549042":[255,127,117]},{"1549046":[255]},{"1549048":[255]},{"1549050":[185]},{"1549052":[181]},{"1549054":[170]},{"1549056":[194]},{"1549058":[174]},{"1549060":[187]},{"1549062":[255]},{"1549064":[162]},{"1549066":[163]},{"1549068":[161]},{"1549070":[255]},{"1549072":[255,127,117]},{"1549076":[255]},{"1549078":[255]},{"1549080":[185]},{"1549082":[181]},{"1549084":[170]},{"1549086":[194]},{"1549088":[174]},{"1549090":[187]},{"1549092":[255]},{"1549094":[162]},{"1549096":[163]},{"1549098":[162]},{"1549100":[255]},{"1549102":[255,127,117]},{"1549106":[255]},{"1549108":[255]},{"1549110":[185]},{"1549112":[181]},{"1549114":[170]},{"1549116":[194]},{"1549118":[174]},{"1549120":[187]},{"1549122":[255]},{"1549124":[162]},{"1549126":[163]},{"1549128":[163]},{"1549130":[255]},{"1549132":[255,127,117]},{"1549136":[255]},{"1549138":[255]},{"1549140":[185]},{"1549142":[181]},{"1549144":[170]},{"1549146":[194]},{"1549148":[174]},{"1549150":[187]},{"1549152":[255]},{"1549154":[162]},{"1549156":[163]},{"1549158":[164]},{"1549160":[255]},{"1549162":[255,127,117]},{"1549166":[255]},{"1549168":[255]},{"1549170":[185]},{"1549172":[181]},{"1549174":[170]},{"1549176":[194]},{"1549178":[174]},{"1549180":[187]},{"1549182":[255]},{"1549184":[162]},{"1549186":[163]},{"1549188":[165]},{"1549190":[255]},{"1549192":[255,127,117]},{"1549196":[255]},{"1549198":[255]},{"1549200":[185]},{"1549202":[181]},{"1549204":[170]},{"1549206":[194]},{"1549208":[174]},{"1549210":[187]},{"1549212":[255]},{"1549214":[162]},{"1549216":[163]},{"1549218":[166]},{"1549220":[255]},{"1549222":[255,127,117]},{"1549226":[255]},{"1549228":[255]},{"1549230":[185]},{"1549232":[181]},{"1549234":[170]},{"1549236":[194]},{"1549238":[174]},{"1549240":[187]},{"1549242":[255]},{"1549244":[162]},{"1549246":[163]},{"1549248":[167]},{"1549250":[255]},{"1549252":[255,127,117]},{"1549256":[255]},{"1549258":[255]},{"1549260":[185]},{"1549262":[181]},{"1549264":[170]},{"1549266":[194]},{"1549268":[174]},{"1549270":[187]},{"1549272":[255]},{"1549274":[162]},{"1549276":[163]},{"1549278":[168]},{"1549280":[255]},{"1549282":[255,127,117]},{"1549286":[255]},{"1549288":[255]},{"1549290":[185]},{"1549292":[181]},{"1549294":[170]},{"1549296":[194]},{"1549298":[174]},{"1549300":[187]},{"1549302":[255]},{"1549304":[162]},{"1549306":[163]},{"1549308":[169]},{"1549310":[255]},{"1549312":[255,127,117]},{"1549316":[255]},{"1549318":[255]},{"1549320":[185]},{"1549322":[181]},{"1549324":[170]},{"1549326":[194]},{"1549328":[174]},{"1549330":[187]},{"1549332":[255]},{"1549334":[162]},{"1549336":[164]},{"1549338":[160]},{"1549340":[255]},{"1549342":[255,127,117]},{"1549346":[255]},{"1549348":[255]},{"1549350":[185]},{"1549352":[181]},{"1549354":[170]},{"1549356":[194]},{"1549358":[174]},{"1549360":[187]},{"1549362":[255]},{"1549364":[162]},{"1549366":[164]},{"1549368":[161]},{"1549370":[255]},{"1549372":[255,127,117]},{"1549376":[255]},{"1549378":[255]},{"1549380":[185]},{"1549382":[181]},{"1549384":[170]},{"1549386":[194]},{"1549388":[174]},{"1549390":[187]},{"1549392":[255]},{"1549394":[162]},{"1549396":[164]},{"1549398":[162]},{"1549400":[255]},{"1549402":[255,127,117]},{"1549406":[255]},{"1549408":[255]},{"1549410":[185]},{"1549412":[181]},{"1549414":[170]},{"1549416":[194]},{"1549418":[174]},{"1549420":[187]},{"1549422":[255]},{"1549424":[162]},{"1549426":[164]},{"1549428":[163]},{"1549430":[255]},{"1549432":[255,127,117]},{"1549436":[255]},{"1549438":[255]},{"1549440":[185]},{"1549442":[181]},{"1549444":[170]},{"1549446":[194]},{"1549448":[174]},{"1549450":[187]},{"1549452":[255]},{"1549454":[162]},{"1549456":[164]},{"1549458":[164]},{"1549460":[255]},{"1549462":[255,127,117]},{"1549466":[255]},{"1549468":[255]},{"1549470":[185]},{"1549472":[181]},{"1549474":[170]},{"1549476":[194]},{"1549478":[174]},{"1549480":[187]},{"1549482":[255]},{"1549484":[162]},{"1549486":[164]},{"1549488":[165]},{"1549490":[255]},{"1549492":[255,127,117]},{"1549496":[255]},{"1549498":[255]},{"1549500":[185]},{"1549502":[181]},{"1549504":[170]},{"1549506":[194]},{"1549508":[174]},{"1549510":[187]},{"1549512":[255]},{"1549514":[162]},{"1549516":[164]},{"1549518":[166]},{"1549520":[255]},{"1549522":[255,127,117]},{"1549526":[255]},{"1549528":[255]},{"1549530":[185]},{"1549532":[181]},{"1549534":[170]},{"1549536":[194]},{"1549538":[174]},{"1549540":[187]},{"1549542":[255]},{"1549544":[162]},{"1549546":[164]},{"1549548":[167]},{"1549550":[255]},{"1549552":[255,127,117]},{"1549556":[255]},{"1549558":[255]},{"1549560":[185]},{"1549562":[181]},{"1549564":[170]},{"1549566":[194]},{"1549568":[174]},{"1549570":[187]},{"1549572":[255]},{"1549574":[162]},{"1549576":[164]},{"1549578":[168]},{"1549580":[255]},{"1549582":[255,127,117]},{"1549586":[255]},{"1549588":[255]},{"1549590":[185]},{"1549592":[181]},{"1549594":[170]},{"1549596":[194]},{"1549598":[174]},{"1549600":[187]},{"1549602":[255]},{"1549604":[162]},{"1549606":[164]},{"1549608":[169]},{"1549610":[255]},{"1549612":[255,127,117]},{"1549616":[255]},{"1549618":[255]},{"1549620":[185]},{"1549622":[181]},{"1549624":[170]},{"1549626":[194]},{"1549628":[174]},{"1549630":[187]},{"1549632":[255]},{"1549634":[162]},{"1549636":[165]},{"1549638":[160]},{"1549640":[255]},{"1549642":[255,127,117]},{"1549646":[255]},{"1549648":[255]},{"1549650":[185]},{"1549652":[181]},{"1549654":[170]},{"1549656":[194]},{"1549658":[174]},{"1549660":[187]},{"1549662":[255]},{"1549664":[162]},{"1549666":[165]},{"1549668":[161]},{"1549670":[255]},{"1549672":[255,127,117]},{"1549676":[255]},{"1549678":[255]},{"1549680":[185]},{"1549682":[181]},{"1549684":[170]},{"1549686":[194]},{"1549688":[174]},{"1549690":[187]},{"1549692":[255]},{"1549694":[162]},{"1549696":[165]},{"1549698":[162]},{"1549700":[255]},{"1549702":[255,127,117]},{"1549706":[255]},{"1549708":[255]},{"1549710":[185]},{"1549712":[181]},{"1549714":[170]},{"1549716":[194]},{"1549718":[174]},{"1549720":[187]},{"1549722":[255]},{"1549724":[162]},{"1549726":[165]},{"1549728":[163]},{"1549730":[255]},{"1549732":[255,127,117]},{"1549736":[255]},{"1549738":[255]},{"1549740":[185]},{"1549742":[181]},{"1549744":[170]},{"1549746":[194]},{"1549748":[174]},{"1549750":[187]},{"1549752":[255]},{"1549754":[162]},{"1549756":[165]},{"1549758":[164]},{"1549760":[255]},{"1549762":[255,127,117]},{"1549766":[255]},{"1549768":[255]},{"1549770":[185]},{"1549772":[181]},{"1549774":[170]},{"1549776":[194]},{"1549778":[174]},{"1549780":[187]},{"1549782":[255]},{"1549784":[162]},{"1549786":[165]},{"1549788":[165]},{"1549790":[255]},{"1549792":[255,127,117]},{"1549796":[255]},{"1549798":[255]},{"1549800":[185]},{"1549802":[181]},{"1549804":[170]},{"1549806":[194]},{"1549808":[174]},{"1549810":[187]},{"1549812":[255]},{"1549814":[162]},{"1549816":[165]},{"1549818":[166]},{"1549820":[255]},{"1549822":[255,127,117]},{"1549826":[255]},{"1549828":[255]},{"1549830":[185]},{"1549832":[181]},{"1549834":[170]},{"1549836":[194]},{"1549838":[174]},{"1549840":[187]},{"1549842":[255]},{"1549844":[162]},{"1549846":[165]},{"1549848":[167]},{"1549850":[255]},{"1549852":[255,127,117]},{"1549856":[255]},{"1549858":[255]},{"1549860":[185]},{"1549862":[181]},{"1549864":[170]},{"1549866":[194]},{"1549868":[174]},{"1549870":[187]},{"1549872":[255]},{"1549874":[162]},{"1549876":[165]},{"1549878":[168]},{"1549880":[255]},{"1549882":[255,127,117]},{"1549886":[255]},{"1549888":[255]},{"1549890":[185]},{"1549892":[181]},{"1549894":[170]},{"1549896":[194]},{"1549898":[174]},{"1549900":[187]},{"1549902":[255]},{"1549904":[162]},{"1549906":[165]},{"1549908":[169]},{"1549910":[255]},{"1549912":[255,127,117]},{"1549916":[255]},{"1549918":[255]},{"1549920":[185]},{"1549922":[181]},{"1549924":[170]},{"1549926":[194]},{"1549928":[174]},{"1549930":[187]},{"1549932":[255]},{"1549934":[162]},{"1549936":[166]},{"1549938":[160]},{"1549940":[255]},{"1549942":[255,127,117]},{"1549946":[255]},{"1549948":[255]},{"1549950":[185]},{"1549952":[181]},{"1549954":[170]},{"1549956":[194]},{"1549958":[174]},{"1549960":[187]},{"1549962":[255]},{"1549964":[162]},{"1549966":[166]},{"1549968":[161]},{"1549970":[255]},{"1549972":[255,127,117]},{"1549976":[255]},{"1549978":[255]},{"1549980":[185]},{"1549982":[181]},{"1549984":[170]},{"1549986":[194]},{"1549988":[174]},{"1549990":[187]},{"1549992":[255]},{"1549994":[162]},{"1549996":[166]},{"1549998":[162]},{"1550000":[255]},{"1550002":[255,127,117]},{"1550006":[255]},{"1550008":[255]},{"1550010":[185]},{"1550012":[181]},{"1550014":[170]},{"1550016":[194]},{"1550018":[174]},{"1550020":[187]},{"1550022":[255]},{"1550024":[162]},{"1550026":[166]},{"1550028":[163]},{"1550030":[255]},{"1550032":[255,127,117]},{"1550036":[255]},{"1550038":[255]},{"1550040":[185]},{"1550042":[181]},{"1550044":[170]},{"1550046":[194]},{"1550048":[174]},{"1550050":[187]},{"1550052":[255]},{"1550054":[162]},{"1550056":[166]},{"1550058":[164]},{"1550060":[255]},{"1550062":[255,127,117]},{"1550066":[255]},{"1550068":[255]},{"1550070":[185]},{"1550072":[181]},{"1550074":[170]},{"1550076":[194]},{"1550078":[174]},{"1550080":[187]},{"1550082":[255]},{"1550084":[162]},{"1550086":[166]},{"1550088":[165]},{"1550090":[255]},{"1550092":[255,127,117]},{"1550096":[255]},{"1550098":[255]},{"1550100":[185]},{"1550102":[181]},{"1550104":[170]},{"1550106":[194]},{"1550108":[174]},{"1550110":[187]},{"1550112":[255]},{"1550114":[162]},{"1550116":[166]},{"1550118":[166]},{"1550120":[255]},{"1550122":[255,127,117]},{"1550126":[255]},{"1550128":[255]},{"1550130":[185]},{"1550132":[181]},{"1550134":[170]},{"1550136":[194]},{"1550138":[174]},{"1550140":[187]},{"1550142":[255]},{"1550144":[162]},{"1550146":[166]},{"1550148":[167]},{"1550150":[255]},{"1550152":[255,127,117]},{"1550156":[255]},{"1550158":[255]},{"1550160":[185]},{"1550162":[181]},{"1550164":[170]},{"1550166":[194]},{"1550168":[174]},{"1550170":[187]},{"1550172":[255]},{"1550174":[162]},{"1550176":[166]},{"1550178":[168]},{"1550180":[255]},{"1550182":[255,127,117]},{"1550186":[255]},{"1550188":[255]},{"1550190":[185]},{"1550192":[181]},{"1550194":[170]},{"1550196":[194]},{"1550198":[174]},{"1550200":[187]},{"1550202":[255]},{"1550204":[162]},{"1550206":[166]},{"1550208":[169]},{"1550210":[255]},{"1550212":[255,127,117]},{"1550216":[255]},{"1550218":[255]},{"1550220":[185]},{"1550222":[181]},{"1550224":[170]},{"1550226":[194]},{"1550228":[174]},{"1550230":[187]},{"1550232":[255]},{"1550234":[162]},{"1550236":[167]},{"1550238":[160]},{"1550240":[255]},{"1550242":[255,127,117]},{"1550246":[255]},{"1550248":[255]},{"1550250":[185]},{"1550252":[181]},{"1550254":[170]},{"1550256":[194]},{"1550258":[174]},{"1550260":[187]},{"1550262":[255]},{"1550264":[162]},{"1550266":[167]},{"1550268":[161]},{"1550270":[255]},{"1550272":[255,127,117]},{"1550276":[255]},{"1550278":[255]},{"1550280":[185]},{"1550282":[181]},{"1550284":[170]},{"1550286":[194]},{"1550288":[174]},{"1550290":[187]},{"1550292":[255]},{"1550294":[162]},{"1550296":[167]},{"1550298":[162]},{"1550300":[255]},{"1550302":[255,127,117]},{"1550306":[255]},{"1550308":[255]},{"1550310":[185]},{"1550312":[181]},{"1550314":[170]},{"1550316":[194]},{"1550318":[174]},{"1550320":[187]},{"1550322":[255]},{"1550324":[162]},{"1550326":[167]},{"1550328":[163]},{"1550330":[255]},{"1550332":[255,127,117]},{"1550336":[255]},{"1550338":[255]},{"1550340":[185]},{"1550342":[181]},{"1550344":[170]},{"1550346":[194]},{"1550348":[174]},{"1550350":[187]},{"1550352":[255]},{"1550354":[162]},{"1550356":[167]},{"1550358":[164]},{"1550360":[255]},{"1550362":[255,127,117]},{"1550366":[255]},{"1550368":[255]},{"1550370":[185]},{"1550372":[181]},{"1550374":[170]},{"1550376":[194]},{"1550378":[174]},{"1550380":[187]},{"1550382":[255]},{"1550384":[162]},{"1550386":[167]},{"1550388":[165]},{"1550390":[255]},{"1550392":[255,127,117]},{"1550396":[255]},{"1550398":[255]},{"1550400":[185]},{"1550402":[181]},{"1550404":[170]},{"1550406":[194]},{"1550408":[174]},{"1550410":[187]},{"1550412":[255]},{"1550414":[162]},{"1550416":[167]},{"1550418":[166]},{"1550420":[255]},{"1550422":[255,127,117]},{"1550426":[255]},{"1550428":[255]},{"1550430":[185]},{"1550432":[181]},{"1550434":[170]},{"1550436":[194]},{"1550438":[174]},{"1550440":[187]},{"1550442":[255]},{"1550444":[162]},{"1550446":[167]},{"1550448":[167]},{"1550450":[255]},{"1550452":[255,127,117]},{"1550456":[255]},{"1550458":[255]},{"1550460":[185]},{"1550462":[181]},{"1550464":[170]},{"1550466":[194]},{"1550468":[174]},{"1550470":[187]},{"1550472":[255]},{"1550474":[162]},{"1550476":[167]},{"1550478":[168]},{"1550480":[255]},{"1550482":[255,127,117]},{"1550486":[255]},{"1550488":[255]},{"1550490":[185]},{"1550492":[181]},{"1550494":[170]},{"1550496":[194]},{"1550498":[174]},{"1550500":[187]},{"1550502":[255]},{"1550504":[162]},{"1550506":[167]},{"1550508":[169]},{"1550510":[255]},{"1550512":[255,127,117]},{"1550516":[255]},{"1550518":[255]},{"1550520":[185]},{"1550522":[181]},{"1550524":[170]},{"1550526":[194]},{"1550528":[174]},{"1550530":[187]},{"1550532":[255]},{"1550534":[162]},{"1550536":[168]},{"1550538":[160]},{"1550540":[255]},{"1550542":[255,127,117]},{"1550546":[255]},{"1550548":[255]},{"1550550":[185]},{"1550552":[181]},{"1550554":[170]},{"1550556":[194]},{"1550558":[174]},{"1550560":[187]},{"1550562":[255]},{"1550564":[162]},{"1550566":[168]},{"1550568":[161]},{"1550570":[255]},{"1550572":[255,127,117]},{"1550576":[255]},{"1550578":[255]},{"1550580":[185]},{"1550582":[181]},{"1550584":[170]},{"1550586":[194]},{"1550588":[174]},{"1550590":[187]},{"1550592":[255]},{"1550594":[162]},{"1550596":[168]},{"1550598":[162]},{"1550600":[255]},{"1550602":[255,127,117]},{"1550606":[255]},{"1550608":[255]},{"1550610":[185]},{"1550612":[181]},{"1550614":[170]},{"1550616":[194]},{"1550618":[174]},{"1550620":[187]},{"1550622":[255]},{"1550624":[162]},{"1550626":[168]},{"1550628":[163]},{"1550630":[255]},{"1550632":[255,127,117]},{"1550636":[255]},{"1550638":[255]},{"1550640":[185]},{"1550642":[181]},{"1550644":[170]},{"1550646":[194]},{"1550648":[174]},{"1550650":[187]},{"1550652":[255]},{"1550654":[162]},{"1550656":[168]},{"1550658":[164]},{"1550660":[255]},{"1550662":[255,127,117]},{"1550666":[255]},{"1550668":[255]},{"1550670":[185]},{"1550672":[181]},{"1550674":[170]},{"1550676":[194]},{"1550678":[174]},{"1550680":[187]},{"1550682":[255]},{"1550684":[162]},{"1550686":[168]},{"1550688":[165]},{"1550690":[255]},{"1550692":[255,127,117]},{"1550696":[255]},{"1550698":[255]},{"1550700":[185]},{"1550702":[181]},{"1550704":[170]},{"1550706":[194]},{"1550708":[174]},{"1550710":[187]},{"1550712":[255]},{"1550714":[162]},{"1550716":[168]},{"1550718":[166]},{"1550720":[255]},{"1550722":[255,127,117]},{"1550726":[255]},{"1550728":[255]},{"1550730":[185]},{"1550732":[181]},{"1550734":[170]},{"1550736":[194]},{"1550738":[174]},{"1550740":[187]},{"1550742":[255]},{"1550744":[162]},{"1550746":[168]},{"1550748":[167]},{"1550750":[255]},{"1550752":[255,127,117]},{"1550756":[255]},{"1550758":[255]},{"1550760":[185]},{"1550762":[181]},{"1550764":[170]},{"1550766":[194]},{"1550768":[174]},{"1550770":[187]},{"1550772":[255]},{"1550774":[162]},{"1550776":[168]},{"1550778":[168]},{"1550780":[255]},{"1550782":[255,127,117]},{"1550786":[255]},{"1550788":[255]},{"1550790":[185]},{"1550792":[181]},{"1550794":[170]},{"1550796":[194]},{"1550798":[174]},{"1550800":[187]},{"1550802":[255]},{"1550804":[162]},{"1550806":[168]},{"1550808":[169]},{"1550810":[255]},{"1550812":[255,127,117]},{"1550816":[255]},{"1550818":[255]},{"1550820":[185]},{"1550822":[181]},{"1550824":[170]},{"1550826":[194]},{"1550828":[174]},{"1550830":[187]},{"1550832":[255]},{"1550834":[162]},{"1550836":[169]},{"1550838":[160]},{"1550840":[255]},{"1550842":[255,127,117]},{"1550846":[255]},{"1550848":[255]},{"1550850":[185]},{"1550852":[181]},{"1550854":[170]},{"1550856":[194]},{"1550858":[174]},{"1550860":[187]},{"1550862":[255]},{"1550864":[162]},{"1550866":[169]},{"1550868":[161]},{"1550870":[255]},{"1550872":[255,127,117]},{"1550876":[255]},{"1550878":[255]},{"1550880":[185]},{"1550882":[181]},{"1550884":[170]},{"1550886":[194]},{"1550888":[174]},{"1550890":[187]},{"1550892":[255]},{"1550894":[162]},{"1550896":[169]},{"1550898":[162]},{"1550900":[255]},{"1550902":[255,127,117]},{"1550906":[255]},{"1550908":[255]},{"1550910":[185]},{"1550912":[181]},{"1550914":[170]},{"1550916":[194]},{"1550918":[174]},{"1550920":[187]},{"1550922":[255]},{"1550924":[162]},{"1550926":[169]},{"1550928":[163]},{"1550930":[255]},{"1550932":[255,127,117]},{"1550936":[255]},{"1550938":[255]},{"1550940":[185]},{"1550942":[181]},{"1550944":[170]},{"1550946":[194]},{"1550948":[174]},{"1550950":[187]},{"1550952":[255]},{"1550954":[162]},{"1550956":[169]},{"1550958":[164]},{"1550960":[255]},{"1550962":[255,127,117]},{"1550966":[255]},{"1550968":[255]},{"1550970":[185]},{"1550972":[181]},{"1550974":[170]},{"1550976":[194]},{"1550978":[174]},{"1550980":[187]},{"1550982":[255]},{"1550984":[162]},{"1550986":[169]},{"1550988":[165]},{"1550990":[255]},{"1550992":[255,127,117]},{"1550996":[255]},{"1550998":[255]},{"1551000":[185]},{"1551002":[181]},{"1551004":[170]},{"1551006":[194]},{"1551008":[174]},{"1551010":[187]},{"1551012":[255]},{"1551014":[162]},{"1551016":[169]},{"1551018":[166]},{"1551020":[255]},{"1551022":[255,127,117]},{"1551026":[255]},{"1551028":[255]},{"1551030":[185]},{"1551032":[181]},{"1551034":[170]},{"1551036":[194]},{"1551038":[174]},{"1551040":[187]},{"1551042":[255]},{"1551044":[162]},{"1551046":[169]},{"1551048":[167]},{"1551050":[255]},{"1551052":[255,127,117]},{"1551056":[255]},{"1551058":[255]},{"1551060":[185]},{"1551062":[181]},{"1551064":[170]},{"1551066":[194]},{"1551068":[174]},{"1551070":[187]},{"1551072":[255]},{"1551074":[162]},{"1551076":[169]},{"1551078":[168]},{"1551080":[255]},{"1551082":[255,127,117]},{"1551086":[255]},{"1551088":[255]},{"1551090":[185]},{"1551092":[181]},{"1551094":[170]},{"1551096":[194]},{"1551098":[174]},{"1551100":[187]},{"1551102":[255]},{"1551104":[162]},{"1551106":[169]},{"1551108":[169]},{"1551110":[255]},{"1551112":[255,127,117]},{"1551116":[255]},{"1551118":[255]},{"1551120":[185]},{"1551122":[181]},{"1551124":[170]},{"1551126":[194]},{"1551128":[174]},{"1551130":[187]},{"1551132":[255]},{"1551134":[163]},{"1551136":[160]},{"1551138":[160]},{"1551140":[255]},{"1551142":[255,127,117]},{"1551146":[255]},{"1551148":[255]},{"1551150":[185]},{"1551152":[181]},{"1551154":[170]},{"1551156":[194]},{"1551158":[174]},{"1551160":[187]},{"1551162":[255]},{"1551164":[163]},{"1551166":[160]},{"1551168":[161]},{"1551170":[255]},{"1551172":[255,127,117]},{"1551176":[255]},{"1551178":[255]},{"1551180":[185]},{"1551182":[181]},{"1551184":[170]},{"1551186":[194]},{"1551188":[174]},{"1551190":[187]},{"1551192":[255]},{"1551194":[163]},{"1551196":[160]},{"1551198":[162]},{"1551200":[255]},{"1551202":[255,127,117]},{"1551206":[255]},{"1551208":[255]},{"1551210":[185]},{"1551212":[181]},{"1551214":[170]},{"1551216":[194]},{"1551218":[174]},{"1551220":[187]},{"1551222":[255]},{"1551224":[163]},{"1551226":[160]},{"1551228":[163]},{"1551230":[255]},{"1551232":[255,127,117]},{"1551236":[255]},{"1551238":[255]},{"1551240":[185]},{"1551242":[181]},{"1551244":[170]},{"1551246":[194]},{"1551248":[174]},{"1551250":[187]},{"1551252":[255]},{"1551254":[163]},{"1551256":[160]},{"1551258":[164]},{"1551260":[255]},{"1551262":[255,127,117]},{"1551266":[255]},{"1551268":[255]},{"1551270":[185]},{"1551272":[181]},{"1551274":[170]},{"1551276":[194]},{"1551278":[174]},{"1551280":[187]},{"1551282":[255]},{"1551284":[163]},{"1551286":[160]},{"1551288":[165]},{"1551290":[255]},{"1551292":[255,127,117]},{"1551296":[255]},{"1551298":[255]},{"1551300":[185]},{"1551302":[181]},{"1551304":[170]},{"1551306":[194]},{"1551308":[174]},{"1551310":[187]},{"1551312":[255]},{"1551314":[163]},{"1551316":[160]},{"1551318":[166]},{"1551320":[255]},{"1551322":[255,127,117]},{"1551326":[255]},{"1551328":[255]},{"1551330":[185]},{"1551332":[181]},{"1551334":[170]},{"1551336":[194]},{"1551338":[174]},{"1551340":[187]},{"1551342":[255]},{"1551344":[163]},{"1551346":[160]},{"1551348":[167]},{"1551350":[255]},{"1551352":[255,127,117]},{"1551356":[255]},{"1551358":[255]},{"1551360":[185]},{"1551362":[181]},{"1551364":[170]},{"1551366":[194]},{"1551368":[174]},{"1551370":[187]},{"1551372":[255]},{"1551374":[163]},{"1551376":[160]},{"1551378":[168]},{"1551380":[255]},{"1551382":[255,127,117]},{"1551386":[255]},{"1551388":[255]},{"1551390":[185]},{"1551392":[181]},{"1551394":[170]},{"1551396":[194]},{"1551398":[174]},{"1551400":[187]},{"1551402":[255]},{"1551404":[163]},{"1551406":[160]},{"1551408":[169]},{"1551410":[255]},{"1551412":[255,127,117]},{"1551416":[255]},{"1551418":[255]},{"1551420":[185]},{"1551422":[181]},{"1551424":[170]},{"1551426":[194]},{"1551428":[174]},{"1551430":[187]},{"1551432":[255]},{"1551434":[163]},{"1551436":[161]},{"1551438":[160]},{"1551440":[255]},{"1551442":[255,127,117]},{"1551446":[255]},{"1551448":[255]},{"1551450":[185]},{"1551452":[181]},{"1551454":[170]},{"1551456":[194]},{"1551458":[174]},{"1551460":[187]},{"1551462":[255]},{"1551464":[163]},{"1551466":[161]},{"1551468":[161]},{"1551470":[255]},{"1551472":[255,127,117]},{"1551476":[255]},{"1551478":[255]},{"1551480":[185]},{"1551482":[181]},{"1551484":[170]},{"1551486":[194]},{"1551488":[174]},{"1551490":[187]},{"1551492":[255]},{"1551494":[163]},{"1551496":[161]},{"1551498":[162]},{"1551500":[255]},{"1551502":[255,127,117]},{"1551506":[255]},{"1551508":[255]},{"1551510":[185]},{"1551512":[181]},{"1551514":[170]},{"1551516":[194]},{"1551518":[174]},{"1551520":[187]},{"1551522":[255]},{"1551524":[163]},{"1551526":[161]},{"1551528":[163]},{"1551530":[255]},{"1551532":[255,127,117]},{"1551536":[255]},{"1551538":[255]},{"1551540":[185]},{"1551542":[181]},{"1551544":[170]},{"1551546":[194]},{"1551548":[174]},{"1551550":[187]},{"1551552":[255]},{"1551554":[163]},{"1551556":[161]},{"1551558":[164]},{"1551560":[255]},{"1551562":[255,127,117]},{"1551566":[255]},{"1551568":[255]},{"1551570":[185]},{"1551572":[181]},{"1551574":[170]},{"1551576":[194]},{"1551578":[174]},{"1551580":[187]},{"1551582":[255]},{"1551584":[163]},{"1551586":[161]},{"1551588":[165]},{"1551590":[255]},{"1551592":[255,127,117]},{"1551596":[255]},{"1551598":[255]},{"1551600":[185]},{"1551602":[181]},{"1551604":[170]},{"1551606":[194]},{"1551608":[174]},{"1551610":[187]},{"1551612":[255]},{"1551614":[163]},{"1551616":[161]},{"1551618":[166]},{"1551620":[255]},{"1551622":[255,127,117]},{"1551626":[255]},{"1551628":[255]},{"1551630":[185]},{"1551632":[181]},{"1551634":[170]},{"1551636":[194]},{"1551638":[174]},{"1551640":[187]},{"1551642":[255]},{"1551644":[163]},{"1551646":[161]},{"1551648":[167]},{"1551650":[255]},{"1551652":[255,127,117]},{"1551656":[255]},{"1551658":[255]},{"1551660":[185]},{"1551662":[181]},{"1551664":[170]},{"1551666":[194]},{"1551668":[174]},{"1551670":[187]},{"1551672":[255]},{"1551674":[163]},{"1551676":[161]},{"1551678":[168]},{"1551680":[255]},{"1551682":[255,127,117]},{"1551686":[255]},{"1551688":[255]},{"1551690":[185]},{"1551692":[181]},{"1551694":[170]},{"1551696":[194]},{"1551698":[174]},{"1551700":[187]},{"1551702":[255]},{"1551704":[163]},{"1551706":[161]},{"1551708":[169]},{"1551710":[255]},{"1551712":[255,127,117]},{"1551716":[255]},{"1551718":[255]},{"1551720":[185]},{"1551722":[181]},{"1551724":[170]},{"1551726":[194]},{"1551728":[174]},{"1551730":[187]},{"1551732":[255]},{"1551734":[163]},{"1551736":[162]},{"1551738":[160]},{"1551740":[255]},{"1551742":[255,127,117]},{"1551746":[255]},{"1551748":[255]},{"1551750":[185]},{"1551752":[181]},{"1551754":[170]},{"1551756":[194]},{"1551758":[174]},{"1551760":[187]},{"1551762":[255]},{"1551764":[163]},{"1551766":[162]},{"1551768":[161]},{"1551770":[255]},{"1551772":[255,127,117]},{"1551776":[255]},{"1551778":[255]},{"1551780":[185]},{"1551782":[181]},{"1551784":[170]},{"1551786":[194]},{"1551788":[174]},{"1551790":[187]},{"1551792":[255]},{"1551794":[163]},{"1551796":[162]},{"1551798":[162]},{"1551800":[255]},{"1551802":[255,127,117]},{"1551806":[255]},{"1551808":[255]},{"1551810":[185]},{"1551812":[181]},{"1551814":[170]},{"1551816":[194]},{"1551818":[174]},{"1551820":[187]},{"1551822":[255]},{"1551824":[163]},{"1551826":[162]},{"1551828":[163]},{"1551830":[255]},{"1551832":[255,127,117]},{"1551836":[255]},{"1551838":[255]},{"1551840":[185]},{"1551842":[181]},{"1551844":[170]},{"1551846":[194]},{"1551848":[174]},{"1551850":[187]},{"1551852":[255]},{"1551854":[163]},{"1551856":[162]},{"1551858":[164]},{"1551860":[255]},{"1551862":[255,127,117]},{"1551866":[255]},{"1551868":[255]},{"1551870":[185]},{"1551872":[181]},{"1551874":[170]},{"1551876":[194]},{"1551878":[174]},{"1551880":[187]},{"1551882":[255]},{"1551884":[163]},{"1551886":[162]},{"1551888":[165]},{"1551890":[255]},{"1551892":[255,127,117]},{"1551896":[255]},{"1551898":[255]},{"1551900":[185]},{"1551902":[181]},{"1551904":[170]},{"1551906":[194]},{"1551908":[174]},{"1551910":[187]},{"1551912":[255]},{"1551914":[163]},{"1551916":[162]},{"1551918":[166]},{"1551920":[255]},{"1551922":[255,127,117]},{"1551926":[255]},{"1551928":[255]},{"1551930":[185]},{"1551932":[181]},{"1551934":[170]},{"1551936":[194]},{"1551938":[174]},{"1551940":[187]},{"1551942":[255]},{"1551944":[163]},{"1551946":[162]},{"1551948":[167]},{"1551950":[255]},{"1551952":[255,127,117]},{"1551956":[255]},{"1551958":[255]},{"1551960":[185]},{"1551962":[181]},{"1551964":[170]},{"1551966":[194]},{"1551968":[174]},{"1551970":[187]},{"1551972":[255]},{"1551974":[163]},{"1551976":[162]},{"1551978":[168]},{"1551980":[255]},{"1551982":[255,127,117]},{"1551986":[255]},{"1551988":[255]},{"1551990":[185]},{"1551992":[181]},{"1551994":[170]},{"1551996":[194]},{"1551998":[174]},{"1552000":[187]},{"1552002":[255]},{"1552004":[163]},{"1552006":[162]},{"1552008":[169]},{"1552010":[255]},{"1552012":[255,127,117]},{"1552016":[255]},{"1552018":[255]},{"1552020":[185]},{"1552022":[181]},{"1552024":[170]},{"1552026":[194]},{"1552028":[174]},{"1552030":[187]},{"1552032":[255]},{"1552034":[163]},{"1552036":[163]},{"1552038":[160]},{"1552040":[255]},{"1552042":[255,127,117]},{"1552046":[255]},{"1552048":[255]},{"1552050":[185]},{"1552052":[181]},{"1552054":[170]},{"1552056":[194]},{"1552058":[174]},{"1552060":[187]},{"1552062":[255]},{"1552064":[163]},{"1552066":[163]},{"1552068":[161]},{"1552070":[255]},{"1552072":[255,127,117]},{"1552076":[255]},{"1552078":[255]},{"1552080":[185]},{"1552082":[181]},{"1552084":[170]},{"1552086":[194]},{"1552088":[174]},{"1552090":[187]},{"1552092":[255]},{"1552094":[163]},{"1552096":[163]},{"1552098":[162]},{"1552100":[255]},{"1552102":[255,127,117]},{"1552106":[255]},{"1552108":[255]},{"1552110":[185]},{"1552112":[181]},{"1552114":[170]},{"1552116":[194]},{"1552118":[174]},{"1552120":[187]},{"1552122":[255]},{"1552124":[163]},{"1552126":[163]},{"1552128":[163]},{"1552130":[255]},{"1552132":[255,127,117]},{"1552136":[255]},{"1552138":[255]},{"1552140":[185]},{"1552142":[181]},{"1552144":[170]},{"1552146":[194]},{"1552148":[174]},{"1552150":[187]},{"1552152":[255]},{"1552154":[163]},{"1552156":[163]},{"1552158":[164]},{"1552160":[255]},{"1552162":[255,127,117]},{"1552166":[255]},{"1552168":[255]},{"1552170":[185]},{"1552172":[181]},{"1552174":[170]},{"1552176":[194]},{"1552178":[174]},{"1552180":[187]},{"1552182":[255]},{"1552184":[163]},{"1552186":[163]},{"1552188":[165]},{"1552190":[255]},{"1552192":[255,127,117]},{"1552196":[255]},{"1552198":[255]},{"1552200":[185]},{"1552202":[181]},{"1552204":[170]},{"1552206":[194]},{"1552208":[174]},{"1552210":[187]},{"1552212":[255]},{"1552214":[163]},{"1552216":[163]},{"1552218":[166]},{"1552220":[255]},{"1552222":[255,127,117]},{"1552226":[255]},{"1552228":[255]},{"1552230":[185]},{"1552232":[181]},{"1552234":[170]},{"1552236":[194]},{"1552238":[174]},{"1552240":[187]},{"1552242":[255]},{"1552244":[163]},{"1552246":[163]},{"1552248":[167]},{"1552250":[255]},{"1552252":[255,127,117]},{"1552256":[255]},{"1552258":[255]},{"1552260":[185]},{"1552262":[181]},{"1552264":[170]},{"1552266":[194]},{"1552268":[174]},{"1552270":[187]},{"1552272":[255]},{"1552274":[163]},{"1552276":[163]},{"1552278":[168]},{"1552280":[255]},{"1552282":[255,127,117]},{"1552286":[255]},{"1552288":[255]},{"1552290":[185]},{"1552292":[181]},{"1552294":[170]},{"1552296":[194]},{"1552298":[174]},{"1552300":[187]},{"1552302":[255]},{"1552304":[163]},{"1552306":[163]},{"1552308":[169]},{"1552310":[255]},{"1552312":[255,127,117]},{"1552316":[255]},{"1552318":[255]},{"1552320":[185]},{"1552322":[181]},{"1552324":[170]},{"1552326":[194]},{"1552328":[174]},{"1552330":[187]},{"1552332":[255]},{"1552334":[163]},{"1552336":[164]},{"1552338":[160]},{"1552340":[255]},{"1552342":[255,127,117]},{"1552346":[255]},{"1552348":[255]},{"1552350":[185]},{"1552352":[181]},{"1552354":[170]},{"1552356":[194]},{"1552358":[174]},{"1552360":[187]},{"1552362":[255]},{"1552364":[163]},{"1552366":[164]},{"1552368":[161]},{"1552370":[255]},{"1552372":[255,127,117]},{"1552376":[255]},{"1552378":[255]},{"1552380":[185]},{"1552382":[181]},{"1552384":[170]},{"1552386":[194]},{"1552388":[174]},{"1552390":[187]},{"1552392":[255]},{"1552394":[163]},{"1552396":[164]},{"1552398":[162]},{"1552400":[255]},{"1552402":[255,127,117]},{"1552406":[255]},{"1552408":[255]},{"1552410":[185]},{"1552412":[181]},{"1552414":[170]},{"1552416":[194]},{"1552418":[174]},{"1552420":[187]},{"1552422":[255]},{"1552424":[163]},{"1552426":[164]},{"1552428":[163]},{"1552430":[255]},{"1552432":[255,127,117]},{"1552436":[255]},{"1552438":[255]},{"1552440":[185]},{"1552442":[181]},{"1552444":[170]},{"1552446":[194]},{"1552448":[174]},{"1552450":[187]},{"1552452":[255]},{"1552454":[163]},{"1552456":[164]},{"1552458":[164]},{"1552460":[255]},{"1552462":[255,127,117]},{"1552466":[255]},{"1552468":[255]},{"1552470":[185]},{"1552472":[181]},{"1552474":[170]},{"1552476":[194]},{"1552478":[174]},{"1552480":[187]},{"1552482":[255]},{"1552484":[163]},{"1552486":[164]},{"1552488":[165]},{"1552490":[255]},{"1552492":[255,127,117]},{"1552496":[255]},{"1552498":[255]},{"1552500":[185]},{"1552502":[181]},{"1552504":[170]},{"1552506":[194]},{"1552508":[174]},{"1552510":[187]},{"1552512":[255]},{"1552514":[163]},{"1552516":[164]},{"1552518":[166]},{"1552520":[255]},{"1552522":[255,127,117]},{"1552526":[255]},{"1552528":[255]},{"1552530":[185]},{"1552532":[181]},{"1552534":[170]},{"1552536":[194]},{"1552538":[174]},{"1552540":[187]},{"1552542":[255]},{"1552544":[163]},{"1552546":[164]},{"1552548":[167]},{"1552550":[255]},{"1552552":[255,127,117]},{"1552556":[255]},{"1552558":[255]},{"1552560":[185]},{"1552562":[181]},{"1552564":[170]},{"1552566":[194]},{"1552568":[174]},{"1552570":[187]},{"1552572":[255]},{"1552574":[163]},{"1552576":[164]},{"1552578":[168]},{"1552580":[255]},{"1552582":[255,127,117]},{"1552586":[255]},{"1552588":[255]},{"1552590":[185]},{"1552592":[181]},{"1552594":[170]},{"1552596":[194]},{"1552598":[174]},{"1552600":[187]},{"1552602":[255]},{"1552604":[163]},{"1552606":[164]},{"1552608":[169]},{"1552610":[255]},{"1552612":[255,127,117]},{"1552616":[255]},{"1552618":[255]},{"1552620":[185]},{"1552622":[181]},{"1552624":[170]},{"1552626":[194]},{"1552628":[174]},{"1552630":[187]},{"1552632":[255]},{"1552634":[163]},{"1552636":[165]},{"1552638":[160]},{"1552640":[255]},{"1552642":[255,127,117]},{"1552646":[255]},{"1552648":[255]},{"1552650":[185]},{"1552652":[181]},{"1552654":[170]},{"1552656":[194]},{"1552658":[174]},{"1552660":[187]},{"1552662":[255]},{"1552664":[163]},{"1552666":[165]},{"1552668":[161]},{"1552670":[255]},{"1552672":[255,127,117]},{"1552676":[255]},{"1552678":[255]},{"1552680":[185]},{"1552682":[181]},{"1552684":[170]},{"1552686":[194]},{"1552688":[174]},{"1552690":[187]},{"1552692":[255]},{"1552694":[163]},{"1552696":[165]},{"1552698":[162]},{"1552700":[255]},{"1552702":[255,127,117]},{"1552706":[255]},{"1552708":[255]},{"1552710":[185]},{"1552712":[181]},{"1552714":[170]},{"1552716":[194]},{"1552718":[174]},{"1552720":[187]},{"1552722":[255]},{"1552724":[163]},{"1552726":[165]},{"1552728":[163]},{"1552730":[255]},{"1552732":[255,127,117]},{"1552736":[255]},{"1552738":[255]},{"1552740":[185]},{"1552742":[181]},{"1552744":[170]},{"1552746":[194]},{"1552748":[174]},{"1552750":[187]},{"1552752":[255]},{"1552754":[163]},{"1552756":[165]},{"1552758":[164]},{"1552760":[255]},{"1552762":[255,127,117]},{"1552766":[255]},{"1552768":[255]},{"1552770":[185]},{"1552772":[181]},{"1552774":[170]},{"1552776":[194]},{"1552778":[174]},{"1552780":[187]},{"1552782":[255]},{"1552784":[163]},{"1552786":[165]},{"1552788":[165]},{"1552790":[255]},{"1552792":[255,127,117]},{"1552796":[255]},{"1552798":[255]},{"1552800":[185]},{"1552802":[181]},{"1552804":[170]},{"1552806":[194]},{"1552808":[174]},{"1552810":[187]},{"1552812":[255]},{"1552814":[163]},{"1552816":[165]},{"1552818":[166]},{"1552820":[255]},{"1552822":[255,127,117]},{"1552826":[255]},{"1552828":[255]},{"1552830":[185]},{"1552832":[181]},{"1552834":[170]},{"1552836":[194]},{"1552838":[174]},{"1552840":[187]},{"1552842":[255]},{"1552844":[163]},{"1552846":[165]},{"1552848":[167]},{"1552850":[255]},{"1552852":[255,127,117]},{"1552856":[255]},{"1552858":[255]},{"1552860":[185]},{"1552862":[181]},{"1552864":[170]},{"1552866":[194]},{"1552868":[174]},{"1552870":[187]},{"1552872":[255]},{"1552874":[163]},{"1552876":[165]},{"1552878":[168]},{"1552880":[255]},{"1552882":[255,127,117]},{"1552886":[255]},{"1552888":[255]},{"1552890":[185]},{"1552892":[181]},{"1552894":[170]},{"1552896":[194]},{"1552898":[174]},{"1552900":[187]},{"1552902":[255]},{"1552904":[163]},{"1552906":[165]},{"1552908":[169]},{"1552910":[255]},{"1552912":[255,127,117]},{"1552916":[255]},{"1552918":[255]},{"1552920":[185]},{"1552922":[181]},{"1552924":[170]},{"1552926":[194]},{"1552928":[174]},{"1552930":[187]},{"1552932":[255]},{"1552934":[163]},{"1552936":[166]},{"1552938":[160]},{"1552940":[255]},{"1552942":[255,127,117]},{"1552946":[255]},{"1552948":[255]},{"1552950":[185]},{"1552952":[181]},{"1552954":[170]},{"1552956":[194]},{"1552958":[174]},{"1552960":[187]},{"1552962":[255]},{"1552964":[163]},{"1552966":[166]},{"1552968":[161]},{"1552970":[255]},{"1552972":[255,127,117]},{"1552976":[255]},{"1552978":[255]},{"1552980":[185]},{"1552982":[181]},{"1552984":[170]},{"1552986":[194]},{"1552988":[174]},{"1552990":[187]},{"1552992":[255]},{"1552994":[163]},{"1552996":[166]},{"1552998":[162]},{"1553000":[255]},{"1553002":[255,127,117]},{"1553006":[255]},{"1553008":[255]},{"1553010":[185]},{"1553012":[181]},{"1553014":[170]},{"1553016":[194]},{"1553018":[174]},{"1553020":[187]},{"1553022":[255]},{"1553024":[163]},{"1553026":[166]},{"1553028":[163]},{"1553030":[255]},{"1553032":[255,127,117]},{"1553036":[255]},{"1553038":[255]},{"1553040":[185]},{"1553042":[181]},{"1553044":[170]},{"1553046":[194]},{"1553048":[174]},{"1553050":[187]},{"1553052":[255]},{"1553054":[163]},{"1553056":[166]},{"1553058":[164]},{"1553060":[255]},{"1553062":[255,127,117]},{"1553066":[255]},{"1553068":[255]},{"1553070":[185]},{"1553072":[181]},{"1553074":[170]},{"1553076":[194]},{"1553078":[174]},{"1553080":[187]},{"1553082":[255]},{"1553084":[163]},{"1553086":[166]},{"1553088":[165]},{"1553090":[255]},{"1553092":[255,127,117]},{"1553096":[255]},{"1553098":[255]},{"1553100":[185]},{"1553102":[181]},{"1553104":[170]},{"1553106":[194]},{"1553108":[174]},{"1553110":[187]},{"1553112":[255]},{"1553114":[163]},{"1553116":[166]},{"1553118":[166]},{"1553120":[255]},{"1553122":[255,127,117]},{"1553126":[255]},{"1553128":[255]},{"1553130":[185]},{"1553132":[181]},{"1553134":[170]},{"1553136":[194]},{"1553138":[174]},{"1553140":[187]},{"1553142":[255]},{"1553144":[163]},{"1553146":[166]},{"1553148":[167]},{"1553150":[255]},{"1553152":[255,127,117]},{"1553156":[255]},{"1553158":[255]},{"1553160":[185]},{"1553162":[181]},{"1553164":[170]},{"1553166":[194]},{"1553168":[174]},{"1553170":[187]},{"1553172":[255]},{"1553174":[163]},{"1553176":[166]},{"1553178":[168]},{"1553180":[255]},{"1553182":[255,127,117]},{"1553186":[255]},{"1553188":[255]},{"1553190":[185]},{"1553192":[181]},{"1553194":[170]},{"1553196":[194]},{"1553198":[174]},{"1553200":[187]},{"1553202":[255]},{"1553204":[163]},{"1553206":[166]},{"1553208":[169]},{"1553210":[255]},{"1553212":[255,127,117]},{"1553216":[255]},{"1553218":[255]},{"1553220":[185]},{"1553222":[181]},{"1553224":[170]},{"1553226":[194]},{"1553228":[174]},{"1553230":[187]},{"1553232":[255]},{"1553234":[163]},{"1553236":[167]},{"1553238":[160]},{"1553240":[255]},{"1553242":[255,127,117]},{"1553246":[255]},{"1553248":[255]},{"1553250":[185]},{"1553252":[181]},{"1553254":[170]},{"1553256":[194]},{"1553258":[174]},{"1553260":[187]},{"1553262":[255]},{"1553264":[163]},{"1553266":[167]},{"1553268":[161]},{"1553270":[255]},{"1553272":[255,127,117]},{"1553276":[255]},{"1553278":[255]},{"1553280":[185]},{"1553282":[181]},{"1553284":[170]},{"1553286":[194]},{"1553288":[174]},{"1553290":[187]},{"1553292":[255]},{"1553294":[163]},{"1553296":[167]},{"1553298":[162]},{"1553300":[255]},{"1553302":[255,127,117]},{"1553306":[255]},{"1553308":[255]},{"1553310":[185]},{"1553312":[181]},{"1553314":[170]},{"1553316":[194]},{"1553318":[174]},{"1553320":[187]},{"1553322":[255]},{"1553324":[163]},{"1553326":[167]},{"1553328":[163]},{"1553330":[255]},{"1553332":[255,127,117]},{"1553336":[255]},{"1553338":[255]},{"1553340":[185]},{"1553342":[181]},{"1553344":[170]},{"1553346":[194]},{"1553348":[174]},{"1553350":[187]},{"1553352":[255]},{"1553354":[163]},{"1553356":[167]},{"1553358":[164]},{"1553360":[255]},{"1553362":[255,127,117]},{"1553366":[255]},{"1553368":[255]},{"1553370":[185]},{"1553372":[181]},{"1553374":[170]},{"1553376":[194]},{"1553378":[174]},{"1553380":[187]},{"1553382":[255]},{"1553384":[163]},{"1553386":[167]},{"1553388":[165]},{"1553390":[255]},{"1553392":[255,127,117]},{"1553396":[255]},{"1553398":[255]},{"1553400":[185]},{"1553402":[181]},{"1553404":[170]},{"1553406":[194]},{"1553408":[174]},{"1553410":[187]},{"1553412":[255]},{"1553414":[163]},{"1553416":[167]},{"1553418":[166]},{"1553420":[255]},{"1553422":[255,127,117]},{"1553426":[255]},{"1553428":[255]},{"1553430":[185]},{"1553432":[181]},{"1553434":[170]},{"1553436":[194]},{"1553438":[174]},{"1553440":[187]},{"1553442":[255]},{"1553444":[163]},{"1553446":[167]},{"1553448":[167]},{"1553450":[255]},{"1553452":[255,127,117]},{"1553456":[255]},{"1553458":[255]},{"1553460":[185]},{"1553462":[181]},{"1553464":[170]},{"1553466":[194]},{"1553468":[174]},{"1553470":[187]},{"1553472":[255]},{"1553474":[163]},{"1553476":[167]},{"1553478":[168]},{"1553480":[255]},{"1553482":[255,127,117]},{"1553486":[255]},{"1553488":[255]},{"1553490":[185]},{"1553492":[181]},{"1553494":[170]},{"1553496":[194]},{"1553498":[174]},{"1553500":[187]},{"1553502":[255]},{"1553504":[163]},{"1553506":[167]},{"1553508":[169]},{"1553510":[255]},{"1553512":[255,127,117]},{"1553516":[255]},{"1553518":[255]},{"1553520":[185]},{"1553522":[181]},{"1553524":[170]},{"1553526":[194]},{"1553528":[174]},{"1553530":[187]},{"1553532":[255]},{"1553534":[163]},{"1553536":[168]},{"1553538":[160]},{"1553540":[255]},{"1553542":[255,127,117]},{"1553546":[255]},{"1553548":[255]},{"1553550":[185]},{"1553552":[181]},{"1553554":[170]},{"1553556":[194]},{"1553558":[174]},{"1553560":[187]},{"1553562":[255]},{"1553564":[163]},{"1553566":[168]},{"1553568":[161]},{"1553570":[255]},{"1553572":[255,127,117]},{"1553576":[255]},{"1553578":[255]},{"1553580":[185]},{"1553582":[181]},{"1553584":[170]},{"1553586":[194]},{"1553588":[174]},{"1553590":[187]},{"1553592":[255]},{"1553594":[163]},{"1553596":[168]},{"1553598":[162]},{"1553600":[255]},{"1553602":[255,127,117]},{"1553606":[255]},{"1553608":[255]},{"1553610":[185]},{"1553612":[181]},{"1553614":[170]},{"1553616":[194]},{"1553618":[174]},{"1553620":[187]},{"1553622":[255]},{"1553624":[163]},{"1553626":[168]},{"1553628":[163]},{"1553630":[255]},{"1553632":[255,127,117]},{"1553636":[255]},{"1553638":[255]},{"1553640":[185]},{"1553642":[181]},{"1553644":[170]},{"1553646":[194]},{"1553648":[174]},{"1553650":[187]},{"1553652":[255]},{"1553654":[163]},{"1553656":[168]},{"1553658":[164]},{"1553660":[255]},{"1553662":[255,127,117]},{"1553666":[255]},{"1553668":[255]},{"1553670":[185]},{"1553672":[181]},{"1553674":[170]},{"1553676":[194]},{"1553678":[174]},{"1553680":[187]},{"1553682":[255]},{"1553684":[163]},{"1553686":[168]},{"1553688":[165]},{"1553690":[255]},{"1553692":[255,127,117]},{"1553696":[255]},{"1553698":[255]},{"1553700":[185]},{"1553702":[181]},{"1553704":[170]},{"1553706":[194]},{"1553708":[174]},{"1553710":[187]},{"1553712":[255]},{"1553714":[163]},{"1553716":[168]},{"1553718":[166]},{"1553720":[255]},{"1553722":[255,127,117]},{"1553726":[255]},{"1553728":[255]},{"1553730":[185]},{"1553732":[181]},{"1553734":[170]},{"1553736":[194]},{"1553738":[174]},{"1553740":[187]},{"1553742":[255]},{"1553744":[163]},{"1553746":[168]},{"1553748":[167]},{"1553750":[255]},{"1553752":[255,127,117]},{"1553756":[255]},{"1553758":[255]},{"1553760":[185]},{"1553762":[181]},{"1553764":[170]},{"1553766":[194]},{"1553768":[174]},{"1553770":[187]},{"1553772":[255]},{"1553774":[163]},{"1553776":[168]},{"1553778":[168]},{"1553780":[255]},{"1553782":[255,127,117]},{"1553786":[255]},{"1553788":[255]},{"1553790":[185]},{"1553792":[181]},{"1553794":[170]},{"1553796":[194]},{"1553798":[174]},{"1553800":[187]},{"1553802":[255]},{"1553804":[163]},{"1553806":[168]},{"1553808":[169]},{"1553810":[255]},{"1553812":[255,127,117]},{"1553816":[255]},{"1553818":[255]},{"1553820":[185]},{"1553822":[181]},{"1553824":[170]},{"1553826":[194]},{"1553828":[174]},{"1553830":[187]},{"1553832":[255]},{"1553834":[163]},{"1553836":[169]},{"1553838":[160]},{"1553840":[255]},{"1553842":[255,127,117]},{"1553846":[255]},{"1553848":[255]},{"1553850":[185]},{"1553852":[181]},{"1553854":[170]},{"1553856":[194]},{"1553858":[174]},{"1553860":[187]},{"1553862":[255]},{"1553864":[163]},{"1553866":[169]},{"1553868":[161]},{"1553870":[255]},{"1553872":[255,127,117]},{"1553876":[255]},{"1553878":[255]},{"1553880":[185]},{"1553882":[181]},{"1553884":[170]},{"1553886":[194]},{"1553888":[174]},{"1553890":[187]},{"1553892":[255]},{"1553894":[163]},{"1553896":[169]},{"1553898":[162]},{"1553900":[255]},{"1553902":[255,127,117]},{"1553906":[255]},{"1553908":[255]},{"1553910":[185]},{"1553912":[181]},{"1553914":[170]},{"1553916":[194]},{"1553918":[174]},{"1553920":[187]},{"1553922":[255]},{"1553924":[163]},{"1553926":[169]},{"1553928":[163]},{"1553930":[255]},{"1553932":[255,127,117]},{"1553936":[255]},{"1553938":[255]},{"1553940":[185]},{"1553942":[181]},{"1553944":[170]},{"1553946":[194]},{"1553948":[174]},{"1553950":[187]},{"1553952":[255]},{"1553954":[163]},{"1553956":[169]},{"1553958":[164]},{"1553960":[255]},{"1553962":[255,127,117]},{"1553966":[255]},{"1553968":[255]},{"1553970":[185]},{"1553972":[181]},{"1553974":[170]},{"1553976":[194]},{"1553978":[174]},{"1553980":[187]},{"1553982":[255]},{"1553984":[163]},{"1553986":[169]},{"1553988":[165]},{"1553990":[255]},{"1553992":[255,127,117]},{"1553996":[255]},{"1553998":[255]},{"1554000":[185]},{"1554002":[181]},{"1554004":[170]},{"1554006":[194]},{"1554008":[174]},{"1554010":[187]},{"1554012":[255]},{"1554014":[163]},{"1554016":[169]},{"1554018":[166]},{"1554020":[255]},{"1554022":[255,127,117]},{"1554026":[255]},{"1554028":[255]},{"1554030":[185]},{"1554032":[181]},{"1554034":[170]},{"1554036":[194]},{"1554038":[174]},{"1554040":[187]},{"1554042":[255]},{"1554044":[163]},{"1554046":[169]},{"1554048":[167]},{"1554050":[255]},{"1554052":[255,127,117]},{"1554056":[255]},{"1554058":[255]},{"1554060":[185]},{"1554062":[181]},{"1554064":[170]},{"1554066":[194]},{"1554068":[174]},{"1554070":[187]},{"1554072":[255]},{"1554074":[163]},{"1554076":[169]},{"1554078":[168]},{"1554080":[255]},{"1554082":[255,127,117]},{"1554086":[255]},{"1554088":[255]},{"1554090":[185]},{"1554092":[181]},{"1554094":[170]},{"1554096":[194]},{"1554098":[174]},{"1554100":[187]},{"1554102":[255]},{"1554104":[163]},{"1554106":[169]},{"1554108":[169]},{"1554110":[255]},{"1554112":[255,127,117]},{"1554116":[255]},{"1554118":[255]},{"1554120":[185]},{"1554122":[181]},{"1554124":[170]},{"1554126":[194]},{"1554128":[174]},{"1554130":[187]},{"1554132":[255]},{"1554134":[164]},{"1554136":[160]},{"1554138":[160]},{"1554140":[255]},{"1554142":[255,127,117]},{"1554146":[255]},{"1554148":[255]},{"1554150":[185]},{"1554152":[181]},{"1554154":[170]},{"1554156":[194]},{"1554158":[174]},{"1554160":[187]},{"1554162":[255]},{"1554164":[164]},{"1554166":[160]},{"1554168":[161]},{"1554170":[255]},{"1554172":[255,127,117]},{"1554176":[255]},{"1554178":[255]},{"1554180":[185]},{"1554182":[181]},{"1554184":[170]},{"1554186":[194]},{"1554188":[174]},{"1554190":[187]},{"1554192":[255]},{"1554194":[164]},{"1554196":[160]},{"1554198":[162]},{"1554200":[255]},{"1554202":[255,127,117]},{"1554206":[255]},{"1554208":[255]},{"1554210":[185]},{"1554212":[181]},{"1554214":[170]},{"1554216":[194]},{"1554218":[174]},{"1554220":[187]},{"1554222":[255]},{"1554224":[164]},{"1554226":[160]},{"1554228":[163]},{"1554230":[255]},{"1554232":[255,127,117]},{"1554236":[255]},{"1554238":[255]},{"1554240":[185]},{"1554242":[181]},{"1554244":[170]},{"1554246":[194]},{"1554248":[174]},{"1554250":[187]},{"1554252":[255]},{"1554254":[164]},{"1554256":[160]},{"1554258":[164]},{"1554260":[255]},{"1554262":[255,127,117]},{"1554266":[255]},{"1554268":[255]},{"1554270":[185]},{"1554272":[181]},{"1554274":[170]},{"1554276":[194]},{"1554278":[174]},{"1554280":[187]},{"1554282":[255]},{"1554284":[164]},{"1554286":[160]},{"1554288":[165]},{"1554290":[255]},{"1554292":[255,127,117]},{"1554296":[255]},{"1554298":[255]},{"1554300":[185]},{"1554302":[181]},{"1554304":[170]},{"1554306":[194]},{"1554308":[174]},{"1554310":[187]},{"1554312":[255]},{"1554314":[164]},{"1554316":[160]},{"1554318":[166]},{"1554320":[255]},{"1554322":[255,127,117]},{"1554326":[255]},{"1554328":[255]},{"1554330":[185]},{"1554332":[181]},{"1554334":[170]},{"1554336":[194]},{"1554338":[174]},{"1554340":[187]},{"1554342":[255]},{"1554344":[164]},{"1554346":[160]},{"1554348":[167]},{"1554350":[255]},{"1554352":[255,127,117]},{"1554356":[255]},{"1554358":[255]},{"1554360":[185]},{"1554362":[181]},{"1554364":[170]},{"1554366":[194]},{"1554368":[174]},{"1554370":[187]},{"1554372":[255]},{"1554374":[164]},{"1554376":[160]},{"1554378":[168]},{"1554380":[255]},{"1554382":[255,127,117]},{"1554386":[255]},{"1554388":[255]},{"1554390":[185]},{"1554392":[181]},{"1554394":[170]},{"1554396":[194]},{"1554398":[174]},{"1554400":[187]},{"1554402":[255]},{"1554404":[164]},{"1554406":[160]},{"1554408":[169]},{"1554410":[255]},{"1554412":[255,127,117]},{"1554416":[255]},{"1554418":[255]},{"1554420":[185]},{"1554422":[181]},{"1554424":[170]},{"1554426":[194]},{"1554428":[174]},{"1554430":[187]},{"1554432":[255]},{"1554434":[164]},{"1554436":[161]},{"1554438":[160]},{"1554440":[255]},{"1554442":[255,127,117]},{"1554446":[255]},{"1554448":[255]},{"1554450":[185]},{"1554452":[181]},{"1554454":[170]},{"1554456":[194]},{"1554458":[174]},{"1554460":[187]},{"1554462":[255]},{"1554464":[164]},{"1554466":[161]},{"1554468":[161]},{"1554470":[255]},{"1554472":[255,127,117]},{"1554476":[255]},{"1554478":[255]},{"1554480":[185]},{"1554482":[181]},{"1554484":[170]},{"1554486":[194]},{"1554488":[174]},{"1554490":[187]},{"1554492":[255]},{"1554494":[164]},{"1554496":[161]},{"1554498":[162]},{"1554500":[255]},{"1554502":[255,127,117]},{"1554506":[255]},{"1554508":[255]},{"1554510":[185]},{"1554512":[181]},{"1554514":[170]},{"1554516":[194]},{"1554518":[174]},{"1554520":[187]},{"1554522":[255]},{"1554524":[164]},{"1554526":[161]},{"1554528":[163]},{"1554530":[255]},{"1554532":[255,127,117]},{"1554536":[255]},{"1554538":[255]},{"1554540":[185]},{"1554542":[181]},{"1554544":[170]},{"1554546":[194]},{"1554548":[174]},{"1554550":[187]},{"1554552":[255]},{"1554554":[164]},{"1554556":[161]},{"1554558":[164]},{"1554560":[255]},{"1554562":[255,127,117]},{"1554566":[255]},{"1554568":[255]},{"1554570":[185]},{"1554572":[181]},{"1554574":[170]},{"1554576":[194]},{"1554578":[174]},{"1554580":[187]},{"1554582":[255]},{"1554584":[164]},{"1554586":[161]},{"1554588":[165]},{"1554590":[255]},{"1554592":[255,127,117]},{"1554596":[255]},{"1554598":[255]},{"1554600":[185]},{"1554602":[181]},{"1554604":[170]},{"1554606":[194]},{"1554608":[174]},{"1554610":[187]},{"1554612":[255]},{"1554614":[164]},{"1554616":[161]},{"1554618":[166]},{"1554620":[255]},{"1554622":[255,127,117]},{"1554626":[255]},{"1554628":[255]},{"1554630":[185]},{"1554632":[181]},{"1554634":[170]},{"1554636":[194]},{"1554638":[174]},{"1554640":[187]},{"1554642":[255]},{"1554644":[164]},{"1554646":[161]},{"1554648":[167]},{"1554650":[255]},{"1554652":[255,127,117]},{"1554656":[255]},{"1554658":[255]},{"1554660":[185]},{"1554662":[181]},{"1554664":[170]},{"1554666":[194]},{"1554668":[174]},{"1554670":[187]},{"1554672":[255]},{"1554674":[164]},{"1554676":[161]},{"1554678":[168]},{"1554680":[255]},{"1554682":[255,127,117]},{"1554686":[255]},{"1554688":[255]},{"1554690":[185]},{"1554692":[181]},{"1554694":[170]},{"1554696":[194]},{"1554698":[174]},{"1554700":[187]},{"1554702":[255]},{"1554704":[164]},{"1554706":[161]},{"1554708":[169]},{"1554710":[255]},{"1554712":[255,127,117]},{"1554716":[255]},{"1554718":[255]},{"1554720":[185]},{"1554722":[181]},{"1554724":[170]},{"1554726":[194]},{"1554728":[174]},{"1554730":[187]},{"1554732":[255]},{"1554734":[164]},{"1554736":[162]},{"1554738":[160]},{"1554740":[255]},{"1554742":[255,127,117]},{"1554746":[255]},{"1554748":[255]},{"1554750":[185]},{"1554752":[181]},{"1554754":[170]},{"1554756":[194]},{"1554758":[174]},{"1554760":[187]},{"1554762":[255]},{"1554764":[164]},{"1554766":[162]},{"1554768":[161]},{"1554770":[255]},{"1554772":[255,127,117]},{"1554776":[255]},{"1554778":[255]},{"1554780":[185]},{"1554782":[181]},{"1554784":[170]},{"1554786":[194]},{"1554788":[174]},{"1554790":[187]},{"1554792":[255]},{"1554794":[164]},{"1554796":[162]},{"1554798":[162]},{"1554800":[255]},{"1554802":[255,127,117]},{"1554806":[255]},{"1554808":[255]},{"1554810":[185]},{"1554812":[181]},{"1554814":[170]},{"1554816":[194]},{"1554818":[174]},{"1554820":[187]},{"1554822":[255]},{"1554824":[164]},{"1554826":[162]},{"1554828":[163]},{"1554830":[255]},{"1554832":[255,127,117]},{"1554836":[255]},{"1554838":[255]},{"1554840":[185]},{"1554842":[181]},{"1554844":[170]},{"1554846":[194]},{"1554848":[174]},{"1554850":[187]},{"1554852":[255]},{"1554854":[164]},{"1554856":[162]},{"1554858":[164]},{"1554860":[255]},{"1554862":[255,127,117]},{"1554866":[255]},{"1554868":[255]},{"1554870":[185]},{"1554872":[181]},{"1554874":[170]},{"1554876":[194]},{"1554878":[174]},{"1554880":[187]},{"1554882":[255]},{"1554884":[164]},{"1554886":[162]},{"1554888":[165]},{"1554890":[255]},{"1554892":[255,127,117]},{"1554896":[255]},{"1554898":[255]},{"1554900":[185]},{"1554902":[181]},{"1554904":[170]},{"1554906":[194]},{"1554908":[174]},{"1554910":[187]},{"1554912":[255]},{"1554914":[164]},{"1554916":[162]},{"1554918":[166]},{"1554920":[255]},{"1554922":[255,127,117]},{"1554926":[255]},{"1554928":[255]},{"1554930":[185]},{"1554932":[181]},{"1554934":[170]},{"1554936":[194]},{"1554938":[174]},{"1554940":[187]},{"1554942":[255]},{"1554944":[164]},{"1554946":[162]},{"1554948":[167]},{"1554950":[255]},{"1554952":[255,127,117]},{"1554956":[255]},{"1554958":[255]},{"1554960":[185]},{"1554962":[181]},{"1554964":[170]},{"1554966":[194]},{"1554968":[174]},{"1554970":[187]},{"1554972":[255]},{"1554974":[164]},{"1554976":[162]},{"1554978":[168]},{"1554980":[255]},{"1554982":[255,127,117]},{"1554986":[255]},{"1554988":[255]},{"1554990":[185]},{"1554992":[181]},{"1554994":[170]},{"1554996":[194]},{"1554998":[174]},{"1555000":[187]},{"1555002":[255]},{"1555004":[164]},{"1555006":[162]},{"1555008":[169]},{"1555010":[255]},{"1555012":[255,127,117]},{"1555016":[255]},{"1555018":[255]},{"1555020":[185]},{"1555022":[181]},{"1555024":[170]},{"1555026":[194]},{"1555028":[174]},{"1555030":[187]},{"1555032":[255]},{"1555034":[164]},{"1555036":[163]},{"1555038":[160]},{"1555040":[255]},{"1555042":[255,127,117]},{"1555046":[255]},{"1555048":[255]},{"1555050":[185]},{"1555052":[181]},{"1555054":[170]},{"1555056":[194]},{"1555058":[174]},{"1555060":[187]},{"1555062":[255]},{"1555064":[164]},{"1555066":[163]},{"1555068":[161]},{"1555070":[255]},{"1555072":[255,127,117]},{"1555076":[255]},{"1555078":[255]},{"1555080":[185]},{"1555082":[181]},{"1555084":[170]},{"1555086":[194]},{"1555088":[174]},{"1555090":[187]},{"1555092":[255]},{"1555094":[164]},{"1555096":[163]},{"1555098":[162]},{"1555100":[255]},{"1555102":[255,127,117]},{"1555106":[255]},{"1555108":[255]},{"1555110":[185]},{"1555112":[181]},{"1555114":[170]},{"1555116":[194]},{"1555118":[174]},{"1555120":[187]},{"1555122":[255]},{"1555124":[164]},{"1555126":[163]},{"1555128":[163]},{"1555130":[255]},{"1555132":[255,127,117]},{"1555136":[255]},{"1555138":[255]},{"1555140":[185]},{"1555142":[181]},{"1555144":[170]},{"1555146":[194]},{"1555148":[174]},{"1555150":[187]},{"1555152":[255]},{"1555154":[164]},{"1555156":[163]},{"1555158":[164]},{"1555160":[255]},{"1555162":[255,127,117]},{"1555166":[255]},{"1555168":[255]},{"1555170":[185]},{"1555172":[181]},{"1555174":[170]},{"1555176":[194]},{"1555178":[174]},{"1555180":[187]},{"1555182":[255]},{"1555184":[164]},{"1555186":[163]},{"1555188":[165]},{"1555190":[255]},{"1555192":[255,127,117]},{"1555196":[255]},{"1555198":[255]},{"1555200":[185]},{"1555202":[181]},{"1555204":[170]},{"1555206":[194]},{"1555208":[174]},{"1555210":[187]},{"1555212":[255]},{"1555214":[164]},{"1555216":[163]},{"1555218":[166]},{"1555220":[255]},{"1555222":[255,127,117]},{"1555226":[255]},{"1555228":[255]},{"1555230":[185]},{"1555232":[181]},{"1555234":[170]},{"1555236":[194]},{"1555238":[174]},{"1555240":[187]},{"1555242":[255]},{"1555244":[164]},{"1555246":[163]},{"1555248":[167]},{"1555250":[255]},{"1555252":[255,127,117]},{"1555256":[255]},{"1555258":[255]},{"1555260":[185]},{"1555262":[181]},{"1555264":[170]},{"1555266":[194]},{"1555268":[174]},{"1555270":[187]},{"1555272":[255]},{"1555274":[164]},{"1555276":[163]},{"1555278":[168]},{"1555280":[255]},{"1555282":[255,127,117]},{"1555286":[255]},{"1555288":[255]},{"1555290":[185]},{"1555292":[181]},{"1555294":[170]},{"1555296":[194]},{"1555298":[174]},{"1555300":[187]},{"1555302":[255]},{"1555304":[164]},{"1555306":[163]},{"1555308":[169]},{"1555310":[255]},{"1555312":[255,127,117]},{"1555316":[255]},{"1555318":[255]},{"1555320":[185]},{"1555322":[181]},{"1555324":[170]},{"1555326":[194]},{"1555328":[174]},{"1555330":[187]},{"1555332":[255]},{"1555334":[164]},{"1555336":[164]},{"1555338":[160]},{"1555340":[255]},{"1555342":[255,127,117]},{"1555346":[255]},{"1555348":[255]},{"1555350":[185]},{"1555352":[181]},{"1555354":[170]},{"1555356":[194]},{"1555358":[174]},{"1555360":[187]},{"1555362":[255]},{"1555364":[164]},{"1555366":[164]},{"1555368":[161]},{"1555370":[255]},{"1555372":[255,127,117]},{"1555376":[255]},{"1555378":[255]},{"1555380":[185]},{"1555382":[181]},{"1555384":[170]},{"1555386":[194]},{"1555388":[174]},{"1555390":[187]},{"1555392":[255]},{"1555394":[164]},{"1555396":[164]},{"1555398":[162]},{"1555400":[255]},{"1555402":[255,127,117]},{"1555406":[255]},{"1555408":[255]},{"1555410":[185]},{"1555412":[181]},{"1555414":[170]},{"1555416":[194]},{"1555418":[174]},{"1555420":[187]},{"1555422":[255]},{"1555424":[164]},{"1555426":[164]},{"1555428":[163]},{"1555430":[255]},{"1555432":[255,127,117]},{"1555436":[255]},{"1555438":[255]},{"1555440":[185]},{"1555442":[181]},{"1555444":[170]},{"1555446":[194]},{"1555448":[174]},{"1555450":[187]},{"1555452":[255]},{"1555454":[164]},{"1555456":[164]},{"1555458":[164]},{"1555460":[255]},{"1555462":[255,127,117]},{"1555466":[255]},{"1555468":[255]},{"1555470":[185]},{"1555472":[181]},{"1555474":[170]},{"1555476":[194]},{"1555478":[174]},{"1555480":[187]},{"1555482":[255]},{"1555484":[164]},{"1555486":[164]},{"1555488":[165]},{"1555490":[255]},{"1555492":[255,127,117]},{"1555496":[255]},{"1555498":[255]},{"1555500":[185]},{"1555502":[181]},{"1555504":[170]},{"1555506":[194]},{"1555508":[174]},{"1555510":[187]},{"1555512":[255]},{"1555514":[164]},{"1555516":[164]},{"1555518":[166]},{"1555520":[255]},{"1555522":[255,127,117]},{"1555526":[255]},{"1555528":[255]},{"1555530":[185]},{"1555532":[181]},{"1555534":[170]},{"1555536":[194]},{"1555538":[174]},{"1555540":[187]},{"1555542":[255]},{"1555544":[164]},{"1555546":[164]},{"1555548":[167]},{"1555550":[255]},{"1555552":[255,127,117]},{"1555556":[255]},{"1555558":[255]},{"1555560":[185]},{"1555562":[181]},{"1555564":[170]},{"1555566":[194]},{"1555568":[174]},{"1555570":[187]},{"1555572":[255]},{"1555574":[164]},{"1555576":[164]},{"1555578":[168]},{"1555580":[255]},{"1555582":[255,127,117]},{"1555586":[255]},{"1555588":[255]},{"1555590":[185]},{"1555592":[181]},{"1555594":[170]},{"1555596":[194]},{"1555598":[174]},{"1555600":[187]},{"1555602":[255]},{"1555604":[164]},{"1555606":[164]},{"1555608":[169]},{"1555610":[255]},{"1555612":[255,127,117]},{"1555616":[255]},{"1555618":[255]},{"1555620":[185]},{"1555622":[181]},{"1555624":[170]},{"1555626":[194]},{"1555628":[174]},{"1555630":[187]},{"1555632":[255]},{"1555634":[164]},{"1555636":[165]},{"1555638":[160]},{"1555640":[255]},{"1555642":[255,127,117]},{"1555646":[255]},{"1555648":[255]},{"1555650":[185]},{"1555652":[181]},{"1555654":[170]},{"1555656":[194]},{"1555658":[174]},{"1555660":[187]},{"1555662":[255]},{"1555664":[164]},{"1555666":[165]},{"1555668":[161]},{"1555670":[255]},{"1555672":[255,127,117]},{"1555676":[255]},{"1555678":[255]},{"1555680":[185]},{"1555682":[181]},{"1555684":[170]},{"1555686":[194]},{"1555688":[174]},{"1555690":[187]},{"1555692":[255]},{"1555694":[164]},{"1555696":[165]},{"1555698":[162]},{"1555700":[255]},{"1555702":[255,127,117]},{"1555706":[255]},{"1555708":[255]},{"1555710":[185]},{"1555712":[181]},{"1555714":[170]},{"1555716":[194]},{"1555718":[174]},{"1555720":[187]},{"1555722":[255]},{"1555724":[164]},{"1555726":[165]},{"1555728":[163]},{"1555730":[255]},{"1555732":[255,127,117]},{"1555736":[255]},{"1555738":[255]},{"1555740":[185]},{"1555742":[181]},{"1555744":[170]},{"1555746":[194]},{"1555748":[174]},{"1555750":[187]},{"1555752":[255]},{"1555754":[164]},{"1555756":[165]},{"1555758":[164]},{"1555760":[255]},{"1555762":[255,127,117]},{"1555766":[255]},{"1555768":[255]},{"1555770":[185]},{"1555772":[181]},{"1555774":[170]},{"1555776":[194]},{"1555778":[174]},{"1555780":[187]},{"1555782":[255]},{"1555784":[164]},{"1555786":[165]},{"1555788":[165]},{"1555790":[255]},{"1555792":[255,127,117]},{"1555796":[255]},{"1555798":[255]},{"1555800":[185]},{"1555802":[181]},{"1555804":[170]},{"1555806":[194]},{"1555808":[174]},{"1555810":[187]},{"1555812":[255]},{"1555814":[164]},{"1555816":[165]},{"1555818":[166]},{"1555820":[255]},{"1555822":[255,127,117]},{"1555826":[255]},{"1555828":[255]},{"1555830":[185]},{"1555832":[181]},{"1555834":[170]},{"1555836":[194]},{"1555838":[174]},{"1555840":[187]},{"1555842":[255]},{"1555844":[164]},{"1555846":[165]},{"1555848":[167]},{"1555850":[255]},{"1555852":[255,127,117]},{"1555856":[255]},{"1555858":[255]},{"1555860":[185]},{"1555862":[181]},{"1555864":[170]},{"1555866":[194]},{"1555868":[174]},{"1555870":[187]},{"1555872":[255]},{"1555874":[164]},{"1555876":[165]},{"1555878":[168]},{"1555880":[255]},{"1555882":[255,127,117]},{"1555886":[255]},{"1555888":[255]},{"1555890":[185]},{"1555892":[181]},{"1555894":[170]},{"1555896":[194]},{"1555898":[174]},{"1555900":[187]},{"1555902":[255]},{"1555904":[164]},{"1555906":[165]},{"1555908":[169]},{"1555910":[255]},{"1555912":[255,127,117]},{"1555916":[255]},{"1555918":[255]},{"1555920":[185]},{"1555922":[181]},{"1555924":[170]},{"1555926":[194]},{"1555928":[174]},{"1555930":[187]},{"1555932":[255]},{"1555934":[164]},{"1555936":[166]},{"1555938":[160]},{"1555940":[255]},{"1555942":[255,127,117]},{"1555946":[255]},{"1555948":[255]},{"1555950":[185]},{"1555952":[181]},{"1555954":[170]},{"1555956":[194]},{"1555958":[174]},{"1555960":[187]},{"1555962":[255]},{"1555964":[164]},{"1555966":[166]},{"1555968":[161]},{"1555970":[255]},{"1555972":[255,127,117]},{"1555976":[255]},{"1555978":[255]},{"1555980":[185]},{"1555982":[181]},{"1555984":[170]},{"1555986":[194]},{"1555988":[174]},{"1555990":[187]},{"1555992":[255]},{"1555994":[164]},{"1555996":[166]},{"1555998":[162]},{"1556000":[255]},{"1556002":[255,127,117]},{"1556006":[255]},{"1556008":[255]},{"1556010":[185]},{"1556012":[181]},{"1556014":[170]},{"1556016":[194]},{"1556018":[174]},{"1556020":[187]},{"1556022":[255]},{"1556024":[164]},{"1556026":[166]},{"1556028":[163]},{"1556030":[255]},{"1556032":[255,127,117]},{"1556036":[255]},{"1556038":[255]},{"1556040":[185]},{"1556042":[181]},{"1556044":[170]},{"1556046":[194]},{"1556048":[174]},{"1556050":[187]},{"1556052":[255]},{"1556054":[164]},{"1556056":[166]},{"1556058":[164]},{"1556060":[255]},{"1556062":[255,127,117]},{"1556066":[255]},{"1556068":[255]},{"1556070":[185]},{"1556072":[181]},{"1556074":[170]},{"1556076":[194]},{"1556078":[174]},{"1556080":[187]},{"1556082":[255]},{"1556084":[164]},{"1556086":[166]},{"1556088":[165]},{"1556090":[255]},{"1556092":[255,127,117]},{"1556096":[255]},{"1556098":[255]},{"1556100":[185]},{"1556102":[181]},{"1556104":[170]},{"1556106":[194]},{"1556108":[174]},{"1556110":[187]},{"1556112":[255]},{"1556114":[164]},{"1556116":[166]},{"1556118":[166]},{"1556120":[255]},{"1556122":[255,127,117]},{"1556126":[255]},{"1556128":[255]},{"1556130":[185]},{"1556132":[181]},{"1556134":[170]},{"1556136":[194]},{"1556138":[174]},{"1556140":[187]},{"1556142":[255]},{"1556144":[164]},{"1556146":[166]},{"1556148":[167]},{"1556150":[255]},{"1556152":[255,127,117]},{"1556156":[255]},{"1556158":[255]},{"1556160":[185]},{"1556162":[181]},{"1556164":[170]},{"1556166":[194]},{"1556168":[174]},{"1556170":[187]},{"1556172":[255]},{"1556174":[164]},{"1556176":[166]},{"1556178":[168]},{"1556180":[255]},{"1556182":[255,127,117]},{"1556186":[255]},{"1556188":[255]},{"1556190":[185]},{"1556192":[181]},{"1556194":[170]},{"1556196":[194]},{"1556198":[174]},{"1556200":[187]},{"1556202":[255]},{"1556204":[164]},{"1556206":[166]},{"1556208":[169]},{"1556210":[255]},{"1556212":[255,127,117]},{"1556216":[255]},{"1556218":[255]},{"1556220":[185]},{"1556222":[181]},{"1556224":[170]},{"1556226":[194]},{"1556228":[174]},{"1556230":[187]},{"1556232":[255]},{"1556234":[164]},{"1556236":[167]},{"1556238":[160]},{"1556240":[255]},{"1556242":[255,127,117]},{"1556246":[255]},{"1556248":[255]},{"1556250":[185]},{"1556252":[181]},{"1556254":[170]},{"1556256":[194]},{"1556258":[174]},{"1556260":[187]},{"1556262":[255]},{"1556264":[164]},{"1556266":[167]},{"1556268":[161]},{"1556270":[255]},{"1556272":[255,127,117]},{"1556276":[255]},{"1556278":[255]},{"1556280":[185]},{"1556282":[181]},{"1556284":[170]},{"1556286":[194]},{"1556288":[174]},{"1556290":[187]},{"1556292":[255]},{"1556294":[164]},{"1556296":[167]},{"1556298":[162]},{"1556300":[255]},{"1556302":[255,127,117]},{"1556306":[255]},{"1556308":[255]},{"1556310":[185]},{"1556312":[181]},{"1556314":[170]},{"1556316":[194]},{"1556318":[174]},{"1556320":[187]},{"1556322":[255]},{"1556324":[164]},{"1556326":[167]},{"1556328":[163]},{"1556330":[255]},{"1556332":[255,127,117]},{"1556336":[255]},{"1556338":[255]},{"1556340":[185]},{"1556342":[181]},{"1556344":[170]},{"1556346":[194]},{"1556348":[174]},{"1556350":[187]},{"1556352":[255]},{"1556354":[164]},{"1556356":[167]},{"1556358":[164]},{"1556360":[255]},{"1556362":[255,127,117]},{"1556366":[255]},{"1556368":[255]},{"1556370":[185]},{"1556372":[181]},{"1556374":[170]},{"1556376":[194]},{"1556378":[174]},{"1556380":[187]},{"1556382":[255]},{"1556384":[164]},{"1556386":[167]},{"1556388":[165]},{"1556390":[255]},{"1556392":[255,127,117]},{"1556396":[255]},{"1556398":[255]},{"1556400":[185]},{"1556402":[181]},{"1556404":[170]},{"1556406":[194]},{"1556408":[174]},{"1556410":[187]},{"1556412":[255]},{"1556414":[164]},{"1556416":[167]},{"1556418":[166]},{"1556420":[255]},{"1556422":[255,127,117]},{"1556426":[255]},{"1556428":[255]},{"1556430":[185]},{"1556432":[181]},{"1556434":[170]},{"1556436":[194]},{"1556438":[174]},{"1556440":[187]},{"1556442":[255]},{"1556444":[164]},{"1556446":[167]},{"1556448":[167]},{"1556450":[255]},{"1556452":[255,127,117]},{"1556456":[255]},{"1556458":[255]},{"1556460":[185]},{"1556462":[181]},{"1556464":[170]},{"1556466":[194]},{"1556468":[174]},{"1556470":[187]},{"1556472":[255]},{"1556474":[164]},{"1556476":[167]},{"1556478":[168]},{"1556480":[255]},{"1556482":[255,127,117]},{"1556486":[255]},{"1556488":[255]},{"1556490":[185]},{"1556492":[181]},{"1556494":[170]},{"1556496":[194]},{"1556498":[174]},{"1556500":[187]},{"1556502":[255]},{"1556504":[164]},{"1556506":[167]},{"1556508":[169]},{"1556510":[255]},{"1556512":[255,127,117]},{"1556516":[255]},{"1556518":[255]},{"1556520":[185]},{"1556522":[181]},{"1556524":[170]},{"1556526":[194]},{"1556528":[174]},{"1556530":[187]},{"1556532":[255]},{"1556534":[164]},{"1556536":[168]},{"1556538":[160]},{"1556540":[255]},{"1556542":[255,127,117]},{"1556546":[255]},{"1556548":[255]},{"1556550":[185]},{"1556552":[181]},{"1556554":[170]},{"1556556":[194]},{"1556558":[174]},{"1556560":[187]},{"1556562":[255]},{"1556564":[164]},{"1556566":[168]},{"1556568":[161]},{"1556570":[255]},{"1556572":[255,127,117]},{"1556576":[255]},{"1556578":[255]},{"1556580":[185]},{"1556582":[181]},{"1556584":[170]},{"1556586":[194]},{"1556588":[174]},{"1556590":[187]},{"1556592":[255]},{"1556594":[164]},{"1556596":[168]},{"1556598":[162]},{"1556600":[255]},{"1556602":[255,127,117]},{"1556606":[255]},{"1556608":[255]},{"1556610":[185]},{"1556612":[181]},{"1556614":[170]},{"1556616":[194]},{"1556618":[174]},{"1556620":[187]},{"1556622":[255]},{"1556624":[164]},{"1556626":[168]},{"1556628":[163]},{"1556630":[255]},{"1556632":[255,127,117]},{"1556636":[255]},{"1556638":[255]},{"1556640":[185]},{"1556642":[181]},{"1556644":[170]},{"1556646":[194]},{"1556648":[174]},{"1556650":[187]},{"1556652":[255]},{"1556654":[164]},{"1556656":[168]},{"1556658":[164]},{"1556660":[255]},{"1556662":[255,127,117]},{"1556666":[255]},{"1556668":[255]},{"1556670":[185]},{"1556672":[181]},{"1556674":[170]},{"1556676":[194]},{"1556678":[174]},{"1556680":[187]},{"1556682":[255]},{"1556684":[164]},{"1556686":[168]},{"1556688":[165]},{"1556690":[255]},{"1556692":[255,127,117]},{"1556696":[255]},{"1556698":[255]},{"1556700":[185]},{"1556702":[181]},{"1556704":[170]},{"1556706":[194]},{"1556708":[174]},{"1556710":[187]},{"1556712":[255]},{"1556714":[164]},{"1556716":[168]},{"1556718":[166]},{"1556720":[255]},{"1556722":[255,127,117]},{"1556726":[255]},{"1556728":[255]},{"1556730":[185]},{"1556732":[181]},{"1556734":[170]},{"1556736":[194]},{"1556738":[174]},{"1556740":[187]},{"1556742":[255]},{"1556744":[164]},{"1556746":[168]},{"1556748":[167]},{"1556750":[255]},{"1556752":[255,127,117]},{"1556756":[255]},{"1556758":[255]},{"1556760":[185]},{"1556762":[181]},{"1556764":[170]},{"1556766":[194]},{"1556768":[174]},{"1556770":[187]},{"1556772":[255]},{"1556774":[164]},{"1556776":[168]},{"1556778":[168]},{"1556780":[255]},{"1556782":[255,127,117]},{"1556786":[255]},{"1556788":[255]},{"1556790":[185]},{"1556792":[181]},{"1556794":[170]},{"1556796":[194]},{"1556798":[174]},{"1556800":[187]},{"1556802":[255]},{"1556804":[164]},{"1556806":[168]},{"1556808":[169]},{"1556810":[255]},{"1556812":[255,127,117]},{"1556816":[255]},{"1556818":[255]},{"1556820":[185]},{"1556822":[181]},{"1556824":[170]},{"1556826":[194]},{"1556828":[174]},{"1556830":[187]},{"1556832":[255]},{"1556834":[164]},{"1556836":[169]},{"1556838":[160]},{"1556840":[255]},{"1556842":[255,127,117]},{"1556846":[255]},{"1556848":[255]},{"1556850":[185]},{"1556852":[181]},{"1556854":[170]},{"1556856":[194]},{"1556858":[174]},{"1556860":[187]},{"1556862":[255]},{"1556864":[164]},{"1556866":[169]},{"1556868":[161]},{"1556870":[255]},{"1556872":[255,127,117]},{"1556876":[255]},{"1556878":[255]},{"1556880":[185]},{"1556882":[181]},{"1556884":[170]},{"1556886":[194]},{"1556888":[174]},{"1556890":[187]},{"1556892":[255]},{"1556894":[164]},{"1556896":[169]},{"1556898":[162]},{"1556900":[255]},{"1556902":[255,127,117]},{"1556906":[255]},{"1556908":[255]},{"1556910":[185]},{"1556912":[181]},{"1556914":[170]},{"1556916":[194]},{"1556918":[174]},{"1556920":[187]},{"1556922":[255]},{"1556924":[164]},{"1556926":[169]},{"1556928":[163]},{"1556930":[255]},{"1556932":[255,127,117]},{"1556936":[255]},{"1556938":[255]},{"1556940":[185]},{"1556942":[181]},{"1556944":[170]},{"1556946":[194]},{"1556948":[174]},{"1556950":[187]},{"1556952":[255]},{"1556954":[164]},{"1556956":[169]},{"1556958":[164]},{"1556960":[255]},{"1556962":[255,127,117]},{"1556966":[255]},{"1556968":[255]},{"1556970":[185]},{"1556972":[181]},{"1556974":[170]},{"1556976":[194]},{"1556978":[174]},{"1556980":[187]},{"1556982":[255]},{"1556984":[164]},{"1556986":[169]},{"1556988":[165]},{"1556990":[255]},{"1556992":[255,127,117]},{"1556996":[255]},{"1556998":[255]},{"1557000":[185]},{"1557002":[181]},{"1557004":[170]},{"1557006":[194]},{"1557008":[174]},{"1557010":[187]},{"1557012":[255]},{"1557014":[164]},{"1557016":[169]},{"1557018":[166]},{"1557020":[255]},{"1557022":[255,127,117]},{"1557026":[255]},{"1557028":[255]},{"1557030":[185]},{"1557032":[181]},{"1557034":[170]},{"1557036":[194]},{"1557038":[174]},{"1557040":[187]},{"1557042":[255]},{"1557044":[164]},{"1557046":[169]},{"1557048":[167]},{"1557050":[255]},{"1557052":[255,127,117]},{"1557056":[255]},{"1557058":[255]},{"1557060":[185]},{"1557062":[181]},{"1557064":[170]},{"1557066":[194]},{"1557068":[174]},{"1557070":[187]},{"1557072":[255]},{"1557074":[164]},{"1557076":[169]},{"1557078":[168]},{"1557080":[255]},{"1557082":[255,127,117]},{"1557086":[255]},{"1557088":[255]},{"1557090":[185]},{"1557092":[181]},{"1557094":[170]},{"1557096":[194]},{"1557098":[174]},{"1557100":[187]},{"1557102":[255]},{"1557104":[164]},{"1557106":[169]},{"1557108":[169]},{"1557110":[255]},{"1557112":[255,127,117]},{"1557116":[255]},{"1557118":[255]},{"1557120":[185]},{"1557122":[181]},{"1557124":[170]},{"1557126":[194]},{"1557128":[174]},{"1557130":[187]},{"1557132":[255]},{"1557134":[165]},{"1557136":[160]},{"1557138":[160]},{"1557140":[255]},{"1557142":[255,127,117]},{"1557146":[255]},{"1557148":[255]},{"1557150":[185]},{"1557152":[181]},{"1557154":[170]},{"1557156":[194]},{"1557158":[174]},{"1557160":[187]},{"1557162":[255]},{"1557164":[165]},{"1557166":[160]},{"1557168":[161]},{"1557170":[255]},{"1557172":[255,127,117]},{"1557176":[255]},{"1557178":[255]},{"1557180":[185]},{"1557182":[181]},{"1557184":[170]},{"1557186":[194]},{"1557188":[174]},{"1557190":[187]},{"1557192":[255]},{"1557194":[165]},{"1557196":[160]},{"1557198":[162]},{"1557200":[255]},{"1557202":[255,127,117]},{"1557206":[255]},{"1557208":[255]},{"1557210":[185]},{"1557212":[181]},{"1557214":[170]},{"1557216":[194]},{"1557218":[174]},{"1557220":[187]},{"1557222":[255]},{"1557224":[165]},{"1557226":[160]},{"1557228":[163]},{"1557230":[255]},{"1557232":[255,127,117]},{"1557236":[255]},{"1557238":[255]},{"1557240":[185]},{"1557242":[181]},{"1557244":[170]},{"1557246":[194]},{"1557248":[174]},{"1557250":[187]},{"1557252":[255]},{"1557254":[165]},{"1557256":[160]},{"1557258":[164]},{"1557260":[255]},{"1557262":[255,127,117]},{"1557266":[255]},{"1557268":[255]},{"1557270":[185]},{"1557272":[181]},{"1557274":[170]},{"1557276":[194]},{"1557278":[174]},{"1557280":[187]},{"1557282":[255]},{"1557284":[165]},{"1557286":[160]},{"1557288":[165]},{"1557290":[255]},{"1557292":[255,127,117]},{"1557296":[255]},{"1557298":[255]},{"1557300":[185]},{"1557302":[181]},{"1557304":[170]},{"1557306":[194]},{"1557308":[174]},{"1557310":[187]},{"1557312":[255]},{"1557314":[165]},{"1557316":[160]},{"1557318":[166]},{"1557320":[255]},{"1557322":[255,127,117]},{"1557326":[255]},{"1557328":[255]},{"1557330":[185]},{"1557332":[181]},{"1557334":[170]},{"1557336":[194]},{"1557338":[174]},{"1557340":[187]},{"1557342":[255]},{"1557344":[165]},{"1557346":[160]},{"1557348":[167]},{"1557350":[255]},{"1557352":[255,127,117]},{"1557356":[255]},{"1557358":[255]},{"1557360":[185]},{"1557362":[181]},{"1557364":[170]},{"1557366":[194]},{"1557368":[174]},{"1557370":[187]},{"1557372":[255]},{"1557374":[165]},{"1557376":[160]},{"1557378":[168]},{"1557380":[255]},{"1557382":[255,127,117]},{"1557386":[255]},{"1557388":[255]},{"1557390":[185]},{"1557392":[181]},{"1557394":[170]},{"1557396":[194]},{"1557398":[174]},{"1557400":[187]},{"1557402":[255]},{"1557404":[165]},{"1557406":[160]},{"1557408":[169]},{"1557410":[255]},{"1557412":[255,127,117]},{"1557416":[255]},{"1557418":[255]},{"1557420":[185]},{"1557422":[181]},{"1557424":[170]},{"1557426":[194]},{"1557428":[174]},{"1557430":[187]},{"1557432":[255]},{"1557434":[165]},{"1557436":[161]},{"1557438":[160]},{"1557440":[255]},{"1557442":[255,127,117]},{"1557446":[255]},{"1557448":[255]},{"1557450":[185]},{"1557452":[181]},{"1557454":[170]},{"1557456":[194]},{"1557458":[174]},{"1557460":[187]},{"1557462":[255]},{"1557464":[165]},{"1557466":[161]},{"1557468":[161]},{"1557470":[255]},{"1557472":[255,127,117]},{"1557476":[255]},{"1557478":[255]},{"1557480":[185]},{"1557482":[181]},{"1557484":[170]},{"1557486":[194]},{"1557488":[174]},{"1557490":[187]},{"1557492":[255]},{"1557494":[165]},{"1557496":[161]},{"1557498":[162]},{"1557500":[255]},{"1557502":[255,127]},{"1572864":[23,23,23,23,23,23,23]},{"1572880":[70,70,29,41,13,78,16,15]},{"1572896":[15]},{"1572898":[1,2,160]},{"1572902":[160]},{"1572904":[3,1,2]},{"1572914":[1,32,10,30,10]},{"1572920":[1,1]},{"1572936":[8]},{"1572943":[1]},{"1572949":[64,64,64,64,64]},{"1572955":[64,64]},{"1572960":[34]},{"1572964":[107,34]},{"1572969":[107,34]},{"1572974":[107]},{"1572977":[121]},{"1572979":[110]},{"1572981":[111]},{"1572983":[109,105,124,105,108,105,127]},{"1572996":[160,128]},{"1573008":[4,71,3,71,2,71,4,71]},{"1573024":[1,1,1,1,1]},{"1573056":[49,65,89,38,83,88,151,147]},{"1573120":[178,216,216,216,216,216,216,216,216,217,217,217,217,217,218,218,218,218,218,219,219,219,219,219,220,220,220,220,220,221,221,221,221,221,222,222,222,222,222,223,223,223,223,223,224,224,224,224,224,225,225,225,225,225,226,226,226,226,226,227,227,227,227,227,23,23,23,23,23,23,23,23,23,23,20]},{"1573200":[62,62,62,62,62,62,62,62,62,62]},{"1573216":[36,36,36]},{"1573221":[14,40]},{"1573224":[8,2]},{"1573227":[4,2,1,4,8,16,1]},{"1573235":[1,1]},{"1573238":[5]},{"1573240":[10]},{"1573246":[1]},{"1573248":[3]},{"1573250":[1,44,1]},{"1573376":[80,70]},{"1573380":[176,185,255,255]},{"1573396":[1]},{"1573398":[1,2,3,4]},{"1573456":[18,1,83,30]},{"1573462":[4,226,6,70,4,88,7,109,4,95,7]},{"1573632":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1578240":[98,101]},{"1578243":[43,45,33,30,159,43,30,45,46,43,39,159,40,31,159,45,33,30,159,36,34,39,32,98,233]},{"1578269":[25,100,117,110,113,104,97,159,95,93,111,112,104,97,99,9]},{"1578286":[25,138,155,148,151,142,135,159,133,131,149,150,142,135,98,104]},{"1578303":[31,45,33,30,159,37,40,50,26,37,159,41,43,34,30,44,45,98,235]},{"1578323":[17,111,93,106,95,112,113,93,110,117,99,11]},{"1578336":[17,149,131,144,133,150,151,131,148,155,98,79]},{"1578349":[1,52,98,101]},{"1578354":[45,44,26,33,26,44,43,26,37,26,33,53,44,159,33,40,38,30,28,40,38,34,39,32,98,233]},{"1578381":[25,103,93,103,93,110,101,103,107,159,112,107,115,106,99,9]},{"1578398":[25,141,131,141,131,148,139,141,145,159,150,145,153,144,98,100]},{"1578415":[47,47,46,37,45,46,43,30,44,159,43,46,37,30,159,45,33,30,159,29,30,44,30,43,45,98,233]},{"1578443":[25,96,97,111,97,110,112,159,108,93,104,93,95,97,99,9]},{"1578460":[25,134,135,149,135,148,150,159,146,131,142,131,133,135,98,100]},{"1578477":[47,45,33,30,159,27,46,37,37,50,159,38,26,36,30,44,159,26,159,31,43,34,30,39,29,98,233]},{"1578505":[27,105,107,113,106,112,93,101,106,159,112,107,115,97,110,99,9]},{"1578523":[27,143,145,151,144,150,131,139,144,159,150,145,153,135,148,98,102]},{"1578541":[37,50,40,46,43,159,46,39,28,37,30,159,43,30,28,40,47,30,43,44,98,235]},{"1578564":[19,117,107,113,110,159,100,107,113,111,97,99,11]},{"1578578":[19,155,145,151,148,159,138,145,151,149,135,98,102]},{"1578592":[39,31,34,39,32,30,43,159,48,30,27,44,159,31,40,43,159,44,26,37,30,98,232]},{"1578616":[31,118,107,110,93,119,111,159,115,93,112,97,110,98,93,104,104,99,8]},{"1578636":[31,156,145,148,131,157,149,159,153,131,150,135,148,136,131,142,142,98,100]},{"1578656":[45,45,33,30,159,48,34,45,28,33,159,26,39,29,159,26,44,44,34,44,45,26,39,45,98,235]},{"1578683":[19,105,93,99,101,95,159,111,100,107,108,99,11]},{"1578697":[19,143,131,137,139,133,159,149,138,145,146,98,104]},{"1578711":[31,45,48,34,39,159,37,46,38,27,30,43,35,26,28,36,44,98,233]},{"1578731":[27,115,107,107,96,111,105,97,106,119,111,159,100,113,112,99,9]},{"1578749":[27,153,145,145,134,149,143,135,144,157,149,159,138,151,150,98,100]},{"1578767":[45,40,28,26,43,34,39,26,159,27,40,50,159,41,37,26,50,44,159,26,32,26,34,39,98,233]},{"1578794":[25,100,93,113,106,112,97,96,159,99,110,107,114,97,99,9]},{"1578811":[25,138,131,151,144,150,135,134,159,137,148,145,152,135,98,100]},{"1578828":[45,47,30,39,46,44,55,159,42,46,30,30,39,159,40,31,159,31,26,30,43,34,30,44,98,234]},{"1578855":[23,115,101,111,100,101,106,99,159,115,97,104,104,99,10]},{"1578871":[23,153,139,149,138,139,144,137,159,153,135,142,142,98,100]},{"1578887":[45,45,33,30,159,29,48,26,43,47,30,39,159,44,48,40,43,29,44,38,34,45,33,44,98,236]},{"1578914":[15,111,105,101,112,100,97,110,117,99,12]},{"1578926":[15,149,143,139,150,138,135,148,155,98,102]},{"1578938":[39,45,33,30,159,27,46,32,54,28,26,45,28,33,34,39,32,159,36,34,29,98,233]},{"1578962":[25,103,93,103,93,110,101,103,107,159,112,107,115,106,99,9]},{"1578979":[25,141,131,141,131,148,139,141,145,159,150,145,153,144,98,72]},{"1578996":[31,45,33,30,159,37,40,44,45,159,40,37,29,159,38,26,39,98,233]},{"1579016":[27,96,97,93,112,100,159,105,107,113,106,112,93,101,106,99,9]},{"1579034":[27,134,135,131,150,138,159,143,145,151,144,150,131,139,144,98,104]},{"1579052":[31,45,33,30,159,31,40,43,30,44,45,159,45,33,34,30,31,98,235]},{"1579072":[19,104,107,111,112,159,115,107,107,96,111,99,11]},{"1579086":[19,142,145,149,150,159,153,145,145,134,149,98,102]},{"1579100":[39,26,39,29,159,45,33,30,159,38,26,44,45,30,43,159,44,48,40,43,29,98,168]},{"1579124":[29,74,67,60,60,71,74,159,56,62,56,64,69,82,82,82,98,236]},{"1579143":[15,98,107,110,97,114,97,110,120,99,12]},{"1579155":[15,136,145,148,135,152,135,148,158]},{"1581056":[8,9,10,11,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,4,49,54,64,70,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,4,22,8]},{"1581336":[204,5,212,5,182,11,134,11]},{"1581434":[232,13,152,11,206,20]},{"1581442":[80,28,255,255,102,20]},{"1581450":[182,26,152,11,182,26,14,4,12,156,48,21,152,10]},{"1581476":[22,8,232,13]},{"1581488":[172,9]},{"1581510":[26,4]},{"1581514":[30,9,172,9]},{"1581544":[168,10,170,7]},{"1581572":[170,1,36,129,190,135,88,129]},{"1581640":[190,130]},{"1585196":[24,24]},{"1585199":[255]},{"1585209":[248]},{"1589248":[18,1,53,255,81,6,82,255,83,6,84,255,255,255,255,255]},{"1591296":[1,21,1,93]},{"1591301":[18,4]},{"1591304":[255,255,255,255,255,255,255,255]},{"1591552":[1,81,100]},{"1591556":[7,255]},{"1591560":[1,83,100]},{"1591564":[7,255]},{"1591568":[255,255,255,255,255,255,255,255]},{"1593345":[1,3,3,3,3,3,3,1,3,1,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,1,3,3,3,1,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1593600":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1605632":[224,90,221,29,227,3,63,207,95,224,92,227,188,227,124,195,246,157,62,28,192,224,227,195,131,25,153,24,238,45,252,147,248,7,57,199,11,247,247,158,254,140,126,17,3,7,199,247,251,251,199,132,95,25,238,3,173,11,87,68,232,192,255,128,255,152,120,224,241,243,184,31,7]},{"1605706":[28]},{"1605708":[60,8,28,4,73]},{"1605714":[67]},{"1605716":[195,1,169]},{"1605720":[248]},{"1605722":[255,255,251,36,255,4,92,172,124,140,92,74,172,124,39,15,15,255,100,253,36,125,128,62,210,127,169,239,64,212,137,232,22,34,3,28,1,16,48,102,9,24,231,52,195,82,129,235,32,247,20,253,66,195,126,189,60]},{"1605780":[24,60,28,8,2,62,126,68]},{"1605789":[255,2,254]},{"1605793":[246,68]},{"1605796":[237,18,173]},{"1605800":[175]},{"1605803":[1,9,18,18,82,80]},{"1605810":[255]},{"1605812":[251]},{"1605814":[247]},{"1605816":[183,70]},{"1605819":[111,4,127]},{"1605823":[4,8,72,34,144,6,128,255]},{"1605832":[254,63,225,97,69,222,94,6,220,92,219,91]},{"1605846":[30,36,63,36,255,10,192,255,184,204,75,188,35,252,67,246,29,35]},{"1605865":[3,51,67,3,25,47,255,39]},{"1605874":[20,255,255,191,191,206,206,209,208,239,239,230,231,238,233,239,236]},{"1605892":[64,49,63,31,34,28,27,185,158,115,60,230,121,204,243,152,231,48,207,224,159,192,63,112,224,193,131,7,15,31,63,255]},{"1605925":[129,126,75,141,110,1]},{"1605933":[37,16,224,65,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,254,253,251,247,239,223,191,127,231,156,254,137,253,195,251,231,115,207,243,207,120,231,95,240,24,1,3,7,143,143,199,224,188,243,254,225,255]},{"1605991":[255,8,255,140,255,158,231,167,215,199,99,1,35]},{"1606005":[224,32,24,56,239,159,246,15,217,151,243,142,118,92,191,10,126,36,219,138,31,207,38,12,137,193,195,100,188,96,188,104,180,100,169,67,96,163,7,97,169,96,184,96,31,31,27,36,31,5,95,175,111,144,83,163,138,102]},{"1606064":[1]},{"1606066":[12,36,15,224,71,59,75,28,164,15,211,7,232,3,117,3,184,1,92,1,190,132,67,32,16,136,68,162,65,207,206,63,48,248,199,224,20,192,175,192,23,128,44,128,123,48,192]},{"1606114":[11,16,40,83,132,251,8,159,102,7,248]},{"1606126":[87]},{"1606128":[168]},{"1606130":[245]},{"1606132":[254]},{"1606134":[255,6]},{"1606138":[168,87,10,1]},{"1606143":[67,102,191,224,35,118,159,59,207,61,135,62,83,127,57,111,172,31,31,15,7,67,129,128,16,215,87,214,86,213,85,215,87,205,78,250,123,253,5,255,19,34,63,24,61,53,6,3,1,60,243,30,225,255,24,239,40,223,16,223,145,223,147,255,199,227,225]},{"1606211":[16,34,32,224,56]},{"1606217":[251,251,245,245,174,174,75,74,241,245]},{"1606228":[254,255,251,251,4,4,14,95,255,251,1]},{"1606240":[4,153,158,115,124,230,121,204,115,152,231,48,79,96,31,192,63,120,240,225,195,135,143,159,63,255]},{"1606267":[48,48,206,206,223,223,39,255,3]},{"1606277":[255,49,32,35]},{"1606282":[69,141,110,2,129,98,157,68,126,129]},{"1606293":[255,131,97,1]},{"1606298":[28,35]},{"1606301":[151,104,1,27,94,241,93,243,185,231,249,135,248,103,63,48,127,120,239,44,225,227,199,7,7,192,128,16,47,11,94,16,67,186,36,15,126,32,95,22,90,24,67,2,240,225,197,197,193,225,231,252,131,198,2,10,255]},{"1606359":[49,255,67]},{"1606363":[3,1,9]},{"1606367":[24,134,27,1,133,196,2,3,255]},{"1606377":[129,127,135,208,1,35]},{"1606384":[35,31,7,92,140,252,44,188,204,252,12,35,252,35]},{"1606400":[47,34,15,35,255,224,53,129,66,67,189,62,66]},{"1606414":[189]},{"1606416":[195]},{"1606418":[255]},{"1606420":[203,128,255,60]},{"1606425":[129,66,60]},{"1606429":[52]},{"1606431":[157,93,67,190,63,199,7,120,4,139,4,251,28,227,182,221,62]},{"1606450":[128,115,3,3,25,217,88,226,161,188,195,137,30]},{"1606464":[1,62,29,133,42]},{"1606470":[22,79,140,79,9,78,11,77,11,119,164,104]},{"1606483":[127,128,127,152,48,176,177,179,24,159,7,152,231,2,19,255,146,239,36,223,72,159,16,191,32,191,35,191,39,255,143,12,24,48,96,34,64,224,72]},{"1606523":[127,127,191,191,159,159,175,175,183,183,171,187,141,189,30,126,128,64,96,112,120,100,66,129,255]},{"1606549":[63]},{"1606551":[15,192,7,240,3,248,3,128,1,96,1,56,255,255,63,15,7,127,159,199,128,127,65,62,34,28,85,73,190,182,221,221,235,235,247,247,127,190,221,235,119,62,28,8,47,254,39,1,79,15,255,39]},{"1606604":[67,230,191,224,49,246,159,123,79,189,39,158,19,207,9,103,4,31,31,15,135,195,225,240,248,239,40,207,136,175,8,127,15,247,7,123,3,153,129,204,64,16,48,112,240,248,252,126,63]},{"1606654":[255,253,255,2,2,35,253,1,19,19,67,238,236,7]},{"1606670":[253,255,255,253,17,17,131,67,3,133,66,3,5,17,17,238,238,239,239,134,204,4,24,16,251,8,255,6,7,248]},{"1606701":[31]},{"1606703":[249]},{"1606705":[255]},{"1606707":[79]},{"1606709":[240,6]},{"1606713":[224,6]},{"1606716":[176,15,136,128,4,6,167,222,83,239,41,119,148,131,144,4,13,67,33,16,8,255]},{"1606739":[192,127,191,127,143,111,140,108,67,140,111,131,94,1,2]},{"1606755":[16,19,34,16,134,203,4,131,23,1,132,49,3,35]},{"1606770":[131,23,1,3,141,110,13,238,67,253,254,1,1,2,67,1,254,131,222,2,1]},{"1606793":[131,107,3,152,216,3,2]},{"1606801":[1,254,67,249,250,135,72,5,3]},{"1606812":[4,4,131,107,3,224,39,211,211,185,185,68,124,90,102,185,231,100,219,194,189,129,126,60,126,199,131,1,24,60,126,255]},{"1606845":[252]},{"1606847":[240]},{"1606849":[224,9,192,25,192,27,128,58,128,60,34,255,19,246,230,228,197,195]},{"1606868":[255,126,255,66,255,78,255,81,255,87,255,118,255,13,136,23,1,5,254,254,253,253,243,243,35,239,13,223,223,191,191,127,127,1,2,12,24,16,32,64,128,80]},{"1606911":[255,38]},{"1606914":[255]},{"1607680":[224,90,221,29,227,3,63,207,95,224,92,227,188,227,124,195,246,157,62,28,192,224,227,195,131,25,153,24,238,45,252,147,248,7,57,199,11,247,247,158,254,140,126,17,3,7,199,247,251,251,199,132,95,25,238,3,173,11,87,68,232,192,255,128,255,152,120,224,241,243,184,31,7]},{"1607754":[28]},{"1607756":[60,8,28,4,73]},{"1607762":[67]},{"1607764":[195,1,169]},{"1607768":[248]},{"1607770":[255,255,251,36,255,4,92,172,124,140,92,74,172,124,39,15,15,255,100,253,36,125,128,62,210,127,169,239,64,212,137,232,22,34,3,28,1,16,48,102,9,24,231,52,195,82,129,235,32,247,20,253,66,195,126,189,60]},{"1607828":[24,60,28,8,2,62,126,68]},{"1607837":[255,2,254]},{"1607841":[246,68]},{"1607844":[237,18,173]},{"1607848":[175]},{"1607851":[1,9,18,18,82,80]},{"1607858":[255]},{"1607860":[251]},{"1607862":[247]},{"1607864":[183,70]},{"1607867":[111,4,127]},{"1607871":[4,8,72,34,144,6,128,255]},{"1607880":[254,63,225,97,69,222,94,6,220,92,219,91]},{"1607894":[30,36,63,36,255,10,192,255,184,204,75,188,35,252,67,246,29,35]},{"1607913":[3,51,67,3,25,47,255,39]},{"1607922":[20,255,255,191,191,206,206,209,208,239,239,230,231,238,233,239,236]},{"1607940":[64,49,63,31,34,28,27,185,158,115,60,230,121,204,243,152,231,48,207,224,159,192,63,112,224,193,131,7,15,31,63,255]},{"1607973":[129,126,75,141,110,1]},{"1607981":[37,16,224,65,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,254,253,251,247,239,223,191,127,231,156,254,137,253,195,251,231,115,207,243,207,120,231,95,240,24,1,3,7,143,143,199,224,188,243,254,225,255]},{"1608039":[255,8,255,140,255,158,231,167,215,199,99,1,35]},{"1608053":[224,32,24,56,239,159,246,15,217,151,243,142,118,92,191,10,126,36,219,138,31,207,38,12,137,193,195,100,188,96,188,104,180,100,169,67,96,163,7,97,169,96,184,96,31,31,27,36,31,5,95,175,111,144,83,163,138,102]},{"1608112":[1]},{"1608114":[12,36,15,224,71,59,75,28,164,15,211,7,232,3,117,3,184,1,92,1,190,132,67,32,16,136,68,162,65,207,206,63,48,248,199,224,20,192,175,192,23,128,44,128,123,48,192]},{"1608162":[11,16,40,83,132,251,8,159,102,7,248]},{"1608174":[87]},{"1608176":[168]},{"1608178":[245]},{"1608180":[254]},{"1608182":[255,6]},{"1608186":[168,87,10,1]},{"1608191":[67,102,191,224,35,118,159,59,207,61,135,62,83,127,57,111,172,31,31,15,7,67,129,128,16,215,87,214,86,213,85,215,87,205,78,250,123,253,5,255,19,34,63,24,61,53,6,3,1,60,243,30,225,255,24,239,40,223,16,223,145,223,147,255,199,227,225]},{"1608259":[16,34,32,224,56]},{"1608265":[251,251,245,245,174,174,75,74,241,245]},{"1608276":[254,255,251,251,4,4,14,95,255,251,1]},{"1608288":[4,153,158,115,124,230,121,204,115,152,231,48,79,96,31,192,63,120,240,225,195,135,143,159,63,255]},{"1608315":[48,48,206,206,223,223,39,255,3]},{"1608325":[255,49,32,35]},{"1608330":[69,141,110,2,129,98,157,68,126,129]},{"1608341":[255,131,97,1]},{"1608346":[28,35]},{"1608349":[151,104,1,27,94,241,93,243,185,231,249,135,248,103,63,48,127,120,239,44,225,227,199,7,7,192,128,16,47,11,94,16,67,186,36,15,126,32,95,22,90,24,67,2,240,225,197,197,193,225,231,252,131,198,2,10,255]},{"1608407":[49,255,67]},{"1608411":[3,1,9]},{"1608415":[24,134,27,1,133,196,2,3,255]},{"1608425":[129,127,135,208,1,35]},{"1608432":[35,31,7,92,140,252,44,188,204,252,12,35,252,35]},{"1608448":[47,34,15,35,255,224,53,129,66,67,189,62,66]},{"1608462":[189]},{"1608464":[195]},{"1608466":[255]},{"1608468":[203,128,255,60]},{"1608473":[129,66,60]},{"1608477":[52]},{"1608479":[157,93,67,190,63,199,7,120,4,139,4,251,28,227,182,221,62]},{"1608498":[128,115,3,3,25,217,88,226,161,188,195,137,30]},{"1608512":[1,62,29,133,42]},{"1608518":[22,79,140,79,9,78,11,77,11,119,164,104]},{"1608531":[127,128,127,152,48,176,177,179,24,159,7,152,231,2,19,255,146,239,36,223,72,159,16,191,32,191,35,191,39,255,143,12,24,48,96,34,64,224,32]},{"1608571":[127,127,191,191,159,159,175,175,183,183,171,187,141,189,30,126,128,64,96,112,120,100,66,129,255]},{"1608597":[63]},{"1608599":[15,192,7,240,67,3,248,224,35,1,236,1,196,255,255,63,15,7,7,19,59,128,127,65,62,34,28,85,73,190,182,221,221,235,235,247,247,127,190,221,235,119,62,28,8,47,254,39,1,79,15,255,39]},{"1608653":[67,230,191,224,49,246,159,123,79,189,39,158,19,207,9,103,4,31,31,15,135,195,225,240,248,239,40,207,136,175,8,127,15,247,7,123,3,153,129,204,64,16,48,112,240,248,252,126,63]},{"1608703":[255,253,255,2,2,35,253,1,19,19,67,238,236,7]},{"1608719":[253,255,255,253,17,17,131,67,3,133,66,3,5,17,17,238,238,239,239,134,204,4,24,16,251,8,255,6,7,248]},{"1608750":[31]},{"1608752":[249]},{"1608754":[255]},{"1608756":[79]},{"1608758":[240,6]},{"1608762":[224,6]},{"1608765":[176,15,136,128,4,6,167,222,83,239,41,119,148,131,144,4,13,67,33,16,8,255]},{"1608788":[192,127,191,127,143,111,140,108,67,140,111,131,94,1,2]},{"1608804":[16,19,34,16,134,203,4,131,23,1,132,49,3,35]},{"1608819":[131,23,1,3,141,110,13,238,67,253,254,1,1,2,67,1,254,131,222,2,1]},{"1608842":[131,107,3,152,216,3,2]},{"1608850":[1,254,67,249,250,135,72,5,3]},{"1608861":[4,4,131,107,3,31,211,211,185,185,68,124,90,102,185,231,100,219,194,189,129,126,60,126,199,131,1,24,60,126,255]},{"1608893":[252]},{"1608895":[240,3,224,15,67,192,31,26,128,57,128,48,255,255,252,240,224,224,198,207]},{"1608916":[255,126,255,66,255,78,255,81,255,87,255,118,255,13,136,23,1,5,254,254,253,253,243,243,35,239,13,223,223,191,191,127,127,1,2,12,24,16,32,64,128,80]},{"1608959":[255,38]},{"1608962":[255]},{"1609728":[15,255]},{"1609731":[252,3,248,7,243,15,231,31,207,63,152,127,183,120,39]},{"1609747":[1,220,63,67,35,227,67,220,192,8,206,192,39,224,211,48]},{"1609764":[28,28,34,63,17,31,15,127,128,191,192,159,224,79,112,103,120,48,63,24,31,143,15,34]},{"1609789":[23,128,128,192,224,240,247,74,247,76,218,102,236,115,183,120,152,127,207,63,231,31]},{"1609813":[1,36]},{"1609816":[224,33,226,14,196,28,73,121,19,243,167,103,79,207,158,158,60,60,17,35,134,12,24,48,97,195,112,112,247,240,231,224,207,192,159,128,69,63]},{"1609855":[4,143,15,31,63,127,34,255,9,176,79,24,231,60,243,127,240,47,240,67,12,243,224,33,248,7,79,231,195,128,208,224,1,3,8,247,12,243,31,224,255]},{"1609897":[131,124,1,254,63,255,127,255,247,243,224]},{"1609909":[124,254,192,128,67,65,190,15,193,62,227,28,255]},{"1609923":[199,56,159,124,159,254,190,190,62,28,35]},{"1609935":[27,255]},{"1609938":[15,240,224,255,31,31,128,128,6,6,249]},{"1609950":[255,255]},{"1609953":[240,31,224,127,249,255]},{"1609960":[160,96,199,64,71,199,66,5,191,2,189,60,31,63,35,60,2,124,66,192,67,127,255,5,63,255]},{"1609987":[192,127,254,67,127,255,224,48]},{"1609996":[64,64,63]},{"1610000":[64,65,127]},{"1610004":[24,230,29,231,24,229,14,242,7,249,3,252,1,254]},{"1610019":[255,225,224,226,241,248,252,254,255,253,195,134,249,51,252,113,126,228,251,14,241,255]},{"1610042":[3,252,34]},{"1610047":[128,34]},{"1610050":[224,58,252,195,195,224,224,112,240,184,120,220,60,102,158,51,207,255]},{"1610069":[60,31,15,7,3,1]},{"1610077":[3,252,7,248,8,242,10,243,13,245,10,246,5,251,14,242,252,249,245,244,242,241,240,241,175,112,155,103,183,72,175,80,191,67,69,191,68,39]},{"1610116":[224,40,233,24,148,172,202,86,247,59,127,27,127,11,255,131,127,11,7,67,33]},{"1610138":[128,192,64,128,199,7,224]},{"1610146":[112]},{"1610148":[63]},{"1610150":[31]},{"1610152":[95,64,111,96,112,112,248,35,255,4,191,159,143,227,31,67,155,103,67,248,7,69,31,224,36]},{"1610178":[34,1,224,81,248,248,136,248,40,216,72,152,172,60,14,62,119,79,123,71,7,7,39,103,195,193,128,128,63]},{"1610208":[1]},{"1610210":[60,36,126,66,126,82,46,42,6,6,135,135,255,255,195,129,129,209,249,120,240,15,97,159,79,191,211,51,201,57,196,60,226,30,99,159,7,158,176,44,54,59,29,28,252,252,248,248,240,240,224,224,192,192,131,73,1,6,64]},{"1610270":[3,7,15,31,63,34,255,7,247,102,246,103,247,103,244,100,67,240,96,7,241,96,254,96,24,25,24,27,35,31,23,224,31,224,159,240,207,184,167,28,19,140,139,206,201,238,233,31,31,15,71,227,115,49,21,55]},{"1610327":[6,223,127,160,96,192,127,255,136,135,2,2,64,31,64,132,151,2,9,223,14,239,38,119,147,59,201,29,228,133,38,1,224,97,48,24,140,198,227,241,248,252,111,206,79,206,239,110,247,182,251,218,253,108,255,240,248,7,48,48,16,8,4,130]},{"1610392":[7,255]},{"1610395":[255,112,255,96,246,73,230,25,228,27,197,58,195,60]},{"1610410":[3,15,22,38,36,69,67,255]},{"1610419":[255,14,63,198,15,242,7,248,127,128,159,96,199,56]},{"1610434":[192,48,8,4,124,158,198,52,220,52,212,49,208,57,200,29,228,30,230,26,234,40,216,195,203,131,98,1,23,5,7,5,5,255]},{"1610469":[255,127,247,255,136,136,247,128,247,127,255,192,250,255,127,128,119,127,131,75,1,45]},{"1610492":[39,255,69,170,91]},{"1610498":[174,70,95,160,1,191,64,34,4,36]},{"1610509":[224,41,22,234,26,238,26,234,8,240,9,244,27,230,42,214,46,214,225,225,229,231,227,225,193,193,206,60,141,124,201,120,203,120,235,120,223,92,141,76,165,100,3,3,34,7,2,35,51,27,67,99,159,16,223,63,191,127,176,112,224,96,239,96,224,96,28,28,32,64,79,34,31,69,64]},{"1610585":[9,124]},{"1610588":[127]},{"1610590":[131]},{"1610592":[120,120,252,252,37,255,1,135,3,35,243]},{"1610604":[247,72,243,118,1,246,115,34,12]},{"1610614":[140,35,12,10,255,254,193,254,129,254,31,252,51,240,243,68,112,251,3]},{"1610634":[28,28]},{"1610637":[35,12,15,251,124,247,120,247,122,177,114,93,190,237,30,173,30,205,78,34]},{"1610658":[24,12]},{"1610662":[64,48,5,255,28,255,62,255,127,255,253,255,250,254,249,255,252,255,248,224,192,128,131,89]},{"1610687":[224,33,1,255,48,255,38,239,15,127,60,254,186,254,89,127,92,127]},{"1610707":[16,128,1,1,128,128,1,255,20,223,54,255,15,255,125,255,134,42,4]},{"1610727":[32,34]},{"1610730":[26,1,128,128,3,252,7,249,14,242,29,228,59,201,119,147,239,38,223,14]},{"1610752":[1,3,6,12,24,48,79]},{"1610760":[255,39,255,15,72,184,75,184,107,184,123,184,105,168,68,164,218,50,204,56,35,7,24,23,27,13,7,176,195,171,192,173,192,189,210,154,232,255,243,255,124,255]},{"1610803":[28,23,18]},{"1610807":[5,132,213]},{"1610811":[68,255]},{"1610814":[8,14,255,31,251,31,241,31,245,31,34]},{"1610826":[4,14,31,27,17,17,79,170,91,39,4,77,245,31,1,187,91,38,17,6,21,137,96,151,112,187,120,67,189,124,5,158,126,198,62,240,15,131,97,1,2,3,1,1,68]},{"1610872":[2,11,4]},{"1610876":[11,3,20,7,44,15,92,31,185,190,34,255,14,252,251,243,227,70,255]},{"1610896":[191,63,223,95,255,96,240,96,67,247,103,17,246,102]},{"1610911":[64,32,31,31,24,24,25,224,31,247,8,255]},{"1610924":[207,48,67,231,24,5,238,17,255]},{"1610934":[31,8,37]},{"1610938":[11,115,252,135,120,255]},{"1610945":[243,12,241,14,113,142,67,63,192]},{"1610955":[140,134,15]},{"1610959":[5,253,126,253,70,253,86,69,253,70,2,185,70,255,35]},{"1610975":[35,16,7]},{"1610979":[172,239,63,255,2,254,1,72,255]},{"1610989":[4,16,128,193,252,254,34,255,15,158,255,31,255,15,255,128,255,169,239,58,254,1,191]},{"1611013":[199,35]},{"1611016":[18,16,1,64,56,158,255,63,255,15,255,38,255,81,223,50,254,1,255,192,132,126,5,3,32,1]},{"1611044":[73,228,251,5,204,243,24,231,240,15,36,24]},{"1611057":[48,133,215,1,147,52,3,255]},{"1611776":[15,255]},{"1611779":[252,3,248,7,243,15,231,31,207,63,152,127,183,120,39]},{"1611795":[1,220,63,67,35,227,67,220,192,8,206,192,39,224,211,48]},{"1611812":[28,28,34,63,17,31,15,127,128,191,192,159,224,79,112,103,120,48,63,24,31,143,15,34]},{"1611837":[23,128,128,192,224,240,247,74,247,76,218,102,236,115,183,120,152,127,207,63,231,31]},{"1611861":[1,36]},{"1611864":[224,33,226,14,196,28,73,121,19,243,167,103,79,207,158,158,60,60,17,35,134,12,24,48,97,195,112,112,247,240,231,224,207,192,159,128,69,63]},{"1611903":[4,143,15,31,63,127,34,255,9,176,79,24,231,60,243,127,240,47,240,67,12,243,224,33,248,7,79,231,195,128,208,224,1,3,8,247,12,243,31,224,255]},{"1611945":[131,124,1,254,63,255,127,255,247,243,224]},{"1611957":[124,254,192,128,67,65,190,15,193,62,227,28,255]},{"1611971":[199,56,159,124,159,254,190,190,62,28,35]},{"1611983":[27,255]},{"1611986":[15,240,224,255,31,31,128,128,6,6,249]},{"1611998":[255,255]},{"1612001":[240,31,224,127,249,255]},{"1612008":[160,96,199,64,71,199,66,5,191,2,189,60,31,63,35,60,2,124,66,192,67,127,255,5,63,255]},{"1612035":[192,127,254,67,127,255,224,48]},{"1612044":[64,64,63]},{"1612048":[64,65,127]},{"1612052":[24,230,29,231,24,229,14,242,7,249,3,252,1,254]},{"1612067":[255,225,224,226,241,248,252,254,255,253,195,134,249,51,252,113,126,228,251,14,241,255]},{"1612090":[3,252,34]},{"1612095":[128,34]},{"1612098":[224,58,252,195,195,224,224,112,240,184,120,220,60,102,158,51,207,255]},{"1612117":[60,31,15,7,3,1]},{"1612125":[3,252,7,248,8,242,10,243,13,245,10,246,5,251,14,242,252,249,245,244,242,241,240,241,175,112,155,103,183,72,175,80,191,67,69,191,68,39]},{"1612164":[224,40,233,24,148,172,202,86,247,59,127,27,127,11,255,131,127,11,7,67,33]},{"1612186":[128,192,64,128,199,7,224]},{"1612194":[112]},{"1612196":[63]},{"1612198":[31]},{"1612200":[95,64,111,96,112,112,248,35,255,4,191,159,143,227,31,67,155,103,67,248,7,69,31,224,36]},{"1612226":[34,1,224,81,248,248,136,248,40,216,72,152,172,60,14,62,119,79,123,71,7,7,39,103,195,193,128,128,63]},{"1612256":[1]},{"1612258":[60,36,126,66,126,82,46,42,6,6,135,135,255,255,195,129,129,209,249,120,240,15,97,159,79,191,211,51,201,57,196,60,226,30,99,159,7,158,176,44,54,59,29,28,252,252,248,248,240,240,224,224,192,192,131,73,1,6,64]},{"1612318":[3,7,15,31,63,34,255,7,247,102,246,103,247,103,244,100,67,240,96,7,241,96,254,96,24,25,24,27,35,31,23,224,31,224,159,240,207,184,167,28,19,140,139,206,201,238,233,31,31,15,71,227,115,49,21,55]},{"1612375":[6,223,127,160,96,192,127,255,136,135,2,2,64,31,64,132,151,2,9,223,14,239,38,119,147,59,201,29,228,133,38,1,224,39,48,24,140,198,227,241,248,252,111,206,79,206,239,110,247,182,251,218,253,108,255,240,248,7,48,48,16,8,4,130]},{"1612440":[7,255]},{"1612443":[255,112,253,98,241,78,67,227,28,67,199,56,15]},{"1612457":[3,13,17,35,35,71,71,255]},{"1612466":[255,14,63,198,15,242,67,7,248,29,3,252,243,12]},{"1612481":[192,48,8,4,4,2,242,52,220,52,212,49,208,57,200,29,228,30,230,26,234,40,216,195,203,131,98,1,23,5,7,5,5,255]},{"1612516":[255,127,247,255,136,136,247,128,247,127,255,192,250,255,127,128,119,127,131,75,1,45]},{"1612539":[39,255,69,170,91]},{"1612545":[174,70,95,160,1,191,64,34,4,36]},{"1612556":[224,41,22,234,26,238,26,234,8,240,9,244,27,230,42,214,46,214,225,225,229,231,227,225,193,193,206,60,141,124,201,120,203,120,235,120,223,92,141,76,165,100,3,3,34,7,2,35,51,27,67,99,159,16,223,63,191,127,176,112,224,96,239,96,224,96,28,28,32,64,79,34,31,69,64]},{"1612632":[9,124]},{"1612635":[127]},{"1612637":[131]},{"1612639":[120,120,252,252,37,255,1,135,3,35,243]},{"1612651":[247,72,243,118,1,246,115,34,12]},{"1612661":[140,35,12,10,255,254,193,254,129,254,31,252,51,240,243,68,112,251,3]},{"1612681":[28,28]},{"1612684":[35,12,15,251,124,247,120,247,122,177,114,93,190,237,30,173,30,205,78,34]},{"1612705":[24,12]},{"1612709":[64,48,5,255,28,255,62,255,127,255,253,255,250,254,249,255,252,255,248,224,192,128,131,89]},{"1612734":[224,33,1,255,48,255,38,239,15,127,60,254,186,254,89,127,92,127]},{"1612754":[16,128,1,1,128,128,1,255,20,223,54,255,15,255,125,255,134,42,4]},{"1612774":[32,34]},{"1612777":[26,1,128,128,3,252,7,249,14,242,29,228,59,201,119,147,239,38,223,14]},{"1612799":[1,3,6,12,24,48,79]},{"1612807":[255,39,255,15,72,184,75,184,107,184,123,184,105,168,68,164,218,50,204,56,35,7,24,23,27,13,7,176,195,171,192,173,192,189,210,154,232,255,243,255,124,255]},{"1612850":[28,23,18]},{"1612854":[5,132,213]},{"1612858":[68,255]},{"1612861":[8,14,255,31,251,31,241,31,245,31,34]},{"1612873":[4,14,31,27,17,17,79,170,91,39,4,77,245,31,1,187,91,38,17,6,21,137,96,151,112,187,120,67,189,124,5,158,126,198,62,240,15,131,97,1,2,3,1,1,68]},{"1612919":[2,11,4]},{"1612923":[11,3,20,7,44,15,92,31,185,190,34,255,14,252,251,243,227,70,255]},{"1612943":[191,63,223,95,255,96,240,96,67,247,103,17,246,102]},{"1612958":[64,32,31,31,24,24,25,224,31,247,8,255]},{"1612971":[207,48,67,231,24,5,238,17,255]},{"1612981":[31,8,37]},{"1612985":[11,115,252,135,120,255]},{"1612992":[243,12,241,14,113,142,67,63,192]},{"1613002":[140,134,15]},{"1613006":[5,253,126,253,70,253,86,69,253,70,2,185,70,255,35]},{"1613022":[35,16,7]},{"1613026":[172,239,63,255,2,254,1,72,255]},{"1613036":[4,16,128,193,252,254,34,255,15,158,255,31,255,15,255,128,255,169,239,58,254,1,191]},{"1613060":[199,35]},{"1613063":[18,16,1,64,56,158,255,63,255,15,255,38,255,81,223,50,254,1,255,192,132,126,5,3,32,1]},{"1613091":[73,228,251,5,204,243,24,231,240,15,36,24]},{"1613104":[48,133,215,1,147,52,3,255]},{"1613824":[34,255,12,192,215,136,248,151,220,171,234,145,229,152,227,157,34,255,2]},{"1613844":[255]},{"1613846":[67]},{"1613848":[255,68,255]},{"1613852":[8,255,3]},{"1613856":[28,3,34,29,66,61,67,192,63,19,164,27,170,17,240]},{"1613872":[15,240]},{"1613875":[255,113,142,81,142,74,132,85,128,91,128,133,48]},{"1613889":[224,67,207,48,88,32,87,32,84,35,87,32,31]},{"1613903":[224,31]},{"1613906":[255,231,24,52,8,213,8,85,136,213,8,128]},{"1613919":[127,128,6,249,254,1,12,3,244,3,20,227,244,3,63,1,70,56,142,112,20,224,56,192,68,184,4,248,66,252,24,24,36,60,68,124,132,252,100,124,69,36,60,4,60,60,66,126,129,70,255,153,5,105,111,18,30,12,12,67,18,30,69,34,62,67,82,126,1,126,126,67,129,255,9,158,254,144,240,156,252,130,254,129,255,131,160]},{"1614007":[1,34,62,131,130]},{"1614013":[5,72,120,140,252,130,254,133,176]},{"1614023":[3,121,127,9,15,69,18,30,139,144]},{"1614034":[67,153,255,137,176]},{"1614040":[133,184]},{"1614043":[79,231,153,47,255,19,51]},{"1614051":[20,3,56,7,104,23,96,31,254,1,249]},{"1614063":[192]},{"1614065":[95,128,213,10,67,81,142,8,241,14,192,63,143,112,112]},{"1614081":[80,132,73]},{"1614085":[10,84,35,220,35]},{"1614091":[255,113,14,15]},{"1614096":[20,132,89]},{"1614100":[224,37,85,136,119,136,1,254,128,127,255]},{"1614112":[12,3,248,7]},{"1614117":[255,1,255,3,255,7,255,31,255,248,248,114,252,254,254,252,252,248,248,240,240,192,192,35]},{"1614142":[77,36,60,1,24,24,131,196]},{"1614151":[67,72,120,1,142,254,67,129,255,3,126,126,82,126,67,178,254,67,129,255,1,114,126,131,158]},{"1614177":[131,154]},{"1614180":[11,9,15,105,111,153,255,129,255,66,126,60,60,137,228]},{"1614196":[133,186,1,141,224]},{"1614202":[3,66,126,124,124,131,188]},{"1614210":[69,153,255,69,130,254,1,156,252,73,144,240,1,96,96,73,153,255,18,129,255,130,254,124,124,253,255,250,255,253,255,239,255,215,255,251,255,253,38,255,8,150,255,244,255,247,255,239,255,158,34,255,67,215,255,8,57,255,223,255,95,255,190,255,121,38,255,67,95,255,4,79,255,215,255,223,34,255]},{"1614289":[127,34,255,2,243,255,227,68,255,243]},{"1614300":[97,35,255,11,127,255,255,227,255,217,255,243,255,231,255,65,38,255,140,84,2,34,255,143,100,2,2,195,255,249,132,147,2]},{"1614334":[67,132,145,2,6,153,255,249,255,227,255,231,34,255,131,168,2,37,255]},{"1614354":[248,132,39,2,2,238,255,241,34,255,8,31,255,111,255,247,255,123,255,187,68,255,221,16,251,255,231,249,199,248,206,241,225,222,247,200,255,225,255,255,221,70,255,189]},{"1614399":[219,138,171,2,4,225,255,205,255,253,131,207,2,36,255,4,242,255,243,253,247,68,255,248,3,203,255,199,252,131,78,2,11,111,191,111,255,159,247,247,255,251,15,255,247,39]},{"1614447":[123,70,123,74,39]},{"1614454":[255,68,255,9,133,60,2,8,104,255,111,255,110,255,221,255,187,38,255,8,97,255,77,255,245,255,123,255,167,38,255,69,175,255,2,171,255,103,50,255,39]},{"1614497":[127,68,127,72]},{"1614502":[73,67,127,255,132,83,2,4,211,255,193,255,115,138,125,3]},{"1614519":[252,68,252,36,17,228,252,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,143,176,3,2,251,255,225,72,255,192]},{"1614553":[225,37,255,12,199,215,171,215,41,239,17,215,41,215,171,255,71,47,255,6,227,255,224,255,242,255,252,68,255,248]},{"1614584":[254,34,255,7,15,251,7,255,119,255,255,143,68,255,151,2,31,255,255,71,74,123]},{"1614607":[78,68,127,66,10,127,127,121,255,28,255,20,247,116,247,122,68,251,10,3,251,251,255,254,68,255,252]},{"1614635":[248,132,17,2,3,253,255,254,127,68,255,63,3,31,255,127,159,68,255,63,1,127,255,68,255,254]},{"1614662":[252,131,76,4,132,11,4,135,80,4]},{"1614673":[31,68,255,191]},{"1614678":[127,132,78,2,139,148,2,1,73,127,67,152,255,2,153,255,41,68,239,40,2,239,239,228,68,252,100,67,228,252,67,33,255,1,255,255,159,176,3,12,130,130,69,199,74,207,118,255,110,255,95,255,191,132,125,3,1,192,192,67,160,224,7,32,224,163,224,166,225,212,243,135,224,3,10,199,57,239,17,239,147,239,87,255,255,172,68,255,171,4,139,255,171,255,172,36,255,2,189,255,185,70,255,189]},{"1614783":[136,134,13,5,6,186,255,190,255,189,255,187,142,27,5,2,190,255,137,36,255,4,216,255,141,255,173,132,67,5]},{"1614814":[173,36,255,2,157,255,169,70,255,173]},{"1614825":[152,134,77,5,6,170,255,174,255,173,255,171,142,91,5,1,174,255,133,15,1,131,82,5,5,165,255,160,255,173,255,131,15]},{"1614859":[4,255,255,152,255,171,132,119,5]},{"1614869":[170,134,139,5,4,156,255,171,255,169,68,255,170,135,140,5,133,100,5,135,138,5]},{"1614892":[200,68,255,189,4,173,255,181,255,205,34,255,2,223,255,129,68,255,221,67,223,255,131,220,3]},{"1614918":[189,68,255,221,131,248,2,2,247,255,143,132,205,5,10,193,255,221,255,173,255,245,255,251,255,199,34,255,6,251,255,135,255,247,255,1,68,255,247]},{"1614958":[207,34,255,69,173,255,133,230,5,131,12,6]},{"1614971":[131,34,255,133,6,6]},{"1614978":[239,132,75,2,69,223,255,2,199,255,219,68,255,223]},{"1614993":[255,136,3,6,131,40,2]},{"1615001":[159,36,255,131,32,6,37,255]},{"1615010":[1,34,255,10,129,255,253,255,221,255,235,255,247,255,235,132,139,5,2,231,255,129,132,231,5,4,227,255,149,255,247,132,253,5,69,251,255,135,72,6]},{"1615051":[191,68,255,183,67,187,255,67,125,255,131,142,6]},{"1615065":[129,70,255,191,133,218,5]},{"1615073":[1,70,255,253,135,24,6,6,255,255,159,255,175,255,119,136,25,2,4,239,255,1,255,239,132,147,5,2,109,255,239,136,173,6,4,187,255,215,255,239,132,123,6,4,15,255,243,255,159,132,167,2,2,31,255,227,132,205,6,131,42,6,6,219,255,187,255,177,255,13,34,255,67,253,255]},{"1615149":[219,138,101,6]},{"1615154":[129,68,255,239,133,32,7,131,190,2,2,223,255,1,68,255,221,69,239,255,131,146,2,137,128,6]},{"1615181":[129,134,93,6]},{"1615186":[253,136,79,7,131,94,6,135,78,7,133,250,5,71,187,255,135,24,6,69,175,255,131,216,6]},{"1615212":[107,132,107,3,69,191,255,131,40,5]},{"1615223":[183,132,235,5]},{"1615228":[129,74,255,189,133,76,7,67,189,255,137,22,6,131,236,5,135,180,6,131,236,5,133,78,6]},{"1615254":[251,132,63,7,135,82,6,67,171,255,137,184,6]},{"1615268":[255,132,1,6,67,247,255,131,32,6,255]},{"1615872":[39]},{"1615874":[7,3]},{"1615877":[15,2,31,13,27,14,35]},{"1615885":[3,3,15,31,31,35]},{"1615892":[11,96]},{"1615895":[146]},{"1615897":[204]},{"1615899":[240,64,248,176,184,80,35]},{"1615907":[10,64,240,248,216,8]},{"1615914":[28]},{"1615916":[38,24,28,68,8,20,67,28]},{"1615925":[2,8,20,58,34,28,1,20,20,57]},{"1615936":[9,126]},{"1615939":[227,98,247,118,126]},{"1615945":[60,24,67,52,16,9]},{"1615952":[126,157,137,126,36,44,44]},{"1615961":[131,48]},{"1615965":[60,70]},{"1615968":[28,5,62]},{"1615973":[8,20,36,34,20]},{"1615979":[62,240,49,96]},{"1615984":[240,45,2]},{"1615988":[240,95]},{"1615992":[240,47,48]},{"1615996":[3,57,31,61,30,67,59,28,19,31,12,31,14,15]},{"1616011":[3]},{"1616013":[63,63,62,62,30,31,14,3,124,136,238,16,73,255]},{"1616028":[224,36,206]},{"1616032":[140,222,49,245,53,181,49,206,20,8,55,8,119,8,95,32,127,40,127,8,75]},{"1616054":[1]},{"1616056":[28,63,92,119,126,126,74,1]},{"1616066":[156,70]},{"1616069":[254,67,190]},{"1616073":[224,34,28]},{"1616078":[156,98,106,234,170,162,28,126]},{"1616087":[118,60,255,66,255,126,195,66,231,102,126,60,60]},{"1616101":[126,126,189,129,189,153,66,60,127,68]},{"1616112":[62,16,30]},{"1616116":[62]},{"1616118":[60]},{"1616120":[62]},{"1616122":[28]},{"1616124":[65,62,34,26,34,44,34,158,223,1,133,250,1,19,14]},{"1616140":[4]},{"1616142":[65,62,42,42,34,26,10,4,57,31,60,31,59,31,57,30,132,136,1]},{"1616162":[3,131,142,1,19,63,63,30,31,15,3,124,136,46,208,223,96,222,32,255]},{"1616183":[255,48,255,64,131,166,1,5,241,118,49,125,241,206,131,64,2,7,63,27,63,16,31]},{"1616207":[31,1,134,76,2,2,59,17,27,131,86,2,1,110,144,141,156,1,13,177,53,181,181,177,206,20,8,54,8,117,10,95,34,131,184,1]},{"1616244":[73,34]},{"1616247":[5,28,62,95,119,126,127,131,172,2,21,14]},{"1616260":[159]},{"1616262":[222]},{"1616264":[255]},{"1616266":[207]},{"1616268":[159]},{"1616270":[14]},{"1616273":[14,145,86,49,77,145,14,134,160,2,67,32,127,1]},{"1616288":[77,133,173,2,2,123,113,123,131,220,2]},{"1616300":[78,74]},{"1616303":[255,3,78]},{"1616308":[78,132,154,2]},{"1616313":[78,240,49,48]},{"1616318":[41]},{"1616320":[2,1]},{"1616323":[27,38]},{"1616326":[1,1,26,35]},{"1616331":[131,124]},{"1616334":[6,124]},{"1616337":[248]},{"1616339":[240]},{"1616341":[224,34]},{"1616344":[5,28,36,68,136,16,32,141,48,3,1,63,1,37]},{"1616359":[25,1,62,15]},{"1616364":[31,14,59,26,119,54,238,108,220,88,248,240,240,192,15,17,37,73,146,164,8,48,240,70,96,3]},{"1616391":[63,132,120,3,6,30,119,62,238,124,220,120,132,132,3,6,31,63,127,254,252,248,240,228,54]},{"1616417":[67,1]},{"1616420":[67,3]},{"1616424":[7,34]},{"1616427":[3,1,1,3,3,131,47,4,37]},{"1616437":[67,128]},{"1616440":[67,192]},{"1616443":[34]},{"1616445":[3,128,128,192,192,131,41,4,19,7]},{"1616456":[6,1,28,3,250,5,242,13,66,61,1,2,4,5,27,229,143,127,131,63,4,67,64,128,15,48,192,142,112,134,124,140,120]},{"1616490":[128,192,192,240,126,254,252,141,176,1,16]},{"1616503":[28,63,94,118,126,126,75]},{"1616511":[128]},{"1616513":[198]},{"1616515":[239]},{"1616517":[255,132,155,4,23,94]},{"1616524":[12]},{"1616526":[128,70,169,53,169,189,82,12,31]},{"1616536":[31,8,31,4,63,26,127,56,120,48,131,143,3,224,62,20,18,25,36,71,72,48]},{"1616559":[192]},{"1616561":[140]},{"1616563":[30]},{"1616565":[190]},{"1616567":[158]},{"1616569":[30]},{"1616571":[63]},{"1616573":[30]},{"1616575":[64,140,18,162,146,18,33,30,63]},{"1616585":[27,4,17,14,59,4,127]},{"1616593":[249]},{"1616595":[240]},{"1616597":[96]},{"1616599":[35,17,16,40,70,137,144,96,192,128,156]},{"1616611":[190]},{"1616613":[255,68]},{"1616616":[190,131,248,1,7,64,156,162,217,178,166,65,62,153,224,4,4,188]},{"1616635":[254]},{"1616637":[191,132,43,5,5,126]},{"1616644":[60]},{"1616646":[64,188,67,194,185,8,66,60,63]},{"1616656":[31,4,31,14,63,146,231,4,21,140]},{"1616667":[158]},{"1616669":[190]},{"1616671":[254]},{"1616673":[255]},{"1616675":[62]},{"1616677":[12]},{"1616679":[192,140,146,162,210,193,50,12,228,48]},{"1616691":[7,68]},{"1616694":[15,67,31]},{"1616698":[67,63]},{"1616701":[8,127,7,15,15,31,31,63,63,127,68]},{"1616713":[224,67,240]},{"1616717":[67,248]},{"1616720":[12,252]},{"1616723":[254,224,224,240,240,248,248,252,254,32,31,67,16,15,6,35,31,47,28,124,56,120,34]},{"1616748":[63,131,179,5,15,124,120]},{"1616756":[56,240,112,224,48,224,56,240,152,112,124,56,60,34]},{"1616772":[248,131,202,5,2,124,60]},{"1616780":[255]},{"1617920":[12,130,130,69,199,74,207,118,255,110,255,95,255,191,34,255,3]},{"1617939":[192,192,67,160,224,224,39,32,224,163,224,166,225,212,243,1,1,3,2,6,5,12,11,13,10,15,11,15,8,15,15,240,240,16,240,112,144,240,80,176,208,96,160,192,64,128,128,35]},{"1617988":[67,4,28,7,2,126,76,124,8,56,48,48,39]},{"1618002":[3,2,126,124,124,39]},{"1618009":[67,4,28,1,24,24,67,8,56,21,48,48,20,60,18,126,17,255,29,255,1,255,130,254,68,124,56,56,9,123,52,127,69,37,111,13,9,123,115,115]},{"1618051":[33,127,175,255,34,254,174,254,67,40,120,8,120,120]},{"1618067":[9,59,53,127,36,68,111,37,16,73,123,51,51]},{"1618082":[41,123,42,126,36,252,170,254,45,127,41,34,123,5]},{"1618098":[16,112,104,248,69,72,216,21,144,240,96,96]},{"1618112":[24,8,60,4,255,41,126,42,126,2,255,17,239,41,198,198,133,206]},{"1618131":[3,60,4,126,2,68,255,1]},{"1618140":[255,68,51]},{"1618144":[67,255,51,134,241]},{"1618150":[34,255]},{"1618153":[225,68,255,237]},{"1618158":[193,68,255,159,35,255,25,69,255,1,255,171,255,199,255,207,255,199,255,223,27,231,175,95,243,31,239,63,233,63,237,63,19,34,255,7,27,231,191,95,227,63,237,63,131,52,1]},{"1618206":[45,142,45,1]},{"1618211":[35,34,255,12,35,255,123,255,247,127,119,255,193,255,247,255,23,52,255]},{"1618231":[199,72,255,231]},{"1618236":[195,134,109,1,8,179,255,243,255,231,255,207,255,131,36,255,2,135,255,243,132,145,1,2,179,255,135,36,255,67,179,255,6,183,255,131,255,231,255,199,36,255,2,195,255,159,132,145,1,131,148,1,35,255,4,227,255,207,255,135,68,255,179,133,156,1,4,195,255,147,255,187,134,133,1,135,126,1]},{"1618315":[131,68,255,179,133,172,1,131,130,1,131,228,1]},{"1618329":[243,134,171,1,11,255,231,255,219,255,165,231,189,255,219,255,231,36,255,8,231,247,203,239,213,239,149,223,169,131,123,1,12,222,253,219,230,215,249,221,230,215,248,230,251,248,34,255,12,163,127,99,223,195,63,107,215,251,151,167,127,31,34,255,67,223,255,133,32,2,1,229,254,131,44,2,67,227,255,7,163,127,107,215,219,47,103,223,131,60,2,8,255,255,254,255,252,255,249,255,147,132,113,1,137,238,1,135,232,1,146,240]},{"1618443":[255,70,255,252,4,254,255,253,255,252,36,255,20,59,127,131,143,115,255,3,255,255,143,251,254,253,253,254,254,251,253,227,243,204,68,255,128,14,255,255,115,127,131,255,7,127,135,255,11,255,3,255,35,150,126,2,36,255,17,248,255,250,255,248,255,255,139,255,127,195,255,121,255,195,255,249,127,131,124,1,15]},{"1618526":[1,7,2,14,4,28,8,56,16,112,32,224,192,192,34]},{"1618542":[10,28,24,62,16,51,32,103,34,111,5,125,131,156]},{"1618557":[13]},{"1618559":[56,50,126,66,206,132,156,68,220,8,248,240,240,133,145,2,9,243,252,239,243,239,247,215,239,223,237,35,255,8,63,255,207,255,183,255,23,255,187,67,255,219,7,246,213,239,236,243,224,255,240,134,158,2,10,203,255,251,127,247,175,247,15,207,63,63,136,227,2,10,243,255,240,255,248,255,247,255,239,255,223,34,255,24,31,255,207,255,15,255,31,255,239,255,215,255,235,255,217,255,221,254,223,252,221,255,223,255,231,131,237,2,7,255,35,255,99,255,227,127,99,132,10,2,133,92,2,31,253,251,189,243,190,249,215,252,227,255,214,255,191,249,255,255,223,127,187,207,183,217,255,3,255,231,31,255,255,231,191,240,72,255,224,132,88,3,13,143,115,135,121,199,57,207,49,255,1,255,3,255,15,39,255]},{"1618743":[129,42,255,12,240,255,229,255,202,255,133,255,138,255,133,255,192,34,255,14,127,255,31,255,175,255,87,255,163,255,93,255,61,255,224,132,152,2,3,254,243,255,227,132,24,1,3,255,125,255,251,132,121,3,133,92,2,134,93,2]},{"1618804":[248,68,255,240,2,224,255,192,132,188,2,12,127,255,31,191,79,31,239,143,119,239,19,231,25,68,255,128,1,192,251,68,255,240,131,44,2,6,255,1,255,97,159,243,31,68,255,15,134,172,3,132,49,4,131,122,3,67,239,255,12,251,254,255,253,206,251,159,247,251,239,243,255,247,37,255,19,225,255,241,255,49,255,45,255,223,255,167,255,103,255,139,255,31,243,255,35,67,255,243,1,63,225,42,255,1,129,126,70,255]},{"1618915":[139,197,4,2]},{"1618920":[255]},{"1618922":[139,212,4,68,255]},{"1618928":[5,139,255,63,227,255,89,131,133,1,1,127,193,132,13]},{"1618944":[35]},{"1618946":[3,1,1,3,3,67,4,7,1,8,15,133]},{"1618960":[6,119,255,110,255,94,255,190,136,253,4,9,128,128,192,192,35,224,38,225,20,243,131,126,3,8,103,255,171,255,107,255,170,255,167,34,255,79,9,15,138,112,3,3,254,239,252,210,34,255,135,203,4,37]},{"1619015":[12,211,255,213,254,219,254,215,252,221,255,231,255,249,34,255,79,149,243,4,148,243,150,241,147,74,240,144,12,203,255,171,127,219,127,235,63,123,255,103,255,95,136,253,4,35]},{"1619062":[1,255]},{"1619065":[137,102,5,35]},{"1619070":[4,192]},{"1619073":[96,128,32,80,192,160,80,255]},{"1619082":[143,189,4,45,255]},{"1619088":[254,136,227,2,6,224,255,135,255,31,255,127,133,111,3,9,253,231,250,207,244,159,249,158,243,157,133,127,3,8,63,231,95,179,207,121,143,249,47,131,124,5,143,4,6,12,241,251,229,247,201,239,147,223,167,255,15,255,63,134,50,3]},{"1619151":[240,67,223,224,3,185,198,144,239,132,66,3,2,63,247,15,67,251,7,3,237,19,197,59,133,49,3,12,251,207,251,143,251,15,253,7,254,147,255,255,141,70,255,181]},{"1619196":[142,38,255,8,173,255,165,255,161,255,169,255,109,38,255,8,152,255,123,255,72,255,107,255,152,38,255]},{"1619224":[205,68,255,180,2,181,255,205,38,255,67,191,255,67,63,255,131,12]},{"1619243":[35,255,4,68,255,109,255,108,132,227,6,37,255,8,93,255,201,255,85,255,221,255,93,135,143,2,67,249,255,67,243,255,68,231,255,3,30,30,63,33,67,63,45,15,127,65,254,158,240,144,96,96,246,155,248,207,253,231,255,243,132,97,2,7,252,255,255,111,249,223,243,191,131,136,1]},{"1619319":[127,68,255,63,11,255,227,255,245,251,254,241,236,251,198,255,143,132,12,1,7,244,255,250,247,253,251,254,229,133,42,4,133,145,2,3,242,253,238,241,67,220,227,67,184,199,139,112,6,7,253,3,13,243,255,209,255,224,132,154,3,133,154,3,34,255,8,140,255,187,255,138,255,187,255,140,38,255]},{"1619398":[218,70,255,90]},{"1619403":[166,38,255]},{"1619407":[141,132,197,6,2,141,255,189,38,255,8,209,255,151,255,81,255,215,255,209,38,255,13,252,255,240,255,233,246,217,230,219,228,186,197,188,195,137,112,6,5,131,127,97,159,57,199,47]},{"1619456":[255]},{"1622016":[19,254,6,253,44,251,24,247,56,231,108,219,198,189,131,126]},{"1622033":[255]},{"1622035":[255]},{"1622037":[255]},{"1622039":[255]},{"1622041":[255]},{"1622043":[255]},{"1622045":[255]},{"1622047":[255,230]},{"1622050":[217]},{"1622052":[157]},{"1622054":[110]},{"1622056":[118]},{"1622058":[185]},{"1622060":[155]},{"1622062":[103]},{"1622064":[230,230,217,217,157,157,110,110,118,118,185,185,155,155,103,103,1,252,35,249,7,243,143,231,23,207,39,159,67,63,129,126,2,255,4,255,8,255,16,255,32,255,64,255,128,255,1,255,253,252,251,249,215,211,119,111,224,216,218,188,237,46,254,125,2,255,4,255,40,255,144,255,39,255,67,255,145,255,2,255,193,124,99,185,55,211,155,103,201,55,196,59,254,1,255]},{"1622160":[2,255,4,255,8,255]},{"1622167":[255]},{"1622169":[255]},{"1622171":[255]},{"1622173":[255]},{"1622175":[255,245,243,203,199,20,12,36,24,90,60,230,103,193,193,3,1,12,255,56,255,243,255,231,255,195,255,153,255,62,255,254,255,129]},{"1622210":[195,129,102,66,60,36,24]},{"1622218":[60,24,102,36,195,66,129,129,195,195,102,102,60,60,24,24,60,60,102,102,195,195]},{"1622272":[239,28,219,54,172,123,114,205,186,229,75,180,235,20,239,16,223,255,183,255,123,255,205,255,229,255,180,255,23,255,219,255,253,10,246,41,223,32,254,1,253,2,247,8,255]},{"1622318":[255]},{"1622320":[255,255,169,255,166,255,159,255,254,255,233,255,243,255,255,255,63,188,124,115,240,239,41,223,89,63,219,191,186,127,188,127,67,252,143,240,31,224,63,192,255,128,127,128,255]},{"1622366":[255]},{"1622368":[220,29,56,203,200,246,247,251,251,253,130,252,97,254,57,254,226,63,244,15,249,7,252,3,254,1,255,1,255]},{"1622398":[255]},{"1622400":[56,185,11,200,100,2,153,167,251,231,223,227,53,75,99,28,70,255,52,255,153,255,64,255]},{"1622425":[255]},{"1622427":[255,128,255,128,255,24,217,176,51,64,134,33,93,153,165,156,160,178,204,233,30,38,255,76,255,57,255,130,255,66,255,67,255,1,255]},{"1622463":[255,56,185,11,200,100,2,153,167,251,231,223,227,53,75,99,28,70,255,52,255,153,255,64,255]},{"1622489":[255]},{"1622491":[255,128,255,128,255,24,217,176,51,64,134,33,93,153,165,156,160,178,204,233,30,38,255,76,255,57,255,130,255,66,255,67,255,1,255]},{"1622527":[255,126,129,195,126,165,126,163,126,137,126,161,126,195,126,126,129]},{"1622545":[255,126,255,126,255,126,255,126,255,126,255,126,255]},{"1622559":[255,1,252,66,249,55,243,111,231,219,195,191,153,125,62,238,111,2,255,4,255,8,255,16,255,36,255,66,255,129,255,16,255,56,186,9,205,131,235,195,243,195,239,146,210,30,159,8,203,69,255,50,255,20,255,12,255,16,255,45,255,96,255,52,255,62,127,159,191,195,211,131,187,1,101,24,218,8,185,72,75,128,255,64,255,44,255,68,255,154,255,37,255,70,255,180,255,56,186,9,205,131,235,195,243,195,239,146,210,30,159,8,203,69,255,50,255,20,255,12,255,16,255,45,255,96,255,52,255,62,127,159,191,195,211,131,187,1,101,24,218,8,185,72,75,128,255,64,255,44,255,68,255,154,255,37,255,70,255,180,255,129,103,65,189,35,91,145,173,232,246,228,235,242,245,249,250,24,255,2,255,132,255,66,255,1,255,16,255,8,255,4,255,241,246,226,237,132,154,137,181,19,107,33,221,88,190,188,127,8,255,16,255,97,255,66,255,132,255,2,255,1,255]},{"1622783":[255,223,60,249,118,253,50,205,50,161,94,167,88,143,112,175,80,189,255,118,255,50,255,50,255,94,255,89,255,115,255,87,255,255]},{"1622818":[189,66,27,228,207,48,231,24,243,12,247,8,255]},{"1622832":[255,255,254,255,253,255,59,255,159,255,207,255,235,255,231,255,156,127,134,127,65,191,95,63,175,159,147,175,12,99,11,200,255]},{"1622866":[255]},{"1622868":[127,128,255,128,127,192,95,224,159,240,55,252,61,254,93,254,218,252,155,253,151,251,9,245,51,195,206,46,255]},{"1622898":[255]},{"1622900":[255,1,254,1,252,3,250,7,252,15,209,63,195,60,74,188,34,92,154,172,146,172,158,160,34,65,29,220]},{"1622929":[255,1,255,129,255,65,255,65,255,65,255,156,255,34,255,37,30,209,206,238,224,233,229,225,233,193,221]},{"1622957":[54,200,43,192,255,32,255,17,255,18,255,22,255,34,255,201,255,20,255,195,60,74,188,34,92,154,172,146,172,158,160,34,65,29,220]},{"1622993":[255,1,255,129,255,65,255,65,255,65,255,156,255,34,255,37,30,209,206,238,224,233,229,225,233,193,221]},{"1623021":[54,200,43,192,255,32,255,17,255,18,255,22,255,34,255,201,255,20,255,127,128,224,96,207,64,155,8,156,8,156,8,156,8,156,8]},{"1623057":[255,31,255,48,255,103,255,103,255,103,255,103,255,103,255,251,38,229]},{"1623076":[253]},{"1623078":[253,60,225]},{"1623082":[129,126,129,126,255]},{"1623088":[88,255,90,255,66,255,66,255,126,255]},{"1623099":[255]},{"1623101":[255]},{"1623103":[255,128,127]},{"1623107":[128,96,128,191,63,191,63,192,127,128,127,255]},{"1623121":[255,127,255,127,255,64,255,64,255]},{"1623131":[255]},{"1623133":[255]},{"1623135":[255,181,66,231,36,165,102,165,102,165,102,165,102,165,102,165,126,24,255,24,255,24,255,24,255,24,255,24,255,24,255]},{"1623167":[255,156,127,128,127,192,63,255,64,179,127,192,63,255]},{"1623182":[127,128]},{"1623185":[255]},{"1623187":[255]},{"1623189":[255]},{"1623191":[255]},{"1623193":[255]},{"1623195":[255]},{"1623197":[255]},{"1623199":[255,1,254,3,252,255]},{"1623206":[159,254,1,254,255]},{"1623212":[255]},{"1623214":[255]},{"1623217":[255]},{"1623219":[255]},{"1623221":[255]},{"1623223":[255]},{"1623225":[255]},{"1623227":[255]},{"1623229":[255]},{"1623231":[255,64,191,160,223,228,12,162,14,178,86,178,86,180,70,176,90]},{"1623249":[255]},{"1623251":[255,19,255,81,255,73,255,73,255,73,255,69,255,255]},{"1623266":[255]},{"1623268":[255,63,240,48,225,33,236,44,228,36,240,48]},{"1623281":[255,127,255,64,255,79,255,94,255,83,255,91,255,79,255,2,6,5,12,7,16,3,36,25,66,60,129,126]},{"1623310":[253]},{"1623312":[253,255,251,255,255,255,255,255,255,255,255,255,255,255,255,255,49,191,35,191,7,191,39,191,63,222,14,255,64,249,61,226,78,255,92,255,120,255,88,255,97,255,113,255,63,255,29,255,249,246,225,222,129,254,9,254,13,254,15,254,64,241,144,111,15,255,63,255,127,255,247,255,243,255,241,255,190,255,144,255,129,103,65,189,35,91,145,173,232,246,228,235,242,245,249,250,24,255,2,255,132,255,66,255,1,255,16,255,8,255,4,255,255,255,191,191,95,127,57,249,224,241,238,255,240,254,253,253]},{"1623441":[255,64,255,128,255,6,255,14,255]},{"1623451":[255,1,255,2,255,224,227,209,223,175,191,71,103,39,127,62,126,190,255,127,255,28,255,32,255,64,255,152,255,128,255,129,255]},{"1623485":[255]},{"1623487":[255,56,185,8,203]},{"1623493":[102,129,189,195,219,193,221,131,179,14,110,70,255,52,255,153,255,66,255,36,255,34,255,76,255,145,255,62,255,31,159,27,219,3,99,129,185,128,188]},{"1623533":[102,8,203]},{"1623537":[255,96,255,36,255,156,255,70,255,67,255,153,255,52,255,155,8,159,15,153,15,143,16,192,64,255,96,191,112,156,108,103,255,96,255,96,255,96,255,63,255,31,255]},{"1623581":[255,3,255,155,8,159,15,153,15,143,16,192,64,255,96,191,127,156,127,103,255,96,255,96,255,96,255,63,255,31,255]},{"1623613":[255]},{"1623615":[255,159,1,1,1,1,1,1,1,51,51,254,255,254,255,206,255,254,255,254,255,254,255,254,255,204,255]},{"1623643":[255]},{"1623645":[255]},{"1623647":[255,177,80,217,56,155,120,147,112,147,112,153,120,158,126,129,120,15,255,7,255,7,255,15,255,15,255,7,255,1,255,7,255,255]},{"1623683":[255,254,255,1,1,1,1,243,1,255,1,255,1]},{"1623697":[255]},{"1623699":[255]},{"1623701":[255,254,255,254,255,254,255,254,255,254,255,240,15,225,30,195,60,135,121,14,243,30,227,63,201,119,156,240,255,224,255,192,255,128,255,1,255,1,255]},{"1623741":[255,8,255,160,87,168,90,165,95,181,111,184,119,191,56,128,31,255]},{"1623760":[72,255,69,255,64,255,96,255,112,255,120,255,127,255]},{"1623775":[255,224,32,230,38,246,54,255]},{"1623784":[191,127,234,85,149,63,224,64,95,255,89,255,73,255,127,255]},{"1623801":[255]},{"1623803":[255,64,255,63,255,227,24,140,115,24,231,40,215,71,187,157,127,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,57,198]},{"1623843":[241,62,223,39,190,3,191,35,191,56,183,63,191,57,255,127,255,97,255,89,255,120,255,92,255,79,255,64,255,128,127,1,130,121,254,56,255,24,255,141,254,226,223,248,247,128,255,255,255,135,255,198,255,230,255,115,255,60,255,15,255,241,246,226,237,132,154,137,181,19,107,33,221,88,190,188,127,8,255,16,255,97,255,66,255,132,255,2,255,1,255]},{"1623935":[255,226,227,209,223,175,191,95,127,48,121,49,127,63,255,127,255,28,255,32,255,64,255,128,255,134,255,128,255]},{"1623965":[255]},{"1623967":[255,231,231,139,207,155,223,199,255,252,253,253,255,158,222,204,253,24,255,48,255,32,255]},{"1623991":[255,2,255]},{"1623995":[255,33,255,2,255,28,221,24,219]},{"1624005":[102,131,191,193,221,224,230,248,251,252,253,34,255,36,255,153,255,64,255,34,255,25,255,4,255,2,255,60,189,120,123,240,246,33,237,33,41,193,221]},{"1624045":[54,8,235,66,255,132,255,9,255,18,255,214,255,34,255,201,255,20,255,17,17,17,18,17,3,19,17,17,17,17,18,17,3,19,17,17,17,17]},{"1624128":[49,17,17,17,17,35,51,23,1,51,51,17,17,1,16]},{"1624144":[49,17,17,17,17,35,51,23,17,17,17,18,17,1,16]},{"1624160":[17,17,17,18,17,1,17,49,49,17,17,17,17,19,51,19,49,17,17,17,17,35,51,39,17,17,17,18,17,3,19,50,17,17,17,17,17,1,17,49,65,17,18,16,33,1,51,23,49,17,17,17,33,35,51,23,1,17,17,19,35,32,3,39]},{"1624237":[16]},{"1624248":[17,17,17,17,17,34,34,39,1,17,17,18,17,35,19,55,17,18,17,18,17,1,19,35]},{"1624280":[34,34,34,34,34,2,34,50]},{"1624320":[49,17,17,17,1,35,51,23]},{"1624336":[49,17,17,17,17,35,51,39,1,17,17,18,17,3,35,35,1,17,17,18,17,3,35,35]},{"1624368":[1,17,17,3,49]},{"1624374":[3,19]},{"1624381":[32]},{"1624383":[7]},{"1624405":[16]},{"1624560":[17,17,17,17,17,33,34,39]},{"1624569":[33,17,17,17,1,17,17]},{"1624577":[17,17]},{"1624584":[49,17,17,17,17,3,19,23,49,17,17,17,17,35,51,23,49,67,17,17,17,3,3,23,49,17,17,17,17,3,3,23,49,67,17,17,17,3,3,23,49,17,17,17,17,3,51,23,49,17,17,17,17,3,19,39,49,67,17,17,17,3,3,23,49,67,17,17,17,3,3,39,49,67,17,17,17,3,51,23,49,17,17,17,17,35,51,23,17,17,17,33,17,1,19,51,17,17,17,17,17,3,35,35,49,17,17,18,17,35,51,23,49,17,17,18,17,35,51,23]},{"1624712":[49,17,17,33,17,1,51,51]},{"1624728":[19,51,51,48,17,1,16]},{"1624736":[1,51,51,16,17,1,16]},{"1624744":[17,17,17,17,17,3,19,33,49,17,17,17,17,3,19,33]},{"1624768":[49,17,17,19,17,33,51,23]},{"1624798":[3,3]},{"1624806":[3,3]},{"1624864":[17,17,17,17,17,1,19,51]},{"1624912":[81,49,17,17,17,3,3,23,49,17,17,17,17,1,17,17]},{"1624936":[49,17,17,18,17,35,51,23,49,17,17,18,17,35,51,23,17,17,17,18,17,3,51,19]},{"1624968":[49,17,17,19,17,3,51,19]},{"1625032":[17,17,17,18,17,17,17,49]},{"1625056":[1,17,17,16,33,3,51,51]},{"1625096":[1,17,17,18,17,3,50,50]},{"1625112":[1,18,33,32,18]},{"1625123":[16,1]},{"1625128":[17,17,17,17,17,1,35,35,1,17,17,16,1,1,51,23]},{"1625152":[1,17]},{"1625157":[4]},{"1625176":[49,17,17]},{"1625180":[17,3,51,35]},{"1625185":[17,17,16,1,1,16]},{"1625193":[17,17]},{"1625196":[17,1,16]},{"1625200":[17,17,17,17,33,1,50,35,49,17,17,18,33,3,51,18,17,17,17,16,17,1,19,50,17,17,17]},{"1625233":[17,17,16,17]},{"1625248":[17,17,17,18,17,3,19,35]},{"1625288":[17,17,17,18,33,1,3,18,17,17,17,18,17,2,50,17,1,17,17,16,1,1,18,50,1,17,17,18,17,3,35,34,1,17,17,18,17,3,35,34]},{"1625354":[17]},{"1625357":[2,2]},{"1625361":[17,17]},{"1625365":[5]},{"1625373":[1,2]},{"1625376":[1,17,17,16,17,3,1,49,49,17,17,17,33,3,51,19,49,17,17,17,33,3,51,19,17,17,17,17,17,33,35,39,1,17,17,18,17,3,51,17,1,17,17,18,17,3,51,17,17,17,17,17,17,3,19,19,17,17,17,17,17,1,16]},{"1625488":[17,17,17,18,17,1,17,49]},{"1625577":[17,17,48,17]},{"1625585":[17,17,48,17]},{"1625624":[1,17,17,48,17]},{"1625646":[1,49]},{"1625654":[1,49,1,17,17,16,18,3,19,19]},{"1625672":[81,17,17,48,33,3,49,49,80]},{"1625689":[17,17]},{"1625697":[17,17]},{"1625702":[64]},{"1625705":[17,17]},{"1625709":[4]},{"1625712":[1,17,17]},{"1625720":[17,17,17,18,17,1,17,33]},{"1625729":[1,17]},{"1625732":[2]},{"1625741":[16,2,34]},{"1625749":[32]},{"1625751":[7,17,17,17,17,17,33,17,39]},{"1625777":[3,51]},{"1625788":[2]},{"1625792":[255,252,253,250,255,241,255,227,255,199,255,143,255,159,255,255,191,115,255,127,255,255,255,255,255,255,255,255,255,255,255,255,249,198,225,158,253,159,251,157,223,186,239,220,255,227,255,255,231,155,195,191,195,63,131,127,135,127,135,127,255,135,255,255,255,24,255,24,255,24,255,24,255,24,255]},{"1625868":[255,129,255,195,255,231,255,231,255,231,255,231,255,231,255,231,255,231,255,231,255,24,255]},{"1625892":[255]},{"1625894":[255,24,255,24,255,24,255,24,255,24]},{"1625906":[63,63,127,68,111,80,114,79,115,109,126,74,124,68]},{"1625922":[255,255,255]},{"1625926":[255]},{"1625929":[255,255,255]},{"1625936":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,255,249,255,229,255,253,255,79,255,127,255,127,255]},{"1625970":[1,1,2,3,1,1,3,3,5,7,5,7,8,15,255,255,255,1,255,1,1,255,255,255,255,255,255,255,255,255,255,255,255]},{"1626004":[255]},{"1626007":[255,255,255,255,255,255,255,255,255]},{"1626018":[192,192,32,224,160,224,32,224,227,224,38,225,212,243,15,15,63,48,119,72,120,71,215,175,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,255,255,255,255,255,255,247,255,240,255,244,251,247,248,247,248,246,249,247,249,251,252,253,254,254,255,255,255,255,255,255,255,255,255,252,255,240,255,231,248,239,240,223,224,219,228,217,230,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,255,128,255,184,159,254,207,255,231,255,243,255,255,255,255,225,255,241,255,49,255,45,255,223,255,167,255,103,250,255,253,255,250,207,247,159,239,251,255,243,255,247,255,255,255,255,225,255,241,255,241,63,237,63,223,255,191,231,127,231,255,255,255,255,255,255,192,255,255,191,255,128,255,192,255,255,255,255,255,255,255,255,15,255,231,255,247,31,247,31,247,31,255,255,252,255,240,255,233,246,217,230,219,228,186,197,188,195,255,255,252,255,242,253,238,241,220,227,220,227,184,199,184,199,255,255,252,255,243,252,239,240,223,224,223,224,185,198,144,239,255,255,253,251,189,243,190,249,215,252,227,255,214,255,191,249,255,255,223,127,187,207,183,217,255,3,255,231,31,255,255,231,255,255,255,255,255,255,254,253,255,242,255,225,247,232,255,192,255,255,159,255,109,255,115,191,255,79,255,135,207,55,231,27,255,255,254,255,191,250,191,226,255,146,255,146,255,202,255,202,255,255,127,255,125,223,253,71,255,73,255,73,255,83,255,83,255,255,255,199,223,163,219,37,239,145,119,137,127,195,159,247,251,254,255,253,206,251,159,247,251,239,243,255,247,255,255,255,255,227,255,243,127,243,63,249,159,249,207,249,239,243,255,255,254,255,253,255,251,207,247,159,239,251,255,243,255,247,255,255,255,255,225,255,241,255,241,255,237,255,223,255,191,255,127,255,255,255,225,255,249,255,229,255,253,255,79,255,127,255,127,255,247,159,247,159,247,159,247,159,247,159,247,159,255,207,255,255,156,227,134,249,193,254,223,224,239,240,243,252,252,255,255,255,176,207,191,192,223,224,223,224,239,240,243,252,252,255,255,255,163,220,183,200,223,224,223,224,239,240,243,252,252,255,255,255,191,240,255,224,255,224,255,224,255,224,255,240,255,252,255,255,143,115,135,121,199,57,207,49,255,1,255,3,255,15,255,255,239,208,239,208,255,192,255,224,255,224,255,240,255,252,255,255,255,255,255,255,255,255,255,254,255,254,255,254,255,254,255,252,255,255,255,135,255,3,255,49,255,121,255,121,127,241,191,97,255,35,255,7,255,135,255,199,255,207,191,207,127,159,255,63,255,255,255,255,255,255,255,255,254,255,253,255,253,255,254,255,255,255,255,193,221,227,221,163,227,157,119,137,111,215,159,255,255,254,255,252,254,249,253,242,251,228,255,224,255,240,255,248,255,127,247,63,115,159,57,207,159,103,207,51,255,1,243,12,255,255,255,255,255,255,255,255,255,255,247,255,231,255,195,254,255,255,255,231,247,203,255,225,223,225,191,203,127,159,255,63,255,255,255,255,255,255,255,254,255,250,255,240,249,238,247,232,255,255,255,255,255,195,255,11,127,163,255,7,255,135,255,15,255,255,240,255,229,255,202,255,133,255,138,255,133,255,192,255,255,255,127,255,31,255,175,255,87,255,163,255,93,255,61,255,255,255,255,224,255,192,248,199,248,199,255,192,255,192,255,192,255,255,255,7,255,7,31,231,31,231,255,7,255,7,255,7,255,255,254,255,252,255,253,255,255,240,255,224,247,255,247,254,255,252,253,250,255,241,255,227,255,199,255,143,255,159,255,255,191,115,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,251,255,51,255,7,255,7,255,47,255,103,255,71,252,255,248,255,245,255,239,243,223,231,191,207,255,159,255,255,111,255,159,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,243,254,225,255,193,255,131,255,135,255,207,255,255,255,251,4,255,1,255,3,255,135,255,207,255,255,255,255,255,255,199,252,135,252,131,255,168,255,176,255,152,255,193,255,255,255,255,127,255,255,127,255,31,255,63,255,127,255,255,255,255,255,255,192,255,208,255,193,255,192,255,193,255,227,255,255,255,255,255,15,255,223,255,63,255,31,255,95,255,191,255,255,255,255,224,255,252,255,254,255,254,243,255,227,255,199,255,207,255,255,125,255,251,255,247,255,239,255,31,255,255,255,255,255,255,255,255,197,255,192,255,192,255,207,248,223,255,207,255,224,255,255,255,87,255,7,255,7,255,255,15,255,255,255,255,7,255,255,247,254,247,254,247,252,247,252,247,254,243,254,255,224,255,255,47,255,47,255,239,63,175,127,175,127,207,127,255,7,255,255,255,240,255,252,255,254,255,254,255,254,255,254,255,254,255,255,255,15,255,63,255,127,255,31,255,63,255,31,255,127,255,255,255,255,248,255,243,255,240,255,248,255,247,255,239,255,223,255,255,255,31,255,207,255,15,255,31,255,239,255,215,255,235,255,255,255,248,255,243,255,240,255,248,255,247,255,239,255,215,239,27,231,191,95,227,63,237,63,227,63,237,63,45,255,255,255,27,231,175,95,243,31,239,63,233,63,237,63,19,255,255,255,27,231,191,95,227,63,237,63,227,63,237,63,35,255,255,255,35,255,123,255,247,127,119,255,193,255,247,255,23,255,255,255,255,255,31,255,207,255,15,255,31,255,239,127,247,63,75,255,255,255,255,255,255,143,159,224,231,248,185,222,222,231,223,225,255,255,255,191,255,31,255,31,255,63,191,111,127,207,255,143,255,255,255,248,255,243,253,231,250,207,244,159,249,158,243,157,255,255,255,31,255,207,63,231,95,179,207,121,143,249,47,249,255,255,255,255,255,252,255,252,255,252,255,254,255,253,255,252,255,255,255,255,255,59,127,131,143,115,255,3,255,255,143,251,255,255,242,255,243,253,247,255,248,255,248,255,203,255,199,252,255,255,127,255,111,191,111,255,159,247,247,255,251,15,255,247,223,255,223,255,223,255,223,255,223,255,231,255,248,255,255,255,227,255,227,255,227,255,235,255,219,255,231,255,31,255,255,255,216,231,223,224,223,224,223,224,222,225,231,248,248,255,255,255,27,231,163,95,227,31,235,23,219,39,231,31,31,255,255,255,217,255,221,254,223,252,221,255,223,255,231,255,248,255,255,255,35,255,99,255,227,127,99,255,219,255,231,255,31,255,255,255,211,255,213,254,219,254,215,252,221,255,231,255,249,255,255,255,203,255,171,127,219,127,235,63,123,255,103,255,95,255,255,255,223,224,223,224,191,192,191,192,191,192,206,241,240,255,255,255,255,15,255,135,255,65,61,227,99,255,127,255,255,255,255,255,246,155,248,207,253,231,255,243,255,254,255,252,255,252,255,255,111,249,223,243,191,231,255,207,255,127,255,63,255,63,255,255,254,253,253,254,254,251,253,227,243,204,255,128,255,128,255,255,255,115,127,131,255,7,127,135,255,11,255,3,255,35,255,255,227,255,224,255,242,255,252,255,248,255,248,255,254,255,255,255,15,251,7,255,119,255,255,143,255,151,255,151,255,31,255,255,255,255,255,242,253,243,255,247,255,248,255,248,255,203,252,199,255,255,255,127,191,111,255,111,247,159,255,247,15,251,247,255,255,255,255,254,255,248,255,240,255,240,255,224,255,192,255,128,255,255,255,127,255,31,191,79,31,239,143,119,239,19,231,25,255,255,255,255,252,255,243,252,239,243,239,247,215,239,223,237,255,255,255,255,63,255,207,255,183,255,23,255,187,255,219,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,231,255,199,255,143,255,31,255,63,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,241,251,229,247,201,239,147,223,167,255,15,255,63,255,127,255,255,195,255,249,255,195,255,249,255,67,255,255,255,255,255,255,255,255,255,247,255,240,255,244,251,247,248,247,248,255,255,252,255,240,255,231,248,239,240,223,224,219,228,217,230,255,255,199,255,192,255,216,255,223,239,220,239,217,239,211,238,255,255,243,239,43,255,239,255,131,125,239,255,171,127,123,175,255,255,255,252,255,243,251,207,251,143,251,15,253,7,254,147,255,227,255,224,255,242,255,252,255,248,255,248,255,254,255,255,251,15,255,7,255,119,143,255,151,255,151,255,31,255,255,255,255,128,255,128,255,192,251,255,240,255,240,255,248,255,255,255,255,1,255,97,159,243,31,255,15,255,15,255,31,255,255,255,219,246,213,239,236,243,224,255,240,255,252,255,255,255,255,255,203,255,251,127,247,175,247,15,207,63,63,255,255,255,255,255,244,255,250,247,253,251,254,229,255,199,255,207,255,255,255,255,127,255,255,255,243,255,227,255,243,255,243,255,97,255,255,255,227,255,245,251,254,241,236,251,198,255,143,255,159,255,255,255,255,127,255,255,227,255,217,255,243,255,231,255,65,255,255,255,255,127,255,255,243,255,227,255,211,255,193,255,115,255,255,255,246,249,247,249,251,252,253,254,254,255,255,255,255,255,255,255,220,231,220,227,238,243,239,241,247,248,249,254,254,255,255,255,222,229,221,226,251,228,239,249,198,187,233,255,252,239,255,255,251,55,219,119,187,247,119,239,239,223,223,63,63,255,255,255,255,209,255,224,231,255,248,255,255,231,255,248,255,255,255,255,255,255,255,255,227,255,221,255,190,255,191,255,191,255,191,255,255,255,255,255,227,255,221,227,190,193,191,192,191,192,191,192,255,255,255,248,254,241,252,243,254,225,248,231,252,227,240,207,255,255,255,127,247,59,103,185,123,189,127,173,255,77,239,85,255,255,248,255,231,255,223,254,223,252,191,248,185,255,184,255,255,255,255,255,255,255,248,255,247,255,239,255,238,255,241,255,255,255,31,255,111,255,247,255,123,255,187,255,221,255,221,255,255,255,254,255,254,255,252,255,253,255,254,255,254,255,255,255,127,255,63,255,63,255,31,255,31,255,191,255,191,255,127,255,255,255,255,255,199,255,223,248,255,231,251,255,227,255,255,255,255,255,255,227,255,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,255,249,255,248,255,248,255,252,255,255,255,255,63,255,255,191,191,95,191,95,255,31,255,63,255,255,255,255,255,225,255,237,255,237,255,193,255,159,255,159,255,255,255,255,255,69,255,1,255,171,255,199,255,207,255,199,255,223,255,255,201,255,182,201,190,193,190,193,221,227,235,247,247,255,223,255,239,255,247,255,251,255,253,255,254,255,255,255,255,255,223,224,239,240,247,248,251,252,253,254,254,255,255,255,255,255,249,198,225,158,253,159,251,157,223,186,239,220,255,227,255,255,231,155,195,191,195,63,131,127,135,127,135,127,255,135,255,255,220,191,222,191,231,159,248,199,255,192,255,224,255,248,255,255,251,255,231,249,199,248,206,241,225,222,247,200,255,225,255,255,221,255,189,255,189,255,189,255,219,255,231,255,255,255,255,255,255,254,255,252,255,252,255,248,255,250,255,253,255,253,255,254,127,255,63,255,63,255,31,255,127,159,255,63,255,63,255,127,255,255,255,255,255,199,248,223,231,255,255,251,255,227,255,255,255,255,227,255,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,253,252,251,253,250,255,251,255,248,255,255,255,255,31,255,127,159,255,95,191,223,127,191,255,127,255,255,255,255,255,231,255,219,255,165,231,189,255,219,255,231,255,255,255,255,255,231,247,203,239,213,239,149,223,169,255,195,255,255,255,255,255,255,235,255,213,235,221,227,235,247,247,255,255,255,255,255,227,255,217,255,217,255,179,255,179,255,135,255,255,255,255,255,227,255,243,255,231,255,231,255,207,255,135,255,255,255,255,255,227,255,217,255,243,255,231,255,197,255,147,255,255,255,255,255,193,255,243,255,199,255,243,255,179,255,135,255,255,255,255,255,217,255,209,255,179,255,129,255,231,255,199,255,255,255,255,255,225,255,207,255,199,255,243,255,243,255,135,255,255,255,255,255,241,255,231,255,199,255,147,255,179,255,135,255,255,255,255,255,227,255,217,255,185,255,243,255,231,255,207,255,255,255,255,255,227,255,217,255,193,255,179,255,179,255,135,255,255,255,255,255,227,255,217,255,217,255,195,255,243,255,135,255,255,255,255,255,255,255,231,255,231,255,255,255,207,255,207,255,255,255,255,255,254,255,252,255,249,255,147,255,199,255,231,255,255,255,255,255,255,255,231,255,231,255,131,255,207,255,207,255,255,255,255,255,255,255,255,255,255,255,131,255,255,255,255,255,255,255,215,255,147,255,17,255,29,255,1,255,131,255,199,255,255,255,255,255,201,255,182,255,190,255,190,255,221,255,235,255,247,255,255,239,255,199,255,41,255,171,255,131,255,17,255,57,255,255,255,255,255,239,255,199,255,199,255,131,255,1,255,1,255,255,251,255,225,255,192,255,192,255,192,255,192,255,225,255,255,255,255,139,255,31,243,255,35,255,243,255,243,63,225,255,255,255,255,139,255,63,227,255,89,255,243,255,231,127,193,255,255,255,255,139,255,127,195,255,121,255,195,255,249,127,195,255,255,255,255,255,255,223,239,191,247,159,251,207,253,231,254,243,254,243,249,255,252,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,31,255,143,255,199,255,231,255,254,255,253,207,251,159,247,251,239,243,255,247,255,255,255,255,255,255,225,255,241,255,241,255,237,255,223,255,191,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,248,255,224,255,135,255,31,255,127,255,252,255,249,255,249,255,243,255,243,255,231,255,231,255,231]},{"1630208":[75,190,126,3,188,124,185,121,37,1,3,3,6,255,255,42]},{"1630225":[1,255,127,38,255]},{"1630232":[132,38]},{"1630235":[3,179,179,243,243,35,255,1,223,223,42,255,14]},{"1630250":[255,239,16,220,39,178,79,97,159,192,63,128,127,39]},{"1630265":[131,72]},{"1630268":[131,72]},{"1630271":[69]},{"1630273":[255,137,24]},{"1630277":[67,255]},{"1630280":[10,191]},{"1630283":[159]},{"1630285":[207]},{"1630287":[224]},{"1630289":[127]},{"1630291":[245,34]},{"1630294":[5,123,123,59,31,128,138,69,127,255,5,120,248,183,127,192,63,67,255]},{"1630314":[3,63,31,15,7,133,92]},{"1630322":[3,128,127,255,127,67,128]},{"1630330":[132,96]},{"1630333":[131,25]},{"1630337":[127,131,87]},{"1630341":[11,112,143,112,144,227,35,199,68,143,136,159,144,67,191,160,224,39]},{"1630360":[15,28,56,114,102,70,70,74,181,177,251,65,115,189,191,244,117,251,11,255,71,255,64]},{"1630384":[132,204,124,14,7,32,48,127,128,95,160,159,96,127,224,71,159,128,35]},{"1630404":[35,96,4,255,222,255,237,253,34,241,2,243,146,187,68]},{"1630420":[63,7,33,51,63,63,94,196,192,192,38,255,7,179,255,77,77,12,76]},{"1630440":[206,35]},{"1630443":[20,76,254,191,179,49,96,159,76,179,174,113,126,225,182,169,186,173,189,174,172,191,35]},{"1630467":[35,64,224,38,7]},{"1630473":[12,4,25,8,59,24,115,48,241,112,176,48,188,60]},{"1630488":[3,7,7,15,15,79,67,2]},{"1630497":[34]},{"1630499":[28]},{"1630501":[24]},{"1630503":[28]},{"1630505":[36]},{"1630507":[98]},{"1630509":[2,40]},{"1630512":[7,179,115,167,103,143,79,159,95,67,191,127,13,158,126,206,62,12,24,48,32]},{"1630535":[1,1,223,222,67,95,94,1,63,62,67,47,46,3,31,30,23,22,35,224,34,240]},{"1630558":[248,140,24]},{"1630562":[34]},{"1630564":[39,255,5,155,103,205,51,235,20,69,233,23,3,105,151,185,199,37,112,13,48,16,128,127,15,255,224,241,1,242,3,132,5,200,67,135,202,7]},{"1630604":[14,12,120,50,48,48,73,255]},{"1630613":[15,191]},{"1630616":[223]},{"1630618":[224]},{"1630620":[138,128,27,59,59,123,59,31,36,60,67,66,102,4,90,126,219,255,231,131,107]},{"1630642":[4]},{"1630644":[195,153,153,129,35]},{"1630650":[7,128]},{"1630653":[128,127,192,64,159,31,67,166,39,13,191,63,143,63,127]},{"1630669":[63,96,88,88,64,64,111,160,67,127,176,11,119,184,127,159,127,128,64,191,255,63,22,7,132,163]},{"1630696":[8]},{"1630698":[255,65,255,33,255,35,255,7,99,253,131,108]},{"1630711":[2,60,28,24,36]},{"1630717":[5,159,128,255,224,255]},{"1630724":[67,31,32,23,159,160,223,96,223,32,96]},{"1630737":[192,192,64]},{"1630742":[255,254,254,252,252,224,241,144,243,112,68,255,248,6,254,1,3,31,126,252,120,132,101]},{"1630766":[26,184,255,240,247,224,231,192,207,136,255,112,255,227]},{"1630782":[8,24,56,120,240,96,169,190,242,237,246,9,67,158,161,6,190,161,254,97,252,35,64,131,74,1,8,72,8]},{"1630812":[158,30,135,7,195,67,67,248,120,15,124,60,63,15,127,7,97,120,60,7,7,3]},{"1630836":[232,247,67,240,239,1,208,239,67,224,223,67,160,223,39]},{"1630852":[15,246,207,214,239,254,231,234,247,253,243,254,249,255,252,255,254,141,180,1,132,27,3,134,190,1,41]},{"1630880":[12,253,254,2,252,254]},{"1630887":[255,1,2,253,255,252,255,98,255]},{"1630897":[1,34]},{"1630900":[3,190,126,254,62,67,62,94,3,190,222,222,62,67,190,126,3,1,1,129,129,36,1]},{"1630924":[254,149,98]},{"1630928":[79,190,126,39,1,5,255,255,15,15,3,3,35,1,141,186,1,3,142,62,192,64,67,128,127,2,255]},{"1630956":[255,132,173,3,1,65,63,37]},{"1630965":[224,47,191,184,247,244,251,10,60,4,190,130,159,135,207,64,239,32,122,12,6,195,73,96,48,22,127,1,191,129,95,65,47,33,23,17,243,241,255,1,255,65,184,220,236,244,248,12]},{"1631014":[60,71,95,160,3,122,133,96,159,131,76,2,138,112]},{"1631030":[49,68,255,243,67,247,255,1,227,255,136,247,2,55]},{"1631045":[11,122,167,117,174,107,188,119,184,74,181,112,143,139,252,3,10,80,96,240,208,160,192,96,160,192,64,128,132,255]},{"1631076":[23,143,15,31,31,63,127,255,255,102,158,50,206,153,231,204,243,231,248,243,252,248,255,127,255,135,152,3,2,63,255,31,68,255,15]},{"1631112":[159,36,255]},{"1631116":[127,137,111]},{"1631120":[46,255,39]},{"1631124":[69,189,126,69,161,126,67,189,126,137,184,1,5,1,1,2,2,6,6,35,14,35,30,17,255,255,253,249,241,241,225,225,255]},{"1631158":[3,252,254,1,3,253,2,252,132,96,3,132,25]},{"1631172":[131,68,3,11,255,254,253,254,254,253,250,253,252,251,244,251,67,248,247,39]},{"1631193":[19,221,227,222,233,213,230,242,235,232,247,239,240,239,242,236,243]},{"1631212":[8,4,133,188,1,13,127,255,159,127,224,31,31,224,128,127,231,31,242,14,38]},{"1631234":[1,97,253,68,222,241,3,253,222,1]},{"1631245":[67,1,254,133,25]},{"1631251":[131,15,3,224,44,224,97,163,98,113,178,89,186,188,221,174,222,215,239,219,231,30,28,12,4,2,1]},{"1631280":[135,63,167,63,151,95,143,111,128,112,192,63,224,31,255]},{"1631296":[64,64,32,16,15,132,49,3,9,251,252,246,249,237,243,251,231,223,231,67,247,207,137,184,1]},{"1631322":[3,131,97,1,26,12,12,11,5,3,5,251,253,250,255,255,252,248,251,251,3,251,253,250,252,251,254,249,3]},{"1631352":[248,248,133,30,3,34,251]},{"1631360":[252,131,163]},{"1631364":[67,190,126,11,254,62,62,222,30,238,14,246,6,254,253,253,38,1]},{"1631383":[3,35,62,3,254,254,62,254,71,190,126,1,193,193,37,1,255]},{"1638400":[116]},{"1638402":[194]},{"1638404":[184]},{"1638406":[190]},{"1638408":[255]},{"1638410":[177]},{"1638412":[170]},{"1638414":[191]},{"1638416":[174]},{"1638418":[255]},{"1638420":[175]},{"1638422":[184]},{"1638424":[190]},{"1638426":[183]},{"1638428":[173,117]},{"1638431":[189]},{"1638433":[177]},{"1638435":[174]},{"1638437":[255]},{"1638439":[182]},{"1638441":[170]},{"1638443":[185]},{"1638445":[255]},{"1638447":[184]},{"1638449":[175,127,127,116]},{"1638454":[194]},{"1638456":[184]},{"1638458":[190]},{"1638460":[255]},{"1638462":[177]},{"1638464":[170]},{"1638466":[191]},{"1638468":[174]},{"1638470":[255]},{"1638472":[175]},{"1638474":[184]},{"1638476":[190]},{"1638478":[183]},{"1638480":[173,117]},{"1638483":[189]},{"1638485":[177]},{"1638487":[174]},{"1638489":[255]},{"1638491":[172]},{"1638493":[184]},{"1638495":[182]},{"1638497":[185]},{"1638499":[170]},{"1638501":[188]},{"1638503":[188]},{"1638505":[255]},{"1638507":[184]},{"1638509":[175,127,127,116]},{"1638514":[184]},{"1638516":[177]},{"1638518":[255]},{"1638520":[181]},{"1638522":[184]},{"1638524":[184]},{"1638526":[180]},{"1638528":[199]},{"1638530":[255]},{"1638532":[178]},{"1638534":[189]},{"1638536":[216]},{"1638538":[188,117]},{"1638541":[189]},{"1638543":[177]},{"1638545":[174]},{"1638547":[255]},{"1638549":[171]},{"1638551":[178]},{"1638553":[176]},{"1638555":[255]},{"1638557":[180]},{"1638559":[174]},{"1638561":[194]},{"1638563":[255]},{"1638565":[184]},{"1638567":[175,127,127,116]},{"1638572":[189]},{"1638574":[177]},{"1638576":[178]},{"1638578":[188]},{"1638580":[255]},{"1638582":[178]},{"1638584":[188]},{"1638586":[255]},{"1638588":[170,117]},{"1638591":[188]},{"1638593":[182]},{"1638595":[170]},{"1638597":[181]},{"1638599":[181]},{"1638601":[255]},{"1638603":[180]},{"1638605":[174]},{"1638607":[194]},{"1638609":[255]},{"1638611":[189]},{"1638613":[184,127,127,118]},{"1638618":[181]},{"1638620":[178]},{"1638622":[176]},{"1638624":[177]},{"1638626":[189]},{"1638628":[255]},{"1638630":[192]},{"1638632":[184]},{"1638634":[187]},{"1638636":[181]},{"1638638":[173,127,127,118]},{"1638643":[173]},{"1638645":[170]},{"1638647":[187]},{"1638649":[180]},{"1638651":[255]},{"1638653":[192]},{"1638655":[184]},{"1638657":[187]},{"1638659":[181]},{"1638661":[173,127,127,118]},{"1638666":[176]},{"1638668":[170]},{"1638670":[183]},{"1638672":[184]},{"1638674":[183]},{"1638676":[188]},{"1638678":[255]},{"1638680":[189]},{"1638682":[184]},{"1638684":[192]},{"1638686":[174]},{"1638688":[187,127,127,118]},{"1638693":[189]},{"1638695":[190]},{"1638697":[187]},{"1638699":[189]},{"1638701":[181]},{"1638703":[174]},{"1638705":[255]},{"1638707":[187]},{"1638709":[184]},{"1638711":[172]},{"1638713":[180,127,127,118]},{"1638718":[189]},{"1638720":[177]},{"1638722":[178]},{"1638724":[174]},{"1638726":[191]},{"1638728":[174]},{"1638730":[188]},{"1638732":[255]},{"1638734":[189]},{"1638736":[184]},{"1638738":[192]},{"1638740":[183,127,127,118]},{"1638745":[189]},{"1638747":[184]},{"1638749":[192]},{"1638751":[174]},{"1638753":[187]},{"1638755":[255]},{"1638757":[184]},{"1638759":[175]},{"1638761":[255]},{"1638763":[177]},{"1638765":[174]},{"1638767":[187]},{"1638769":[170,127,127,118]},{"1638774":[178]},{"1638776":[172]},{"1638778":[174]},{"1638780":[255]},{"1638782":[185]},{"1638784":[170]},{"1638786":[181]},{"1638788":[170]},{"1638790":[172]},{"1638792":[174,127,127,118]},{"1638797":[188]},{"1638799":[180]},{"1638801":[190]},{"1638803":[181]},{"1638805":[181]},{"1638807":[255]},{"1638809":[192]},{"1638811":[184]},{"1638813":[184]},{"1638815":[173]},{"1638817":[188,127,127,118]},{"1638822":[182]},{"1638824":[178]},{"1638826":[188]},{"1638828":[174]},{"1638830":[187]},{"1638832":[194]},{"1638834":[255]},{"1638836":[182]},{"1638838":[178]},{"1638840":[187]},{"1638842":[174,127,127,118]},{"1638847":[173]},{"1638849":[170]},{"1638851":[187]},{"1638853":[180]},{"1638855":[255]},{"1638857":[185]},{"1638859":[170]},{"1638861":[181]},{"1638863":[170]},{"1638865":[172]},{"1638867":[174,127,127,118]},{"1638872":[188]},{"1638874":[192]},{"1638876":[170]},{"1638878":[182]},{"1638880":[185]},{"1638882":[255]},{"1638884":[185]},{"1638886":[170]},{"1638888":[181]},{"1638890":[170]},{"1638892":[172]},{"1638894":[174,127,127,118]},{"1638899":[172]},{"1638901":[170]},{"1638903":[188]},{"1638905":[189]},{"1638907":[181]},{"1638909":[174]},{"1638911":[255]},{"1638913":[189]},{"1638915":[184]},{"1638917":[192]},{"1638919":[174]},{"1638921":[187,127,127,118]},{"1638926":[173]},{"1638928":[174]},{"1638930":[188]},{"1638932":[174]},{"1638934":[187]},{"1638936":[189]},{"1638938":[255]},{"1638940":[185]},{"1638942":[170]},{"1638944":[181]},{"1638946":[170]},{"1638948":[172]},{"1638950":[174,127,127,118]},{"1638955":[174]},{"1638957":[170]},{"1638959":[188]},{"1638961":[189]},{"1638963":[174]},{"1638965":[187]},{"1638967":[183]},{"1638969":[255]},{"1638971":[185]},{"1638973":[170]},{"1638975":[181]},{"1638977":[170]},{"1638979":[172]},{"1638981":[174,127,127,118]},{"1638986":[177]},{"1638988":[194]},{"1638990":[187]},{"1638992":[190]},{"1638994":[181]},{"1638996":[174]},{"1638998":[255]},{"1639000":[172]},{"1639002":[170]},{"1639004":[188]},{"1639006":[189]},{"1639008":[181]},{"1639010":[174,127,127,118]},{"1639015":[177]},{"1639017":[194]},{"1639019":[187]},{"1639021":[190]},{"1639023":[181]},{"1639025":[174]},{"1639027":[255]},{"1639029":[172]},{"1639031":[170]},{"1639033":[188]},{"1639035":[189]},{"1639037":[181]},{"1639039":[174,127,127,118]},{"1639044":[189]},{"1639046":[177]},{"1639048":[178]},{"1639050":[188]},{"1639052":[255]},{"1639054":[173]},{"1639056":[190]},{"1639058":[183]},{"1639060":[176]},{"1639062":[174]},{"1639064":[184]},{"1639066":[183,127,127]},{"1671170":[152,1,181,86]},{"1671178":[24]},{"1671180":[255,127]},{"1671186":[188,2,255,127]},{"1671194":[201,105,255,127]},{"1671202":[198,24,173,57]},{"1671210":[184]},{"1671212":[61,67]},{"1671218":[4,23,255,127]},{"1671228":[255,127]},{"1802304":[85,42,191,64,95,160,255]},{"1802312":[119,136,255]},{"1802316":[255]},{"1802318":[255]},{"1802368":[255]},{"1802370":[255]},{"1802372":[255]},{"1802374":[255]},{"1802376":[255]},{"1802378":[253,2,255]},{"1802382":[213,42]},{"1802394":[2]},{"1802398":[42]},{"1802432":[255,33,253,3,250,5,243,14,251,5,222,47,244,95,255,255]},{"1802450":[2]},{"1802452":[5]},{"1802454":[12]},{"1802456":[4]},{"1802458":[33]},{"1802460":[11]},{"1802496":[123,21,118,47,241,95,59,255,144,127,138,255,5,255,170,255,196]},{"1802514":[73,192,14]},{"1802518":[204]},{"1802520":[111]},{"1802522":[127]},{"1802524":[255]},{"1802526":[255]},{"1802530":[64]},{"1802560":[211,127,127,255,133,255,171,255,81,255,251,255,95,255,255,255,45]},{"1802578":[162]},{"1802580":[127]},{"1802582":[255]},{"1802584":[255]},{"1802586":[191]},{"1802588":[255]},{"1802590":[255]},{"1802624":[53,255,251,255,93,255,255,255,127,255,255,253,255,255,255,213,223]},{"1802642":[191]},{"1802644":[255]},{"1802646":[255]},{"1802648":[255]},{"1802650":[253,2,255]},{"1802654":[213,42]},{"1802688":[191,191,183,183,243,251,235,234,227,227,245,209,255,250,247,80,191,64,183,72,251,12,230,25,235,20,209,46,250,5,80,175]},{"1802727":[8]},{"1802752":[127,255,221,213,223,155,61,101,206,170,197,68,171,162,222]},{"1802768":[255]},{"1802770":[213,42,155,100,37,250,138,117,68,187,162,93]},{"1802783":[255]},{"1802790":[32]},{"1802816":[255,255,85,85,170,170,120,16,170,168,68]},{"1802828":[170]},{"1802830":[241]},{"1802832":[255]},{"1802834":[85,170,170,85,16,239,168,87]},{"1802843":[255]},{"1802845":[255]},{"1802847":[255]},{"1802880":[206,170,201]},{"1802884":[166,162,40]},{"1802888":[162,128,70]},{"1802892":[33]},{"1802894":[12,2,138,117]},{"1802899":[255,162,93]},{"1802903":[255,128,127]},{"1802907":[255]},{"1802909":[255]},{"1802911":[255]},{"1802944":[139,10,183,4,163,34,89,2,1,6,4,46,65,24,129,54,10,245,4,251,34,221,2,255]},{"1802969":[255,36,243,28,255,44,247]},{"1802983":[8]},{"1802986":[8,4]},{"1802989":[12]},{"1802991":[128]},{"1803008":[172,161,133,48,223]},{"1803014":[49]},{"1803016":[84]},{"1803018":[19,168,21,64,174,64,153,127,50,245]},{"1803029":[255,136,119]},{"1803033":[255,40,255]},{"1803037":[255]},{"1803039":[255]},{"1803042":[26]},{"1803046":[136]},{"1803051":[2]},{"1803055":[170]},{"1803072":[85]},{"1803074":[8,128,68]},{"1803078":[36,2,84,1,232,18,65,12,186,68]},{"1803089":[255,163,220]},{"1803093":[254,138,119,1,255,2,255,52,207]},{"1803103":[255]},{"1803106":[34]},{"1803109":[1,136,32]},{"1803115":[168]},{"1803117":[64]},{"1803119":[186]},{"1803136":[215,129,196,128,144,193,132,1,32,21,209,42,108,17,171,68,129,127,170,213,197,123,43,213,21,255,42,255,17,255,4,255]},{"1803170":[170]},{"1803172":[4,128,42,128]},{"1803179":[128]},{"1803181":[68]},{"1803183":[170]},{"1803200":[82,17,68,149,1,196,128,36]},{"1803209":[5,80,139,132,81,170,85,16,248,177,213,196,239,166,117,21,239,171,223,81,255,85,255,7]},{"1803234":[40,2,4,24,2,8,16]},{"1803242":[32]},{"1803245":[4]},{"1803247":[170]},{"1803264":[85,17,97,81,144,1,32]},{"1803273":[84,160,93,248,21,226,53]},{"1803281":[238,155,85,5,155,138,117,85,254,223,125,213,63,53,247,17]},{"1803298":[138,32,36,80,138,32,1]},{"1803306":[2,32,16,40,56,202]},{"1803328":[125,86,84,1,42,17,4,69,1,70,2,117,102,217,232,23,71,238,171,85,85,187,239,85,86,239,253,119,249,223,119,159,16]},{"1803362":[170]},{"1803364":[68]},{"1803366":[170]},{"1803368":[16,1,136,2,64,6]},{"1803375":[136]},{"1803392":[254,87,20,21,169,17,149,85]},{"1803401":[196,128,117,192,36,184,93,23,189,187,81,84,186,126,212,213,238,127,245,37,230,71,229,64]},{"1803426":[174]},{"1803428":[69]},{"1803430":[43,128,17]},{"1803434":[10,128,25,192,2,184]},{"1803456":[95,159,21,85,56,147,1,80,18,58,112,65,20,42,28,1,218,176,15,5,166,139,255,80,107,170,243,89,115,182,235,21,5]},{"1803490":[27,224,84,1,174]},{"1803496":[77,16,134,24,65,12,226,20]},{"1803520":[255,247,93,157,251,217,85,85,191,15,58,64,106,170,6,80,166,44,178,208,132,34,250,80,126,142,239,80,179,232,255,80,81]},{"1803554":[47]},{"1803556":[93,128,175]},{"1803560":[65]},{"1803562":[137,20,21,66,169]},{"1803584":[254,254,252,252,255,223,87,87,255,119,85,85,171,171,49,1,171,2,71,68,2,32,232,64]},{"1803609":[136,251,81,253,169,239,17,85]},{"1803618":[187]},{"1803620":[221]},{"1803622":[191]},{"1803624":[119]},{"1803626":[174]},{"1803628":[86]},{"1803630":[206,16]},{"1803648":[223,79,247,199,251,251,117,117,253,251,113,21,107,139,5,5,26,128,56]},{"1803668":[46,8,142,4,143,11,238,4,244,128,250]},{"1803680":[117]},{"1803682":[239]},{"1803684":[213]},{"1803686":[251]},{"1803688":[112]},{"1803690":[155,96,31,32,255]},{"1803712":[253,255,252,253,255,255,255,255,255,255,253,253,255,251,101,81,10]},{"1803730":[5,5,32]},{"1803736":[136]},{"1803738":[2]},{"1803740":[38,2,206,64,87]},{"1803746":[248,2,223]},{"1803750":[255]},{"1803752":[119]},{"1803754":[255]},{"1803756":[217,4,167,56]},{"1803776":[251,251,79,239,159,207,86,86,253,253,255,255,255,255,95,95,232,68,165,176,114,96,168,17]},{"1803801":[2]},{"1803806":[160]},{"1803808":[61]},{"1803810":[63,64,255]},{"1803814":[255]},{"1803816":[119]},{"1803818":[255]},{"1803820":[253]},{"1803822":[255]},{"1803840":[186,190,246,226,253,231,253,254,253,255,239,239,254,254,254,254,172,69,92,1,155,1,7,4,170]},{"1803867":[16,42,1]},{"1803871":[1,235]},{"1803874":[227,12,198]},{"1803878":[248,2,255]},{"1803882":[255]},{"1803884":[255]},{"1803886":[255]},{"1803904":[255,255,205,237,255,255,235,235,190,190,239,239,254,254,250,250,255]},{"1803922":[37,50,3]},{"1803926":[1,20,174,65,69,16,170,1,16,5,255]},{"1803938":[223]},{"1803940":[255]},{"1803942":[255]},{"1803944":[255]},{"1803946":[255]},{"1803948":[255]},{"1803950":[255]},{"1803968":[251,251,247,247,223,223,171,175,171,174,252,237,181,191,188,191,251,4,213,8,138,32,7,87,173,82,83]},{"1803996":[138,81,7,70,255]},{"1804002":[255]},{"1804004":[255]},{"1804006":[248]},{"1804008":[252]},{"1804010":[236,19,255]},{"1804014":[249]},{"1804032":[255,255,239,247,255,103,27,91,187,59,111,55,56,138,105,219,239]},{"1804050":[95]},{"1804052":[191]},{"1804054":[211,164,171,236,93,196,254,201,167,32,255]},{"1804066":[239,16,103,8,63,192,23,64,59,192,147,108,28,255]},{"1804096":[245,170,254,229,255,250,255,252,255,255,127,127,127,119,239,95,160,95,228,27,250,5,252,3,255]},{"1804122":[127,128,47,136,183,64,255]},{"1804130":[255]},{"1804132":[255]},{"1804134":[255]},{"1804136":[255]},{"1804138":[255]},{"1804140":[255]},{"1804142":[255,32]},{"1804160":[81,174,174,253,209,254,243,227,247,239,122,125,125,127,255,254]},{"1804177":[255,172,83,220,47,239,28,231,24,120,135,61,130,254,1,255]},{"1804194":[255]},{"1804196":[255]},{"1804198":[255]},{"1804200":[255]},{"1804202":[255]},{"1804204":[255]},{"1804206":[255]},{"1804224":[16,239,170,213,68,251,234,117,81,174,234,213,244,251,234,125]},{"1804241":[85,128,127,64,189,96,159]},{"1804249":[253,192,63,240,15,104,151,85]},{"1804258":[255]},{"1804260":[253]},{"1804262":[255]},{"1804264":[253]},{"1804266":[255]},{"1804268":[255]},{"1804270":[255]},{"1804288":[5,253,34,215,200,253,234,85]},{"1804297":[255,162,93,84,171,170,85,3,22]},{"1804307":[233,136,49,64,175]},{"1804313":[81]},{"1804315":[250]},{"1804317":[221]},{"1804319":[255,23]},{"1804322":[233,6,251,4,239]},{"1804328":[81]},{"1804330":[250]},{"1804332":[221]},{"1804334":[255]},{"1804352":[255]},{"1804354":[253,2,255]},{"1804358":[245,59,225,47,218,36,229,26,64,180]},{"1804370":[2]},{"1804374":[10]},{"1804376":[15,16,63,20,17,1,183,15]},{"1804394":[16]},{"1804396":[4,6,5,1]},{"1804412":[8]},{"1804414":[2]},{"1804416":[254,1,215,43,186,71,84,175,226,95,42,127,77,111,191,95,1]},{"1804434":[40]},{"1804436":[69]},{"1804438":[171]},{"1804440":[29]},{"1804442":[127,128,79,80,63]},{"1804460":[192]},{"1804462":[192]},{"1804476":[32]},{"1804480":[198,127,8,255,125,255,43,255,21,255,191,255,213,249,249,254,57]},{"1804498":[247]},{"1804500":[135]},{"1804502":[223]},{"1804504":[255]},{"1804506":[255]},{"1804508":[255]},{"1804510":[252,5]},{"1804526":[4,2]},{"1804544":[21,255,235,255,85,255,143,255,7,239,255,255,159,203,191,183,255]},{"1804562":[191]},{"1804564":[255]},{"1804566":[191,32,239,112,189,64,139,116,21,72]},{"1804584":[96]},{"1804587":[32]},{"1804598":[64]},{"1804602":[2]},{"1804606":[162]},{"1804608":[127,255,255,255,255,255,127,77,191,238,191,21,170,122,117]},{"1804624":[255]},{"1804626":[255]},{"1804628":[255]},{"1804630":[69,178,238,81,5,154,106,213]},{"1804639":[255]},{"1804649":[32,96]},{"1804653":[32]},{"1804662":[8]},{"1804668":[16]},{"1804672":[255,254,249,208,248,184,253,144,251,168,255]},{"1804684":[255]},{"1804686":[252,3,254,1,208,47,184,71,16,111,168,87]},{"1804699":[255]},{"1804701":[255]},{"1804703":[255]},{"1804726":[128]},{"1804734":[3]},{"1804736":[252,168,216,67,248,130,152,7,160,30,85,161,174,1,36,15,168,87,66,191,128,127,4,253,4,252,1,252]},{"1804765":[255,4,243]},{"1804774":[4,2,5,2]},{"1804779":[3]},{"1804782":[8,4]},{"1804792":[24]},{"1804794":[160]},{"1804796":[1]},{"1804798":[3]},{"1804800":[140,131,210,1,225]},{"1804806":[162,8,161]},{"1804810":[1,46]},{"1804813":[125]},{"1804815":[255,128,127]},{"1804819":[255]},{"1804821":[255]},{"1804823":[255]},{"1804825":[255]},{"1804827":[255]},{"1804829":[255]},{"1804831":[255]},{"1804835":[2]},{"1804858":[4]},{"1804864":[8]},{"1804866":[136,2,21,2,2,172,84,32,2,251,160,95]},{"1804879":[255]},{"1804881":[255]},{"1804883":[255,3,255]},{"1804887":[252,1,252]},{"1804891":[255]},{"1804893":[255]},{"1804895":[255]},{"1804900":[2,1,2]},{"1804904":[3,1]},{"1804918":[1]},{"1804920":[32]},{"1804922":[66]},{"1804924":[2]},{"1804928":[34,7,71,175,145,197,155,229,160,215,34,221]},{"1804941":[255,138,127,2,255,5,253,131,124,1,126,128,127]},{"1804955":[255]},{"1804957":[255]},{"1804959":[255,2]},{"1804962":[5,2]},{"1804965":[129]},{"1804967":[139]},{"1804969":[128]},{"1804971":[34]},{"1804975":[128]},{"1804990":[10]},{"1804992":[82,21,66,153,10,85,138,117]},{"1805001":[255,34,221]},{"1805005":[255,34,85,48,223,32,223]},{"1805013":[127,32,127]},{"1805017":[255]},{"1805019":[255]},{"1805021":[255]},{"1805023":[119,16]},{"1805027":[2,128]},{"1805031":[138]},{"1805035":[34]},{"1805038":[136,170]},{"1805056":[32,85,34,221,160,95,170,85,4,251,168,80,69,188,8,81]},{"1805073":[255,8,255,4,255]},{"1805079":[255]},{"1805081":[255,5,248,6,253,12,89]},{"1805091":[34]},{"1805095":[170]},{"1805097":[4]},{"1805099":[170,4,65,164,166]},{"1805118":[8]},{"1805120":[129,116,234,21,103,152,170,85,17,238,170,85,85,170,1,80,16,255]},{"1805139":[255]},{"1805141":[255]},{"1805143":[255]},{"1805145":[255]},{"1805147":[255]},{"1805149":[255,4,81]},{"1805153":[1]},{"1805155":[170]},{"1805157":[69]},{"1805159":[170]},{"1805161":[17]},{"1805163":[170]},{"1805165":[85,170,171]},{"1805184":[3,116,170,85,69,186,174,81,85,170,136,85,85,162,68,1,20,255,1,255,16,255]},{"1805207":[255]},{"1805209":[255]},{"1805211":[221,8,247,16,69]},{"1805217":[1]},{"1805219":[170]},{"1805221":[69]},{"1805223":[174]},{"1805225":[85,34,170]},{"1805229":[85,170,238]},{"1805248":[17,110,171,84,85,170,231]},{"1805256":[79,136,135,64,85,170,84]},{"1805264":[68,255,20,255]},{"1805269":[255,16,231,44,203,16,199]},{"1805277":[255,1,84]},{"1805281":[17]},{"1805283":[171]},{"1805285":[85,8,239,8,83,40,175]},{"1805293":[85,170,254]},{"1805312":[81,46,187,68,85,170,255]},{"1805320":[55,136,223]},{"1805324":[223,32,69]},{"1805328":[20,239,4,255]},{"1805333":[255,32,223,64,191]},{"1805339":[223]},{"1805341":[255,18,69]},{"1805345":[65]},{"1805347":[187]},{"1805349":[85]},{"1805351":[223]},{"1805353":[55,32,255]},{"1805357":[223,168,237]},{"1805377":[87,170,85,85,170,255]},{"1805384":[115,144,231,4,255]},{"1805390":[103]},{"1805392":[87,255,85,255,138,255]},{"1805399":[255,16,243,12,227,8,247,16,103]},{"1805411":[170]},{"1805413":[85]},{"1805415":[255,24,103,8,255]},{"1805421":[247,136,239]},{"1805440":[48,198,218,21,237,98,247]},{"1805448":[127,128,253]},{"1805452":[255]},{"1805454":[117]},{"1805456":[223,230,53,223,114,239,32,215,149,234,28,225,3,252,1,116,1]},{"1805474":[16,234,96,157,8,223]},{"1805481":[106,2,227]},{"1805485":[252,138,254]},{"1805504":[8,98,14,80,16,170,246,1,255,64,31,128,51,160,69]},{"1805520":[119,234,245,90,239,186,9,247,64,255,8,87,244,163,21,64,17,12,161,10,69,16,8,246,64,191]},{"1805547":[247,160,15,170,250]},{"1805564":[64]},{"1805568":[19,106,62,64,31,162,242]},{"1805576":[195]},{"1805578":[175,48,167,64,254]},{"1805584":[111,250,206,112,232,179,7,240,80,131,228,107,41,230,136,118,5,16,129,56,68,21,9,254,36,155,32,123,88,198]},{"1805615":[119]},{"1805632":[250]},{"1805634":[10,192,98,162,96,16,96,138,240]},{"1805644":[193]},{"1805646":[64,128,251]},{"1805650":[119,168,223,162,159,112,191,202,63,192,190,65,191,192,5,16,145,238,29]},{"1805670":[143,96,21,64,15,208,62,65,63,64]},{"1805694":[128]},{"1805696":[174,174,1,1,160,160,6]},{"1805704":[136,136,64]},{"1805708":[192]},{"1805710":[224]},{"1805712":[83,2,254]},{"1805716":[255,160,255]},{"1805720":[255,136,191,64,127,128,31,224,253]},{"1805730":[255]},{"1805732":[95]},{"1805734":[249,6,119]},{"1805738":[191,64,63,192,31,224]},{"1805760":[143,147,1,65,163,155,53,37,126,22,4,4,10,10,32]},{"1805776":[76]},{"1805778":[254,64,108]},{"1805782":[202,16,233]},{"1805786":[251]},{"1805788":[245]},{"1805790":[255]},{"1805792":[227,20,191]},{"1805796":[231,24,215,48,175,80,255]},{"1805804":[255]},{"1805806":[223]},{"1805814":[8]},{"1805824":[143,207,47,7,155,179,47,27,163,163,101,69,171,171,1,1,112,32,240,8,116,48,248]},{"1805848":[116,56,186]},{"1805852":[84]},{"1805854":[254]},{"1805856":[191,64,167,88,219,52,199,4,195,44,199,56,255]},{"1805870":[255]},{"1805878":[56]},{"1805888":[125,125,251,251,253,253,255,255,255,255,223,223,255,255,23,55,8,130]},{"1805907":[4]},{"1805909":[2]},{"1805914":[32]},{"1805918":[232,16,255]},{"1805922":[255]},{"1805924":[255]},{"1805926":[255]},{"1805928":[255]},{"1805930":[255]},{"1805932":[255]},{"1805934":[223,32]},{"1805952":[187,187,170,170,23,23,62,94,213,37,222,152,255,176,121,56,42,68]},{"1805971":[85,2,232,224,1,240,74,102,1,73,128,75,14,127]},{"1805986":[255]},{"1805988":[255]},{"1805990":[159,64,15,48,185,4,182]},{"1805998":[240,4]},{"1806014":[8]},{"1806016":[111,110,175,175,234,170,184,248,232,137,193,192,115,114,222,254,43,146,4,80,202,53,64,71,233,22,35,28,1,140,32,1,253,1,255]},{"1806052":[223,64,223,32,159,64,255,1,254,1,255]},{"1806080":[214,241,186,121,21,16,47,66,8,81,218,16,193,218,144,150,178,14,159,39,81,200,165,60,249,249,239,29,31,44,14,105,60,255,63,127,154,89,33,231,247,88,181,66,254,1,251,4]},{"1806132":[36]},{"1806134":[24]},{"1806144":[95,127,117,213,251,247,213,217,189,57,19,82,234,232,230,134,47,64,165,74,59]},{"1806166":[91,34,189,66,209,172,10,213,96,25,255]},{"1806178":[95,160,241,14,245,10,251,128,254]},{"1806188":[252,3,156,99]},{"1806208":[255,255,255,255,255,255,253,253,252,252,93,221,126,126,159,95,255]},{"1806226":[255]},{"1806228":[255]},{"1806230":[253,2,252,3,157,162,190,193,223,160,255]},{"1806242":[255]},{"1806244":[255]},{"1806246":[255]},{"1806248":[255]},{"1806250":[255]},{"1806252":[127]},{"1806254":[127,128]},{"1806272":[209,190,251,255,253,255,255,251,255,238,127,117,191,186,255,255,144,111,251,4,253,2,251,4,238,17,117,138,58,69,127]},{"1806304":[255]},{"1806306":[255]},{"1806308":[255]},{"1806310":[255]},{"1806312":[255]},{"1806314":[255]},{"1806316":[255]},{"1806318":[255]},{"1806336":[17,238,170,221,132,59,234,245,81,254,250,239,213,254,254,239]},{"1806353":[253,136,119,128,255,224,31,80,175,234,21,212,43,238,17,253]},{"1806370":[255]},{"1806372":[255]},{"1806374":[255]},{"1806376":[255]},{"1806378":[255]},{"1806380":[255]},{"1806382":[255]},{"1806400":[243,28,18,251,16,177,237,255,22,255,190,254,85,255,191,253,12,5,232,8,178,76,253,1,254,1,254,1,254]},{"1806430":[245,2,5,1,4,3,1]},{"1806438":[1]},{"1806448":[2]},{"1806450":[4]},{"1806454":[2]},{"1806460":[1]},{"1806462":[8]},{"1806464":[49,191,11,159,21,31,31,191,119,126,255,127,223,235,255,233,127]},{"1806482":[95,32,223,32,151,224,126,129,93,128,234,20,65,22]},{"1806497":[128,128]},{"1806518":[8]},{"1806522":[34]},{"1806524":[1]},{"1806526":[168]},{"1806528":[87,255,190,252,94,251,255,208,127,171,252,129,248,142,248,165,248,6,253,2,250,5,80,47,170,84]},{"1806555":[127,128,119,2,93]},{"1806576":[1]},{"1806580":[1]},{"1806582":[128]},{"1806584":[1]},{"1806586":[129]},{"1806588":[12]},{"1806590":[161]},{"1806592":[127,58,127,244,127,57,119,198,253,34,252,131,128,255]},{"1806607":[255,58,197,84,139,40,198]},{"1806615":[185]},{"1806617":[223]},{"1806619":[127]},{"1806621":[127]},{"1806623":[255]},{"1806642":[32]},{"1806644":[17]},{"1806646":[198]},{"1806648":[34]},{"1806650":[131]},{"1806652":[255]},{"1806654":[255]},{"1806656":[255,172,255,32,252,19]},{"1806663":[242]},{"1806665":[255]},{"1806667":[255]},{"1806669":[255]},{"1806671":[255,168,83]},{"1806675":[223]},{"1806677":[239]},{"1806679":[255]},{"1806681":[255]},{"1806683":[255]},{"1806685":[255]},{"1806687":[255]},{"1806704":[4]},{"1806706":[32]},{"1806708":[19]},{"1806710":[242]},{"1806712":[255]},{"1806714":[213]},{"1806716":[186]},{"1806718":[85]},{"1806720":[249,66,16,228]},{"1806725":[230]},{"1806727":[255]},{"1806729":[255,34,255]},{"1806733":[251,162,243]},{"1806737":[191]},{"1806739":[255]},{"1806741":[255]},{"1806743":[255]},{"1806745":[255]},{"1806747":[255]},{"1806749":[243,8,251]},{"1806764":[12]},{"1806766":[4,8,66]},{"1806770":[228]},{"1806772":[230]},{"1806774":[213]},{"1806776":[170]},{"1806778":[98]},{"1806780":[164]},{"1806782":[226]},{"1806784":[2,189,1,38]},{"1806789":[255,10,255]},{"1806793":[255,170,255,84,255,170,255,12,255,8,247]},{"1806805":[255]},{"1806807":[255]},{"1806809":[255]},{"1806811":[255]},{"1806813":[255]},{"1806815":[255,4,8]},{"1806832":[160]},{"1806836":[170]},{"1806838":[10]},{"1806842":[170]},{"1806844":[84]},{"1806846":[170]},{"1806848":[168,87,68,187]},{"1806853":[255,170,255,17,255,168,252,80,250,69,85]},{"1806865":[255]},{"1806867":[255]},{"1806869":[255]},{"1806871":[255,1,255,3,252,5,250,170,85]},{"1806888":[1]},{"1806896":[2]},{"1806900":[160]},{"1806902":[170]},{"1806904":[16]},{"1806906":[168]},{"1806908":[80]},{"1806910":[69]},{"1806912":[40,215,2,255]},{"1806917":[254,196,212,20,190,17,85,192,234,21,21]},{"1806929":[255]},{"1806931":[255,1,254,171,212,1,62,170,21,213,106,234,21]},{"1806950":[128]},{"1806952":[64,128,192,128,64,128]},{"1806960":[128]},{"1806962":[2]},{"1806966":[68]},{"1806968":[84]},{"1806970":[17]},{"1806974":[21]},{"1806977":[255,32,125,4,62,4,21]},{"1806985":[42,9,1,168,178]},{"1806991":[8]},{"1806993":[255,128,125,193,62,96,21,213,42,254,9,77,162,247]},{"1807010":[2,2]},{"1807014":[138,10]},{"1807020":[16,8,8]},{"1807026":[32]},{"1807028":[4]},{"1807030":[132]},{"1807034":[9]},{"1807036":[184]},{"1807038":[8]},{"1807041":[255]},{"1807043":[93,1,27,1,177]},{"1807049":[170]},{"1807052":[162,162]},{"1807057":[255,128,93,164,27,4,17,85,170,221]},{"1807068":[93,162,119]},{"1807074":[34,34,64]},{"1807078":[234,10]},{"1807082":[34,34]},{"1807086":[136,136]},{"1807092":[65]},{"1807094":[225]},{"1807100":[162]},{"1807104":[4,224]},{"1807107":[81,32,168,64,64,34,170,32,192,160,160]},{"1807119":[128,27,224,4,81,119,168,85,64,85,170,117,96,255,128,85]},{"1807136":[4,4,170,170,32]},{"1807142":[234,138]},{"1807146":[138,74,192,32,170,42]},{"1807158":[32]},{"1807160":[34]},{"1807162":[160]},{"1807164":[64]},{"1807166":[128]},{"1807168":[22,238,4,84,1,170]},{"1807175":[16]},{"1807177":[136]},{"1807183":[48,7,254,5,84,16,171,69,16,118,136,85]},{"1807196":[187]},{"1807198":[69]},{"1807200":[6,16,172,170,68,69,170,170,1,1,170,170,68,68,186,138]},{"1807230":[48]},{"1807232":[85,170,16,68,1,42,72,12,10,158,8,12]},{"1807245":[1]},{"1807247":[69]},{"1807249":[255,1,84,208,43,21,64,106,142,89,8,170]},{"1807262":[16]},{"1807265":[85,170,186,4,5,170,230,31,5,174,162,85,84,239,170]},{"1807286":[8]},{"1807288":[16]},{"1807290":[4]},{"1807292":[1]},{"1807294":[69]},{"1807296":[86,168,21]},{"1807300":[41]},{"1807302":[80,68,4]},{"1807306":[1]},{"1807309":[112,96,116,1,254,192,21,138,1,97,64,170,4,69]},{"1807324":[138]},{"1807326":[65,64]},{"1807329":[86,42,63,116,101,238,154,81,85,186,186,117,5,254,138]},{"1807348":[16]},{"1807350":[36]},{"1807356":[112]},{"1807358":[52]},{"1807360":[255,224,5,16,8]},{"1807366":[81,1,8,8,12,69,24,152,1,21,232,231,64,21,178,8,17,65,171,8,4,4,58,24,1,1,224,23,186,191,69,77,175,238,92,85,247,170,221,69,255,234]},{"1807418":[81]},{"1807420":[128]},{"1807422":[20]},{"1807424":[239,24,65,8,137,128,193,145,128,129,69,1,8]},{"1807438":[17,17,56,215,28,81,171,136,73,17,168,129,69,1,170]},{"1807454":[17,17]},{"1807457":[223,162,251,212,72,187,62,213,87,187,186,85,85,255,238]},{"1807476":[20]},{"1807478":[128]},{"1807488":[255]},{"1807490":[220]},{"1807492":[154,48,17,16,34,2,5,5,170]},{"1807505":[255,25,196,112,154,49,48,170,2,5,5,170]},{"1807521":[255,34,231,21,238,158,238,87,85,255,250,85,85,255,255]},{"1807540":[1]},{"1807552":[236,3,68,129,15,8,85]},{"1807560":[170]},{"1807562":[85]},{"1807564":[170]},{"1807566":[17,16,26,230,18,198,157,138,197]},{"1807576":[162,8,85]},{"1807580":[170]},{"1807582":[17,16,2,245,168,255,120,210,26,186,85,93,170,170,85,85,254,238]},{"1807616":[254]},{"1807618":[79]},{"1807620":[226,1,98,14,165,4,21,19,152,53,131,8,152,102,4,67,120,129,118,9,179,15,176,16,176,2,145,53,1,103,168,251,7,157,175,152,71,88,16,239,64,127,241,14]},{"1807668":[2]},{"1807670":[39]},{"1807672":[7]},{"1807674":[31]},{"1807676":[63]},{"1807678":[255]},{"1807680":[245]},{"1807682":[255]},{"1807684":[254]},{"1807686":[215,128,63,192,149,128,251]},{"1807694":[85,128,138,117,160,95,113,142,83,132,189,194,85]},{"1807708":[59,128,85,128,10,117]},{"1807715":[95]},{"1807717":[143,40,172,192,106,42,239,68,166,42,170]},{"1807736":[128]},{"1807738":[192]},{"1807740":[192]},{"1807742":[128]},{"1807746":[192]},{"1807748":[169]},{"1807750":[247]},{"1807752":[251]},{"1807754":[209,128,191]},{"1807758":[21,16,255]},{"1807762":[63,192,214,41,247]},{"1807768":[255]},{"1807770":[215,128,255]},{"1807774":[85,16,255]},{"1807778":[63,192,86,169,8,125,2,229,40,63]},{"1807789":[111,170,239]},{"1807802":[128]},{"1807806":[16]},{"1807808":[64,160,32]},{"1807812":[3]},{"1807814":[173]},{"1807816":[254]},{"1807818":[221]},{"1807820":[190]},{"1807822":[87,96,255]},{"1807826":[255]},{"1807828":[255]},{"1807830":[127,128,175,80,215,8,187,4,83,100,143,112,223]},{"1807844":[252,3,82,172,1,254,34,253,1,222,168,255]},{"1807872":[184,136,34,32,128,2,108]},{"1807880":[224,8,240]},{"1807884":[252]},{"1807886":[255]},{"1807888":[119]},{"1807890":[255,32,255]},{"1807894":[255,128,255]},{"1807898":[255]},{"1807900":[255]},{"1807902":[127,128,207,16,221,2,191,64,83,172,31,224,15,240,3,252]},{"1807919":[255]},{"1807922":[32]},{"1807936":[183,159,9,69,226,34,192,1]},{"1807945":[170]},{"1807947":[4]},{"1807949":[10,152]},{"1807952":[104,16,254]},{"1807956":[221]},{"1807958":[255]},{"1807960":[255]},{"1807962":[255]},{"1807964":[255]},{"1807966":[255]},{"1807968":[255]},{"1807970":[247,8,63,192,63,192,255]},{"1807978":[255]},{"1807980":[255]},{"1807982":[103,152]},{"1808000":[255,253,211,221,186,187,100,49,127,138,100,21,2,170,1]},{"1808016":[6,4,42]},{"1808020":[69,14,251,36,240,5,251]},{"1808028":[253]},{"1808030":[254,1,249]},{"1808034":[243,12,251,4,159,64,143,112,159,96,255]},{"1808046":[255]},{"1808048":[4]},{"1808054":[36]},{"1808056":[5]},{"1808062":[1]},{"1808064":[84,84,186,186,221,221,119,119,255,255,71,85,51,159,5,1]},{"1808081":[171]},{"1808083":[69]},{"1808085":[34,136]},{"1808090":[184,2,252,16,250,52,255]},{"1808098":[255]},{"1808100":[255]},{"1808102":[255]},{"1808104":[255]},{"1808106":[255]},{"1808108":[207]},{"1808110":[207,48]},{"1808122":[2]},{"1808124":[16]},{"1808126":[4]},{"1808128":[142,130,133,141,93,90,249,247,215,215,254,254,241,233,94,94,140,113,10,116,7,160,6,8]},{"1808153":[40]},{"1808155":[1,28,10,160,21,247]},{"1808162":[251]},{"1808164":[250,5,255]},{"1808168":[255]},{"1808170":[255]},{"1808172":[235,4,247,8]},{"1808182":[8]},{"1808192":[168,168,130,131,225,225,131,131]},{"1808201":[1,251,251,20,108,208,200,137,84,1,124,32,30]},{"1808215":[124,1,254]},{"1808219":[4,48,203,56,7,254]},{"1808226":[255]},{"1808228":[255]},{"1808230":[255]},{"1808232":[255]},{"1808234":[255]},{"1808236":[239,16,223,32,1]},{"1808252":[72]},{"1808256":[191,63,69,69,11,27,25,169,202,202,42,170,32,32]},{"1808272":[191,64,69,186,27,228,145,102,10,181]},{"1808283":[213,32,223]},{"1808287":[255,127]},{"1808290":[255]},{"1808292":[255]},{"1808294":[255,16,255]},{"1808298":[255]},{"1808300":[255]},{"1808302":[255]},{"1808310":[32]},{"1808314":[128]},{"1808320":[255,255,245,245,251,251,5,5,155,171,45,61,187,163,9,25,255]},{"1808338":[245,10,251,4,1,250,179,68,21,194,187,68,25,238,255]},{"1808354":[255]},{"1808356":[255]},{"1808358":[255]},{"1808360":[255]},{"1808362":[255]},{"1808364":[231,16,247]},{"1808382":[8]},{"1808384":[245,250,255,252,255,255,95,95,191,191,31,31,191,191,85,85,240,15,252,3,255]},{"1808406":[95,160,191,64,31,224,191,64,85,170,255]},{"1808418":[255]},{"1808420":[255]},{"1808422":[255]},{"1808424":[255]},{"1808426":[255]},{"1808428":[255]},{"1808430":[255]},{"1808448":[87,254,255,255,95,250,254,244,119,255,254,247,255,235,255,230,254,1,221]},{"1808468":[186,5,116,11,235]},{"1808474":[84,9,170,20]},{"1808479":[25]},{"1808489":[1]},{"1808498":[34]},{"1808500":[64]},{"1808502":[128]},{"1808504":[20]},{"1808506":[162]},{"1808508":[65]},{"1808510":[230]},{"1808512":[119,170,255,231,255,250,127,104,127,125,79,200,215,212,195,254,168,85,64,24,160,5]},{"1808535":[151,168,2,48,7,48,27]},{"1808543":[29]},{"1808556":[16]},{"1808560":[2]},{"1808562":[167]},{"1808564":[90]},{"1808566":[104]},{"1808568":[85]},{"1808570":[200]},{"1808572":[196]},{"1808574":[246]},{"1808576":[248,207,252,128,252,199,240,11,224,30,192,63,224,191]},{"1808591":[255,128,55]},{"1808595":[127]},{"1808597":[59]},{"1808599":[255,1,254]},{"1808603":[253]},{"1808605":[95]},{"1808607":[255]},{"1808624":[77]},{"1808626":[128]},{"1808628":[199]},{"1808630":[11]},{"1808632":[30]},{"1808634":[62]},{"1808636":[191]},{"1808638":[253]},{"1808640":[64,191,132,125,8,187,10,255]},{"1808649":[255,2,255,1,255,42,255]},{"1808657":[255,6,249,14,247,6,255]},{"1808665":[255]},{"1808667":[255]},{"1808669":[255]},{"1808671":[255]},{"1808675":[4,2,8,6,8]},{"1808688":[191]},{"1808690":[113]},{"1808692":[177]},{"1808694":[121]},{"1808696":[126]},{"1808698":[86]},{"1808700":[233]},{"1808702":[122]},{"1808705":[255,2,255,4,255,170,255,5,255,170,255,69,143,254,199]},{"1808721":[255]},{"1808723":[255]},{"1808725":[255]},{"1808727":[255]},{"1808729":[255]},{"1808731":[255,80,143,80,215]},{"1808748":[32,64,64,184,238]},{"1808754":[86]},{"1808756":[166]},{"1808758":[234]},{"1808760":[165]},{"1808762":[170]},{"1808764":[109]},{"1808766":[134]},{"1808768":[1,255,168,249,83,251,165,245,86,255,168,254,95,254,245,244]},{"1808785":[255,6,249,4,251,10,245]},{"1808793":[255]},{"1808795":[252,1,254,10,244]},{"1808805":[2]},{"1808807":[1,1,7,2,2]},{"1808813":[15,1,113,161]},{"1808818":[168]},{"1808820":[83]},{"1808822":[165]},{"1808824":[87]},{"1808826":[170,1,95]},{"1808830":[245]},{"1808832":[21,255,169,253,85,255,37,117,215,64,32,64,42,97,21,80]},{"1808849":[255,2,253]},{"1808853":[255,138,117,191,111]},{"1808859":[64,20,36,42,80]},{"1808872":[111,255,96,64,75,79,69,69,21]},{"1808882":[169]},{"1808884":[85]},{"1808886":[37]},{"1808888":[255]},{"1808890":[96,159,111,128,85,128,4,238,245,213,218,250,85,85]},{"1808905":[240,1]},{"1808908":[31,224,16]},{"1808912":[113,238,74,149,5,250,170,85,15]},{"1808924":[31,24,239]},{"1808928":[64,32]},{"1808931":[97]},{"1808933":[128]},{"1808936":[240,240,1]},{"1808940":[248,255,16,16,4]},{"1808946":[149]},{"1808948":[218]},{"1808950":[85]},{"1808952":[240]},{"1808954":[1,254,255]},{"1808958":[16]},{"1808960":[106,234,84,84,170,162,16,16,170,13,37,27,196,39,4,232,21,234,171,84,85,166,239,16,82,74]},{"1808987":[24,131,35,17,18]},{"1808993":[40]},{"1808996":[8,44]},{"1809000":[167,231,56,24,100,163,239,114,106]},{"1809010":[84]},{"1809012":[174]},{"1809014":[16]},{"1809016":[239]},{"1809018":[56,199,227,28,254,1,170,170]},{"1809029":[192]},{"1809031":[138]},{"1809033":[1,55,130,235,251,196,19,85,170,255,32,63]},{"1809046":[117]},{"1809048":[254,22,89,131,252,16,16,11]},{"1809059":[32,192,128,138]},{"1809064":[1,22,7,139,4,16,200,19,170]},{"1809074":[32]},{"1809076":[192]},{"1809078":[138]},{"1809080":[23]},{"1809082":[143,112,16,239,211,44,128,144]},{"1809091":[58]},{"1809093":[68,6,175,3,31,2,255,155,196,213,221,111,192,197,192,187,144,84,4,227,67]},{"1809116":[44,64,254,8,16,64,58,192,68,144,175,2,31,72,255,66,11,68,34,8,208]},{"1809138":[250]},{"1809140":[212]},{"1809142":[171]},{"1809144":[92]},{"1809146":[255]},{"1809148":[71,184,8,247]},{"1809153":[17]},{"1809155":[168]},{"1809157":[69]},{"1809159":[239]},{"1809161":[119]},{"1809163":[255,255,93,130,109,238,64,85]},{"1809172":[186,16,16]},{"1809176":[136]},{"1809180":[171,11,21,238,17,64,170,2,69,16,239]},{"1809192":[119]},{"1809194":[255]},{"1809196":[95,246,140,101,81]},{"1809202":[168]},{"1809204":[85]},{"1809206":[239]},{"1809208":[119]},{"1809210":[255]},{"1809212":[246]},{"1809214":[101,154,80,101,32,207]},{"1809221":[223,3,254,1,254,2,255,66,254,160,225,234,96]},{"1809236":[32]},{"1809238":[1,1]},{"1809241":[1,3]},{"1809244":[71,69,90,174,69,48,223,32,223]},{"1809254":[254,3,255,1,254,2,253,6,46,213,5]},{"1809266":[223]},{"1809268":[222]},{"1809270":[254]},{"1809272":[255]},{"1809274":[254,1,191]},{"1809278":[87,40]},{"1809281":[87,128,253,96,127,64,117,66,124,196,182,43,99,118,253,168]},{"1809298":[128,128,32,32,64,192,100,131,55,185]},{"1809309":[132,1,3,87]},{"1809314":[255,2,255,64,127,138,91,231,153,124,16,255,1,254,87]},{"1809330":[125]},{"1809332":[95]},{"1809334":[53]},{"1809336":[127]},{"1809338":[253,2,255]},{"1809342":[255]},{"1809345":[78,6,87,2,255,141,221,137,63,159,23,243,255,125,249,160]},{"1809362":[4,4,2,6,5,5,24,120,21,69,14,10,5,7,95,17,255,168,255,4,255,34,223,112,39,224,15,240,5,248,78]},{"1809394":[83]},{"1809396":[249]},{"1809398":[216]},{"1809400":[119]},{"1809402":[226,24,249,4,248,6]},{"1809409":[10,23,23,135,175,155,155,210,186,159,223,255,255,81,85,160]},{"1809426":[21,21,226,162,17,17,130,162,21,117,170,170,81,255,95,85,255,136,207,112,255,4,191,101,223,64,255]},{"1809454":[85,4,10]},{"1809458":[98]},{"1809460":[77]},{"1809462":[234]},{"1809464":[24]},{"1809466":[138,32,85]},{"1809471":[170,10,42,84,84,168,170,187,187,170,170,238,238,253,253,3,16,138,10,84,84,168,168,17,17,170,170,68,68,170,170]},{"1809503":[184,127,85,255,171,255,85,255,68,255,85,238,17,252,3,16,87,32]},{"1809524":[2]},{"1809526":[170]},{"1809530":[170]},{"1809532":[84]},{"1809535":[168,170,2]},{"1809540":[170,170,128,128,170,170,234,232,85,84,14,13,170,2,8]},{"1809556":[234,170,13]},{"1809560":[171,170,87,64,4,6,12,168,87,85,247,255,191,85,242,127,254,85,234,21,84,171,8,86]},{"1809590":[128]},{"1809594":[170]},{"1809596":[84]},{"1809598":[14,161,170]},{"1809602":[1,96,139,181,32]},{"1809608":[151,175,173,143,115,100,151,210,170]},{"1809618":[65,96,143,160,104,62,160,160,72,56,32,36,60,214,85,85,190,190,255,47,153,215,224,127,152,79,112,135,66,229]},{"1809650":[64]},{"1809652":[79]},{"1809654":[63]},{"1809656":[63]},{"1809658":[159,32,87,8,7]},{"1809664":[70,1,172,129,156,35,188,65,188,129,122,131,101,14,236,29,225,249,129,144,197,199,5,6]},{"1809689":[66,10,15,12,151,11,25,32,223,2,255,68,186,7,251]},{"1809705":[255,14,242,20,233,6,240,127]},{"1809714":[255]},{"1809716":[254]},{"1809718":[255]},{"1809720":[255]},{"1809722":[254,1,248]},{"1809726":[240]},{"1809728":[111]},{"1809730":[85]},{"1809732":[171,1,144,16,216,216,122,186,149,3,80,47,191,64,213]},{"1809748":[43,129,41,160,237,232,69,192,246,3,175,47]},{"1809761":[80,170,42,84,212,198,191,138,247,58,5,20,104,96,208]},{"1809780":[1]},{"1809782":[192]},{"1809784":[192]},{"1809786":[122,128,22,1]},{"1809791":[47,238,1,61,8,179,17,80,72]},{"1809801":[12,146,142,136,47,18,251,159,1,125,8,187,17,93,72,239,4,77,15,111,111,253,255,96,122,163,194,68,78,162,167,16,251,176,80,144,136,8,16,1]},{"1809842":[40]},{"1809844":[17]},{"1809846":[72]},{"1809848":[4]},{"1809850":[172,3]},{"1809853":[119,1,238,191]},{"1809858":[213]},{"1809860":[127,64,85,69,154,128,114,95,193,207,250,135,255]},{"1809874":[213]},{"1809876":[255,64,87,69,191,135,250,255,255,247,125,135,128,79,170,63]},{"1809893":[170,168,170,88,103]},{"1809899":[85]},{"1809901":[201,120]},{"1809906":[128]},{"1809908":[64]},{"1809910":[69]},{"1809912":[144]},{"1809915":[170,6,48,124,131,254]},{"1809922":[215]},{"1809924":[255]},{"1809926":[119,98,191,213,1,1,84,200,135,120,255]},{"1809938":[255]},{"1809940":[255]},{"1809942":[247,98,255,213,127,65,183,192,255,248,1,254,40,215]},{"1809957":[255,8,136]},{"1809961":[128,128,62,28,35,7]},{"1809974":[98]},{"1809976":[85]},{"1809978":[1,192,20,200,127,128,250,18,216,1,255,1,247,162,252,84,78,81,112,95,232,25,252,18,252]},{"1810004":[255,1,247,162,255,84,122,80,223,17,251,26,7,232,38,217]},{"1810021":[254,8,92]},{"1810025":[139,143,160,96,158,232,5,16]},{"1810036":[1]},{"1810038":[162]},{"1810040":[84]},{"1810042":[90,5,1,96,240,14,136,42,43,70,195,44,247,132,249,194,238,65,182]},{"1810062":[255,160,247]},{"1810066":[255,2,247]},{"1810070":[251,140,247,200,251,68,253,2,126,161,127,128,84,161,35,220,4,123,14,49,149,42,139,116,65,30]},{"1810098":[2]},{"1810102":[128]},{"1810104":[200]},{"1810106":[196]},{"1810108":[2]},{"1810110":[33,128,55,234,41,84,19,170,84,1,166,8,103,17,115,136,222,37,88,165,254,1,236,17,171,84,95,160,191,65,252,3,223,4,255]},{"1810146":[215,40,255]},{"1810150":[255]},{"1810152":[248,7,216,38,143,112,33,218,133]},{"1810162":[1]},{"1810164":[17]},{"1810166":[84]},{"1810168":[160]},{"1810170":[65]},{"1810172":[3]},{"1810174":[4,32,217,251,246,93,243,191,87,17,253,46,149,196,153,42,221,64]},{"1810193":[38,8,163,4,72,168,70,128,83,234,145,103,144,186,69,255]},{"1810210":[255]},{"1810212":[255]},{"1810214":[255]},{"1810216":[127,128,127]},{"1810220":[254,1,71,184,34]},{"1810226":[163]},{"1810228":[72]},{"1810230":[70]},{"1810232":[83]},{"1810234":[145]},{"1810236":[144]},{"1810238":[5]},{"1810240":[124,108,152,136,4,108,166,118,205,189,15,85,221,170,80,5,16,131,56,79,120,227,88,193,112,2,240,10,98,21,175,80,239,16,247]},{"1810276":[239,16,223,32,191,64,159,96,191,64,255]},{"1810290":[8]},{"1810294":[128]},{"1810298":[10]},{"1810300":[21]},{"1810302":[80]},{"1810310":[164,162,12,15,175,175,192,224,226,74]},{"1810321":[255]},{"1810323":[255]},{"1810325":[255,12,83,1,254]},{"1810331":[80]},{"1810333":[63]},{"1810335":[189,255]},{"1810338":[255]},{"1810340":[255]},{"1810342":[243,8,255]},{"1810346":[255]},{"1810348":[255]},{"1810350":[255]},{"1810358":[2]},{"1810360":[2]},{"1810364":[32]},{"1810366":[168]},{"1810368":[170,170,1,1,34,34]},{"1810376":[10,10]},{"1810380":[2,2,128,152,170,85,1,254,34,221]},{"1810391":[255,10,245]},{"1810395":[255,2,253,24,103,255]},{"1810402":[255]},{"1810404":[255]},{"1810406":[255]},{"1810408":[255]},{"1810410":[255]},{"1810412":[255]},{"1810414":[255]},{"1810432":[239,239,85,85,171,171,1,1,147,147,69,69,42,42,5,5,239,16,85,170,171,84,1,254,131,108,69,186,42,213,5,250,255]},{"1810466":[255]},{"1810468":[255]},{"1810470":[255]},{"1810472":[255]},{"1810474":[255]},{"1810476":[255]},{"1810478":[255]},{"1810496":[127,174,255,237,243,233,243,123,255,151,205,159,168,211,200,255,170,81,64,18,160,30]},{"1810519":[140,128,104,32,80,36,107,48,55]},{"1810541":[16,16,32,4]},{"1810546":[173]},{"1810548":[73]},{"1810550":[123]},{"1810552":[23]},{"1810554":[143]},{"1810556":[129]},{"1810558":[205]},{"1810560":[112,255,112,255,227,191,202,255,132,255,128,255]},{"1810573":[255]},{"1810575":[255]},{"1810577":[143]},{"1810579":[141]},{"1810581":[92]},{"1810583":[53]},{"1810585":[123]},{"1810587":[127]},{"1810589":[255]},{"1810591":[255]},{"1810608":[243]},{"1810610":[255]},{"1810612":[191]},{"1810614":[255]},{"1810616":[255]},{"1810618":[255]},{"1810620":[255]},{"1810622":[255]},{"1810625":[255,3,253,4,255,10,254]},{"1810633":[255,42,255,5,255,186,255]},{"1810641":[255,1,253,3,255,3,126]},{"1810649":[255]},{"1810651":[255]},{"1810653":[255]},{"1810655":[255]},{"1810658":[3]},{"1810661":[7,2]},{"1810672":[255]},{"1810674":[222]},{"1810676":[252]},{"1810678":[252]},{"1810680":[234]},{"1810682":[239]},{"1810684":[175]},{"1810686":[186]},{"1810688":[1,255,42,255,85,255,174,255,17,251,161,245,91,255,255,255]},{"1810705":[255]},{"1810707":[255]},{"1810709":[255]},{"1810711":[255,4,251,12,245,6,255]},{"1810719":[255]},{"1810727":[6]},{"1810729":[1,2,4,6,9]},{"1810735":[53,233]},{"1810738":[250]},{"1810740":[245]},{"1810742":[174]},{"1810744":[145]},{"1810746":[163]},{"1810748":[89]},{"1810750":[255]},{"1810752":[101,239,143,207,69,239,245,245,86,254,253,252,223,250,85,81,40,215,48,207,16,239,10,245,1,254,2,252]},{"1810781":[250,170,81]},{"1810785":[60]},{"1810787":[133]},{"1810789":[64]},{"1810791":[244]},{"1810793":[18,1,29,5,223,4,69,77]},{"1810802":[143]},{"1810804":[69]},{"1810806":[245]},{"1810808":[86]},{"1810810":[253]},{"1810812":[223]},{"1810814":[85]},{"1810816":[87,255,245,245,250,250,108,112,250,225,28,199,26,106,20,96]},{"1810833":[255,10,245,5,250,131,96,28,228,88,12,197,74,139,1]},{"1810849":[67]},{"1810851":[5]},{"1810853":[154,20,12,27,191,131,247,48,90,116,117,87]},{"1810866":[245]},{"1810868":[250]},{"1810870":[100]},{"1810872":[255]},{"1810874":[223]},{"1810876":[26]},{"1810878":[117]},{"1810880":[14,138,4,16,129,226,96,9,180,147,66,145,10,1,6,168,49,42,203,64,13,164,164,40,68,148,34,2,254,72,87,17,164,174,84,84,98,231,107,104,55,183,211,211,9,79,169,189,174,64,84,32,231,16,106,16,183,8,211,12,79]},{"1810942":[189,2,232,129]},{"1810947":[2,32,5,2,173,129,87,11,244,159,97,183,194,22,134,253,45,218,130,82,18,40,8,11,10,30,30,109,224,105,239,2,47,37,167,175,183,215,223,254,255,255,63,122,231,239]},{"1810994":[47]},{"1810996":[167]},{"1810998":[191]},{"1811000":[223]},{"1811002":[255]},{"1811004":[191]},{"1811006":[127]},{"1811008":[196,16,15,241,30,224,110,150,239,80,240,138,240]},{"1811022":[3,32,238,169,12,12,31,30,89,78,160,128,107,32,199,65,253,206,147,252,254,252,254,254,230,87,223,224,154,193,49,134,237,208,253,2,254,1,254,1,255]},{"1811064":[239]},{"1811066":[241,14,246,9,16,239,71,185,103,185,254,176,185,64,230,212,100,195,107,6,44,223,198,70,68,129,108,36,27,90,127,4,216,55,182,203,174,76,127,239,59,229,51,25,39,196,190]},{"1811114":[62,133,225,38,46,243,255]},{"1811122":[255]},{"1811124":[30,193,120,135,12,243,13,242,2,253,78,177,236,1,255,187,255,24,17,40,198,110,176,111,168,253,31,63,154,1,68,1,103,93,174,128,127,119,47,244,138,29,64,159,104,145,187,255,152,58,191]},{"1811176":[49,110,164,79,53,72,159,255,241,14,255]},{"1811188":[255]},{"1811190":[23,232,110,145,100,155,8,247,128,127,107,190,208,11,255,160,32,239]},{"1811209":[170,64,191,197,213,255,255]},{"1811217":[129,180,139,88,248,223,32,255,101,191,68,239,213]},{"1811231":[255,1,212,88,35,167,160,239,16,117,170,4,191,85,128,255,255,128,127,227,28,255]},{"1811254":[16,239,186,69,4,251,197,58]},{"1811263":[255,8,216,205,96,129,32,59,224,6,128,28,193,60,3,57,131,36,215,16,130,104,30,224,36,209,120,161,98,132,71,5,1,20,195,144,47,152,119,192,63,112,175,34,221,69,59,2,253,199,56,15,240,255]},{"1811318":[63,192,190,65,127,128,126,128,121,132,53,56,208,2,155,39,31,76,102,201,65,190,254,126,237,211,7,203,26,39,55,71,52,143,120,119,62,193,126,255,195]},{"1811360":[3,243,32,192,76,247,195,156,209,8,129,190,127,1,238,255,243,12,224,16,255]},{"1811382":[148,3,40,23]},{"1811387":[127,127,128,193,62,201,159,53,138,116,199,185,195,182,3,121,7,118,6,116,12,134,37,194,69,135,76,71]},{"1811416":[199,200,137,141,142,133,137,135,5,122,192,190,197,62,131,191,199,63,139,118,135,123,143,124,126,129,252,3,254,1,59,68,250,5,253,2,247,8,243,12,63,117,224,32,127,127,199,227,81,254,139,127,199,147,167,127,10,58,61,194]},{"1811477":[127,216,71,254]},{"1811482":[127]},{"1811484":[130,59,6,1,240,5,29,50,254,1,248,163,255,251,255,203,63,213,3,251,138,53,29,226,128,126,216,36,4,251,116,139,234,21,250,5,144,127,143,79,255,248,254,248,94,166,230,239,129,203,136]},{"1811536":[128,239,16,239,10,249,26,227,160,1,243,16,193,146,37,243,111,127,16,239,15,247,19,253,225,255,209,237,196,127,103,152,128,16,16,232,11,4,31]},{"1811576":[190,65,61,194,255]},{"1811582":[123,132,31,195,247,151,64,9,134,16,7,144,95,32,31,64,92]},{"1811600":[8,216,24,168,144,118,32,233,193,105,129,128,130,163,33,162,248,215,8,247,176,79,96,223,193,190,129,127,131,125,163,94,63]},{"1811634":[31,32,191,64,127,128,127,128,254,1,255]},{"1811646":[255]},{"1811648":[65,204,195,208,197,144,3,96,223,48,14,128,244,128,31,129,142,202,100,92,48,2,136,92,16,32,80,49,161,170,163,99,226,25,44,243,112,239,184,119]},{"1811689":[127,241,46,225,94,226,29,163,68,207,16,191,64,31,224,63,128,127]},{"1811708":[190,65,255]},{"1811712":[83,2,197,46,176,111,235,89,191,159,84,191,18,238,253,22,38,134,74,110,105,79,205,210]},{"1811737":[31,144,175,2,81,20,136,8,243,80,165,9,246,132,127,64,63,128,255,175,127,118,255,200,36,240,10,192,13,192,27,64,151,128,63,3,124,21,232,136,116,128]},{"1811780":[169,64,250,255,170,190,5,175,241,127,111,64,119,119,106,106,86,86,82,5,3,252,1,254,113,4,80,175,4,136,21,170,64,169,168,255,1,255]},{"1811819":[255,138,255,208,127]},{"1811825":[119,21,106]},{"1811829":[86]},{"1811831":[255,1,254]},{"1811835":[255]},{"1811837":[255,208,47,20,59,95,18,192]},{"1811846":[118,157,72,200,69,254,4,255,255]},{"1811856":[99,123,160,178,31,31,107,255,104,128,1,255,4,219]},{"1811871":[255,132,12,69,237,32,192]},{"1811879":[246,55,232]},{"1811883":[255,32,255]},{"1811887":[255,163,80]},{"1811891":[178,32,31]},{"1811895":[255]},{"1811897":[223]},{"1811899":[255]},{"1811901":[255]},{"1811903":[255,3,254,174,173,9,13,21,233,164,164,11,243,21,246,254,12,239,254,7,175,209,209,229,233,174,4,5,248,28,227,13,250,16,19,80,6,38,13,98,25,91,170,14,255,8,255,1,247,236,1,80,171,32,210,4,234]},{"1811961":[245,4,251,8,247,1,254,17,254,168,239,252,159,7,135,34,226,133,125,192,191,128,124,239,94,71,175,3,159,248,255,125,255,127,255,255,127,28,252,1,160,16,64,96,96,128]},{"1812008":[64,160,24,133,12,192,3,224,79,16,23,168,3,156]},{"1812023":[255]},{"1812025":[95]},{"1812027":[250]},{"1812029":[255]},{"1812031":[255,213,53,28,222,119,247,51,49,126,127,223,116,246,174,175,21,229,53,254,190,247,119,247,243,255,255,255,255,247,255,191,151,193,14]},{"1812067":[95,8,243,8,49]},{"1812073":[126]},{"1812075":[85]},{"1812077":[175,64,173,96,27,128,35]},{"1812085":[12,4,202]},{"1812089":[129]},{"1812091":[170]},{"1812093":[80]},{"1812095":[250,213,138,158,200,47,192,35,64,111,68,31,251,223,240,7,230,127,64,63,8,223,64,255,192,63,68,255,187,223,208,247,166,10,245,1,254,40,151,48,23,40,147]},{"1812139":[71,96,143,8,217]},{"1812147":[8,64,32,104,144,4,192,56,131,16,96,38,128,118,136,247,2,206,36,255]},{"1812168":[252,18,255,8,255,64,255,144,253,2,190,67,119,140,254,1,223,48,255,8,253,66,255,144,139,84,73,180,185,70,1,254,35,220]},{"1812203":[247,2,253]},{"1812207":[127,2]},{"1812210":[67]},{"1812212":[136,4,1]},{"1812216":[32,16,8]},{"1812220":[2,64,128,16,61,210,249,36,97,170,89,68,69,170,219,20,247,29,245,181,250,21,254,33,222,33,222,113,186,117,190,81,111,149,250,189,167,72,7,216,175,80,135,40,239,16,69,170,176,75,7,234,21]},{"1812274":[33]},{"1812276":[1]},{"1812278":[65]},{"1812280":[69]},{"1812282":[81]},{"1812284":[132,1,16,162,125,170,250,85,221,187,95,21,95,170,89,4,155,37,80,5,2,213,7,168]},{"1812309":[102,160,74,160,85,167,88,103,153,175,80,255]},{"1812322":[253,2,255]},{"1812326":[255]},{"1812328":[255]},{"1812330":[252,2,254,2,255]},{"1812336":[213]},{"1812338":[168]},{"1812340":[102]},{"1812342":[74]},{"1812344":[85]},{"1812346":[88]},{"1812348":[153]},{"1812350":[80]},{"1812352":[208,208,168,42,84,213,235,87,85,213,255,93,125,173,126,21]},{"1812369":[47]},{"1812371":[215]},{"1812373":[171]},{"1812375":[188]},{"1812377":[170]},{"1812379":[162,128,82,128,107,255]},{"1812386":[255]},{"1812388":[255]},{"1812390":[255]},{"1812392":[255]},{"1812394":[255]},{"1812396":[255]},{"1812398":[255]},{"1812402":[130]},{"1812404":[129]},{"1812406":[188]},{"1812408":[128]},{"1812410":[162]},{"1812412":[80]},{"1812414":[107]},{"1812417":[24,136,136,128,193,33,98,6,5,195,224,240,176,248,88,16,239]},{"1812435":[119,65,62,129,94,3,248,3,60]},{"1812445":[79]},{"1812447":[167,255]},{"1812450":[255]},{"1812452":[255]},{"1812454":[254,1,254,1,252,2,255]},{"1812462":[255]},{"1812464":[8]},{"1812470":[66]},{"1812474":[32]},{"1812476":[64]},{"1812478":[160]},{"1812480":[202,202,164,228,130,98,88,32,199,22,228,22,75,6,50,192,138,53,100,59,194,61,248,7,233,62,241,43,97,190,98,185,255]},{"1812514":[223]},{"1812516":[127,128,39,152,110,144,113,182,218,29,181,114]},{"1812530":[32]},{"1812532":[32]},{"1812538":[8]},{"1812540":[32]},{"1812542":[136]},{"1812544":[248,47,242,63,200,59,224,247,140,255,2,247,224,255,234,255]},{"1812561":[215]},{"1812563":[205,12,251,8,23,4,123]},{"1812571":[243]},{"1812573":[31]},{"1812575":[31]},{"1812580":[8]},{"1812585":[4,12]},{"1812592":[47]},{"1812594":[55]},{"1812596":[51]},{"1812598":[243]},{"1812600":[211]},{"1812602":[251]},{"1812604":[250]},{"1812606":[251]},{"1812609":[255,2,255,5,255,10,255,1,255,43,255,21,255,191,255]},{"1812625":[255]},{"1812627":[255]},{"1812629":[255]},{"1812631":[255]},{"1812633":[255]},{"1812635":[255]},{"1812637":[255]},{"1812639":[255]},{"1812649":[1]},{"1812655":[130,254]},{"1812658":[255]},{"1812660":[255]},{"1812662":[90]},{"1812664":[251]},{"1812666":[251]},{"1812668":[191]},{"1812670":[255]},{"1812672":[21,255,171,255,85,255,239,255,117,255,255,255,95,255,255,255]},{"1812689":[255]},{"1812691":[255]},{"1812693":[255]},{"1812695":[255]},{"1812697":[255]},{"1812699":[255]},{"1812701":[255]},{"1812703":[255]},{"1812713":[17]},{"1812715":[35]},{"1812717":[1]},{"1812719":[151,149]},{"1812722":[235]},{"1812724":[245]},{"1812726":[239]},{"1812728":[245]},{"1812730":[255]},{"1812732":[95]},{"1812734":[255]},{"1812736":[87,255,253,253,95,255,253,253,127,255,223,213,255,186,149,196]},{"1812753":[255,2,253]},{"1812757":[255,2,253]},{"1812761":[255,32,213]},{"1812765":[186,90,244]},{"1812769":[23]},{"1812771":[156]},{"1812773":[95]},{"1812775":[253]},{"1812777":[127,10,223,69,255,17,245,87]},{"1812786":[253]},{"1812788":[95]},{"1812790":[253]},{"1812792":[127]},{"1812794":[223]},{"1812796":[255]},{"1812798":[149]},{"1812800":[251,250,245,86,250,168,84,90,238,171,85,74,171,174,17,170,4,250,8,84,5,168,161,80,16,170,160,64,80,170,68,4,1,251,163,247,82,250,14,94,69,239,31,95,5,175,187,191,251]},{"1812850":[247]},{"1812852":[250]},{"1812854":[94]},{"1812856":[239]},{"1812858":[95]},{"1812860":[175]},{"1812862":[191]},{"1812864":[238,168,85,2,186,37,81,170,232,157,64,171,160,85,32,255,17,168,168]},{"1812884":[64,32,4,4,2,138,20,20,10,10,32,32,70,238,87,87,159,191,251,255,117,255,235,255,245,255,223,223,238]},{"1812914":[87]},{"1812916":[191]},{"1812918":[255]},{"1812920":[255]},{"1812922":[255]},{"1812924":[255]},{"1812926":[255,32,168,86,66,168,129,85,2,237,133,82,15,250,5,93,171,248,1,2,22,22,42,43,18,18,47,42,13,10,166,167,171,168,254,255,234,254,213,255,239,255,208,255,240,247,91,251,80,80,255]},{"1812978":[254,1,255]},{"1812982":[255]},{"1812984":[253]},{"1812986":[253,10,255,4,248,175,150,100,62,72,25,100,244,41,249,55,161,224,54,144,232,1,147,129,53,48,156,84,83,48,175,181,235,202,33,136,247]},{"1813024":[229,247,122,125,116,252,191,50,148,191,127,124,184,128,224,7,246,9,127,128,252,3,177,64,191,64,224,159,128,127,7,248,184,7,42,128,181,189,170,160,139,12,41,20,131,193,156,107,189,255,234,191,202,119,218,127,187,183,157,14,62,89,50,59,253,133,191,64,119]},{"1813094":[127]},{"1813096":[243,64,15,32,153,37,251,5]},{"1813105":[255,191,64,119,136,127,128,112,143,108,211,25,230,255,192,239,205,35]},{"1813124":[85,221,168]},{"1813128":[169,90,141,1,254,94,255,250,205,220,35,255,170,119,168,255,185,251,234,1,164,164,6]},{"1813152":[220,254,255]},{"1813156":[119]},{"1813158":[255]},{"1813160":[185,24,9,101,252,252,248,248]},{"1813169":[255,255]},{"1813172":[119,136,255]},{"1813176":[4,255,97,158,248,7,248,7,46,56,248,2,5,5,240,10,155,149,68,70,175,168,229,143,168,14,24,31,250,255,208,223,250,146,231,88,104,144,90,41,78,200,31,226,255]},{"1813222":[223,42,155,252,94,237,147,128,167,153,65,191,253,2,255]},{"1813238":[245,10,16,239,157,98,147,108,137,118,191,170]},{"1813251":[42,84,92]},{"1813255":[170,170,18]},{"1813259":[160,251]},{"1813262":[253,216,170,191]},{"1813267":[255,171,247,1,255,255,185,189,3,4]},{"1813278":[38,114,191,170,255,42,247]},{"1813286":[255,170,185,16,163,28,248,3,222,85,64,255,213,42,247,8,85,170,1,254,31,224,251,4,251,140,19]},{"1813314":[112,12,125,7,104,10,192,17,208,8,250,20,189,88,198,97,136,143,154,145,152,143,31,17,61,16,103,64,102,69,75,184,131,124,157,108,159,102,49,249,58,213,127,147,27,243,120,135,255]},{"1813364":[249,2,237,18,248,7,215,42,219,36,253,8,172,16,1,168,81,252,10,168,13,208,3,192,3,224,182,225,1,67,2,254,174,82,12,245,120,218,152,12,193,45,96,73,67,82,254,169,82,1,244,171,88,87,248,7,193,62,192,127,175,252,87,168,83,172,95,160,143,240,47,176,63,192,255,128,96]},{"1813442":[227,1,198,2,211,52,131,73,20,97,140,131,47,135,10,151,22,14]},{"1813461":[49,121,73,210,246,32,202,167,247,131,147,22,225,30,233,48,223,105,182,178,108,131,94,103,155,130,249,247,8,239,16,255]},{"1813494":[223,32,254,1,222,32,255]},{"1813502":[249,4,254,253,4,255,241,5,24,65,122,64,186,134,51,4,120,9]},{"1813523":[3,128,137,96,163,12,203,206,76,78,70,154,158]},{"1813537":[252,3,255,129,126,167,157,205,176,78,183,78,181,150,109,255,3,252,3,255]},{"1813558":[190,65,249,6,255]},{"1813564":[247,8,255]},{"1813568":[48,130,62,129,81]},{"1813574":[127,7,117,3,254,15,104,4,244,22,2,5,64,193,131,168,135,130,133,138,5,4]},{"1813597":[149,48,53,13,252,192,191,135,125,129,123,143,115,5,243,31,229,47,218,125,130,127,128,253,2,251,4,249,4,240,11,251]},{"1813630":[241,6,52,193,57,1,186,133,116,1,118,14,99,11,116,28,124,8,198,13,67,196,207,72,130,142,144,159,131,146,161,175,162,167,132,185,199,63,76,176,141,117,149,104,158,97,171,78,166,77,188,67,254,1,255,3,252]},{"1813688":[251,6,247]},{"1813692":[227,16,231,24,183,129,28,131,59,129,122,135,181,1,177,5,120,8,237,9,130,73,39,36,193,68,134,2,8,70,10,71,25,153,2,27,194,191,167,218,70,56,5,125,1,251,12,247,22,233,25,230,252,3,127]},{"1813748":[125,129,124,130,240,15,240,11,254,1,240,11,124,4,7,69]},{"1813765":[249,21,73,8,178,76,36,48,102,128,138,134,10,189,1,253,4,170,17,67,83,56,152,105,3,35,235,247,253,65,71,7,2,64,71,182,191,57,226,134,122,114,221,131,124,191,184,247,248,180,187,78,241,25,164,176,73,120,3,127]},{"1813826":[128,64,128,93,128]},{"1813832":[31,17]},{"1813838":[1,193]},{"1813841":[255,191]},{"1813844":[221,34,255]},{"1813848":[238,238,255,255,223,222,254,254,128,255,64,64]},{"1813864":[17,31]},{"1813867":[170,32,84,192,43]},{"1813873":[255,191,63,255,255,255,127,224,255]},{"1813883":[255,33,222]},{"1813887":[254,255]},{"1813893":[85]},{"1813896":[255,17,1,1,42,139]},{"1813903":[193]},{"1813905":[255,255]},{"1813908":[85,170,255]},{"1813912":[238,238,255,255,213,223,255,255]},{"1813921":[255]},{"1813928":[17,187,1,170,32,113,64,40]},{"1813937":[255,255,255,255,255,255,255,68,255]},{"1813947":[255]},{"1813949":[223]},{"1813951":[255,255]},{"1813957":[84]},{"1813960":[247,118,28,252,91,99,213,141]},{"1813969":[255,255]},{"1813972":[84,171,255]},{"1813976":[128,129,183,247,252,127,218,143,81,255]},{"1813992":[127,247,40,92,128,128,40,16]},{"1814001":[255,255,255,255,255,255,255]},{"1814009":[255]},{"1814011":[171]},{"1814013":[127,64,191,255,255,1]},{"1814021":[68,3,2,241,138,255,12,235,152,94,216]},{"1814034":[255]},{"1814036":[69,186,251,5,11,126,223,226,92,243,188,130,255,255]},{"1814054":[1,1,240,240,34,98,34,35,67,194]},{"1814065":[255,255,254,255,255,254,254,15,254,29,236,28,255,60,251,74,159,179,193,214,35,247,9,94,11,255]},{"1814092":[127,16,190,224,23,215,51,115,127,255,127,191,151,71,254,161,151,121,31,78,96,195,140,225,128,203,128,225,160,211,161,161,233,233,160,240,8,125]},{"1814131":[190]},{"1814133":[245]},{"1814135":[254,136,125,94,1,6,120,1,254,31,60,47,170,143,188,143,119,170,225,22,94,244,52,206,54,63,44,159,170,239,204,255,231,245,241,167,116,239,52,191,228,16,195]},{"1814179":[213,16,163,8,112,10,228,10,65]},{"1814189":[43,202,209,44,208,10,224,12,80,15,224,1,90,132,58,196,16,12,98,255,68,251,26,255,4,191,202,63,19,255,170,255,245,103,102,255,68,255,26,255,4,255,10,191,243,95,202,255,181,79,118]},{"1814241":[251]},{"1814243":[245]},{"1814245":[251,160,87,128,46]},{"1814251":[117,64,11,136,153,4,64,10,16,4]},{"1814262":[40,130,81,2,10,128,180,65,78,32,255,7,231,4,245,82,239,180,247,56,255,176,255,144,252,249,127,135,255,28,247,80,255,180,253,50,255,176,255,144,255,248,128,124,24,231,10,245,8,71,2,253]},{"1814315":[79]},{"1814317":[255]},{"1814319":[31,131,4]},{"1814323":[4]},{"1814325":[64,184,4,2,32,176]},{"1814333":[144,224,24,93,162,255,66,125,128,190,227,127,128,254,1,221,38,255,146,162,93,174,83,254,67,255,162,220,35,191,64,119,140,255,146,255]},{"1814370":[81,172,39,216,1,92,163,92,65,190,170,85]},{"1814383":[255,93]},{"1814386":[19]},{"1814388":[1]},{"1814390":[162]},{"1814392":[35]},{"1814394":[64]},{"1814396":[136,4]},{"1814399":[146,119,175,159,69,127,139,119,49,61,194,191,64,247,10,211,4]},{"1814417":[216,96,154,128,116,184,118,240,15,96,159,8,245,172,83,255]},{"1814434":[255]},{"1814436":[255]},{"1814438":[207,16,207,48,223,32,255]},{"1814446":[127,128,216]},{"1814450":[154]},{"1814452":[116]},{"1814454":[102,16,15]},{"1814458":[159]},{"1814460":[245]},{"1814462":[83]},{"1814464":[68,92,174,246,88,92,232,23,209,53,248,20,212,175,123,79,24,163,24,65]},{"1814485":[167,192,63,128,46,7,233,14,117,142,62,255]},{"1814498":[247,8,255]},{"1814502":[63,192,126,129,254,1,251]},{"1814510":[245,4]},{"1814514":[64]},{"1814516":[4]},{"1814518":[63]},{"1814520":[36,64,232]},{"1814524":[117]},{"1814526":[58]},{"1814528":[79,249,182,89,8,20,40,182,228,60,10,88,145,97,249,67,174,88,79,176,28,227,140,83,208,139,240,7]},{"1814557":[254,2,188,199,58,241,14,255,8,247,8,63,192,127]},{"1814572":[255]},{"1814574":[254,1]},{"1814578":[160]},{"1814582":[18]},{"1814584":[8]},{"1814586":[130]},{"1814588":[240]},{"1814590":[184]},{"1814592":[64,255,2,255,5,255,42,255,81,191,59,31,53,191,207,255]},{"1814609":[191]},{"1814611":[255]},{"1814613":[255]},{"1814615":[255,96,255,160,95,64,191,32,239]},{"1814633":[32,32,122]},{"1814637":[48]},{"1814639":[58,254]},{"1814642":[255]},{"1814644":[255]},{"1814646":[190]},{"1814648":[31]},{"1814650":[59]},{"1814652":[189]},{"1814654":[207]},{"1814656":[23,255,191,255,95,255,255,255,87,255,255,255,255,255,255,245]},{"1814673":[255]},{"1814675":[255]},{"1814677":[255]},{"1814679":[255]},{"1814681":[255]},{"1814683":[255]},{"1814685":[255]},{"1814687":[245]},{"1814691":[10]},{"1814693":[16]},{"1814695":[3]},{"1814697":[7]},{"1814699":[153]},{"1814701":[63,10,255,191]},{"1814706":[191]},{"1814708":[95]},{"1814710":[255]},{"1814712":[215]},{"1814714":[255]},{"1814716":[255]},{"1814718":[255]},{"1814720":[127,255,223,221,239,255,255,253,255,255,253,247,255,186,85,250]},{"1814737":[255,32,221]},{"1814741":[239]},{"1814743":[253]},{"1814745":[255]},{"1814747":[245]},{"1814749":[186]},{"1814751":[80]},{"1814753":[107,2,23,16,255,2,255]},{"1814761":[127,10,255,69,255,175,255,127]},{"1814770":[223]},{"1814772":[255]},{"1814774":[255]},{"1814776":[255]},{"1814778":[255]},{"1814780":[255]},{"1814782":[255]},{"1814784":[238,155,149,198,255,170,85,90,250,171,212,106,170,231,170,119,96,202,8,132]},{"1814805":[170,160,80,4,174,1,65,16,178,171,171,21,207,115,215,85,255,15,95,81,255,190,255,77,255,221,85,175,32,247]},{"1814836":[255]},{"1814838":[95]},{"1814840":[255]},{"1814842":[255]},{"1814844":[255]},{"1814846":[255,170,58,73,68,186,160,213,90,175,139,156,43,190,119,120,127,112,132,140,1,1,42,170,90,90,99,235,105,106,215,247,255,127,115,255,254,255,117,255,245,213,23,255,150,215,15,175,143,7,255]},{"1814898":[255]},{"1814900":[255]},{"1814902":[223,10,255]},{"1814906":[255,40,255,80,255,120,192,183,18,207,101,31,170,245,149,122,191,104,255,64,86,2,104,136,82,98,197,197,170,170,21,21,191,191,255,255,253,253,23,255,205,189,122,218,95,95,239,239,215,215,191,191,255,87,255]},{"1814962":[159,2,255,5,255,160,255,16,255,40,255,64,255,168,19,236,169,80,93,240,254,99,127,128,253,56,149,4,254,254,19,21,175,172,95,94,254,255,127,127,199,215,235,235,1,255,255,253,252,254,174,174,157,157,255,255,255,253,255,239,255,255,252,3,254,1,254,81,255,98,255]},{"1815034":[255,2,255]},{"1815038":[255]},{"1815040":[11,1,228,161,94,88,111,40,85,52,205,156,62,76,201,196,253,241,95,209,167,104,81,216,74,44,67,182,179,204,42,214,250,245,245,251,122,249,253,120,60,62,191,158,236,207,215,230,231,24,251,4,249,6,60,195,62,193,156,99,207,48,229,26,48,148,16,177,80,56,8,42,43,157,110,30,230,22,15,59,254,169,214,54,130,35,127,73,226,83,207,63,62,1,201,184,233,130,126,152,115,132,201,44,123,128,95,6,37,20,190,6,200,119,78,241,199,120,129,254,131,124,11,244,5,250,8,245,255,214,127,124,191,47,143,166,206,38,31,191,15,47,113,72,42,174,130,16,208,254,169,216,145,247,224,63,208,207,191,247,254,255,126,253,238,110,231,150,239,7,63,111,207,31,254,6,252,3,252,3,62,193,174,65,174,97,15,240,223,32,225,30,153,29,213,66,154,158,223,136,223,139,237,76,110,34,151,68,58,4,41,67,31,22,172,32,159,201,70,1,27,68,167,196,193,71,96,92,114,119,36,38,237,173,25,18,205,144,47,7,135,120,99,190,5,250]},{"1815287":[255]},{"1815289":[255]},{"1815291":[255,16,239,200,127,243,84,243,248,227,192,254,200,118,96,103,32,189,192,167,3,168,4,4,12,53,29,56,32,137,88,202,90,98]},{"1815326":[88,184,84,255,212,251,221,250,209,79,121,230,186,20,225,30,249,5,251,4,223,32,239,16,239,144,238,17,254,161,29,226,93,226,95,55,95,30,63,207,127,255,127,236,232,253,232,210,144,245,8]},{"1815378":[65,161,49,144,3,2,22,30,26,14,28,45,121,11,182,159,148,222,75,175,222,117,234,237,246,205,220,131,232,55,190,65,213,42,251,4,95,40,255]},{"1815418":[235,52,223,96,191,192,135,3,14,128,85,34,160,76,70,150,158,46,47,92,155,79,33,121,199,112,8,2,29,6,53,13,97,16,131,35,84,112,225,92,196,190,5,248,2,249,7,242,14,229,92,136,175,1,252,2,122,132,245,8,235,18,210,33,175,66,31,132,187,46,19,135,120,9,4,14,240,138,135,158,224,152,16,2,60,150,71,235,4,131,74,241,147,13,198,116,186,55,68,220,124,60,75,180,128,241,215,40,27,250,76,179,54,217,253,163,252,20,253]},{"1815538":[241,10,253,2,227,20,255]},{"1815546":[247,8,239,16,60,67,112]},{"1815554":[103,130,88,20,79,11,57,22,14,22,55,191,149,63,20,15,179,35,144,161,221,237,100,141,52,156,160,168,42,193,20,251,51,78,129,120,238,29,82,177,164,11,248,207,42,149,231,16,111,144,249,6,229,24,178,64,128,66,144,7]},{"1815615":[126,89,8,234,42,174,28,14,60,244,62,127,63,188,190,86,119,60,138,102,98,32,54,64,178,226,40,193,2,128,195,168,136,12,243,84,189,82,223,240,61,40,223,130,61,131,63,33,222,213,32,225,10,227,12,129,78,195,20,1,62,1,124]},{"1815679":[254,203,24,74,24,247,43,99,1,243,55,13,59,240,34,114,38,33,13,174,151,3,24,201,248,51,12,140,194]},{"1815709":[19,112,229,29,226,159,120,8,205,252,21]},{"1815721":[223,131,119,7,246,237,175,199,40,207,32,197,58,221,34,221,32,244,8,241,8,225,18,64,24,231,30,214,14,74,30,223,26,80,28,81,24,71,18,21,189]},{"1815763":[27]},{"1815765":[11,150,172,38,24,138,158,172,150,138,154,10,253,8,252,43,237,166,83,16,235,183,101,156,107,171,118,242,5,240,7,225,22,243,12,199,60,227,28,206,49,255]},{"1815808":[138,137,192,146,30,7,201,79,165,220,78,158,221,255,85,85,89,97,147,3,171,151,75,7,227,154,1,247,145,170,42,110,84,42,44,248,200,82,30,180,153,252,16,216,243,38,128,187,100,145,244,2,201,37,136,75,193,7,128,47,81,29]},{"1815871":[127,96,160,23,39,5,53,76,252,5,79,91,143,191,191,23,23,125,189,72,239,180,241,119,115,117,122,160,175,64,247,232,239,66,165]},{"1815907":[56,142,128,132,138,143,10,20,116]},{"1815917":[72]},{"1815919":[248,66,221,128,175,78,53,4,127,5,245]},{"1815931":[171]},{"1815933":[255]},{"1815935":[255,181,196,125,126,3,120,246,224,84,210,84,48,164,169,105,124,195,199,131,255,247,254,63,207,87,199,255,239,85,253,143,191,56,177,2,129,73,8,48,6,184,196,16,196,3,12,4,211,8,71]},{"1815987":[255,49,199,48,235,56,23,16,191,2,245]},{"1815999":[239,47,159,58,30,57,150,155,133,183,206,186,61,215,117,79,67,241,255,245,255,239,181,188,134,249,207,245,206,171,250,255,184,1]},{"1816034":[16,32,72,98,219,1,115,129,55,130,6,6,64,160]},{"1816049":[255,4,251,141,17,62,195,58,70,49,255,33,221,79,251,206,32,143,177,255,98,27,2,247,196,58,133,255,12,122,45,236,154,121,6,243,29,161,89,239,19,195,63,75,179,163,119,41,10,150,135,16,31,30,27,24,31,32,62,4,62,72,94,116,179,120,247,224,111,224,255,224,215,192,255,192,63,128,255,109,186,91,162,27,232,23,241,157,193,204,96,185,197,253,5,93,222,127,254,250,249,253,243,247,251,255,227,245,205,255,207]},{"1816161":[202]},{"1816163":[196,5,9,66,19,9,202,32,68,73,174,5,64,33,116,1,250,2,245,12,226,4,121,24,167,16,111,48,207,239,39,95,119,159,255,111,127,95,255,187,219,189,253,191,215,95,151,15,7,223,211,207,229,159,78,255,192,127,192,63,128,136,192,168,112,12,240,90]},{"1816232":[49,128,187,4,61,2,127]},{"1816240":[39,240,15,128,3,76,5,250,14,113,96,155,64,189,40,215,211,119,183,166,207,223,255,255,254,244,255,254,255,255,159,127,219,107,247,180,239,135,255,95,253,245,254,84,255,171,159,1,4,160,42,81,88,34,160]},{"1816296":[2,8,171]},{"1816300":[84]},{"1816302":[254]},{"1816304":[83,20,132,42,133,90,95,160,244,3,84,171,171,84,129,126,188,22,252,249,255,85,255,184,255,241,255,251,255,255,254,255,254,23,255,216,255,85,255,184,255,241,255,251,255,255,255,65,34,207,32,7]},{"1816357":[254]},{"1816359":[87]},{"1816361":[47]},{"1816363":[69]},{"1816365":[35,190]},{"1816368":[16,4,216,32,1,84,168,16,208,33,186,65,220,35,65,190,247,155,255,180,61,82,63,170,255,196,255,218,255,88,191,191,95,147,255,180,94,49,254,171,245,206,255,218,255,88,127,63,168,69]},{"1816419":[79,163,76,1,118,10,245]},{"1816427":[255]},{"1816429":[255,64,215,18,33,176,4,49]},{"1816438":[137,34,10,196]},{"1816443":[218]},{"1816445":[88,40,87,223,32,255,128,223,32,251,60,125,242,255,34,255,48,255,240,224,31,160,223,112,143,188,123,243,124,187,102,244,59,254,241,63,192,95,160,175,80,71,168,142,97,68,187,11,244,1,222,31]},{"1816498":[95,128,143]},{"1816502":[83,40,28,96,68,34,11,48,33,208,85,175,239,17,213,40,127,144,247,10,223,32,255]},{"1816526":[246,5,6,252,3,253,3,255,129,109,1,252,161,94]},{"1816541":[255,173,86,251]},{"1816546":[252,3,254,1,254,2,255]},{"1816554":[126,129,255]},{"1816558":[83,168,252]},{"1816562":[252,1,252]},{"1816566":[108]},{"1816568":[252]},{"1816570":[94]},{"1816572":[255]},{"1816574":[86]},{"1816576":[82,98,162,27,211,229,251,80,211,18,235,213,213,59,119,24,48,143,19,239,1,191,128,47,128,109,144,174,56,215,189,90,238,16,253,3,254,1,255]},{"1816616":[255]},{"1816618":[127]},{"1816620":[239]},{"1816622":[199,48,1]},{"1816626":[168,2,54,1,43]},{"1816632":[65]},{"1816634":[174]},{"1816636":[214]},{"1816638":[74,16,95,239,255,253,255,254,245,95,254,235,126,220,255,238,111,122,48,255]},{"1816659":[253]},{"1816661":[254]},{"1816663":[85]},{"1816665":[234,43,127,85,255,111,111,32,15,2,127,1,255,170,255,21,255,162,213,17,170,21,16,207]},{"1816690":[255]},{"1816692":[255]},{"1816694":[255]},{"1816696":[255]},{"1816698":[255,42,255,85,127,239,255,254,247,94,187,175,254,159,255,184,185,209,255,236,245,50]},{"1816721":[254,2,86,65,235,174,190,87,255,191,191,127,255,255,255,1,255,169,253,20,254,97,81,71,174,110,76,19,128,207]},{"1816752":[255]},{"1816754":[255,2,255,1,255,174,255,81,255,179,255,127,255,255,251,174,235,239,247,238,255,210,254,144,244,160,184,16,84,2,1,171,187,251,85,247,255,255,126,254,255,255,255,255,255,255,85,254,4,84,25,171,45]},{"1816808":[110,136,95,1,239,2,255,1,255,1,255,171,255,84,255,255,254,119,255,254,255,253,255,254,255,236,252,77,253,128,16,130,160,64,66,171,1,23,42,255,87,252,255,255,255,255,255,127,127,127,253,63,254,255,213,255,16,170,178,1,127,34,127,197,191,94,63,214,255,169,255,42,255,85,254,254,255,221,255,58,63,33,255,41,255,86,255,213,252]},{"1816898":[16]},{"1816900":[132,4,46,127,21,63,168,253,80,255,16,119,255,191,255,127,251,255,209,255,234,255,86,255,170,255,200,255,63,239,255,77,255,126,255,46,255,149,255,171,255,85,255,191,255,16,255,50,255,129,255,209,255,106,253,86,255,170,119,200,129,1,46,63,90,255,80,249,96,243]},{"1816971":[213,24,234,18,200,254,255,208,255,160,255,14,243,132,243,32,245,24,234,18,202,255,255,255,111,255,95,251,247,251,127,247,247,247,239,239,231,255]},{"1817010":[255,144,255,160,245,10,247,136,213,42,234,21,192,63,119,255,149,253,42,186]},{"1817031":[85]},{"1817033":[232,16]},{"1817036":[117]},{"1817038":[157,6,8,255,194,127,197,191,170,255]},{"1817049":[232,50,16,117,69,181,179,255,247,255,255,191,255,255,255,255,255,221,255,239,207,255,213,255,8,253,2,250,5,85,170,232,23,34,221]},{"1817085":[255,12,251,112,226,88,192,12,164,2,10,5,3,129,1,90]},{"1817102":[80,5,148,234,34,224,89,250,14,3,5,7,171,131,94,91,255,250,235,103,241,231,254,249,255,242,253,253,215,253,251,254,250,85,230,153,214,45,161,94,4,255,2,255,40,215,4,251,5,255,119,54,119,60,47,31,46,6,45,26,165,139,161,204,66,172,58,53,192,10,97,86,80,75,234,79,216,141,244,199,176,231,183,166,62,128,235,147,239,3,223,10,253,137,223,198,251,161,18,237,129,127,20,239,161,254,144,255,114,255,24,255,28,255,64,64,240,168,208,85,244,222,206,90,187,110,178,113,86,182,181,105,132,32,239,116,205,16,119,15,55,27,52,144,50,5,107,151,35,81,245,206,146,161,15,34,27,66,144,94,45,42,100,155,114,143,114,141,51,206,140,243,154,229,30,229,207,242,48,36,54,160,45,74,17,23,171,2,139,3,82,138,61,129,201,134,157,2,123]},{"1817302":[81,28,250,229,116,122,35,36,193,135,130,219,246,81,215,135,190,82,255,174,251,6,252,4,255,1,76,183]},{"1817331":[255]},{"1817333":[255,236,181,22,249,128,255,220,251,250,125,207,192,107,65,24]},{"1817350":[89,3,27,2,23,4,48,13,100,12,215,117,85,146,161,99,96,228,224,97,107,227,92,223,25,131,118,104,145,173,103,156,224,31,100,159,231,27,216,40,133,125,61,194,185,70,127,128,255]},{"1817400":[127,128,241,14,248]},{"1817406":[236,19,155,10,148,149,177,124,218,150,72,100,146,80,93,192,85]},{"1817424":[129,64,198,101,31,5,48,88,13,97,5,229,2,2]},{"1817439":[42,196,125,72,188]},{"1817445":[232,23,200,87,216,63,128,255]},{"1817454":[213,42,125,130,252]},{"1817460":[233,16,199,35,202,135,58,63,253,127,213,255,97,223]},{"1817475":[95]},{"1817477":[170]},{"1817479":[128,64,64,88]},{"1817484":[249]},{"1817486":[85]},{"1817488":[62,160,95,128,170]},{"1817494":[192,32,224,32,5,167]},{"1817501":[4,168,170,95,64,127]},{"1817508":[255]},{"1817510":[95,224,255,64,93,162,251,4,85,2,97,31,32,255,85,255,95,191,223,63,88,255,251,255,253,255,9,14,168,132,162,223,136,16,16,16,1]},{"1817548":[128]},{"1817550":[16]},{"1817552":[200,31,52,13,1,196,152,6,136,156,64,234]},{"1817565":[87,138,239,28,5,2,202,189,70,249,6,235,20,85,170,168,87,16,101,12,56]},{"1817587":[129,56,195,233,255,99,239,21,255,168,255,154,255,232,255,128,253]},{"1817605":[255,170]},{"1817608":[17]},{"1817610":[49,16,136,2]},{"1817616":[151,128,127,2,255]},{"1817622":[170]},{"1817624":[17]},{"1817626":[33,154,2,85,234,255,151,104,253,2,255]},{"1817638":[255]},{"1817640":[255]},{"1817642":[101,154,168,87]},{"1817647":[21]},{"1817649":[127,128,255]},{"1817653":[255,255,255,255,255,101,239,168,255,234,255,34,254,48,93]},{"1817669":[190,170,17,85]},{"1817674":[15,4,6]},{"1817678":[20]},{"1817680":[220,48,238,155,255,69,187]},{"1817688":[85]},{"1817690":[43,244,100,249,190,235,253,3,109,147,190,65,255]},{"1817704":[255]},{"1817706":[11,212,6,153,20,65]},{"1817713":[254,32,238]},{"1817717":[255,238,255,255,255,43,251,102,255,190,255,55,7,97,85,64,206,138,117,85,10,255]},{"1817740":[175]},{"1817742":[21]},{"1817744":[177]},{"1817746":[78,123,31,149,255,37,95]},{"1817754":[255]},{"1817756":[175,80,191,234,1,47,149,186,206,176,255]},{"1817768":[255]},{"1817770":[255]},{"1817772":[175,80,21,64,33,70]},{"1817779":[15,64,31,138,255,245,255,255,255,175,255,191,255,76,38,95,19,9,146,200,103,49,8,143]},{"1817804":[255]},{"1817806":[87]},{"1817808":[135,132,4,168,255,155,83,79,23,46,255,112,255]},{"1817822":[255,168,148,127,132,123,88,175,103,140,137,110,143,112,255]},{"1817838":[87]},{"1817840":[254]},{"1817842":[248,4,16,105,32,3,129,7,143,255,255,255,255,255,40,104,128,192,128,192,130,104,81,6,255]},{"1817868":[247]},{"1817870":[255]},{"1817872":[215,215,191,255,127,255,253,127,190,239,220,43,255,12,255,10,64,191]},{"1817891":[127,64,191,234,21,87,168,247,8,243,4,245]},{"1817905":[127]},{"1817907":[191]},{"1817909":[127,130,255,81,255,247,255,251,255,255,255,159,175,48]},{"1817924":[4,8,171,4,85,130,255]},{"1817932":[255]},{"1817934":[255]},{"1817936":[112,239,255,239,251,255,85,255,171,255,144,111,25,230,255,170,16,64,16,239,12,241,174,80,214,41,255]},{"1817964":[255]},{"1817966":[85,8,16,255,16,255,4,255,170,255,84,255,255,255,255,255,247,255,247,236,106,71,54,24,250,160,85,78,255]},{"1817996":[247,17,255,11,23,255,141,229,239,237,91,91,146,27,151,127,166,196,52,228,4,25,59,134,24,247,164,176,231,204,168,105,91,241,235,235]},{"1818033":[247,40,255]},{"1818037":[255,8,255,1,119,150,255,6,255,20,207,217,204,49,18,117,46,233,8,251,88,254,153,149,18,247,117,52,247,235,229,159,226,91,228,191,128,31,96,95,160,255,129,8,8,17,145,104]},{"1818086":[160,96,64,64,193,192,130,128,132,132,7,254,14,254,127,234,159,246,63,212,63,200,127,232,122,93,223,72,235,8,214,86,239,14,246,23,189,168,243,165,251,147,111,215,131,35,96,66,129,96,2,98,227,180,162,242,142,235,160,190,124,106,191,180,62,110,221,245,92,92,95,87,121,120,32,223,128,127,34,223,129,126]},{"1818169":[254,67,190]},{"1818173":[249,5,247,233,77,187,39,241,15,119,143,191,15,239,223,207,191,255,159,236,205,126,255,254,29,94,63,53,151,59,127,125,255,127,127,16,14,130,132]},{"1818213":[46,166,168,197,168,203,176,141,112,159,128,32,215]},{"1818227":[191,192,61,64,63,8,255,64,255,128,255,32,255,42,255,42,245]},{"1818245":[255,234,255,247,250,63,241,191,87,255,238,42]},{"1818258":[170,128,192,192,4,238]},{"1818265":[242,224,241,192,215,238,238,255]},{"1818274":[127]},{"1818276":[3,60]},{"1818279":[17]},{"1818281":[13,32,78]},{"1818285":[104,238,17]},{"1818289":[255,170,117,252,63,21,251,13,255,14,255,40,255,17,255,25,247,51,249]},{"1818309":[255,136,255,20,247,186,217,84,251,255,226,209,192,213,224,4,4,176,56,8,16,8,152]},{"1818333":[80]},{"1818335":[226,63]},{"1818338":[29,6,251]},{"1818342":[129,70,8,239,8,103]},{"1818349":[175]},{"1818351":[29,192,63,194,63,4,251,246,207,231,255,99,255,175,255,29,255,250,246,220,254,108,253,192,191,18,255,185,175,193,124,106,254,243,160,222,2,239,193]},{"1818391":[128,34,48,128,169,192,65,192,234,95,1,252,1,127,3,63,64,199,8,128,86,73,183,64,149,160,95,2,253,128,126,64,255,40,223,22,255,180,255,20,255,63,251,127,251,251,117,247,254,191,117,21,255,131,255,128,126,127,59,123,81,113,33,246]},{"1818456":[53]},{"1818458":[21]},{"1818460":[131,128]},{"1818465":[239,174,1,222]},{"1818470":[255]},{"1818472":[255]},{"1818474":[127,128,127,128,62,193,16,43,80,175,33,222]},{"1818487":[255]},{"1818489":[255,128,255]},{"1818493":[127,192,255,255,219,223,238,255,255,255,255,255,255,255,255,255,223,213,255,223,203,207,206,255,251,255,81,255,175,255,5,223,2,213,128,48,207,48,69,4,160,174,1,80,138,250]},{"1818540":[253,2,127,128]},{"1818545":[251,138,116,91,164,80,175,37,218,5,250]},{"1818557":[255]},{"1818559":[127,243,80,247,246,255,236,255,232,255,255,255,254,143,127,223,239,94,241,254,255,253,238,255,104,255,255,255,30,15,15,207,5,161,66,1,254,2,253,128,95]},{"1818601":[255,224,5,240,11,250,5,189,64,1,242,2,236,32,200]},{"1818617":[255,26,228,4,251]},{"1818623":[255,255,4,255,16,223,116,255,246,223,144,255,250,254,255,254,251,12,247,52,211,116,215,254,247,176,159,251,254,254,190,254,122,251,8,203,52,171,80,1,222,111,160,4,91,65,174,129,20,247]},{"1818674":[195,24,135,88,33,214,31,224,164,90,16,239,106,145,127,168,253,16,218,152,80,129,170,69,64,45,64,221]},{"1818703":[255,215,255,255,255,255,255,255,255,255,255,255,255,191,255,255,255,215,168,239]},{"1818724":[103,32,255]},{"1818728":[255]},{"1818730":[255]},{"1818732":[255,98,255]},{"1818736":[255,87,255,255,255,223,255,255,255,255,255,255,255,157,255,255,240,32,85]},{"1818756":[138,21]},{"1818759":[215]},{"1818761":[23,10,255]},{"1818765":[255,2,255,255,255,255,255,255,255,255,255,255,255,241,255,255,255,125,255,223,14,255]},{"1818788":[255,32,255]},{"1818792":[255,168,255,14,255]},{"1818798":[255,130,255,241,255,255,255,223,255,255,255,87,255,241,255,255,255,125,64,5,80,163]},{"1818821":[23,2,255]},{"1818825":[247,162,255]},{"1818829":[255]},{"1818831":[119,255,255,255,255,255,255,253,255,255,254,92,255,255,255,221,255,255,170,255,4,255,168,255,2,254,9,255,163,255]},{"1818862":[255,170,255,85,255,251,255,87,255,253,255,246,255,92,255,255,119,221,16,127,169,253,80,255]},{"1818887":[127,65,62,128,156]},{"1818893":[254,2,253,238,255,86,255,170,255,80,127,105,190,177,188,160,254,2,255,255,145,255,171,255,85,127,47,127,150,190,46,254,94,255,255,255,110,253,86,255,170,127,208,62,105,156,115,254,161,253,2]},{"1818945":[255]},{"1818947":[253]},{"1818949":[250,11,80,21,8,251,128,215,32,255]},{"1818960":[168,255]},{"1818963":[253,128,250,11,91,149,29,251,251,215,247,255,255,255,87,255,255,255,127,255,255,95,223,127,255,255,255,255,255,255,168,253,2,250,133,80,175,136,119,128,127,32,223]},{"1819007":[255,5,128,45]},{"1819012":[95]},{"1819014":[117,2,248,7,225,29,134,123,164,84,5,133,47,45,95,95,255,125,255,248,255,193,254,130,255,4,255,255,253,255,255,255,125,247,248,255,195,220,131,248,12,80,128,127,2,253]},{"1819061":[255,130,127,7,255,31,255,123,255,92,255,125,10,220,1,237,18,161,85,66,170,68,95,170,191,80,239,125,122,251,208,255,168,255,1,255,2,228,68,234,187,64,249,240,250,210,241,168,186,11,84,23,168,255]},{"1819116":[238]},{"1819118":[86,32,14,245,35,223,18,255,95,255,191,255,255,255,255,255,239,223,252,2,130,85,64,170]},{"1819143":[2,168,191,64,255,128,255,2,253,255,233,253,40,255]},{"1819158":[253]},{"1819160":[232,168,192,242]},{"1819165":[63,2,255,233,234,42,85,21,170,255]},{"1819176":[255]},{"1819178":[205,192,128,64,2]},{"1819184":[2,255,87,255,191,255,255,255,255,255,63,255,63,255,253,255,107,214,89,122,116,148,225,175,215,159,226,170,128,192,40,224,223,94,154,85,85,171,79,241,216,224,77,247,71,247,71,127,95,247,248,117,190,63,254,255,223,95,255,255,159,159,63,63,128,255,141,199,65,129,1,129,167,39]},{"1819259":[128,104,232,192,192,186,170,71,191,4,4,24,248,248,248]},{"1819275":[6]},{"1819277":[4,2,4,185,67,187,68,69,251,251,27,5,141,255,249,253,249,253,251,83,84,4,67,190,255,230,255,252,253,254,255,254,255,254,255,7,248,239,251,65,65,29,29,115,113,1,1,3,3,1,1,144,197,56,166,2,62,42,63,128,143,178,191,16,7,18,23,235,68]},{"1819347":[161,128,161,225,90,64,168,89,191,229,135,197,255,125,67,157,131,223,65,69,129,166,64,185,81,133,117,253,37,56,255,125,254,221,62,222,191,255,95,254,71,250,111,250,39,132,159,62,204,208,160,28,60,110,14,143,191,148,197,133,167,129,249,212,7,113,23,86,186,79,147,143,83,133,248,23,233,231,153,28,221,6,119,158,62,197,87,212,167,229,229,102,103,122,135,83,161,121,129,161,64,186,114,91,179,58,216,217,185,1,255,171]},{"1819460":[68,68,85,85,255,255,170,34]},{"1819472":[84,255]},{"1819475":[255,85,187,255,255]},{"1819481":[136,85,119,255,255,255,255,84,84]},{"1819491":[255,238,255,170,255,255,255,255,255,255,255,255,255,171,255,255,255,17,17,85,85,119,119,136,136]},{"1819520":[18,252,212,89,86,92,55,231,151,6,59,36,194,133,105,63,69,241,91,170,89,173,224,7,32,39,165,142,147,240,190,201,74,68,76,169,234,240,224,240,128,177,228,254,113,224,239,233,187,255,230,191,31,7,31,15,254,175,89,70,159,141,14,18,169,3,104,41,118,228,205,109,210,82,55,50,110,76,223,158,86,85,150,178,151,75,124,243,247,15,109,136,209,17,224,38,168,2,77,13,32,163,31,159,61,63,127,127,255,255,255,255,253,255,244,248,95,227,32,224,226,98,215,215,174,174,89,89,85,255,234,64,196,196,18,127,255,85,128,128,42,42,133,133,170,127,64,191,197,59,255,146,170]},{"1819674":[127,255,255,255,127,255,42,170,64,63,254,255,237,255,255,255,255,255,213,255,250,255,85,255,255,63,1,1,18,18,255,255]},{"1819708":[42,42,5,5,119,255,255,68,69,69,117,245,255,127,1]},{"1819724":[128,128]},{"1819728":[136,255,68,187,69,186,255,127,128,8,254,254,255,255,255,255,136,136,68,187,255,255,138,255,255,255,255,255,127,255,255,255,119,255,255,187]},{"1819766":[117,117,247,247,1,1,128,128]},{"1819776":[127,255,187]},{"1819780":[85,85,31,10,128,251,225,191,227,125,241,191,128,255]},{"1819795":[255,85,170,224,234,26,4,82,128,26,2,66,128,128,128]},{"1819811":[255,255,255,255,255,255,255,255,255,253,255,255,255,127,255,255,255]},{"1819830":[21,21,251,251,127,127,255,255,127,127,254,254,190,28,91,93,136,189,188,89,205,141,243,151,193,201,1,255,24,227,95,162,122,194,207,148,110,48,20,10,90,116]},{"1819874":[28,229,249,251,253,255,123,255,255,255,251,251,163,243,255,255,251,227,6,2,7,7,231,231,199,199,237,237,215,223,251,255,251,226,64,64,80,95,127,255,104,160,64]},{"1819918":[120,168]},{"1819921":[255,226,29,68,191,127,112,128,10,151,55,63,63,135,47]},{"1819937":[4,64,29,251,255,47,127,255,255,255,255,127,127,255,255,251,255,255,191,4,4,208,80,117,117,72,72,192,64,80,80,183,250,191,42]},{"1819975":[255,255,85]},{"1819980":[10,10]},{"1819984":[8,243,42,213]},{"1819989":[255,255]},{"1819992":[170,1,255,255,255,255,255,255,12,69]},{"1820003":[213,255,255,255,255,255,255,255,255,245,255,255,255,186,247,255,255]},{"1820024":[254,254]},{"1820028":[10,10]},{"1820032":[247,40,28,163]},{"1820039":[255,255,85]},{"1820044":[2,2]},{"1820048":[49,70,163,92,4,255,255]},{"1820056":[170,64,255,255,255,255,255,255,168,238]},{"1820067":[92,251,255,255,255,255,255,255,255,253,255,255,255,17,238,255,255,4,4]},{"1820088":[191,191]},{"1820092":[2,2]},{"1820096":[76,237,161,190,68,68,22,255,255,94]},{"1820107":[1,2,2,1,3,253,130,250,69,69,187,255,22,161,10,255,254,254,254,255,253,15,12,64,69,254,255,233,255,255,255,255,255,253,255,254,255,243,188,191,31,1,1,22,22,245,245]},{"1820156":[3,3,1,1,215,3,15,135,77,73,207,88,15,23,223,212,15,56,159,136,52,10,128,121,104,180,45,179,32,114,115,147,71,231,199,23,227,225,7,118,207,253,219,251,223,253,220,252,168,248,168,248,62,195,249,255,48,63,100,122,162,191,51,47,69,127,103,95,255,63,175,95,199,47,239,87,255,111,255,213,255,207,255,21,255,255,215,255,169,237,16,255,146,255,32,255,16,255,232,255,63]},{"1820258":[39,216,81,46,168,215,2,109,202,21,224,47,2,21]},{"1820273":[255,40,255,70,255,111,255,125,255,255,255,223,255,255,255,255,92,255,255,255,253,255,255,255,255,255,255,255,255,255,79,92,92,254,255,253,253,127,255,255,255,69,255,8,253,48,255,92,163,254]},{"1820324":[253,2,127,128,255]},{"1820330":[69,186,8,247,128,79,163,255]},{"1820339":[255,2,255,128,255]},{"1820345":[255,186,255,247,255,207,255,255,81,255,251,253,94,255,255,85,254,251,255,245,255,255,255,16,80,187,251,94,94,240,248,255,255,214,246,63,127,84,254,16,175,187,4,92,163,240,15,84,170,210,45,53,202,84,171,175,255,4,255,163,255,15,255,170,255,45,255,202,255,171,255,112,31,58,69,253,18,255,234,119,255,255,255,223,251,234,249]},{"1820433":[208]},{"1820435":[64]},{"1820437":[16,234,234,140,156]},{"1820443":[250,180,248,87,251,64,239,128,127]},{"1820453":[239,234,21,4,251]},{"1820459":[255,144,105,64,185,47,127,63,191,239,255,21,255,251,255,255,255,111,251,189,251,1,254,56,199,108,147,255,192,245,10,255,128,111,208,191,232,1]},{"1820498":[1,1,24,16]},{"1820503":[192]},{"1820506":[128,128,208,208,104,232,46,209]},{"1820515":[254,2,253]},{"1820519":[63]},{"1820521":[255,128,127,64,191,40,215,208,255,255,254,253,255,63,255,255,255,127,255,191,255,215,255,168,247,128,127]},{"1820549":[255,224,223,64,223,186,197,244,11,254,129,32]},{"1820566":[128,128,192,192,192,192]},{"1820574":[128,128,127]},{"1820578":[126,129,239,16,135,120,138,181,128,127]},{"1820589":[255,128,127,128,255,129,255,16,255,120,255,21,127,63,255,255,255,127,255,207,251,103,223,175,255,1,255,8,255]},{"1820619":[255]},{"1820621":[255,128,127,203,139,119,21,175,42,1]},{"1820632":[8,8]},{"1820640":[116,138,202,36,213,42,255]},{"1820648":[246,9,95,160,63,192,5,250,1,254,49,238]},{"1820661":[255]},{"1820663":[255,1,255,160,255,192,255,250,255,255,255,239,139,137,198,83,140,144,102,172,99,43,255,21,255,255,255,171,1,166,134,70,4,144]},{"1820698":[169,33,43,10,21,1]},{"1820705":[191,206,49,111,182,153,98,102,153,102,152,245,10,254,1,64,191,32,255]},{"1820725":[249,70,251,144,255,137,254]},{"1820733":[255]},{"1820735":[255]},{"1820737":[127]},{"1820739":[255]},{"1820741":[255]},{"1820743":[255]},{"1820745":[255]},{"1820747":[255]},{"1820749":[255]},{"1820751":[127,255,255,255,255,255,255,247,255,255,255,253,255,254,255,247,255,255,128,255]},{"1820772":[255]},{"1820774":[255,8,255]},{"1820778":[255,2,255,1,255,8,255,127,255,255,255,255,255,247,255,255,255,253,255,254,255,247]},{"1820801":[255]},{"1820803":[255]},{"1820805":[255]},{"1820807":[255]},{"1820809":[255]},{"1820811":[255,16,255,16,239,255,255,85,255,251,255,85,255,171,255,5,255,186,255,53,207,255]},{"1820834":[255,170,255,4,255,170,255,84,255,250,207,117,255,250,255,255,255,85,255,251,255,85,255,171,255,5,223,138,255,5]},{"1820865":[255]},{"1820867":[255]},{"1820869":[255]},{"1820871":[255]},{"1820873":[255]},{"1820875":[255]},{"1820877":[255,128,127,234,255,212,255,170,255,81,255,234,255,85,255,170,255,149,255,255,21,255,43,255,85,255,174,255,21,255,170,255,85,255,234,255,234,255,212,255,170,255,81,255,234,255,85,255,170,127,149,4,218,34,189]},{"1820933":[254,2,253]},{"1820937":[254,10,245,24,231,8,245,132,222,34,191,128,254,2,255,128,254,26,247,24,231,8,253,223,95,159,191,255,127,255,255,255,127,247,247,255,231,255,255,218,165,189,66,254,129,253,2,254,129,245,10,231,24,245,10,94,129,189,2,94,129,252,3,94,129,189,2,95,160,191]},{"1821008":[95,222,191,189,95,222,255,252,95,222,191,189,95,255,191,191,254,255,253,255,254,255,252,255,254,255,253,255,255,255,255,255,129,127,2,255,129,127,3,255,129,127,2,255,160,95]},{"1821055":[255,152,123,37,247,26,234,177,123,74,175,53,207,154,123,181,71,251,156,252,38,254,11,241,53,250,15,245,5,254,154,253,5,159,224,45,210,15,224,63,64,26,160,15,192,159,224,15,64,123,252,254,253,238,255,123,255,191,255,207,255,127,255,79,255,160,191,68,251,170,253]},{"1821127":[251,128,255,65,254,171,250,4,251,160,239,68,127,174,251,10,247,132,255,69,255,171,255,10,63,224,48,196]},{"1821156":[174,8,14,10,132,4,69,4,175,14,206,10,143,255,251,255,245,251,253,243,251,255,250,255,244,251,241,255,4,251,25,238,183,72,117,138,207,48,253,2,127,128,49,206,4,255,27,251,187,251,127,255,207,255,255,255,127,255,59,255,4]},{"1821218":[27,14,187,8,127,10,207]},{"1821226":[255,2,127]},{"1821230":[59,10,251,255,224,255,68,255,128,255,48,255]},{"1821243":[255,128,255,196,255,136,200,40,232,128,64,172,124,134,78,36,228,143,71,171,103,207,127,79,127,79,127,95,111,87,111,79,127,71,119,71,115,159,159,63,63,23,23,187,191,25,31,51,55,16,23,180,183,224,96,192,192,232,224,84,212,254,254,204,196,239,231,75,195,10,12,2]},{"1821316":[42,42,18,16,170,170,82,80,250,250,118,120,253,251,249,251,251,251,249,251,251,251,249,251,251,251,249,247,246,255,250,251,210,251,234,251,86,255,174,255,6,255,142,255,9,9,5,1,45,41,21,17,173,173,85,85,253,253,113,113,165,39,6,1,134,23,18,2,130,66,100,68,141,73,132,6,6,119,189,165,19,15,158,240]},{"1821401":[118,192,190,11,120,7,60,54,222,229,89,111,235,240,14,87,237,158,99,120,239,124,197,253,19,254,27,238,25,255,13,191,100,255,34,191,67,253,3,84,165,128,208,4,244,46,204,134,228,151,228,23,44,71,229,5,184,84,232,180,136,196,218,244,234,212,91,60,179,213,27,39,39,100,68,166,230,207,223,231,231,87,87,191,55,7,7,218,234,191,220,27,250,49,241,25,249,40,232,200,104,40,232,136,136]},{"1821508":[170,170,85,85,63,255,5,255]},{"1821517":[95]},{"1821519":[175,255,255,255,255,255,255,255,255,255,63,255,5,95]},{"1821534":[175]},{"1821536":[119,255,255,255,85,255,170,255,192,255,250,255,95,95,175,175,136,136]},{"1821556":[170,170,85,85,63,63,5,5,160]},{"1821566":[80]},{"1821568":[201,137,97,237,73,201,74,203,77,68,97,251,71,85,105,121,157,242,247,88,218,116,251,116,80,127,255,65,87,105,127,67,113,225,255,235,243,235,211,227,119,111,231,231,231,231,231,231,150,142,22,14,31,7,60,44,152,8,14,30,138,154,140,148,191,222,63,190,127,92,63,174,148,128,65,65,140,255]},{"1821647":[254,97,8,193,96,3,64,208,102,235,235,255,255,255,140,254]},{"1821664":[255,255,255,255,255,255,255,255,127,255,190,255,115,255,254,254,183,183,31,31,191,191,25,25,148,148,65,65,140,140,1]},{"1821696":[46,46,149,21,63,63,86,87,192,240,15,170,93,93,248,111,255,255,127,127,255,255,255,254,240,192,176,26,93,98,47,151,209,255,234,255,192,255,169,255,58,250,191,191,63,127,240,240,46,46,149,149,63,63,86,86,207,202,69,5,192,64,95,95,169,168,64,64,168,168,84,84]},{"1821769":[5,250,170,85,85,1,254,254,254,255,255,255,255,255,255,5]},{"1821786":[5,175,85,170,254,255,87,255,191,255,87,255,171,255,173,173,255,255,255,255]},{"1821808":[169,169,64,64,168,168,84,84,250,168,80,80]},{"1821822":[255,254,251,63,255,62,126,4,62,43,104,233,40,33,84,84,1,254,64,32,1,32,155,129,197,234,253,124,214,246,85,171,254,87,255,255,255,255,255,255,255,255,149,253,255,255,254,255,168]},{"1821872":[223,223,223,223,126,126,20,20,106,104,9,9,1,1,255,254,99,47,33,237,227,207,81,93,251,231,169,181,219,103,57,213,164,154,166]},{"1821908":[196,178,246,48,172,98,174]},{"1821916":[76,146,14,32,255,251,239,251,127,235,255,219,231,227,135,195,199,211,151,179,85,93,87,71,181,165,183,135,125,85,95,55,173,245,79,119,96]},{"1821954":[106,34,80]},{"1821958":[168,8,128,128,128]},{"1821964":[171,171,215,87,31,31,21,55,47,47,87,223,255,127,127,255,255,127,127,255,255,255,255,255,255,255,255,255,255,127,255,255,212,127,168,255,224,224,200,200,208,208,32,32,128]},{"1822012":[171,43,87,87,8,8]},{"1822020":[32,32]},{"1822024":[160,169,104,111,189,253,55,87,255,255,255,255,255,255,255,255,249,240,255,248,237,162,203,140,247,255,255,255,223,255,255,255,89,249,151,255,127,255,212,216,8,8]},{"1822068":[32,32]},{"1822072":[166,160,104,104,144,144,63,26]},{"1822086":[8,8,31,127,209,209,255,255,104,232,255,255,255,255,255,255,247,255,127,31,255,255,255]},{"1822110":[168,87,255,255,255,255,255,255,255,255,96,127,46,255,255,255,64,64]},{"1822136":[159,31,209,209]},{"1822142":[191,23,2,1,1,7,15,11,130,138,4,244,86,86,208,209,203,213,252,254,255,248,249,252,122,241,250,10,252,250,212,42,210,40,255,255,255,255,247,255,251,251,244,247,175,255,252,255,21,5,1,1]},{"1822196":[10,10,5,1,15,6,83,82,6,7,250,177,31,40,63,80,127,106,127,40,127,234,255,108,255,234,255,172,135,159,47,207,85,31,23,151,149,63,19,23,21,63,83,83,8,240,208,208,106,224,232,104,234,192,236,232,234,192,172,172,207,191,175,223,159,127,151,127,63,255,23,255,63,255,83,255,255,175,255,21,255,43,255,5,255,55,255,69,255,139,255,5,80,255,234,255,212,255,250,255,200,239,186,255,116,255,248,255]},{"1822305":[175]},{"1822307":[21]},{"1822309":[43]},{"1822311":[5,48,23,64,5,128,11,2,5,255,255,255,255,255,255,239,255,103,255,239,255,223,255,255,255,255,199,255,239,251,249,255,121,255,255,255,95,255,252,255,117,42,255,16,255,2,251,134,255,10,255,128,255,3,255,10,255,18,213]},{"1822371":[239,4,249]},{"1822375":[121,10,245,33,94]},{"1822381":[252,128,117,197,255,239,255,249,255,249,255,245,255,255,255,252,255,253,255,245,255,255,255,237,231,255,199,255,127,255,127,253,255,255,243,170,255,4,255,138,239,48,223,128,253]},{"1822427":[255,2,223,12,255,160,95,4,251,144,103,24,255,16,111,128,255]},{"1822445":[255]},{"1822447":[243,95,255,251,255,103,255,199,239,127,255,127,255,255,255,243,255,85,255,255,255,253,255,254,255,125,255,254,255,221,251,254,247,234,251]},{"1822483":[191,2,127,1,255,130,255,1,255,38,255,9,255,64,191]},{"1822499":[255]},{"1822501":[255]},{"1822503":[255]},{"1822505":[255,12,243]},{"1822509":[251]},{"1822511":[247,191,255,255,255,255,255,255,255,255,255,255,255,251,255,247,255,198,249,171,254,65,254,235,255,81,255,170,255,80,255,170,255,57,185,124,255,191,254,20,255,190,255,95,255,175,255,87,255]},{"1822561":[255,41,215]},{"1822565":[254]},{"1822567":[255,16,239,10,245]},{"1822573":[255,2,253,255,255,214,255,253,254,255,255,239,255,245,255,255,255,253,255,179,76,175,88,223,96,239,240,207,112,191,248,22,249,166,249,108,76,212,216,160,96,16,208,184,176,96,248,235,249,249,249]},{"1822625":[255]},{"1822627":[127]},{"1822629":[255,128,127]},{"1822633":[191,32,223]},{"1822637":[255,160,95,255,255,127,255,127,255,255,255,127,127,223,255,255,255,95,255]},{"1822657":[255,184,71,84,171,234,21,208,47,226,45,240,15,232,23]},{"1822682":[24,8,56,40,48,48,139,116,1,254,3,252,1,254,2,253,8,239]},{"1822701":[239,17,222,116,255,254,255,252,255,254,255,253,255,247,231,215,207,206,239,47,255,5,250,3,255,1,254,11,255,5,255,11,247,5,255,47,10]},{"1822740":[3,2]},{"1822744":[11,10,5,1,3,2,5,1,245,10,255]},{"1822756":[253,2,127,128,245,10,254,1,253,2,254,1]},{"1822769":[255]},{"1822771":[255]},{"1822773":[255,128,255]},{"1822777":[255]},{"1822779":[255]},{"1822781":[255]},{"1822783":[255]},{"1822785":[127]},{"1822787":[255,128,95]},{"1822791":[55,160,197,84,9,154,101,189,68,255,255,253,255,255,255,255,255,255,255,255,255,223,191,223,159,255,128,255,2,255,32,255]},{"1822824":[127,10,255]},{"1822828":[191,96,187,192,255,127,255,253,255,223,255,255,255,245,255,255,255,159,255,31]},{"1822849":[239]},{"1822851":[255]},{"1822853":[255,128,247]},{"1822857":[87,66,55,160,85,16,230,142,239,68,255,255,255,125,255,255,255,253,255,255,255,255,255,239,97,255,187,255]},{"1822886":[255,138,255,168,255,2,255,10,255,1,239,158,255,68,255,255,247,125,255,87,255,253,255,245,255,254,128,63]},{"1822915":[127]},{"1822917":[255]},{"1822919":[255,1,255,162,255]},{"1822925":[95,8,255,170,63,21,127,250,255,85,255,254,255,93,255,255,255,247,255,191,21,255,234,255,5,255,170,255,1,255,162,255,160,255,8,63,234,127,149,255,250,255,85,255,254,255,93,255,95,255,247]},{"1822977":[254]},{"1822979":[255]},{"1822981":[255]},{"1822983":[127,64,255,128,253,80,255,165,255,160,254]},{"1822995":[255,160,255,208,255,170,255,86,255,170,255,80,255,255,95,255,255,255,95,255,175,255,85,255,171,255,85,255,175,254,161,255]},{"1823028":[255,160,127,208,255,170,253,86,255,170,255,80,23,160,43,70,15,230,15,208,1,250]},{"1823051":[253]},{"1823053":[255]},{"1823055":[255,23,183,43,111,15,235,15,223,129,251]},{"1823067":[253,160,255]},{"1823071":[255,255,255,249,255,253,255,255,255,255,127,255,255,255,95,255,255,160,95,70,185,230,25,208,47,250,133,253,2,255,160,255]},{"1823104":[142,126,241,21,161,31,254,1,94,1,173]},{"1823116":[5,160,10,64,239,142,255,145,255,129,255,212,95,94,175,173,5,165,10,74,159,224,155,132,129,158,212,213,254,255,253,255,255,255,255,255,127,255,31,255,31,255,1,255,1,255,2,253,160,95,64,191,169,190,64,111,170,191,80,91,146,107,104,148,237,18,86,1,169,255,192,95,234,175,244,80,254,130,255,64,255,232,255,92,233]},{"1823202":[240]},{"1823204":[250]},{"1823206":[255]},{"1823208":[135,232,67,212,232,250,92,245,190,255,239,255,255,255,255,255,111,255,151,255,18,255,161,95,42,213,9,246,4,251]},{"1823239":[255,136,223]},{"1823243":[162]},{"1823245":[142,86,7,42,255,11,255,4,255]},{"1823255":[211,168,139,93]},{"1823260":[249,4,255,130,42]},{"1823266":[11,2,4]},{"1823270":[44]},{"1823272":[252]},{"1823274":[255]},{"1823276":[119,136,174,5,213,255,244,255,251,255,255,255,255,255,255,255,251,255,47,249]},{"1823297":[199,96,162,4,192,111,180,199,135,226,162,69,130,202,144,79,120,74,120,72,124,84,103,79,127,79,255,88,234,213,229,31,31,126,126,31,31,119,119,223,95,122,122,218,90,213,85,232,232,141,140,235,235,152,144,40,168,141,136,63,186,191,53,6,82,6,132,70,6,252,84,92,92,12,14,212,6,140,2,83,7,133,7,7,69,85,253,253,253,255,253,47,45,115,113,94,95,150,151,254,253,254,255,94,95,14,15,38,39,114,115,169,9,121,17,187,185,3,3,163,3,241,1,249,33,253,113,197,69,234,74,231,117,155,107,200,119,78,251,44,31,24,111,197,254,110,18,247,169,11,4,231,168,83,152,17,180,68,220,238,93,58,175,191,63,14,142,175,39,155,155,189,23,212,5,255,17,147,108,137,118,180,123,144,127,36,255,192,127,234,63,135,207,34,96,7,190,115,240,165,188,96,96,13,173,93,159,31,209,245,59,206,32,20,234,156,32,85,233,29,97,167,25,207,69,38,166,62,116,230,150,46,70,228,212,103,247,159,175,170,104,173,204,75,232,125,140,123,154,127,156,26,242,80,224,64]},{"1823554":[254,64,255,250,239,239,64,72,235,100,48,32,40,192]},{"1823569":[64,64,190,250,255,255,255,247,255,112,244,47,47,215,55,254,254,255,191,255,255,239,239,72,72,228,228,175,175,231,231,191,190,65,1]},{"1823606":[16]},{"1823608":[191,8,31,4,223,143,31,7,131,147,160,56,201,216,170,170,74,202,174,38,70,70,115,122,215,99,127,195,222,226,237,211,77,241,99,77,206,224,115,196,165,39,166,166,230,230,167,183,231,247,38,54,227,243,107,123,206,22,77,28,13,28,93,29,159,159,217]},{"1823676":[157,137,149,5]},{"1823682":[3]},{"1823684":[255,42,255,85,85,85,129]},{"1823692":[93,34,42]},{"1823699":[3,42,215,85,255,255,255,126,126,128,162,85,213,171,171,95,95,255,215,255,255,85,85]},{"1823724":[162,162,85,85,255,171,252,92,40]},{"1823736":[170]},{"1823738":[255]},{"1823740":[255,162,255,85,15]},{"1823746":[183,180,208,211,151,113,158,143,192,120,223,56,234]},{"1823760":[128,247,144,247,160,188,125,138,128,128,120,64,24,63,21,21,112,103,240,243,220,228,119,255,159,159,125,125,63,63,21,21,184,47,60,47,123,103,175,175,127,31,135,5,224,32,255,21,255,44,255,127,89,182,255,231,174,255]},{"1823820":[228]},{"1823822":[170]},{"1823824":[4,215,128,125,16]},{"1823830":[231,8]},{"1823837":[228,85,85,40,251,2,2,16,144,255,255,255,255,85,85,255,255,85,85]},{"1823857":[255,253,127,111,255,255,255,255,255,255,85,27,27,255,85,255,139,255,222,51,207,252,101,145,215,162,6]},{"1823885":[123,200,5,1,117]},{"1823891":[117,8,10,101,27,81,42,11,169,123]},{"1823902":[55,58,138,254,138,171,9,9,231,247,252,255,254,255,251,251,15,15]},{"1823921":[255,84,255,246,255,248,255,199,198,85,85,133,129,240]},{"1823936":[251,183,249,245,251,247,109,225,175,227,157,145,135,211,231,235,132,106,142,128,4,170,30,84,212,126,134,92,220,54,76,54,159,219,119,115,95,91,39,39,79,79,207,207,191,159,255,231,37,253,15,247,165,253,219,243,49,249,243,187,105,17,185,161,64,127,128,170,128]},{"1824006":[255,21,117,117,87]},{"1824012":[85]},{"1824016":[255,192,170,128]},{"1824022":[21,127,255,255,168,168,170,170,127,255,63,127,170,170,127,127,127,127,245,245,128,128,170,170,127,127,192,64,85]},{"1824052":[255,127,128]},{"1824056":[138,128,255,128,255,170,255,127,19,213,49,147,17,19,250,58,75,79,32,42,87,7,2]},{"1824080":[233,38,138,1,45,38,46,229,223,219,234,224,175,175,253,253,244,252,213,221,245,251,251,255,116,127,42,42,167,167,253,253,59,62,126,90,255,251,20,20,171,43,213]},{"1824124":[248,160,255,253,146,193,228,159,127,170]},{"1824135":[4,234,234]},{"1824139":[255,255,170,253]},{"1824144":[102,154,132,96,160,85,250,235,255,255,255]},{"1824156":[170,247,2,2,131,131,31,31,10,43,21,255,21,255,255,255,255,247]},{"1824176":[124,116,224,100,245,213,254,254,234,234]},{"1824188":[8]},{"1824190":[255]},{"1824192":[255,67,191,196,45,126]},{"1824199":[117,236,245,28,244,252,164,220,5,112,140,161,26,44,129,140,138,244,224,244,26,164,88,37,43,15,15,94,94,124,253,114,248,28,254,252,254,252,94,13,15,240,79,161,158,130,175,255,249,235,233,3,3,163,1,242,3,255,170,255,160,255,32,255,128,247,170,255,133,253,42,127,4,85,255,95,95,223,255,126,127,28,127,106,63,195,255,139,255,170]},{"1824290":[160,160,32]},{"1824294":[129,128,225,202,144,197,20,42,112,4,255,255,95,255,255,255,127,255,55,255,63,255,253,255,254,255,255,47,255,21,255,191,255,87,127,255,255,95,95,191,255,31,208,255,232,255,64,255,161,255,139,255,21,255,239,255,223,191]},{"1824353":[47,2,21]},{"1824357":[191,9,86,11,244,181,74,15,176,63,64,127,255,255,255,255,255,254,255,116,255,234,255,80,255,160,255,255,251,255,255,255,255,255,255,255,255,255,255,255,221,255,255,6,255,65,255,187,255,87,255,255,255,255,255,209,213,250,251,2,249,65,190,187,68,87,168,255]},{"1824426":[255]},{"1824428":[209,46,250,4,249,255,190,255,68,255,168,255]},{"1824441":[255]},{"1824443":[255,46,255,4,255,247,243,255,243,245,255,255,255,253,127,255,255,255,79,255,170,224,247,28,191,223,223,230,238,102,119,175,239,68,76,170,170,236,23,16,227,213,42,230,25,100,155,175,16,68,179,170,85,19,255,227,255,42,255,25,255,155,255,16,255,179,255,85,255,85,243,254,247,213,255,234,127,217,246,255,162,255,16,254,161,174,247,9,239,63,127,159,255,54,118,34,34]},{"1824541":[16,128,160]},{"1824545":[243]},{"1824547":[247,21,234,74,53,16,239,34,221]},{"1824557":[239,128,95,251,247,247,255,234,255,117,255,239,255,221,255,239,255,95,255]},{"1824577":[255,162,255,67,252,175,248,245,10,250,37,68,187,161,94,255,255,223,255,254,252,248,248,128]},{"1824603":[32]},{"1824606":[1]},{"1824609":[255,130,125,64,191,168,87]},{"1824617":[255]},{"1824619":[223]},{"1824621":[255]},{"1824623":[255,255,255,125,255,191,255,87,255,255,255,223,255,255,255,255,255,63,192,111,152,252,7,254,17,16,239,224,95,18,175,128,127,194,192,144,144,184,24,8,8]},{"1824668":[2]},{"1824673":[255]},{"1824675":[255]},{"1824677":[239]},{"1824679":[247,11,244,7,248,143,112,127,128,255,255,255,255,231,247,247,255,244,255,248,255,48,255,128,255,64,191,163,94,5,248,6,248,8,253,18,254,172,223,71,255]},{"1824722":[3,2,1,3,2,3,11,9,16,1,141,1,71]},{"1824737":[255,2,253,9,247,122,134,244,8,252,2,255,1,255]},{"1824752":[255,255,253,255,244,252,133,252,3,253,1,252]},{"1824765":[254]},{"1824767":[255,43,255,21,250,57,255,117,255,127,127,255,127,127,253,127,255,43,10,16]},{"1824788":[57,40,245,149,255,47,127,221,125,61,127,63,245,10,255]},{"1824804":[215,40,234,149,80,47,162,213,66,184,192,21]},{"1824817":[255]},{"1824819":[255]},{"1824821":[255]},{"1824823":[127,128,127,8,247,133,250,42,213,254,164,253,116,255,160,255,110,254,184,252,40,250,201,72,181,95,255,191,255,95,255,255,255,87,255,255,255,255,255,247,247,91,160,139,64,95,160,145]},{"1824872":[71,168,215,129,55]},{"1824878":[255,16,255,95,255,191,255,95,255,255,255,87,255,126,255,255,255,231,232,5,80,11,160,145,80,47,80,84,42,207]},{"1824909":[127,160,255,255,255,255,255,255,255,255,255,143,223,133,239,223,255,87,255,255,2,255,4,127,10,255]},{"1824936":[223,218,239,106,255,160,255,168,255,253,255,251,255,245,255,255,223,37,239,149,255,95,255,87]},{"1824961":[87,10,31]},{"1824965":[87,10,255]},{"1824969":[31,168,255,4,255]},{"1824975":[255,255,255,245,255,255,255,245,255,255,255,85,255,187,255,21,255,255,168,255,74,255,160,255,10,255,160,255,170,255,68,255,234,255,87,255,181,255,95,255,245,255,95,255,85,255,187,255,21]},{"1825025":[255,130,219,16,253,160,159,18,254,16,255]},{"1825037":[255]},{"1825039":[255,232,255,66,219,136,253,48,159,136,254,68,255,170,255]},{"1825055":[255,255,23,217,155,253,117,191,143,254,118,255,187,255,85,255,255,255,232,219,100,253,138,159,112,254,137,255,68,255,170,255]},{"1825089":[255]},{"1825091":[223,128,255]},{"1825095":[247,32,127,3,124,3,248,10,240,168,255,100,255,42,255,24,255,136,127,3,125,3,251,10,250,255,87,255,187,255,213,255,239,127,247,125,125,255,255,255,255,255,168,223,100,255,42,247,24,255,8,124,131,248,7,240,15,1,224,2,192]},{"1825157":[224,10,192,1,160,43]},{"1825164":[21]},{"1825166":[183]},{"1825168":[1,225,2,194]},{"1825173":[224,10,202,1,161,43,43,21,21,191,183,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,255,224,31,192,63,224,31,192,63,160,95]},{"1825211":[255]},{"1825213":[255,8,247,94,1,149]},{"1825220":[94,1,85]},{"1825224":[121,6,222,11,253,8,176,72,95,94,191,151,95,94,255,95,123,120,255,246,255,228,247]},{"1825248":[254,255,215,253,254,255,95,245,252,250,250,221,232,236,15,64,1,255,40,215,1,255,160,95,6,255,15,241,12,243,79,255,145,104,130,85,177,10,14,81,224,10,144,64]},{"1825293":[170]},{"1825295":[27,255,128,253,40,255,228,245,160,255,128,255]},{"1825308":[255]},{"1825310":[228]},{"1825312":[134,232,42,85,228,170,170,81,149,138,47,64,85,170,255]},{"1825328":[110,255,87,255,10,255,91,255,31,255,111,255,255,255,255,255,192,128,72,128,74,144,79,144,64,152,202,144,78,145,207,144,207,255,71,183,82,231,79,239,80,224,74,234,90,234,95,239,95,223,151,23,216,85,215,87,208,88,82,82,210,82,215,208,175,47,111,167,48,176,55,183,48,176,178,178,50,178,48,176]},{"1825410":[2]},{"1825412":[186]},{"1825414":[248,4,4]},{"1825419":[5,245,3,228,27,253,253,221,255,185,253,250,255,4,7]},{"1825435":[6,246,246,167,190,254,255,222,223]},{"1825445":[85,253,249,5,7,5,3,247,241,191,1,255,255,253,221,3,1,248,248,4,4,1,1,241,241]},{"1825472":[30,111,67,47,139,79,5,111,18,101,155,166,232,215,194,191,8,252,84,199,176,193,24,68,8,70,128,35,96,224,169,51,154,8,228,4,186]},{"1825510":[53,140,62,128,31,130,254,192,165,201,165,127,171,127,181,127,178,127,185,127,252,255,223,191,118,31,21,213,132,100,12,252,160,241,194,248,128,240,230,125,65,160,29,41,69,25,238,131,32,143,14,66,68,202,14,226,21,27,45,253,213,229,244,245,181,180,220,118,212,212,252,118,5,4,18,224,27,233,10,232,74,232,14,236,46,236,10,232,238,236,240,32,36]},{"1825604":[42]},{"1825606":[95,160,1]},{"1825610":[189,2,171,84,255,10,47,239,213,219,42,255,31,191,1,1,189,189,161,245,253,255,239,239,17,17]},{"1825637":[213,191,31,1,1,189,189,245,160,245]},{"1825648":[31,15,255,21]},{"1825654":[31,31,1,1,189,189,160,160]},{"1825664":[217,93,103,123,156,26,198,16,94,29,83,158,215,12,215,7,223,228,101,214,223,232,162,183,25,47,61,40,8,45,160,47,107,251,119,127,107,121,210,182,106,58,74,62,106,49,72,56,150,14,128,24,87,75,169,189,21,15,49,46,30,7,55,47,129,128,130,128,192,192,223,207,207,207,113,247,180,116,251,27,254,254,125,253,192,127,144,111,96,191,171,74,209,41,115,172,254,254,253,253,192,255,192,224,224,240,250,125,127,63,47,175,127,126,127,125]},{"1825786":[152,152,199,71,80,144]},{"1825794":[32]},{"1825796":[85]},{"1825798":[247,247,255,255,255,255,65,63,56,104,255,255,223,223]},{"1825813":[170,255,8,23,232,191,64,74,202,199,143,255,255,223,223,85,170,8,247]},{"1825833":[23]},{"1825835":[191,10,245,127,255,255,255,255,223]},{"1825854":[240,240,1]},{"1825860":[68]},{"1825862":[127,127,255,254,255,255,3,255,143,140,254,254,255,255]},{"1825877":[187,248,135,81,174,248,7,191,188,117,255,254,254,255,255,68,187,128,120]},{"1825897":[80]},{"1825899":[248,172,83,250,255,255,254,255,255]},{"1825918":[5,4,20,4,60,11,89,1,244,248,248,63,252,191,255,255,127,255,237,237,203,204,15,175,28,239,204,180,79,179,1,254,96,31,231,231,207,207,85,173,8,19,132,11,3,12]},{"1825965":[1]},{"1825967":[224,250,226,240,192,14,4]},{"1825984":[127,251,3,103,183,51,213,20,19,230,93,108,247,168,233,222,188,14,244,158,120,71,206,248,236,250,46,96,86,182,32,192,239,255,227,251,51,27,19,59,211,59,191,15,9,15,15,31,89,81,61,61,236,8,15,15,13,13,7,7,15,15,15,15,136]},{"1826050":[4]},{"1826052":[59]},{"1826054":[127,128,128,128,106]},{"1826060":[235,148,127,128,255,255,213,251,59,255,255,255,128]},{"1826074":[234,234,171,59,255,255,119,255,209,209]},{"1826085":[213,255,127]},{"1826089":[128,234,106,59,171,255]},{"1826096":[255,119,255,213]},{"1826102":[127,127]},{"1826106":[106,106,43,43]},{"1826114":[64]},{"1826116":[186]},{"1826118":[255]},{"1826124":[165,90,209,63,255,255,85,191,186,255,255,255]},{"1826140":[165,165,252,240,255,255,21,21]},{"1826149":[85,255,255]},{"1826156":[160,154,239,31,255,255,255,85]},{"1826166":[255,255]},{"1826172":[128,128,31,31,5]},{"1826178":[2]},{"1826180":[160]},{"1826182":[241,14,6,1,44,3,85,170,16,255,250,250,253,253,160,255,240,242,6,6,44,45,85,85,70]},{"1826208":[250,250,253,253]},{"1826213":[95,242,240,6,6,45,44]},{"1826221":[170,255,255,255,250,255,253]},{"1826230":[240,240,6,6,44,44]},{"1826238":[255,255,76,44,172,5,4,5,240,1,124,132,120,129,244,4,2,243,156,176,85,91,13,249,253,255,20,144,57,191,252,248,111,13,188,182,93,95,13,255,241,7,156,6,181,15,12,14,241,255,251,177,242,83,10,9,6,7,3,1,10,3,11,9,254,253,215,42,255,21,255,43,255,17,245,42,255,5,95,42,255,129,168,127,128,255,130,127,142,255,142,127,170,255,244,255,126,127,213,42,106,21,214,41,96,145,209,42,80,5,1,42,128,129,215,255,255,255,253,255,123,255,241,255,255,255,223,255,127,255,63,255,255,95,255,253,255,87,255,255,255,95,255,191,255,5,223,223,29,191,187,255,85,255,175,255,5,255,2,255,184,255,31,224,189,66,185,68,253,2,175,80,165,90,66,189,66,5,32,255,226,255,68,255,170,255,80,255,250,255,253,255,239,255,249,251,255,225,255,221,255,255,255,245,255,255,255,223,223,95,247,243,238,235,213,221,255,255,245,245,93,253,175,255]},{"1826463":[223,243,2,224,20,213,34,255]},{"1826472":[245,10,93,162,143,80,160,95,12,249,16,255,34,255]},{"1826487":[255,10,255,162,255,80,255,223,255,255,208,255,42,255,200,255,187,255,213,251,255,245,255,255,255,80,208,32,42]},{"1826517":[200,170,187,211,213,126,254,186,250,17,255,80,47,32,213]},{"1826533":[55,170,68,209,42,122,133,176,79,21,234,47,255,213,255,55,255,68,255,42,255,133,255,79,255,238,255,245,122,218,165,205,215,254,213,247,8,255,163,127,196,239,250]},{"1826577":[112,48,160,16,213,128,212,130]},{"1826586":[34,35,192,196,122,250]},{"1826593":[143,32,127,16,58,128,43]},{"1826601":[255,34,220,64,187,106,149,143,255,79,223,10,239,43,255,255,255,220,255,187,255,149,255,1,254,128,127,64,255,8,183]},{"1826633":[255,224,31,208,47,186,5]},{"1826644":[128,128,128,128]},{"1826652":[96,32,192,224,14,241,5,250,135,184,7,248,11,244,1,254,2,253,32,63,241,255,250,255,120,127,56,255,244,255,254,255,157,255,31,191,46,247,21,255,43,253,21,255,11,245,5,255,67,189,161,31,38]},{"1826706":[21]},{"1826708":[41]},{"1826710":[21]},{"1826712":[1]},{"1826714":[5]},{"1826716":[1]},{"1826718":[1]},{"1826720":[255]},{"1826722":[255]},{"1826724":[255]},{"1826726":[255]},{"1826728":[255]},{"1826730":[255]},{"1826732":[191,64,31,224]},{"1826737":[255]},{"1826739":[255]},{"1826741":[255]},{"1826743":[255]},{"1826745":[255]},{"1826747":[255,64,255,160,255,255,95,199,175,193,79,109,255,191,95,127,206,143,247,31,254,95,11,135,5,113]},{"1826774":[109,1,31,11,110,4,167,34,30]},{"1826784":[244,10,234,17,239,32,254,1,244,10,219,36,253,34,255]},{"1826800":[1,254,4,251,16,239]},{"1826807":[255,1,254,32,255]},{"1826813":[223]},{"1826815":[255,253,188,157,239,255,221,255,255,255,239,254,255,62,124,127,190,190,188,175,47,221,159,255,127,239,239,254,92,189,60,190,148,67,154,240,44,98,141,128,87,16,238,163,84,195,185,107,20,36,219,3,220,18,237,40,215,1,254,8,247,4,251,128,127,144,173,80,47,160,31]},{"1826887":[119,160,7]},{"1826891":[127,160,95]},{"1826895":[191,127,239,255,231,255,255,255,255,255,255,255,255,255,255,255,255,71,170,247,56,255]},{"1826918":[255]},{"1826920":[255,8,255]},{"1826924":[255]},{"1826926":[255]},{"1826928":[215,85,255,199,255,255,255,255,255,247,255,255,255,255,255,255]},{"1826945":[255]},{"1826947":[255]},{"1826949":[255]},{"1826951":[255]},{"1826953":[255]},{"1826955":[255]},{"1826957":[255]},{"1826959":[255,254,255,213,255,234,255,80,255,234,255,196,255,234,255,80,255,255,1,255,42,255,21,255,175,255,21,255,59,255,21,255,175,255,254,255,213,255,234,255,80,255,234,255,196,255,234,255,80]},{"1827009":[255,8,243,21,226,170,85,1,254,42,213,5,250,138,117,170,255,72,251,149,247,170,255,137,255,42,255,5,255,138,255,255,85,251,187,247,119,255,255,255,119,255,255,255,255,255,255,255,170,243,76,226,157,85,170,254,137,213,42,250,5,117,138]},{"1827073":[255,162,85,213,42,175,80,23,168,175,64,86,170,172,17,128,255,162,247,213,127,175,255,23,191,175,239,86,255,172,187,255,127,255,255,127,127,255,255,255,255,255,255,253,254,250,251,255,128,85,170,42,213,80,175,168,87,64,191,170,85,19,236,5,224,175,64,85,160,255]},{"1827144":[87]},{"1827146":[255]},{"1827148":[223,32,255]},{"1827152":[5,229,175,239,85,245,255,255,87,87,255,255,159,175,223,191,255,255,255,255,255,255,255,255,255,255,255,255,143,175,255,191,224,31,64,191,160,95]},{"1827191":[255]},{"1827193":[255]},{"1827195":[255,32,223,32,223,94,1,246,9,249,6,251,4,224,30,235,21,165,90,234,21,95,94,255,244,255,248,255,80,255,224,255,193,255,160,255,64,254,255,244,253,248,254,80,84,225,254,193,212,160,250,64,85,1,255,9,255,6,255,4,255,31,255,21,255,90,255,21,255,146,106,148,87,10,175,16,155,170,175,68,111,170,175,16,27,255,130,252,20,250,10,116,16,250,170,212,68,250,170,244,16,135,232,63,64,95,160,255]},{"1827304":[255]},{"1827306":[255]},{"1827308":[255]},{"1827310":[255]},{"1827312":[111,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,160,239,16,255,32,255]},{"1827335":[255,128,255]},{"1827339":[255]},{"1827341":[255]},{"1827343":[191,176,168,8,45,32,255]},{"1827351":[95,128,255]},{"1827355":[127,64,239,192,181,231]},{"1827362":[218,8,32]},{"1827366":[160]},{"1827368":[128]},{"1827370":[128]},{"1827372":[80,64,138,128,239,255,231,255,255,255,255,255,255,255,255,255,191,255,63,255,207,129,239,167,90,159,204,139,80,179,73,232,6,244,223,238,78,123,75,252,223,229,87,167,38,190,13,215,126,193,20,218,210,80,240,251,221,210,25,26,92,95,108,110,124,77,223,222,32,160,8,128,40,160,248,184,164,228,144,208,186,218,32,224,172,84,252,254,170,234,1,254]},{"1827465":[255,255]},{"1827470":[254]},{"1827472":[253,253,162,95,234,65,255,255,174,174,255,255]},{"1827485":[255]},{"1827487":[1,171,1,2,161,84,171,126,128,8,247]},{"1827501":[255,254,1,1,1]},{"1827520":[109,79,130,159,225,127,52,117,49,51,250,26,57,18,247,5,72,181,108,115,76,63,237,153,123,236,210,221,52,246,13,14,154,248,188,220,124,116,121,113,84,253,31,95,22,246,255,14,127,71,231,219,171,55,26,23,109,110,96]},{"1827580":[47,6,9,8,165,220,193,241,84,237,52,213,124,253,14,14,221,32,253,84,15,2,101,202,47,211,199,203,30,130,174,243,2,38,86,174,158,86,116,117,47,38,215,214,230,231,94,255,37,36,247,174,42,234,142,236,218,250,42,234,26,146,160,160,250,32,90,10,255,63,244,246]},{"1827653":[95,11,244,121,128,15]},{"1827660":[126,1,115]},{"1827664":[193,190,246,2,94,94,91,91,248,254,3,243,30,153,244,252,128,1,11,244,254,1,64,180,1,134,12,243,97,153,4,116]},{"1827706":[3]},{"1827708":[31,7,127,4,215,143,83,151,71,135,75,15,137,15,96,51,82,211,249,185]},{"1827729":[167,180,167,208,247,108,239,95,120,180,140,69,248,175,211,96,48,196,52,48,224,12,252,255,105,167,175,247,231,247,231,23,15,59,47,95,15,123,39,94,65,203,155,158,142,28,4,121,197,255,243,255,255,253,255,85,85]},{"1827787":[255]},{"1827789":[244,31,128,159,102,3,255]},{"1827797":[255]},{"1827799":[253,85,170]},{"1827804":[244,32,128,31]},{"1827809":[160]},{"1827811":[12]},{"1827816":[255,255,255,255,244,244,151,159,95,228,240,255,255,255,255,255,170,85,255,255,43,32,104,8,127,64,255]},{"1827844":[253,251,247,249,85,93]},{"1827851":[255]},{"1827853":[85,191,17,191,191,255,42]},{"1827861":[253]},{"1827863":[243,93,162]},{"1827868":[85]},{"1827870":[17,174,192,255,42,42,2,6,4,6,255,247,255,255,85,85,119,238,127,127,213]},{"1827892":[249,255,249,255,170,85,255,255,170]},{"1827902":[217,200,234,130,250,6,254,248,238,233,84,244,2,250,2,82,255,81,126,233,255,168,6,163,19,246,241,8,2,5,83,1,81,175,151,255,173,169,90,90,11,14,253,93,255,255,82,80,253,175,124,124,87,5,165,249,241,253,171,81,248,248,175]},{"1827966":[82,2,127,63,197,175,64,127,194,223,144,143,63]},{"1827982":[126]},{"1827984":[125,66,175,106,159,31,149,53,154,58,223,223,192,255,128,129,128,189,250,197,223,224,193,254,128,175,224,200,64,127,254,129,128,128]},{"1828020":[192,192,64,64,64]},{"1828026":[64,64,192,64,128,128,235,244,73,86,33,118,9,254,25,230,225,14,51,4,157,28,18,242,240,176,120,88,224,232,185,176,233,240,55,250,31,112,29,15,191,79,207,63,111,159,15,239,15,31,9,219,159,127,15,15,15,15,7,7,7,7,15,15,15,15,23,3,7,7,127,16,127,255,34,247]},{"1828103":[255]},{"1828105":[255,125]},{"1828110":[255]},{"1828112":[111,58,255,128,247,213,127,127,42,42,125,255]},{"1828125":[255]},{"1828128":[170]},{"1828130":[128,127,221,34,117,138]},{"1828137":[255]},{"1828139":[138]},{"1828141":[255,255]},{"1828160":[209,53,241,242,19,112,55,212,115,147,120,24,117,2,255]},{"1828176":[239,170,193,12,104,101,108,101,226,236,106,231,40,186,160,175,178,26,26,254,215,59,86,159,25,159,29,255,82,178,69,175,29,24,29,28,28,27,28,27,30,28,50,18,47,2,186,10,93,93,255]},{"1828228":[255,213,255,125,255,255]},{"1828236":[221,34,238]},{"1828240":[255,170,160,95,42,42]},{"1828247":[146]},{"1828250":[34,255]},{"1828253":[34]},{"1828255":[238,162,170,95,95,213,247,109,239,255,255,221,255,34,34,85,255,93,8,160,95,8,255,16,255]},{"1828282":[34,34,255,34,187,187,215,217,255,6,255,84,255,199,255,239]},{"1828300":[222,32,160,1,248,164,1,249,171,171]},{"1828311":[56]},{"1828313":[16,35,255,3,33,1,162,43,175,254,254,84,84,199,255,239,239,220,255,33,33,85,245,212,135,1,255,171,255]},{"1828343":[255,16]},{"1828346":[35,35,254,34,254,244,255,32,255,50,253,173,255,233,31,122,127,192,31,162,31,32,223,255,205,221,80,250,20,23,37,143,223,95,29,31,159,223,32,16,50,34,173,7,235,234,186,144,96,96,194,192,64,144,239,255,221,255,248,253,21,255,239,95,223,63,255,191,239,191,239,175,255,21,255,2,255,1,255,138,255]},{"1828428":[255,2,255]},{"1828432":[64,239,234,255,253,255,254,255,117,255,255,255,253,255,255,255,24,167,16,5]},{"1828453":[2]},{"1828455":[1,128,10]},{"1828461":[2]},{"1828464":[239,255,255,255,215,255,255,255,223,255,255,255,223,255,255,255,255,255,255,127,255,191,255,85,255,174,255,85,255,191,255,23]},{"1828497":[255,128,255,64,255,170,255,81,255,170,255,64,255,232,255]},{"1828513":[255]},{"1828515":[127]},{"1828517":[191]},{"1828519":[85]},{"1828521":[174]},{"1828523":[85]},{"1828525":[191]},{"1828527":[23,255,255,255,255,255,255,255,255,254,255,255,255,255,255,191,255,247,255,255,247,253,243,255,79,255,175,255,127,253,255,255,127,40,252,9,255,6,255,161,255,80,255,128,255,2,255,128,255,32,223,1,246,24,235,25,86,128,47]},{"1828587":[127]},{"1828589":[255]},{"1828591":[127,223,255,246,255,243,255,206,255,175,255,127,255,255,255,255,255,119,249,250,255,84,255,234,255,85,254,251,255,239,239,255,255,137,233,79,239,191,255,21,255,171,235,4,254]},{"1828637":[103,64,254,1,254,74,181,20,235]},{"1828647":[255]},{"1828649":[254]},{"1828651":[254,17,230,64,191,254,255,181,255,235,255,255,255,254,255,255,255,239,255,191,255,148,171,190,225,125,130,190,193,189,194,191,226,125,194,255,136,32,32,224,224,128,128,192,192,72,64,96,226,224,192,136,136,64,191,160,95]},{"1828709":[255,128,127]},{"1828713":[127,160,93,64,191,136,119,159,255,95,255,255,255,127,255,255,255,221,255,191,255,119,255,66,191,128,127]},{"1828741":[255,168,87,8,247,168,95,64,191,128,127,2]},{"1828760":[8]},{"1828762":[8,8]},{"1828768":[191,64,31,224,30,225,7,248,35,220,15,240,15,240,23,232,64,255,224,255,225,255,248,255,220,255,240,255,240,255,232,255,255,223,77,242,35,253,17,254,175,255,21,254,41,255,17,253,223,138,72]},{"1828820":[41,40,16]},{"1828824":[175,10,20]},{"1828828":[41,40,17]},{"1828832":[117,138,247,8,215,32,255]},{"1828840":[245,10,255]},{"1828844":[215,40,253,2]},{"1828849":[255,8,255,8,247]},{"1828855":[255]},{"1828857":[255]},{"1828859":[255]},{"1828861":[255]},{"1828863":[255,239,255,247,239,235,247,65,255,255,252,121,186,185,254,87,255,239,239,231,69,227,163,65,1,252,168,62,18,184,40,87,17,16,239,186,65,92,163,254,1,87,168,239,6,215,40,238,17]},{"1828913":[255,4,251]},{"1828917":[255]},{"1828919":[255]},{"1828921":[255,16,237]},{"1828925":[255]},{"1828927":[255,168,23,64,21,232,149,80,203,226,225,212,1,250,225,245,38,255,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,255]},{"1828962":[255]},{"1828964":[127,2,191]},{"1828968":[31,136,255]},{"1828972":[31]},{"1828974":[219]},{"1828976":[255,255,255,255,255,253,255,255,255,119,255,255,255,255,255,255]},{"1828993":[255]},{"1828995":[255]},{"1828997":[255]},{"1828999":[247]},{"1829001":[223]},{"1829003":[255,32,95]},{"1829007":[255,254,255,245,255,255,255,125,255,255,255,255,255,255,255,255,255,255,1,255,10,255]},{"1829030":[255,138,255,32,255]},{"1829036":[255,128,255]},{"1829040":[255,254,255,245,255,255,247,125,255,223,255,255,255,127,255,255]},{"1829057":[255,2,253]},{"1829061":[255]},{"1829063":[255]},{"1829065":[255]},{"1829067":[255,64,255,128,255,160,255,66,255,160,255,80,255,234,255,84,255,170,255,85,255,255,95,255,191,255,95,255,175,255,21,255,171,255,85,255,170,255,160,253,66,255,160,255,80,255,234,255,84,255,170,255,85,23,232,43,80,5,250,11,240]},{"1829129":[254,2,253]},{"1829133":[255]},{"1829135":[255,151,252,43,123,5,255,11,251,128,254,2,255,128,255]},{"1829151":[255,252,124,255,255,255,255,255,255,255,127,255,255,255,127,255,255,232,151,80,175,250,5,240,15,254,129,253,2,255,128,255]},{"1829184":[127,128,191]},{"1829188":[95,32,255]},{"1829192":[85,168,171,64,69,168,170,80,127,255,191,191,95,127,255,255,85,253,171,235,69,237,170,250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,127]},{"1829235":[255,32,223]},{"1829239":[255,168,87,64,191,168,87,80,175,233,22,234,21,228,19,251,4,254,1,255]},{"1829260":[95]},{"1829262":[247]},{"1829264":[255,232,255,192,247,232,255,241,255,254,255,253,95,95,255,247,232,254,192,213,232,243,241,245,254,255,253,253,255,255,247,255,22,255,21,255,19,255,4,255,1,255]},{"1829307":[255]},{"1829309":[255,8,247,42,235,212,20,64,170,164,85,148,106,168,85,220,35,66,53,190,42,255,20,255]},{"1829334":[255,4,255,128,255]},{"1829340":[255,136,223,136,127,128,63]},{"1829348":[21,170,14,81,129,234,2,85,136,171,168,21,255,255,63,255,191,255,95,255,107,255,87,255,35,255,53,255,168,255]},{"1829379":[191,168,191]},{"1829383":[11,32,171,2,66,64,171,12,80,168,168,64]},{"1829396":[232,168,244]},{"1829400":[252,32,255]},{"1829404":[252]},{"1829406":[247,128,255]},{"1829410":[255]},{"1829412":[255]},{"1829414":[255]},{"1829416":[119,136,190,66,23,168,171,80,255,255,255,255,255,255,255,255,255,255,254,253,191,255,123,255,19,202,26,243,1,253,13,243,6,21,3,2,1,33,128]},{"1829456":[126,193,10,92,13,22,6,1,235,4,253,2,255,1,127]},{"1829472":[79,71,187,27,249,1,251,9,249]},{"1829482":[254,2,223,32,255]},{"1829488":[156,236,229,245,238,246,246,250,255,253,253,254,255,254,255,255,255]},{"1829506":[255]},{"1829508":[234,128,232,230,245,250,103,255,189,125,231,199,81,81,127,85,63,21,177,55,80,138,175,71,217,36,102,248,174,81]},{"1829539":[85,149,149,247,247,250,234,255,127,125,60,47,47,81]},{"1829554":[255,42,255,191,95,87,63,42,144,144,195,64,145,209,255]},{"1829570":[255]},{"1829572":[170]},{"1829575":[239,85,171,255,255,255,255,46]},{"1829584":[7,7,255,93,255,85,16,255,1,171,255,255,255]},{"1829598":[128,174,248,7]},{"1829603":[93,85,85,255,255,171,171,255,255,255]},{"1829614":[145,191,7]},{"1829618":[255,162,255,255,255,255,254,170]},{"1829628":[255]},{"1829630":[127,63,255]},{"1829634":[252]},{"1829636":[160,1,43,212,87,191,255,255,253,168,80]},{"1829648":[255,255,255,83,254,95]},{"1829655":[212,23,191,255,208,168,85]},{"1829663":[80]},{"1829665":[255,3,83,95,95,212,208,191,151,255,208,186,87]},{"1829679":[80,255]},{"1829682":[255,175,255,255,255,212,232,168,47]},{"1829692":[239,71,255,80,231,1,47,19,95,190,254,252,248,248,236,64,32,5]},{"1829711":[255,249,153,195,210,30,191,252,242,248,128,64,172,5,37,242,253,25,153,211,210,191,191,253,243,254,134,80,188,133,165,242,255,254,120,253,208,224,160,15,3,127,6,255,188,255,165,253,253,146,152,187,59,19,88,58,122,3,88,34,122,10,152,34,186,164,184,41,150,108,113,108,82,116,41,56,70,126,224,248,68,214,238,183,166,215,231,119,103,198,239,39,103,70,230,230,230,127,110,89]},{"1829812":[254,238,221,69,175,191,201,89,175,190,11,26,127,112,224,120,212,203,255,122,127,127,63,31,23,2,1,224,112,48,103,255,224,107,122,186,127,15,31,32,2,21,64,225,240,176,255,255,203,75,122,186,255,143,95,96,42,61,64,225,207,128,31,31,191,11,197,128,240,128,255,96,255,61,255,225,81,174,5]},{"1829893":[64,238,153,85,255,255,255,255,171,86]},{"1829905":[174,255,250,191,255,136,153,85,255,255,85,171,84]},{"1829919":[86,174,174,250,250,255,255,153,153,255,85,255,85,187,84,1,87,255,174,255,255,255,255,119,17,170,170,170]},{"1829948":[239,68,255,87,3,208,93]},{"1829956":[2]},{"1829958":[168,87,85,250,255,255,255,191,238]},{"1829968":[47,253,253,162,255,253]},{"1829975":[87,80,250,255,255,191,64]},{"1829983":[238,252,253,160,160,253,253,87,87,250,90,255,255,255,64,17,255,255,254,255,253,255,255,255,87,175,170]},{"1830012":[191]},{"1830014":[255,255,255]},{"1830018":[255]},{"1830020":[191]},{"1830023":[160,80,175,254,254,252,251,231,7,80,80,255,95,255,66,95,255]},{"1830041":[175,254,254,251,4,11,232,175,80]},{"1830051":[95,64,66,255,255,175,171,255,255,251,7,15,239,80]},{"1830066":[255,160,255,253,255,255,255,175,1,1,253,5,244,228,243,5,197,5,215,31,97,53,171,255,97,205,138,215,48,161,14,10,174,184,244,170,166,200,188,134,102,20,220,34,170,68,241,27,115,187,51,187,247,251,235,235,251,235,183,131,115,51,31,31,175,47,205,77,159,159,85,93,183,167,125,5,207,63,255]},{"1830146":[253]},{"1830148":[160,1,42,221,87,255,255,255,253,160]},{"1830160":[95,95,255,210,254,95,8,221,87,255,255,192,160,93]},{"1830176":[160,95,2,210,95,95,221,216,255,215,255,192,170,95]},{"1830192":[95]},{"1830194":[255,47,255,255,247,213,168,168,63]},{"1830204":[247,87,255]},{"1830208":[250]},{"1830210":[68]},{"1830213":[85,255,170,119,255,255,223,85]},{"1830222":[1]},{"1830224":[255,253,255,187,170,255,170,170,119,255,223,32]},{"1830237":[85]},{"1830239":[1,5,253,187,187,255,255,170,170,255,119,223,32,170,255]},{"1830255":[1,255,7,255,255,255,255,85]},{"1830264":[136,136,255,32,255,255,255,1,238]},{"1830274":[68]},{"1830277":[85,238,153,87,253,255,255,127,43,22]},{"1830288":[255,17,255,187,170,255,136,153,85,253,255,85,43,84]},{"1830303":[22,17,17,187,187,255,255,153,153,253,85,255,85,187,212,1,23,255,255,255,255,255,255,119,17,170,168,170]},{"1830332":[239,196,255,23,171,1,67,1,2,92,236,152,85,254,255,254,255,170,239]},{"1830352":[255,87,255,191,163,255,139,155,84,254,254,86,171,84,1,238,84,87,188,191,253,255,155,155,255,87,255,87,187,85,17,255,255,253,255,253,254,252,118,18,171,171,169,1,239,69,255,255,159,160,95,96,63,162,95,97,191,170,95,100,63,170,127,101,31,223,223,223,29,63,222,223,21,255,218,223,16,127,192,255,192,208,64,192,192,194,64,193,192,202,65,196,197,202,90,197,239,191,255,191,255,191,255,191,255,191,255,191,255,191,255,191,255,42,255,4,255,171,255,21,255,175,255,85,255,191,255,87,213,255,251,255,84,255,234,255]},{"1830489":[255,160,255,2,255]},{"1830495":[255]},{"1830497":[42]},{"1830499":[4]},{"1830501":[171]},{"1830503":[21,80,175,10,85,66,189,168,87,127,255,254,255,255,255,255,255,255,255,255,255,253,255,255,255,255,95,255,95,255,255,255,125,255,188,254,222,255,255,255,127,160,255,160,255]},{"1830549":[255,130,255,75,254,4,254,139,223,87,255,64,31]},{"1830563":[95]},{"1830565":[255]},{"1830567":[125,8,181,39,216,139,116,215,40,95,255,255,255,255,255,253,255,180,255,250,255,116,255,168,255,247,255,255,249,255,249,251,249,253,255,251,247,213,255,255,255,8,255,7,255,7,209,23,251,67,87,79,239,254,254,127,255]},{"1830625":[255,1,248,1,254,17,232,69,178,67,180,212,43,127,128,255,255,248,255,248,255,236,251,188,255,176,255,43,255,128,255,85,255,234,255,85,254,239,250,117,222,191,234,127,196,254,225,251,251,31,191,254,254,122,250,218,218,234,234,192,196,96,96,81,174,10,245,84,171,106,149,80,175,170,85,64,187,96,159,174,255,245,255,171,255,149,255,175,255,85,255,187,255,159,255,243,13,229,50,245,30,254,1,208,47,234,21,213,42,170,213,142,12,54,50,56,28]},{"1830751":[128]},{"1830753":[255,40,215,16,235]},{"1830759":[255]},{"1830761":[255]},{"1830763":[255]},{"1830765":[255]},{"1830767":[127,253,255,197,255,235,255,255,255,255,255,255,255,255,255,127,255]},{"1830785":[255,128,127]},{"1830789":[255,128,127,2,255,1,255,2,239,241,47]},{"1830808":[2]},{"1830810":[1]},{"1830812":[2]},{"1830814":[17]},{"1830816":[143,112,31,224,63,192,31,224,63,192,95,160,111,144,15,240,112,255,224,255,192,255,224,255,192,255,160,255,128,255,240,255,168,255,85,255,43,223,69,254,171,221,87,250,191,255,87,255,168,168,85]},{"1830868":[11,2,68]},{"1830872":[137,136,82]},{"1830876":[191,42,87,1,87,168,255]},{"1830884":[253,2,255]},{"1830888":[119,136,255]},{"1830892":[213,42,254,1]},{"1830897":[255]},{"1830899":[255]},{"1830901":[255]},{"1830903":[255]},{"1830905":[255]},{"1830907":[255]},{"1830909":[255]},{"1830911":[255,63,251,63,239,255,239,247,255,255,191,223,175,207,15,223,235,59,43,175,133,239,171,247,85,191,175,143,5,127,11,203,1,212,43,122,5,84,171,170,21,80,175,250,5,180,123,254,1]},{"1830961":[255,128,127]},{"1830965":[255,64,191]},{"1830969":[255]},{"1830971":[255,64,255]},{"1830975":[255,254,206,255,133,255,176,255,35,255,254,255,245,255,175,255,188,119,255,255,255,95,255,255,255,87,255,191,255,85,255,175,191,49,136,122]},{"1831012":[79,160,220,8,1,168,10,64,80,170,67,80,255,119,255,255,255,95,255,247,255,87,255,191,255,85,255,175]},{"1831041":[5,80,43,160,17,193,142,226,65,213]},{"1831052":[251]},{"1831054":[245,80,255,255,255,255,243,243,255,251,255,255,255,255,255,255,255,255,255,170,255,4,243,2,123,28,191,140,255]},{"1831084":[255]},{"1831086":[175]},{"1831088":[255,85,255,251,243,253,255,227,255,115,255,255,255,255,255,255]},{"1831105":[127,40,255]},{"1831109":[95,10,127]},{"1831113":[87,2,187,128,5,64,3,254,255,213,255,255,255,245,255,255,255,253,255,255,255,255,255,255,129,255,42,255,160,255,10,255,168,255,70,255,42,255,20,255,126,255,213,255,95,255,245,255,87,255,185,255,213,255,235,16,207,56,199,16,239,132,247,16,255,1,255,80,255,160,255,144,207,88,207,146,255,88,255,234,255,212,255,170,255,85,255,207,79,223,159,255,125,255,175,255,21,255,43,255,85,255,170,207,176,215,104,239,146,247,88,255,234,255,212,255,170,255,85,1,234,2,244]},{"1831237":[250]},{"1831239":[253]},{"1831241":[255]},{"1831243":[95]},{"1831245":[255,64,255,1,235,2,246]},{"1831253":[250]},{"1831255":[253,160,255,224,255,162,255]},{"1831263":[255,255,255,255,255,255,255,255,255,255,95,255,191,255,93,255,255,234,21,244,11,250,5,253,2,255,160,95,224,255,162,255]},{"1831296":[87,128,169]},{"1831300":[69]},{"1831302":[170]},{"1831305":[128]},{"1831307":[208]},{"1831309":[248]},{"1831311":[240,87,215,171,169,69,69,170,170]},{"1831321":[128]},{"1831323":[208]},{"1831325":[248]},{"1831327":[240,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,128,127,2,253]},{"1831349":[255]},{"1831351":[255,128,127,208,47,248,7,240,15,190,65,85]},{"1831364":[95]},{"1831366":[117]},{"1831368":[85]},{"1831370":[9]},{"1831372":[5]},{"1831374":[1]},{"1831376":[255,170,255,95,95,95,255,117,85,85,43,9,5,5,11,2,170,235,95,245,255,255,117,255,255,255,221,255,255,255,246,252,65,255,160,95]},{"1831413":[255,138,117]},{"1831417":[255,34,221]},{"1831421":[255,8,247,149,106,64,21,187]},{"1831430":[85]},{"1831432":[110]},{"1831434":[85]},{"1831436":[89]},{"1831438":[21]},{"1831440":[255,128,255,234,255,238,255,255,127,111,255,87,93,89,189,21,128,234,234,85,238,170,255,85,239,254,87,253,251,255,87,253,106,255,21,255]},{"1831477":[255]},{"1831479":[255,16,239,168,87,4,251,170,87,64,170,30,64,16,170,1,80,168,2,84]},{"1831500":[170]},{"1831502":[85]},{"1831504":[255]},{"1831506":[245,160,255,68,255,174,255,253,255,255,251,251,117,117,21,170,171,64,69,170,174,80,253,170,255,84,255,170,255,85,191,255,75,255,171,255,80,255,2,255]},{"1831547":[255,4,255,138,255,53,77,37,19,17,228,171,4,1,170,34,64,128,34]},{"1831568":[221,42,223,2,110,1,84,16,254,84,221,157,255,221,95,95,131,99,232,24,151,99,251,4,85,170,191,64,221,162,255]},{"1831600":[156,232,239,243,182,249,235,255,171,255,98,255,34,255,160,255,189,160,191,191,223,128,32,255,21,224,42]},{"1831628":[4,32,10]},{"1831632":[146,66,127,128,192,253,149,42,138,106,213,213,251,219,245,245,255,255,255,255,64,64,64,223,127,128,255]},{"1831660":[223,32,255]},{"1831664":[61,61,64,64,63,128,32,255,149,255,42,255,36,255,10,255,127]},{"1831682":[255,255,253]},{"1831686":[150,255,85]},{"1831690":[171]},{"1831692":[69]},{"1831694":[170]},{"1831696":[128,128,255]},{"1831700":[2,223]},{"1831703":[247,170,170,84,84,186,186,85,85,255,255,255,255]},{"1831718":[8,105,255]},{"1831722":[255]},{"1831724":[255]},{"1831726":[255]},{"1831728":[127,127]},{"1831732":[255]},{"1831734":[150,255,85,255,171,255,69,255,170,255,255]},{"1831746":[255,255,215,7,62,225,230,31,195,31,105,23,180,11,23]},{"1831762":[255]},{"1831764":[47,250,1,124,16,6,12,51,150,129,74,65,255,255,255,255,2,2,131,222,232,16,208,44,232,22,245,10,255,255]},{"1831796":[253,5,33,254,239,255,195,255,105,255,180,255,209,82,251,251,239,191,106,138,69,180,176,70,159,231,152,231,37,56,239,16,151,202,138,21,129,6,71,8,69,130,167,128,215,231,247,231,170,162,219,78,199,217,232,225,210,245,180,20,255,239,28,4,77,21,189,110,46,241,24,247,15,248,232,95,255]},{"1831874":[255,255,255,96,59,175,234,208,123,104,8,152,24,20]},{"1831890":[255]},{"1831892":[96,191,33,84,224,5,98,8,154,111,20,226,255,255,255,255,32,160,234,191,234,229,247,240,250,181,249,94,255,255]},{"1831924":[223,192,64,63,26,255,143,127,104,151,225,31,87]},{"1831938":[255,255,221]},{"1831942":[171,127,40]},{"1831946":[71]},{"1831950":[81,16,168,168,255]},{"1831956":[34,255]},{"1831959":[212,1,213,3,184]},{"1831965":[85,1,190,255,255,255,255]},{"1831974":[171,255,42,212,71,184,170,85,65,190,87,87]},{"1831988":[255]},{"1831991":[255,43,255,71,255,170,255,65,239,85]},{"1832002":[255,255,157,66,171,126,84]},{"1832010":[162]},{"1832012":[24,8,248,1,170,170,255]},{"1832020":[98,191,1,213,84,163,162,93,17,79,250,7,255,255,255,255,64]},{"1832038":[42,255,92,163,162,93,176,78,248,5,85,85]},{"1832052":[255,66]},{"1832055":[255,92,255,162,255,177,247,250,255,239,44,236,249,77,131,234,252,5,124,3,242,1,254,3,248,78,19,226,14,144,245,1,22,131,252,12,253]},{"1832093":[253,4,254,252,255,248,252,10,14,233,255,2,122,2,243,2,255,1,251,227,227,21,21,225,143,1,254,135,252,12,255]},{"1832125":[255,4,255,119,135,235,27,117,91,239,153,236,123,249,37,155,214,187,76,149,10,41,134,219,70,159,160,122,128,175,80,210,32,74,165,227,107,83,211,160,160,65,65,79,205,5,1,159,191,28,29,156,104,44,196,159,127,62,249,50,252,254,83,96,251,226,125,255]},{"1832194":[255,255,85,66,126,38,103,161,239,32,223,64,159]},{"1832210":[255]},{"1832212":[106,63,224,56,150,88,31,80,63,160,122,229,255,255,255,255]},{"1832230":[7,30,167,105,175,224,95,192,31,128,255,255]},{"1832244":[255,66,192,191,150,127,31,255,63,255,127,255,255]},{"1832258":[255,255,23,96,255,245,247,8,255]},{"1832268":[213,42,255]},{"1832274":[255]},{"1832276":[232,189,10,95,232,31,200,55,106,191,32,223,255,255,255,255,64]},{"1832294":[245,170,255]},{"1832298":[255]},{"1832300":[255]},{"1832302":[255]},{"1832304":[255,255]},{"1832308":[255,96,85,255,247,255,255,255,213,255,255,255,117]},{"1832322":[255,255,85,170,255,127,127,128,255]},{"1832332":[221,32,255]},{"1832336":[138,138,255]},{"1832340":[170,255,128,255,128,255]},{"1832347":[255,34,255]},{"1832351":[255,255,255,255,255]},{"1832358":[127,128,255]},{"1832362":[255]},{"1832364":[253]},{"1832366":[255]},{"1832368":[117,117]},{"1832372":[255,170,127,255,127,255,255,255,221,255,255,255,84,1,255,255,4,250,254,239,119,138,254,5,126,42,251,17,170,170,255]},{"1832404":[250,175,17,239,138,255,5,255,171,255,21,255,255,255,255,255,80]},{"1832422":[238,17,119,136,254,1,126,129,251,4,85,85]},{"1832436":[255,250,238,255,117,255,250,255,84,255,234,255,191,170,159,69,63,131,255,1,255,175,191,85,255,143,191,23,64,191,160,63,248,77,25,255,143,223,85,255,175,255,87,255,149,202,154,197,180,3,231,8,223,32,191,64,223]},{"1832494":[191]},{"1832496":[191,255,191,255,247,127,230,255,112,255,170,255,80,255,168,255,255,255,255,95,255,255,255,87,255,255,255,223,255,255,255,255,34,119,85,255,159,223,87,255,223,223,207,239,255,255,255,255,34,221,245,10,159,96,255]},{"1832552":[223,32,239,16,255]},{"1832558":[255]},{"1832560":[221,255,170,255,96,255,168,255,32,255,48,255]},{"1832573":[255]},{"1832575":[255,255,255,255,255,255,255,255,255,255,247,255,254,255,121,255,255,127,127,95,255,255,255,239,239,247,247,250,254,80,121,232,255,127,128,95,160,255]},{"1832614":[239,16,247,8,250,1,80,134,232]},{"1832624":[128,255,160,255]},{"1832629":[255,16,255,8,255,1,255,134,255]},{"1832639":[255,255,85,255,234,255,192,255,235,255,117,255,232,253,18,254,241,93,85,234,234,192,192,234,235,112,117,160,232]},{"1832669":[16,128,240,85,170,234,21,192,63,234,20,112,138,160,23]},{"1832685":[239,128,15,170,255,21,255,63,255,20,255,138,255,23,255,239,255,15,255,253,118,254,225,208,47,250,141,80,151,168,119,32,223,160,255,208,84,160,224,12,12,4,132,8]},{"1832730":[16,16,48,16,8,168,80,171,160,31,8,255]},{"1832743":[127,8,239]},{"1832747":[255,3,252,1,86,171,255,31,255,243,247,115,247,215,255,239,255,236,255,94,247]},{"1832769":[255,160,95,4,251,128,127]},{"1832777":[255]},{"1832779":[255,2,255]},{"1832783":[255]},{"1832796":[2]},{"1832800":[2,253,1,254,10,245,25,230,59,196,95,160,255]},{"1832814":[127,128,253,255,254,255,245,255,230,255,196,255,160,255]},{"1832829":[255,128,255,74,159,133,127,11,253,21,255,175,255,93,255,191,213,95,255,74]},{"1832850":[5]},{"1832852":[9]},{"1832854":[21]},{"1832856":[175,10,93]},{"1832860":[149]},{"1832862":[95]},{"1832864":[159,96,127,128,127,128,255]},{"1832872":[245,10,255]},{"1832876":[255]},{"1832878":[255]},{"1832880":[64,255,128,255,128,255]},{"1832887":[255]},{"1832889":[255]},{"1832891":[255]},{"1832893":[255]},{"1832895":[255,239,247,71,187,255,127,255,239,255,255,255,239,255,95,255,255,231,162,3,1,127,43,239,5,255,171,239,69,95,11,255,23,93,162,254,1,212,42,250,1,84,170,186,5,244,11,232,21]},{"1832945":[255]},{"1832947":[255,1,254,4,251,1,254,64,191]},{"1832957":[255,2,253,255,251,255,255,249,253,255,253,255,254,255,255,255,255,255,253,251,187,255,85,251,251,253,125,255,254,255,127,255,255,255,253,68,171,170,81,6,184,130,81]},{"1833001":[255,128,85]},{"1833005":[174]},{"1833007":[23,16,239,4,251,65,188,44,211]},{"1833017":[254,42,213,81,174,232,21,255,190,255,78,175,255,255,190,255,175,126,253,255,170,254,249,21,191,43,111,5,175,175,191,21,191,42,126,5,175,170,250,65,234,177,212,80,250,65,80,80,234,131,213,85,250,7,85,255,21,255,43,255,5,255,175,255,21,255,42,255,5,255,170,255,165,253,112,248,168,245,232,247,143,179,97,255,243,255,151,127,255,255,255,95,255,255,255,123,247,191,191,95,255,255,255,90,136,143,2,87,163,31]},{"1833128":[116,140,222,76,12,164,104]},{"1833136":[255,119,255,253,255,92,255,255,255,115,255,179,255,91,255,255,96,16,52,41,136,17,20,32]},{"1833161":[16,16,2,248,197,244,129,255,255,223,255,159,159,223,255,255,255,255,255,255,255,254,255,255,138,255,96,159,2,255,97,255,234,255,69,63,2,127,1,255,117,255,159,159,253,255,158,255,21,255,186,255,253,255,254,17,95,42,191,5,95,42,255,1,63,42,191,4,95,10,143,238,255,213,255,250,255,213,255,254,255,213,255,251,255,117,255,255,177,255,106,255,165,255,42,255,129,255,106,255,164,255,218,255,78,255,149,255,90,255,213,255,126,255,149,255,91,255,37,64,255]},{"1833283":[255,10,255]},{"1833287":[119,16,255,128,223,84,255,229,247,168,255,64,255,160,255,216,255,234,255,116,255,170,255,24,255,255,87,255,191,255,95,255,175,255,21,255,171,255,85,255,239,255,168,255,64,255,160,119,216,255,234,223,116,255,170,247,24]},{"1833345":[250]},{"1833347":[252]},{"1833349":[254]},{"1833351":[255]},{"1833353":[255]},{"1833355":[221]},{"1833357":[187]},{"1833359":[209]},{"1833361":[250]},{"1833363":[252]},{"1833365":[254]},{"1833367":[255]},{"1833369":[255,32,253,64,251,42,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,255,250,5,252,3,254,1,255]},{"1833400":[255]},{"1833402":[221,34,187,68,211,44,7,128]},{"1833412":[1]},{"1833417":[160]},{"1833419":[192]},{"1833421":[224]},{"1833423":[80,7,134,10]},{"1833428":[1,1,10]},{"1833433":[160,2,192]},{"1833437":[224,128,208,254,254,245,255,191,191,245,255,255,255,253,255,255,255,255,255,128,127,10,245]},{"1833461":[255,10,245,160,95,194,61,224,31,80,175,20]},{"1833474":[129]},{"1833476":[81]},{"1833478":[5]},{"1833480":[20]},{"1833484":[5]},{"1833488":[21,20,171,129,85,81,175,5,21,20,42]},{"1833500":[5,5,58,32,254,255,213,255,251,255,85,255,254,255,213,255,255,255,101,95,1,254,42,213,4,251,170,85,1,254,42,213]},{"1833533":[255,26,229,66]},{"1833538":[84]},{"1833540":[138]},{"1833542":[85]},{"1833544":[98]},{"1833546":[21]},{"1833548":[16]},{"1833552":[87,67,215,87,223,141,87,87,118,98,151,23,85,16,160]},{"1833568":[235,254,127,212,173,248,255,85,235,254,127,213,186,255,95,245,20,235,168,127,80,175,168,255,21,235,168,127,69,186,170,95,170]},{"1833602":[64]},{"1833604":[170]},{"1833608":[170]},{"1833610":[64]},{"1833612":[162]},{"1833616":[255,255,119,119,255,255,87,23,191,191,127,127,191,183,87,2,255,170,255,64,255,170,191,64,255,170,255,64,247,170,170,85]},{"1833649":[255,136,255]},{"1833653":[255,232,191,64,255,128,255,72,247,253,170,161,9,2,1,160]},{"1833672":[8]},{"1833676":[2]},{"1833680":[254,247,253,252,255,255,255,255,255,255,255,255,190,190]},{"1833696":[247,169,254,1,255,160,255]},{"1833704":[255,8,255]},{"1833708":[255,2,255]},{"1833712":[8,255,2,255]},{"1833717":[255]},{"1833719":[255]},{"1833721":[255]},{"1833723":[255,65,255,255,255,128,128,130]},{"1833732":[6,1,231,14,85,3,7,11,23,11,7,11,255,255,125,253,248,255,31,22,171,162,247,248,167,172,117,118,127,128,127]},{"1833764":[249]},{"1833766":[244,8,252,4,249,1,253,5,255,15,128,127,2,255]},{"1833781":[255,229,250,91,254,6,248,82,248,128,248,22,1,188,3,7,255,17,8,116,116,254,254,255,255,254,254,233,232,67,64,3,167,247,230,100,155,255]},{"1833820":[254,1,254,1,254,1,252,3,251,88,8,8,16,16,255,255,255,255,254,254,22,255,188,255,7,252,17]},{"1833848":[239,139,1,1]},{"1833854":[1,1,125,193,212,234,236,247,250,253,225,113,47,191,223,31,79,239]},{"1833873":[195,10,193,134,225,153,227,208,175,247,184,191,160,127,64,147,16,26,27,143,15,60,60,241,225,79,79,207,207,191,159,111,252,229,255,240,127,83,235,94,38,208,176,16,64,48,112,212,220,156,222,174,234,117,239,169,167,236,235,244,247,250,249,218,103,30,192,104,147,228,17,67,184,249,4,252,2,248,6,122,249,253,126,188,45,12,12,231,231,243,242,251,251,249,249,228,31,165,91,210,111,243,183,89,90,29,20,12,14,6,6,4]},{"1833986":[15,5]},{"1833989":[120,210,3,20,16,59,191,127,254,127,124,4,19,10,181,12,199,124,171,135,252,255,131,255,2,127,129,236,19,74,181,48,251,4,133,23,23,124,120,248,120,121,121,236,255,74,250,4,255,86,131,107,104,196,199,133,134,134,132,80]},{"1834050":[144]},{"1834053":[127,226,128,145,24,251,250,116,113,246,243,83,7,159,111,128,64,253,186,159,228,247,15,119,141,119,139,248,4,144,96,191,127,37,39,138,130,121,121,118,118,240,240,251,255,159,255,128,127,69,130,123,104,128,130,139,137,13,11,70,245,7,251,118,129,80,39,87,215,255,255,255,255,127,127,8,250,3,180,13,114,223,212,192,63,127,128,127,128,255]},{"1834144":[5,183,74,254,136,248,112,112,151,23,255,255,255,255,255,255,72,254,1,255,15,243,15,15,232,168]},{"1834174":[128,128,111,156,118,217,103,56,191,92,81,111,147,163,55,71,39,87,156,67,240,2,104,135,31,173,91,128,155,68,247,24,255,80,60,47,93,95,56,183,81,81,46,36,163,163,215,151,143,143,208,175,160,215,200,167,162,188,219,194,92,76,232,200,248,216,119,136,27,132,119,56,123]},{"1834248":[244,249,250,248,249,251,253,252,126,201,125,230,39,72,251,114,14,245,250,6,255,1,253,2,63,192,31,128,151,120,117,114,254,247,251,250,254,252,252,252,55,255,123,255,7,255,137,135,10,9,4,5,6,7,3,2,117,138,191,64,247,8,254]},{"1834312":[85,22,191,254,189,188,253,125,170,223,234,85,247,124,190,236,199,121,253,131,189,195,253,3,255]},{"1834338":[255]},{"1834340":[131,124,109,236,211,209,127,63,61,61,60,60,117,255,191,255,131,255,18,193,46,42,64,192,66,194,194,67,87,162,251]},{"1834372":[87,130,254]},{"1834376":[223,10,186,192,214,2,234]},{"1834384":[234,191,4,255,170,255,129,255,170,255,69,127,171,255,149,255,247]},{"1834402":[251,4,215,40,126,129,95,160,250,133,86,137,106,149,85,255,251,255,85,255,126,255,85,255,58,255,84,255,106,255,122,42,175,5,254,170,255,21,238,174,229,69,171,171,149,21,175,255,85,255,171,255,21,255,191,255,95,255,255,255,127,255,122,5,175,80,254,1,255]},{"1834472":[238,17,229,10,171,84,149,106,80,255,170,255,84,255,234,255,64,255,160,255]},{"1834493":[255,128,255,255,255,93,93,191,191,85,85,255,255,93,93,255,255,87,87,255,255,255,255,255,255,255,255,255,255,255,255,253,255,255,255,255]},{"1834530":[93,162,191,64,85,170,255]},{"1834538":[93,162,253]},{"1834542":[87,168]},{"1834545":[255]},{"1834547":[255]},{"1834549":[255]},{"1834551":[255]},{"1834553":[255]},{"1834555":[255]},{"1834557":[255]},{"1834559":[255,127,255,191,127,255,255,255,255,255,255,255,255,247,251,127,127,213,255,250,255,221,255,254,255,85,255,255,255,220,255,254,255,85,128,58,192,221]},{"1834598":[254]},{"1834600":[85]},{"1834602":[255]},{"1834604":[208,8,126,128]},{"1834609":[255]},{"1834611":[255]},{"1834613":[255]},{"1834615":[255]},{"1834617":[255]},{"1834619":[255]},{"1834621":[255]},{"1834623":[255,255,252,255,229,255,195,255,128,255,169,255,187,253,227,255,203,64,252,160,229]},{"1834645":[195,128,128]},{"1834649":[169,160,187]},{"1834653":[225,128,203,64,3,160,26]},{"1834661":[60,128,127]},{"1834665":[86,160,68]},{"1834669":[30,128,52,3,255,26,255,60,255,127,255,86,255,68,255,30,255,52,255,80,63,122,189,212,239,250,239,95,247,242,107,220,255,184,207]},{"1834705":[16,128,184]},{"1834709":[196]},{"1834711":[234,8,87,8,106]},{"1834717":[220]},{"1834719":[136]},{"1834721":[239]},{"1834723":[199]},{"1834725":[59]},{"1834727":[21]},{"1834729":[168]},{"1834731":[157]},{"1834733":[35,1,118,111,255,71,255,59,255,21,255,168,255,145,255,35,255,118,255]},{"1834753":[255]},{"1834755":[255,16,255,128,255]},{"1834761":[255,160,255,80,207,32,255]},{"1834773":[16,72,200,64,64]},{"1834779":[160]},{"1834781":[64,136,168,15,240,5,250,8,231,5,50,15,176,5,90,11,180,7,80,240,255,250,255,231,255,122,183,240,191,90,255,148,255,216,119,2,255,1,255,64,255,25,231,131,215,5,255,35,253,133,191,2]},{"1834834":[1]},{"1834836":[32,32,17]},{"1834840":[179,16,13,8,33]},{"1834846":[133,128,255]},{"1834850":[255]},{"1834852":[31,192,7,248,231,56,199,48,255]},{"1834862":[191,64]},{"1834865":[255]},{"1834867":[255,224,223,248,255]},{"1834873":[255,56,247]},{"1834877":[255]},{"1834879":[255,255,95,127,255,191,221,127,255,191,255,95,255,255,213,220,253,95,10,127]},{"1834900":[157,8,127,1,191,10,95,4,213]},{"1834910":[222]},{"1834912":[245,10,255]},{"1834916":[247]},{"1834918":[254]},{"1834920":[245,10,251]},{"1834924":[255]},{"1834926":[255,2]},{"1834929":[255]},{"1834931":[255,8,247,1,254]},{"1834937":[255,4,251]},{"1834941":[255]},{"1834943":[255,255,254,255,191,255,127,31,191,255,255,255,255,255,255,255,255,255,190,191,31,95,127,95,23,255,191,255,95,255,191,255,95,64,175,224,21,160,75,232,85,64,175,160,85,64,43,160,21,16,238,10,245,20,139,2,253,16,239,10,245,148,107,74,181,255,255,255,207,255,255,255,255,255,172,255,214,255,237,255,252,255,255,255,207,255,255,255,255,253,174,255,214,253,239,254,253]},{"1835041":[255]},{"1835043":[255]},{"1835045":[255]},{"1835047":[127,2,253]},{"1835051":[255,2,253,1,126]},{"1835057":[255]},{"1835059":[207]},{"1835061":[255,128,127,2,172]},{"1835067":[214,2,237,129,124,255,235,214,126,250,191,223,127,255,235,215,92,251,170,125,219,1,235,3,87]},{"1835093":[186,10,95,1,235,34,118,4,174,8,89,20,254,168,253,69,255,160,245,20,254,139,253,81,255,166,247,255,1,255,2,255]},{"1835126":[255,10,255,1,255,2,255]},{"1835134":[255,8,255,253,251,239,247,174,191,115,255,202,235,14,255,234,175,219,87,255,187,251,85,247,191,191,117,239,171,171,85,255,175,175,2,170,20,68,89,170,204,64,37,186,229,68,21,170,116,80,255,85,255,187,255,85,255,191,255,69,239,187,255,85,255,175,240,144,245,176,249,80,245,144,254,224,253,80,253,84,245,240,127,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,111,139,79]},{"1835236":[175,162,111]},{"1835240":[31,128,175]},{"1835244":[171,162,15]},{"1835248":[255,116,255,255,255,93,255,255,255,127,255,255,255,93,255,255,1,69,2,39,132,69,2,7,65,21,2,139,1,65]},{"1835279":[11,254,255,253,255,251,255,253,255,254,255,253,255,254,255,255,255,255,171,255,82,255,62,255,82,255,171,255,86,255,187,255,84,255,84,255,173,255,193,255,173,255,84,255,169,255,68,255,171,84,255,169,255,85,255,170,255,85,127,170,255,84,254,239,255,170,255,84,255,170,255,85,255,170,255,84,255,170,254,16,255,255,85,255,171,255,85,255,170,255,213,255,171,254,84,255,239,255,170,255,84,255,170,255,85,255,42,255,84,254,171,255,16,40,255,64,253,32,255,80,247,66,255,64,93,32,126,64,87,128,255,2,255,128,255,8,255,168,255,34,127]},{"1835421":[126,168,255,255,127,255,255,255,127,255,255,255,87,127,127,127,127,255,255,255,128,253,2,255,128,247,8,255,168,93,162,126,129,87,168]},{"1835457":[248]},{"1835459":[212]},{"1835461":[254]},{"1835463":[84]},{"1835465":[238]},{"1835467":[85,192,191,128,21]},{"1835473":[248,40,252]},{"1835477":[254,168,252,16,254,40,125,192,191,162,55,255,255,255,255,255,255,255,255,255,255,127,127,63,191,127,127,248,7,212,43,254,1,84,171,238,17,85,170,191,64,21,234,32]},{"1835529":[160]},{"1835531":[64]},{"1835533":[128]},{"1835536":[48,32,162]},{"1835540":[64]},{"1835542":[8]},{"1835545":[160,2,64]},{"1835549":[128,8]},{"1835552":[239,255,93,255,191,255,215,223,255,255,253,255,255,255,247,255,16,239,162,93,64,191,8,247,160,95,66,189,128,127,8,247]},{"1835591":[128]},{"1835600":[17]},{"1835602":[168]},{"1835604":[5]},{"1835606":[160]},{"1835608":[1]},{"1835610":[168]},{"1835612":[4]},{"1835614":[162]},{"1835616":[238,255,87,253,250,255,223,117,254,255,87,253,251,255,93,247,17,238,170,87,5,250,42,223,1,254,170,87,4,251,170,93]},{"1835650":[4]},{"1835662":[16]},{"1835664":[68]},{"1835666":[150,134,80]},{"1835670":[85]},{"1835672":[84,16,17]},{"1835676":[84]},{"1835678":[85,16,187,238,239,84,175,250,170,85,187,238,238,85,171,254,186,85,85,187,57,239,85,175,255,170,69,187,187,238,85,171,239,186,32]},{"1835714":[64]},{"1835716":[130]},{"1835720":[2]},{"1835722":[4]},{"1835728":[49,49,194,194,138,130,16]},{"1835736":[2,2,5,5]},{"1835742":[16]},{"1835744":[255,168,255,64,247,170,239,16,255,170,255,68,255,170,239,16,70,255,61,255,93,247,255,239,85,255,186,255,85,255,255,239,9,11,15,2,6,1]},{"1835783":[1]},{"1835785":[1,130]},{"1835788":[1,2,65,2,95,92,147,150,216,222,111,110,194,194,29,156,191,156,173,173,242,136,252,4,249,1,254,1,255,9,127,1,220,34,255,3,43,242,109,250,32,255,144,255,52,255,99,254,97,222,80,254,92,92,124,61,60,124,189,190,255,124,58,185,112,117,255,250,126,129,223,225,221,99,190,192,186,71,250,132,127,128,118,143,62,62,126,126,188,188,63,61,126,127,121,121,126,123,254,252,227,163,3,3,194,66,66,195,128,1,198,197,142,141,2,1,92,156,255,62,125,60,221,28,156,95,157,92,190,255,62,190,222,33,93,35,253,67,125,195,126,192,125,195,221,227,94,97,158,30,191,191,221,221,125,253,191,189,61,189,190,62,190,190,227,35,64,128,162,2,34,162,226,98,98,226,193,65,1,129,115,112,59,184,117,244,121,127,4,138,198,124,248,102,112,158,120,135,248,7,252,3,119,136,138,245,196,3,100,3,4,49,120,120,248,120,248,122,120,120,8]},{"1836010":[124,124,254,250,214,242,143,143,199,199,143,138,135,135,255,255,131,69,101,155,13,121,123,120,251,248,254,253,126,125,126,124,252,254,250,248,249,251,123,133,123,135,127,131,251,6,250,7,250,5,254,3,255]},{"1836064":[121,121,251,251,250,250,255,254,254,254,254,252,254,254,254,252,134,132,4,4,5,1,129,129,129,129,3,3,5,5,7,6,246,251,102,109,110,100,246,240,247,241,237,225,252,246,234,246,127,130,239,20,254,13,234,19,234,27,234,25,255,6,255]},{"1836128":[249,240,249,240,248,248,246,246,247,247,237,237,225,225,245,225,13,11,139,141,147,149,9,13]},{"1836153":[4,18,22,27,23,31,19,117,117,242,244,231,234,251,252,255,247,243,245,231,224,241,246,252,3,245,14,250,4,234,17,230,25,252,3,236,17,231,26,249,249,240,240,251,243,244,245,246,246,228,226,226,227,244,240,142,138,15,13,28,31,10,9,11,13,29,11,28,27,15,14,39,215,31,223,111,15,254,30,126,158,127,223,126,222,175,79,183,8,126,33,174,81,62,225,46,241,110,177,47,144,47,208,223,79,207,143,143,207,46,238,62,254,63,255,95,223,15,207,176,144,80,16,176,80,17,193,1,193]},{"1836283":[192,33,193,48,208,29,28,221,28,157,95,153,90,195,36,255,80,71,240,251,132,61,194,253,194,255,129,254,131,230,89,248,215,198,121,94,245,60,60,252,252,254,188,253,189,101,65,132,135,134,57,238,241,227,226,35,34,98,99,102,103,190,61,40,87,134,255,10,63,189,62,184,58,255,125,251,120,251,120,59,188,48,181,62,187,190,65,190,194,186,70,187,199,185,199,253,131,253,133,245,13,63,61,189,188,127,127,250,251,250,251,126,122,123,120,255,126,194,67,70,71,128,1,4,5,4,7,196,199,204,207,192,195,10,138,168]},{"1836420":[66,130,169,65,74,170,160]},{"1836428":[2,2,129,1,255,255,215,255,191,255,87,255,255,255,95,255,255,255,127,255,138,117,40,87,194,29,233,22,170,85,160,95,2,253,129,126]},{"1836465":[255,40,255,64,255,168,255]},{"1836473":[255,160,255]},{"1836477":[255,128,255,174,174,85,85,171,171,21,21,175,175,85,85,171,171,21,21,255,255,255,255,255,255,255,255,253,255,255,255,253,255,255,255,174,81,85,170,171,84,21,234,173,80,85,170,169,84,21,234]},{"1836529":[255]},{"1836531":[255]},{"1836533":[255]},{"1836535":[255]},{"1836537":[255]},{"1836539":[255]},{"1836541":[255]},{"1836543":[255,254,254,222,223,255,255,87,87,239,239,71,95,255,255,87,87,119,255,255,255,221,255,254,255,93,255,186,255,213,255,234,255,118]},{"1836578":[222,33,221]},{"1836582":[86,168,77]},{"1836586":[10,176,213]},{"1836590":[66,168]},{"1836593":[255]},{"1836595":[255]},{"1836597":[255]},{"1836599":[255]},{"1836601":[255]},{"1836603":[255]},{"1836605":[255]},{"1836607":[255,255,255,127,122,239,255,215,238,255,255,255,255,255,255,255,249,80,255,168,250,112,255,184,238,16,255,160,255]},{"1836637":[255,168,249,80]},{"1836642":[40,5,96,16,128,57,16]},{"1836650":[160]},{"1836654":[168,6]},{"1836657":[255,5,255]},{"1836661":[255,1,255]},{"1836665":[255]},{"1836667":[255]},{"1836669":[255,6,255,245,254,250,255,245,255,254,223,181,255,255,251,213,255,254,255]},{"1836689":[244,128,250]},{"1836693":[245,128,222,64,245]},{"1836699":[251]},{"1836701":[213]},{"1836703":[254]},{"1836705":[11,128,5]},{"1836709":[10,128,33]},{"1836713":[74]},{"1836715":[4]},{"1836717":[42]},{"1836719":[1,11,255,5,255,10,255,33,255,10,255,4,255,42,255,1,255,16,231,160,255,64,255,186,255,17,245,170,255,192,191,224,255,8]},{"1836755":[160]},{"1836757":[64]},{"1836759":[186,26,17,17,187]},{"1836765":[128]},{"1836767":[224,10,253,1,94,3,188]},{"1836775":[69,26,238]},{"1836779":[68,3,124]},{"1836783":[31,245,255,94,255,188,255,69,255,228,255,85,238,124,255,31,255,2,255]},{"1836803":[255,2,223,160,255,8,255,20,255]},{"1836813":[255,2,255,2]},{"1836818":[32,32,98,64,64,224,8]},{"1836826":[4,16,16,16,1,3,239,16,223]},{"1836836":[63,224,31,64,255]},{"1836842":[231,8,239]},{"1836846":[124,128,16,255,32,223,128,255]},{"1836855":[255]},{"1836857":[255,8,255,16,239,129,254,63,247,87,255,191,221,95,255,255,117,93,255,191,221,85,255,55]},{"1836882":[87]},{"1836884":[157]},{"1836886":[95]},{"1836888":[117]},{"1836890":[93]},{"1836892":[157]},{"1836894":[85]},{"1836896":[255]},{"1836898":[255]},{"1836900":[255]},{"1836902":[255]},{"1836904":[255]},{"1836906":[255]},{"1836908":[255]},{"1836910":[255]},{"1836913":[255]},{"1836915":[255]},{"1836917":[255]},{"1836919":[255]},{"1836921":[255]},{"1836923":[255]},{"1836925":[255]},{"1836927":[255,255,93,255,185,255,253,255,254,255,255,255,255,255,255,255,255,93,8,187,1,253,168,254,20,255,175,255,21,255,43,255,21,247,8,252,2,87,32,235,16,80,170,234,5,212,42,234,1]},{"1836977":[255,3,254,136,119,4,251,5,250,16,239,1,254,20,235,255,254,255,254,249,253,255,255,255,254,255,239,255,255,255,255,255,254,255,254,255,253,255,125,255,254,255,239,255,255,255,255]},{"1837025":[239]},{"1837027":[81,2,187,130,81]},{"1837033":[185]},{"1837035":[85]},{"1837037":[187]},{"1837039":[87,16,238,174,80,68,187,44,211,70,184,170,69,68,187,168,87,255,145,255,82,255,120,255,212,255,212,255,251,255,20,255,122,213,187,250,87,252,123,254,213,213,254,251,255,212,63,254,123,42,213,5,250,3,252,1,254,42,213,4,123,43,212,1,254,42,145,5,82,3,120,1,212,42,212,132,123,43,20,1,122,254,235,215,94,250,175,253,90,239,168,214,46,235,47,74,171]},{"1837137":[234,34,118]},{"1837141":[170,15,93,23,189,3,7,17,59,30,30,21,255,137,253,85,255,165,247,69,254,248,253,196,254,225,245,255]},{"1837170":[255,2,255]},{"1837174":[255,8,255,1,255,2,255,1,255,10,191,250,239,54,255,190,175,251,255,235,191,184,247,62,255,124,21,191,239,239,85,255,175,175,87,255,255,255,87,119,255,255,69,234,217,80,65,234,84,80,20,168,7,68,201,168,131,1,255,21,255,175,255,21,255,175,255,87,255,187,255,87,255,254,252,160,253,196,254,224,245,128,222,64,53,68,200,64,84,64,127,255,255,255,255,255,255,255,191,255,223,223,191,255,255,255,95,138,59]},{"1837284":[31,1,127]},{"1837288":[255,232,251,192,255,98,191,1,255,117,255,255,255,254,255,255,255,23,255,31,255,157,255,254]},{"1837313":[17,2,131,64,212,136,137,128,17,2,163,128,68,10,15,255,255,253,255,63,255,119,255,255,255,253,255,255,255,245,255,255,234,255,86,255,234,255,216,255,42,255,86,255,42,255,26,255,21,255,169,255,21,255,39,255,213,255,169,255,213,255,229,21,127,169,255,85,127,175,255,85,127,168,253,69,255,160,245,234,255,84,255,170,255,80,255,170,255,87,255,186,255,95,255,255,149,255,171,255,213,255,175,255,213,255,170,255,69,255,170,255,106,255,84,255,42,255,80,255,42,253,87,255,186,245,95,66,255,84,247,138,255,80,215,64,238]},{"1837451":[85,8,175]},{"1837455":[21,168,255,8,255,32,255,40,255,187,255,250,255,240,255,250,255,255,87,255,255,255,223,255,255,255,85,255,175,255,95,255,239,255,168,247,8,255,32,215,40,238,187,85,250,175,240,21,250]},{"1837505":[254]},{"1837507":[84,128,142]},{"1837511":[69,8,238]},{"1837515":[85]},{"1837517":[190]},{"1837519":[85,129,255,169,253,80,206,138,207,144,254,170,255,64,254,160,245,255,127,255,255,239,255,223,223,255,127,255,255,255,255,255,255,254,129,84,171,158,97,69,186,238,145,85,170,190,65,85,170]},{"1837569":[160,2,64]},{"1837573":[160]},{"1837575":[64]},{"1837577":[128]},{"1837581":[128,2]},{"1837585":[160]},{"1837587":[64]},{"1837589":[160]},{"1837591":[64]},{"1837593":[128]},{"1837597":[128,2,2,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,160,95,66,189,160,95,64,191,128,127]},{"1837627":[255,128,127]},{"1837631":[255]},{"1837646":[34]},{"1837648":[1]},{"1837650":[40]},{"1837654":[2]},{"1837658":[34]},{"1837662":[170,34,254,255,215,253,255,255,253,247,255,255,221,255,255,255,119,255,1,254,42,215]},{"1837685":[255,10,253]},{"1837689":[255,34,221]},{"1837693":[255,136,119]},{"1837698":[16]},{"1837704":[4]},{"1837706":[129]},{"1837708":[81]},{"1837710":[4]},{"1837712":[84]},{"1837714":[145,16,85]},{"1837720":[20,4,137,129,85,81,164,4,171,254,126,213,170,255,255,85,239,254,247,221,251,255,95,245,85,171,171,126,85,170,170,255,17,239,42,247,4,251,170,95]},{"1837766":[64]},{"1837768":[2]},{"1837770":[20]},{"1837772":[24,16,85]},{"1837778":[20]},{"1837782":[64,64,67,3,21,21,24,24,125,125,255,170,235,84,255,170,255,80,191,234,255,84,255,186,255,85,85,255,191,235,85,255,175,255,84,191,170,255,85,255,130,255,132,1]},{"1837827":[4,6,4,5,9,41,9,89,5,167,31,39,31,171,140,74,15,31,30,25,18,125,126,103,108,191,160,195,212,219,162,188,64,255,163,245,13,241,169,243,75,235,179,255,15,115,221,241,189,69,249,226,254,10,242,150,254,76,244,32,240,116,122,228,236,252,244,236,248,236,248,240,232,192,225,216,242,255,1,252,10,251,7,248,8,217,61,247,15,255,6,151,84,249,242,245,246,227,224,247,224,235,224,207,192,254,209,253,227,140,139,29,27,28,7,23,31,26,23,48,15,56,47,25,14,207,111,47,79,119,7,7,47,3,23,253,9,221,159,7,251,127,192,47,176,151,248,247,192,253,230,13,10,191,196,119,16,63,31,111,239,183,55,219,59,235,27,249,1,187,121,233,137,48,240,16,208,40,200,20,224,12,244,254,242,186,70,118,114,25,77,133,169,152,174,248,230,225,247,201,221,201,209,203,223,38,153,146,65,255,2,215,48,223,48,253,26,245,6,249,26,109,121,181,181,237,201,255,249,239,233,229,225,249,233,231,231,166,154,90,78,127,99,7,11,30,18,54,58,50,58,48,56,249,251,254,254,223,223,207,207,231,247,231,247,207,223,207,223,254,1,253,2,239,16,239,16,223,32,223,32,215,40,215,56,255,253,255,255,255,255,239,239,255,239,255,239,223,207,207,207,6,6,1,1,32,32,48,48,24,24,24,24,48,48,48,48,201,213,207,211,237,237,235,231,211,203,213,221,197,213,171,179,241,2,249,22,221,34,213,42,201,54,223,32,215,40,243,12,253,237,227,227,233,233,227,227,195,195,195,195,195,203,195,195,50,58,60,52,22,30,28,20,60,60,62,62,62,62,124,92,242,242,255,254,253,252,233,232,225,252,218,200,208,232,208,232,252,3,253,3,253,3,253,2,222,47,221,58,242,7,228,15,254,254,255,255,253,253,252,252,240,225,213,214,234,205,244,219,13,12]},{"1838260":[2,2,23,22,28,29,37,42,48,47,32,63,143,223,147,35,121,177,125,1,215,161,82,87,84,65,196,57,183,88,23,232,89,166,245,142,114,143,3,254,235,21,127,199,47,239,7,231,67,179,117,13,115,143,1,252,170,126,124,196,48,208,28,236,76,212,242,250,80,124,1,175,171,85,57,185,251,196,255,224,221,209,255,245,245,250,243,250,117,126,116,112,174,117,214,57,253,7,239,27,249,14,255]},{"1838364":[253,6,243,14,255,241,247,249,224,230,248,254,240,246,252,246,248,242,245,245,10,31,6,15,56,55]},{"1838391":[7,9,14,13,10,137,142,139,142,118,241,118,245,119,248,98,104,124,118,236,226,72,74,12,103,247,11,247,15,251,5,123,137,111,155,111,159,107,157,243,30,241,114,241,114,254,117,118,113,122,125,234,237,98,101,99,12,140,139,136,143,138,143,154,159,128,135,16,23,176,191,224,235,8,8]},{"1838467":[128]},{"1838469":[128]},{"1838471":[8]},{"1838477":[162]},{"1838479":[144,255,255,255,255,255,255,255,255,255,255,255,255,255,93,255,239,8,247,128,127,128,127,8,247]},{"1838505":[255]},{"1838507":[255,162,93,144,111]},{"1838513":[255]},{"1838515":[255]},{"1838517":[255]},{"1838519":[255]},{"1838521":[255]},{"1838523":[255]},{"1838525":[255]},{"1838527":[255,170,170,5,5,42,42,1,1,8,8]},{"1838540":[2,2]},{"1838544":[247,255,255,255,221,255,255,255,255,255,255,255,253,253,255,255,162,85,5,250,8,213,1,254,8,247]},{"1838571":[255]},{"1838573":[255]},{"1838575":[255]},{"1838577":[255]},{"1838579":[255]},{"1838581":[255]},{"1838583":[255]},{"1838585":[255]},{"1838587":[255]},{"1838589":[255]},{"1838591":[255,255,255,87,87,43,43,21,21,175,175,21,21,42,42,1,1,84,255,250,255,220,255,234,255,80,255,234,251,213,255,254,255,84]},{"1838626":[82,168,8,84]},{"1838631":[234]},{"1838633":[80]},{"1838635":[238]},{"1838637":[213]},{"1838639":[254]},{"1838641":[255]},{"1838643":[255]},{"1838645":[255]},{"1838647":[255]},{"1838649":[255]},{"1838651":[255]},{"1838653":[255]},{"1838655":[255,255,255,255,255,255,255,119,119,255,255,85,85,143,143,85,85,16,255,184,255,16,255,136,255]},{"1838681":[255,170,255,112,126,170,239,16]},{"1838690":[184]},{"1838692":[16]},{"1838695":[136]},{"1838699":[170]},{"1838701":[209]},{"1838703":[186]},{"1838705":[255]},{"1838707":[255]},{"1838709":[255]},{"1838711":[255]},{"1838713":[255]},{"1838715":[255]},{"1838717":[255]},{"1838719":[255,245,255,254,255,221,223,255,255,255,255,255,255,255,255,255,255]},{"1838737":[245,32,254,32,253]},{"1838743":[255,5,250,8,247,19,236,22,169]},{"1838753":[10,32,1]},{"1838757":[2]},{"1838760":[5]},{"1838762":[8]},{"1838764":[19]},{"1838766":[22,64,10,255,1,255,2,255]},{"1838775":[255,5,255,8,255,19,255,22,255]},{"1838785":[255,170,255,64,255,234,255,85,255,250,255,255,253,255,255,39,39,43,129,92,28,126,148,77,24,55,205,191,64,111,144,8,209,46,80,99,128,107]},{"1838824":[71,160,50]},{"1838828":[191]},{"1838830":[111]},{"1838832":[246,217,123,254,220,227,126,235,237,247,55,250,191,253,111,255,16,239,39,221,74,191,171,245,90,191,187,231,215,126,255,250,8,8,39]},{"1838868":[74]},{"1838870":[187,16,90]},{"1838874":[251,64,215]},{"1838878":[255]},{"1838880":[103,144,255]},{"1838884":[255]},{"1838886":[239]},{"1838888":[255]},{"1838890":[191]},{"1838892":[255]},{"1838894":[255]},{"1838896":[152,247,34,221,64,191,186,229,80,191,250,167,213,126,255,250,255,245,127,255,255,255,255,127,255,255,255,95,253,173,255,180,245]},{"1838930":[127]},{"1838932":[255]},{"1838934":[255]},{"1838936":[255]},{"1838938":[255]},{"1838940":[255]},{"1838942":[255]},{"1838944":[255]},{"1838946":[255]},{"1838948":[255]},{"1838950":[255]},{"1838952":[255]},{"1838954":[255]},{"1838956":[253,2,255]},{"1838961":[255]},{"1838963":[255]},{"1838965":[255,128,127]},{"1838969":[255,160,95,80,173,235,180,255,255,255,255,255,255,255,255,253,125,255,255,215,215,127,63,255,175,255,85,255,171,255,21,127,41,255,5,247,3,223,129,80,170,170,4,84,40,234]},{"1839016":[212,2,250]},{"1839020":[220,40,126]},{"1839024":[5,250,81,174,131,124,21,234,41,212,5,250,3,212,97,158,255,255,255,251,255,254,255,238,255,250,255,254,191,181,239,239,255,255,255,251,255,254,255,238,255,250,255,92,191,181,255,69]},{"1839073":[175]},{"1839075":[93]},{"1839077":[187]},{"1839079":[21]},{"1839081":[175,162,5,64,74,170,17,80,175,162,89,68,186,234,4,80,170,88,166,181]},{"1839102":[68,171,255,146,255,246,255,8,255,146,255,2,255,168,255]},{"1839118":[221,200,215,186,255,246,221,42,255,146,247,10,255,168,255]},{"1839134":[223,64,40,215]},{"1839139":[249,34,221]},{"1839143":[255,8,247]},{"1839147":[255]},{"1839149":[255,170,117,40,146,6,240,34,8]},{"1839159":[146,8,2]},{"1839163":[168]},{"1839167":[200,171,173,43,63,61,126,191,247,127,239,253,204,170,170,168,168,81,249,235,235,157,189,191,191,127,127,255,255,255,255,87,87,6,254,20,212,67,227,72,72,144,144,51,49,85]},{"1839214":[255,168,255,1,255,43,255,28,255,183,255,111,255,206,255,255,255,87,223,255,249,136,248,120,80,64,232,65,2,2,4,12,160,176,95,223,255,255,255,255,255,255,255,255,253,255,251,255,95,255,32,160,119,68,135,130,191,16,191,170,255,2,255,4,255,170,255,95,255,187,255,125,255,239,255,85,255,253,255,251,245,95,192,128,64,8,4,21,44,38,8,14,32,32]},{"1839309":[43,10,79,255,255,255,255,227,247,211,239,247,255,223,255,255,255,255,255,127,106,255,68,255,190,231,52,255,152,255,34,255]},{"1839342":[255,170,255,149,255,187,247,73,247,203,239,119,253,223,255,255,95,255,1,87,42,239]},{"1839365":[255,160,241]},{"1839369":[136]},{"1839371":[85]},{"1839373":[186,170,191,254,255,213,255,255,255,95,255,255,255,255,255,255,255,255,255,255,169,255,42,255]},{"1839398":[255,170,255,1,255,170,255,69,255,170,255,86,255,213,255,255,245,95,254,255,85,255,186,255,255,255,16,254,128,213,64,250]},{"1839431":[85]},{"1839433":[238,32,117]},{"1839437":[170,138,128,239,255,127,255,191,255,255,255,250,254,252,253,170,170,138,138,255,17,255,170,255,69,255,170,255,21,255,171,255,85,255,255,254,239,213,127,250,191,85,255,238,251,117,254,170,255,128,255]},{"1839489":[239]},{"1839491":[85]},{"1839493":[186]},{"1839495":[80]},{"1839497":[234,2,64,1,34,170]},{"1839504":[186,255,232,253,234,250,144,208,170,234,66,66,35,35,170,170,255,85,255,191,255,85,255,239,255,85,255,191,255,221,255,255,239,186,85,234,186,239,80,191,234,191,64,255,34,255]},{"1839551":[255]},{"1839553":[250]},{"1839555":[80]},{"1839557":[160,2]},{"1839560":[1,136,170]},{"1839564":[85]},{"1839566":[255]},{"1839568":[128,250]},{"1839571":[80]},{"1839573":[160,2,2,137,137,170,170,85,85,255,255,255,127,255,255,255,255,255,255,255,119,255,255,255,255,255,255,250,133,80,175,160,95]},{"1839607":[255,136,255]},{"1839611":[255]},{"1839613":[255]},{"1839615":[255,2]},{"1839618":[2]},{"1839620":[5]},{"1839622":[170]},{"1839624":[85]},{"1839626":[191]},{"1839628":[255]},{"1839630":[213,42,6,2,2,2,5,5,170,170,85,85,191,191,255,255,255,197,251,255,255,255,255,255,255,255,255,255,255,255,255,255,197,239,4,251]},{"1839667":[255]},{"1839669":[255]},{"1839671":[255]},{"1839673":[255]},{"1839675":[255]},{"1839677":[255,42,255,1]},{"1839682":[170]},{"1839684":[85]},{"1839686":[255]},{"1839688":[127]},{"1839690":[251,12,251,4]},{"1839695":[255,1,1,170,170,85,85,255,255,127,127,255,251,255,251,255]},{"1839712":[255,255,255,255,255,255,255,255,255,255,251,247,251,255]},{"1839727":[255]},{"1839729":[255]},{"1839731":[255]},{"1839733":[255]},{"1839735":[255]},{"1839737":[255,12,255,4,255,255,255,85]},{"1839746":[189]},{"1839748":[93]},{"1839750":[255]},{"1839752":[255]},{"1839754":[84,171,160,95,8,255,85,85,191,191,93,93,255,255,255,255,255,84,255,160,255,8,255,255,255,253,255,255,255,255,255,255,84,255,160,255,8,247]},{"1839793":[255]},{"1839795":[255]},{"1839797":[255]},{"1839799":[255]},{"1839801":[255,171,255,95,255,255,255,118]},{"1839810":[213]},{"1839812":[255]},{"1839814":[213,34,238,17,64,191]},{"1839821":[255,170,255,119,119,253,253,255,255,255,221,255,238,255,64,255]},{"1839838":[255,170,255,254,255,213,255,255,221,247,238,255,64,255]},{"1839853":[255,170,85]},{"1839857":[255,2,255]},{"1839861":[255,34,255,17,255,191,255,255,255,255,255,3,11,71,55,47,191,47,95,31,191,95,127,143,207,16,80,123,76,215,168,199,8,159,128,255]},{"1839898":[143,16,159,224,41,214,247,151,183,7,127,159,255,47,47,143,255,63,159,95,159,95,56,232,24,232,192,224,80,240,176,192,128,192,240,144,105,169,138,178,34,83,190,159,2,117,218,221,240,247,250,253,2,7,175,87,206,82,85,143,253,1,241,8,251,1,248,2,119,138,180,130,191,161,190,186,246,130,255,254,254,252,247,245,247,243,98,92,206,252,85,107,253,251,33,35,11,9,8,2,125,122,5,11,245,241,117,121,247,243,125,125,255,255,255,255,254,254,127,132,117,138,253,6,245,14,243,12,255]},{"1840028":[127,128,191,64,127,117,241,241,253,245,247,247,255,255,255,255,255,255,127,127,250,250,14,10,138,138,8,8,130,130]},{"1840062":[129,129,203,215,233,245,233,245,251,239,203,243,147,155,95,127,48,16,241,18,199,36,231,4,255,8,243,4,251,4,239,16,91,252,239,239,251,251,219,219,199,195,251,203,219,211,187,155,51,19,48,56,6,14,38,14,52,12,52,44,124,100,228,216,135,183,199,231,143,175,135,183,215,215,215,247,143,191,135,191,76,52,247,8,247,8,231,40,183,72,215,8,159,64,191,64,179,76,231,199,239,207,215,215,215,215,183,183,183,167,191,135,183,183,56,56,112,112,104,104,40,56,72,24,88,72,120,72,251,131,139,139,195,219,247,223,199,215,163,187,243,235,7,127,136,184,203,52,131,116,147,100,251,4,191,72,239]},{"1840220":[255]},{"1840222":[63,192,203,219,219,219,223,223,151,135,183,167,191,183,255,167,183,183,116,124,36,52,32,48,120,40,92,108,76,124,248,200,111,31,128,169,212,217,255,219,131,159,245,244,253,255,253,255,5,7,255,38,184,66,187,119,223,38,242,14,249,4,254,1,14,240,214,217,213,219,233,238,217,193,253,253,255,255,251,249,251,248,112,111,52,47,11,20,125,126]},{"1840313":[1,1]},{"1840316":[6,1,14,13,82,81,186,57,251,121,58,56,56,184,127,127,255,255,191,127,123,135,187,198,187,196,250,7,253,130,191,64,255]},{"1840350":[95,96,58,186,187,186,248,248,122,122,125,125,127,127,191,191,191,191,109,109,69,69,7,5,197,197,199,199,128,128,64,128,64,192,112,120,224,233,237,224,244,254,224,234,237,251,201,207,30,58,255,1,255,10,251,12,228,17,239,18,251,8,215,56,147,72,254,244,244,245,250,254,254,254,237,229,247,229,207,201,181,181,143,137,30,27,19,20,5,1,31,19,18,30,38,42,219,207,152,158,172,237,128,3,248,224,204,208,204,216,236,250,58,57,247,9,3,190,219,96,52,220,241,25,243,27,195,33,117,136,102,249,69,90,31,48,215,216,239,232,239,232,253,242,214,209,96,151,160,247,156,7,35,15,62,55,52,63,6,15,111,95]},{"1840513":[234,32,197]},{"1840517":[175]},{"1840519":[1]},{"1840522":[128]},{"1840524":[2,168,168,85,255,21,239,10,175]},{"1840534":[1]},{"1840536":[128,128,122,122,255,87,87,2,234,21,245,10,255]},{"1840550":[255]},{"1840552":[255]},{"1840554":[255]},{"1840556":[87,170,170,85]},{"1840561":[255,48,255,80,255,254,255,127,255,133,255,168,255,253,255,10,170,16,85]},{"1840581":[255,2,119,129,175]},{"1840588":[42,136,33,16,245,85,239,170,255]},{"1840598":[117]},{"1840600":[174,128,128,128,254,126,223,207,160,95,85,170,255]},{"1840614":[255]},{"1840616":[255,128,255]},{"1840620":[127,170,239,17]},{"1840625":[255,16,255]},{"1840629":[255,138,255,209,255,127,255,137,255,48,255,170,170,21,85,43,187]},{"1840647":[247,21,255]},{"1840651":[71,162,162,17,17,85,85,234,170,212,68,255,8,234]},{"1840666":[71]},{"1840668":[162,162,253,253]},{"1840673":[255,64,191,145,110,247,8,255]},{"1840682":[255]},{"1840684":[255,162,255,17]},{"1840689":[255]},{"1840691":[255,1,255]},{"1840695":[255,21,255,184,255,255,255,19,255,251,251,85,85,255,255,87,87,63,255,1,255,170,175,21,21,4,70,170,171]},{"1840726":[168,168,192]},{"1840730":[254]},{"1840732":[175,170,21,21]},{"1840737":[189]},{"1840739":[254,64,191,66,189,245,10,255]},{"1840748":[255,170,255,21]},{"1840753":[255]},{"1840755":[255,64,255,66,255,53,255,1,255,250,255,255,255,247,255,255,255,255,255,253,253,255,255,223,255,243,255,85,95,52,202,10,21,4]},{"1840790":[2,2]},{"1840794":[32]},{"1840796":[174,162,95,85,60,9,10,224,4,251,136,119,80,175,255]},{"1840812":[255,162,255,85,52,247,10,255,4,255,136,255,80,255,223,255,243,255,245,255,87,255,255,255,244,246,234,234,85,85,251,251,255,255,95,255,87,168,159]},{"1840853":[11]},{"1840855":[21]},{"1840857":[170]},{"1840859":[4]},{"1840862":[224,64,255,168,159,96,2,246]},{"1840871":[234]},{"1840873":[85,186,65,255]},{"1840878":[255,64,87,87,159,255]},{"1840885":[253]},{"1840887":[255]},{"1840889":[255,186,255,255,255,95,255,223,112,255,250,70,100,170,170]},{"1840905":[8,170,170,213,213,63,191,255,32,255]},{"1840916":[70,185,42,85]},{"1840921":[255]},{"1840923":[85]},{"1840925":[42,128]},{"1840928":[223]},{"1840930":[255]},{"1840932":[102,32,42,128,8,8,170]},{"1840940":[215]},{"1840942":[255]},{"1840944":[255,80,255,250,70,221,42,255]},{"1840953":[247,170,255,215,255,127,255,255,171,255,160,183,46,149,133,2,8,12,12,68,68,234,234,255]},{"1840978":[255]},{"1840980":[145,76,152,106,2,253]},{"1840987":[247]},{"1840989":[187]},{"1840991":[21,255]},{"1840994":[255]},{"1840996":[187,8,145,12,10,8,4,8,238]},{"1841006":[255]},{"1841008":[85,171,255,160,179,68,145,238,2,245]},{"1841019":[255,238,255,255,255,245,181,255,95,255,191,255,149,239,175,5,5,2,2,128,128,125,128,245]},{"1841044":[106]},{"1841046":[234]},{"1841048":[64,16]},{"1841051":[250]},{"1841053":[253]},{"1841055":[127,119,10,255]},{"1841060":[255]},{"1841062":[255]},{"1841064":[239]},{"1841066":[5]},{"1841068":[170]},{"1841070":[213]},{"1841072":[64,181,170,85,213,42,255,128,239,16,5,250,170,253,213,255,218,202,170,170,220,92,246,118,255,255,95,95,171,171,1,1,250,138,186]},{"1841108":[166]},{"1841110":[132,8,10]},{"1841115":[160]},{"1841117":[84]},{"1841119":[254,85,37,239,85,221,35,247,1,255]},{"1841130":[95]},{"1841132":[191]},{"1841134":[87]},{"1841136":[154,64]},{"1841139":[170,216,4,242,12,245,10,95,160,191,84,87,254,255,84,85,84,170,168,168,168,80,80,250,250,255,255,85,85,255,84,85,84,170,168,232]},{"1841176":[144]},{"1841183":[170]},{"1841185":[171,170,171,85,87,191,87,127,175,255,5,255]},{"1841198":[255]},{"1841200":[84]},{"1841202":[84]},{"1841204":[168]},{"1841207":[168,64,16,250]},{"1841212":[255]},{"1841214":[255,170,1,1]},{"1841220":[85,85,85,85,84,1,255,255,64,191,255,255,254,255,255,255,255,255,247,247,170]},{"1841242":[81,251,191]},{"1841246":[138]},{"1841248":[255,1,255,171,255,255,255,85,255]},{"1841258":[119,34,255,255,117,255,255,254,84,255,85,255,93,255,255,255,217,174,191,64,138]},{"1841281":[12,42,42,85,85,16,85]},{"1841289":[87,254,255]},{"1841293":[255,255,255,255,255,255,255,85,85,255,186,168]},{"1841306":[17,251,255]},{"1841310":[170]},{"1841312":[255,17,255,191,255,255,186,85,255]},{"1841322":[255,235,255,191,85,255,238,255,106,255,85,255,85,255,255,255,16,239,250,5,170]},{"1841345":[34,170,170,95,68,10,85]},{"1841353":[255,255,255]},{"1841357":[255,254,255,254,254,170,170,95,95,245,160]},{"1841369":[7,5,191,255]},{"1841374":[170,1,255,85,255,255,255,255,170,85,248]},{"1841386":[255,191,255,239,85,254,170,255,170,255,68,255,95,255,255,255]},{"1841403":[255,144,111,171,1]},{"1841409":[160,10]},{"1841412":[255]},{"1841414":[133,85]},{"1841417":[255,255,253]},{"1841421":[255,238,255,160,160,10,10,255,255,127,5]},{"1841433":[255,85,255,255]},{"1841438":[238,17,255,95,255,255,255,255,175,80]},{"1841450":[255,253,255,255,17,238,160,255]},{"1841459":[255]},{"1841461":[255,255,255,255,255]},{"1841467":[255]},{"1841469":[255,255,17,1,136,191]},{"1841476":[170,85,21,21]},{"1841481":[238,255,213]},{"1841485":[255,255,255,137,137,191,191,255,170,255,21,17,238,85,255,255]},{"1841502":[255]},{"1841504":[255,119,255,255,170,255,255]},{"1841514":[255,213,255,255]},{"1841519":[255,136,255]},{"1841523":[255,85,255,255,255,238,255]},{"1841531":[255]},{"1841533":[255,255]},{"1841536":[87]},{"1841538":[253,2]},{"1841541":[255,17,251,174,81,255,85]},{"1841549":[213,255,255,87,87,255,253,255]},{"1841558":[17,23,191,255,85,255,255]},{"1841566":[255]},{"1841568":[255,255,253,255]},{"1841573":[255,253]},{"1841576":[191,17,255,85,255,213]},{"1841583":[255]},{"1841585":[255,2,255,255,255,251,255,64,255]},{"1841595":[255]},{"1841597":[255,255]},{"1841600":[254,65,64,191,85,255]},{"1841607":[174,170,85,251,68,21]},{"1841614":[127,127,255,254,255,64,255,85]},{"1841623":[255,255,255,68,255,191,64,127,128,254,191,64,255,85,170,81]},{"1841640":[255,85,255,64,255,85]},{"1841647":[255,65,255,191,255,255,255,174,255]},{"1841657":[255,4,251,64,191,255,128,232,23,42,255,223,255,38,128,168,87,94,161,255]},{"1841678":[85,85,255,232,255,42,255,223,38,166,253,255]},{"1841691":[94,255]},{"1841694":[85,170,232,255,42,213,223,32,38,89,253,85,94]},{"1841708":[255,255]},{"1841711":[255,23,255,255,255,255,255,217,255]},{"1841721":[255]},{"1841723":[255]},{"1841725":[255,255,170,128,127,175,255,255,255,239,16]},{"1841737":[255,167,88,255]},{"1841742":[85,85,255,128,255,175,255,255,239,255,80,255]},{"1841755":[167,255]},{"1841758":[85,170,128,255,175,80,255]},{"1841766":[239]},{"1841768":[80,80,167]},{"1841772":[255,255]},{"1841775":[255,127,255,255,255,255,255,16,255]},{"1841785":[255]},{"1841787":[255]},{"1841789":[255,255,170,21,255,255,255,251,250,255]},{"1841800":[81,255,128,127,170]},{"1841806":[85,85,255,21,255,255,251,251,255,255,81,255]},{"1841819":[128,187,68,85,170,21,234,255]},{"1841828":[251,4,255]},{"1841832":[81,81,128]},{"1841836":[238,255]},{"1841839":[255,255,255,255,255,254,255]},{"1841847":[255]},{"1841849":[255]},{"1841851":[255,68,187,255,170,87,255,255,255,186,186,255]},{"1841864":[8,255,128,127]},{"1841870":[81,81,255,87,255,255,186,186,255,255,29,255]},{"1841884":[170,85,81,170,87,168,255]},{"1841892":[186,69,255]},{"1841896":[29,8]},{"1841899":[128,85,255]},{"1841903":[255,255,255,255,255,255,255]},{"1841911":[255,21,234]},{"1841915":[255,85,170,255,170,217,254,159,176,255,160,85,170]},{"1841929":[255]},{"1841931":[255]},{"1841936":[166,135,176,191,255,255,85,255,95,255]},{"1841948":[187,68]},{"1841951":[170,248,24,191,112,255]},{"1841958":[85]},{"1841960":[95]},{"1841964":[68,255]},{"1841967":[255,167,199,192,255,160,255]},{"1841975":[255,95,160]},{"1841979":[255,68,187,255,170,7,241,255,8,255,2,85,170]},{"1841993":[255,34,255]},{"1841998":[32,32,243,255,15,255,255,255,85,255,255,255,34]},{"1842012":[187,68,32,136,15,9,255,8,255]},{"1842022":[85]},{"1842024":[255]},{"1842028":[68,255,32,223,248,247]},{"1842035":[255,2,255]},{"1842039":[255,255]},{"1842043":[255,68,187,255,136,34,162,73,174,170,93]},{"1842055":[255]},{"1842057":[255,34,255]},{"1842062":[32,32,227,28,174,209,170,255]},{"1842071":[255,255,255,34]},{"1842076":[187,68,32,136,128,128,255,186,170,8]},{"1842088":[255]},{"1842092":[68,255,32,223,127,255,20,235]},{"1842101":[255]},{"1842103":[255,255]},{"1842107":[255,68,187,255,136,59,206,103,140,254,33]},{"1842119":[255]},{"1842121":[255,170,255]},{"1842128":[176,113,100,239,254,255]},{"1842135":[255,255,255,170]},{"1842140":[187,68]},{"1842143":[136,182,70,103,20,254]},{"1842152":[255]},{"1842156":[68,191]},{"1842159":[255,193,57,16,255,32,255]},{"1842167":[255,255]},{"1842171":[255,68,187,255,136,121,102,215,104,186,69]},{"1842183":[255]},{"1842185":[255,171,255]},{"1842192":[102,183,88,252,186,255]},{"1842199":[255,255,255,171]},{"1842204":[187,68]},{"1842207":[128,120,96,220,67,186]},{"1842216":[255]},{"1842220":[68,187]},{"1842223":[255,135,118,8,247]},{"1842229":[255]},{"1842231":[255,255]},{"1842235":[255,68,187,255,128,49,38,79,240,186,69]},{"1842247":[255]},{"1842249":[255,186,255]},{"1842256":[38,255,64,121,186,255]},{"1842263":[255,255,255,186]},{"1842268":[171,84]},{"1842272":[120,104,73,70,186]},{"1842280":[255]},{"1842284":[84,171]},{"1842287":[255,207,54]},{"1842291":[255]},{"1842293":[255]},{"1842295":[255,255]},{"1842299":[255,84,171,255]},{"1842304":[83,162,254,4,143,112]},{"1842311":[255]},{"1842313":[255,170,255]},{"1842320":[167,255,6,254,143,255,32,255,255,255,170]},{"1842332":[187,68]},{"1842336":[3,2,254,5,143]},{"1842342":[32]},{"1842344":[255]},{"1842348":[68,187]},{"1842351":[255,248,243,1,255]},{"1842357":[255,32,223,255]},{"1842363":[255,68,187,255]},{"1842368":[149,117,46,95,236,31]},{"1842375":[255]},{"1842377":[255,170,255]},{"1842382":[128,128,213,130,31,96,236,255]},{"1842391":[255,255,255,170]},{"1842396":[187,68,128]},{"1842400":[224,96,63,159,236,12]},{"1842408":[255]},{"1842412":[68,187,128,127,95,147,144,239]},{"1842421":[255]},{"1842423":[255,255]},{"1842427":[255,68,187,255]},{"1842432":[102,207,199,122,255]},{"1842438":[17,238]},{"1842441":[255,234,255]},{"1842446":[129,129,211,173,70,255,255,255,17,255,255,255,234]},{"1842460":[171,84,129,8,102,70,199,66,255]},{"1842470":[17]},{"1842472":[255]},{"1842476":[84,191,128,127,137,255,56,255]},{"1842485":[255]},{"1842487":[255,255]},{"1842491":[255,84,171,255,8]},{"1842497":[250,213,111,236,17,85,170,138,255,163,254]},{"1842510":[17,17,215,200,21,253,236,253,85,255,255,255,162]},{"1842524":[170,85,17,136,53,50,215,96,236,2,85]},{"1842536":[255,138]},{"1842539":[1,85,255]},{"1842543":[255,223,207,47,223,19,255]},{"1842551":[255,117,138]},{"1842555":[255,85,170,255,136]},{"1842561":[238,85,117,98,191,127,128,170,255,64,191]},{"1842574":[21,21,255]},{"1842578":[95,213,98,255,127,255,255,255]},{"1842588":[170,85,21,168,17,238,255]},{"1842596":[98]},{"1842598":[127]},{"1842600":[255,170]},{"1842603":[64,85,255]},{"1842607":[255,255,255,127,255,191,255]},{"1842615":[255,85,170]},{"1842619":[255,85,170,255,168]},{"1842625":[174,64,69,170,255,219,36,255,255,215,40,2]},{"1842638":[85,85,255,1,255,64,170,250,219,255,255,255]},{"1842652":[170,85,85,170,81,174,250,5,175]},{"1842662":[219]},{"1842664":[255,255]},{"1842667":[215,87,255]},{"1842671":[255,254,255,255,255,255,255,36,255]},{"1842681":[255]},{"1842683":[255,85,170,255,170,10,224]},{"1842691":[85,162,254,11,244,254,255,95,160,171]},{"1842702":[85,85,255,29,255]},{"1842708":[163,162,11,255,255,255]},{"1842715":[10,171,84,85,170,29,232,170,85,255]},{"1842726":[11]},{"1842728":[255,255,10,85,255,255]},{"1842735":[255,224,255,255,255,255,255,244,255]},{"1842745":[255]},{"1842747":[255,84,171,255,170,170]},{"1842755":[85,160,162,128,127,234,255,255]},{"1842764":[168]},{"1842766":[87,87,255,255,255,170,255,160,128,255,245,245]},{"1842779":[191,170,85,87,168,255,170,170,85,253,2,128]},{"1842792":[255,245,191,64,255,253]},{"1842799":[255]},{"1842801":[255,85,255,255,255,127,255]},{"1842809":[255]},{"1842811":[255,85,170,255,168,110,102,69,17,5,170]},{"1842823":[255,164,245,255]},{"1842828":[128,1,127,127,110,110,255,239,250]},{"1842840":[91,81]},{"1842843":[255,171,84,127,128,255,238,239,85,85,170,255]},{"1842856":[245,81,255]},{"1842860":[255,213]},{"1842863":[255,119,255,17,255,255,255,255,255]},{"1842873":[255]},{"1842875":[255,84,171,255,128,254,254,85,85,64,170]},{"1842887":[250]},{"1842889":[17,187,69]},{"1842893":[11,255,255,254,254,255,255,191,21,5]},{"1842904":[255,17]},{"1842907":[255,171,84,255]},{"1842912":[255,254,255,85,85,170,255]},{"1842920":[17,17,187,69,255,94]},{"1842927":[255,255,255,85,255,234,255,255,255]},{"1842937":[255,68,187,85,170,255]},{"1842944":[181,245,85,85,42,136,10]},{"1842953":[155,191,85]},{"1842957":[191,255,255,234,170,85,85,255,127,245]},{"1842968":[100,155]},{"1842971":[255,191,64,255]},{"1842976":[255,170,255,85,127,170,255]},{"1842984":[17]},{"1842986":[191,85,255,235]},{"1842991":[255,181,255,255,255,136,255,255,255,138,255,64,191,84,171,255]},{"1843008":[93,93,127,255,170,170,254]},{"1843017":[223,255,255]},{"1843021":[255,254,255,160,170,213,85,234,234,1,1,32,221]},{"1843035":[255,255]},{"1843038":[238,1,255,168,255,85,255,170,255]},{"1843048":[87]},{"1843050":[255,255,255,170,17,254,95,247,127,255,191,255,254,255,138,255]},{"1843067":[255,85,170,239,1,217,217,251,251,170,191,168]},{"1843081":[255,255,255]},{"1843085":[255,254,255]},{"1843089":[174,68,68,191,170,87,87,1,212]},{"1843099":[255,255]},{"1843102":[170,1,255,136,255,68,255,170,255]},{"1843112":[126,1,255,255,255,170,85,254,255,119,251,255,234,255,168,255,170,255]},{"1843131":[255,95,160,171,1]},{"1843138":[186,186,175,239]},{"1843144":[2,245,255,255]},{"1843149":[255,235,255]},{"1843153":[255,64,69,234,170,18,18,93]},{"1843162":[69,255,255]},{"1843166":[170,20,255]},{"1843170":[255,64,255,170,255]},{"1843176":[170,85,255,186,255,170,85,235,255,255,191,255,191,255,237,255,170,255,69,186,255]},{"1843198":[190,20,10,10,168,168,223,223,129,1,174,80,255,255,9,246,235,255]},{"1843217":[245]},{"1843219":[87,160,160]},{"1843224":[80,9,93,255,246]},{"1843230":[136,20,255]},{"1843234":[253]},{"1843236":[255,160,255]},{"1843240":[166,81,255,162,255,171,119,235,255,245,253,255,223,255,255,255,166,255,93,162,246,9,156,20,255]},{"1843266":[255,255,255,255,255,255,255,255,163,252,241,14,56,254,85]},{"1843282":[255]},{"1843284":[255]},{"1843286":[255]},{"1843288":[255]},{"1843290":[95,3]},{"1843293":[255]},{"1843295":[1,255,255,255,255,255,255,255,255,255,255,160,163]},{"1843309":[255,255,255,255,255]},{"1843322":[255,163,255,255,1]},{"1843328":[255]},{"1843330":[255,255,255,255,255,255,245,245,213,42,242,34,2,170,87]},{"1843346":[255]},{"1843348":[255]},{"1843350":[255]},{"1843352":[255,10,250,133,34,221,2,85,255,255,255,255,255,255,255,255,245,255,85,213,34,221,255,255,255,255]},{"1843384":[10,10,255,213,255,221,85,2,255]},{"1843394":[255,255,255,255,255,255,85,85,223,32,168,170,42,170,119]},{"1843410":[255]},{"1843412":[255]},{"1843414":[255]},{"1843416":[255,170,160,26,168,127,42,85,255,255,255,255,255,255,255,255,85,255,223,223,170,125,255,255,255,255]},{"1843448":[170,170,255,223,215,87,85,42,255]},{"1843458":[255,255,255,255,255,255,87,87,249,6,13,147,50,186,127,128,255]},{"1843476":[255]},{"1843478":[255]},{"1843480":[127,168,14,160,17,238,34,69,255,255,255,255,255,255,255,255,215,255,249,249,130,109,223,191,255,255]},{"1843512":[40,40,255,249,239,254,101,2,254]},{"1843522":[255,255,255,255,255,255,81,81,255,255,255,255,152,141,254,1,255]},{"1843540":[255]},{"1843542":[255]},{"1843544":[119,174,255]},{"1843548":[213]},{"1843550":[157,98,255,255,255,255,255,255,255,255,217,255,255,255,42,255,255,255,255,255]},{"1843576":[38,38,255,255,213]},{"1843582":[98,157,239]},{"1843586":[255,255,255,255,255,255]},{"1843594":[251,255,253,255,154,237,239,16,255]},{"1843604":[255]},{"1843606":[255]},{"1843608":[119,255,250,5,84,2,255]},{"1843616":[255,255,255,255,255,255,255,255,136,255,123,254,171,255,255,255,255,255]},{"1843640":[119,119,255,254,84,2]},{"1843647":[255,238,17,255,255,255,255,255,255,4,4,190,231,77,221,102,104,255]},{"1843666":[255]},{"1843668":[255]},{"1843670":[255]},{"1843672":[95,251,174,81,88,162,15,144,238,238,255,255,255,255,255,255,164,255,60,255,135,237,255,126,255,238]},{"1843704":[91,91,255,255,106,176,144,15,160,85,255,255,255,255,255,255]},{"1843722":[171,255,84,213,127,128,245,10,255]},{"1843732":[255]},{"1843734":[255]},{"1843736":[117,255,32,223]},{"1843741":[171,255]},{"1843744":[170,170,255,255,255,255,255,255,138,255,171,116,255,213,255,255,255,170]},{"1843768":[117,117,255,116,42,129]},{"1843775":[255,179,85,255,255,255,255,255,255]},{"1843786":[187,255,68,84,254,16,230,25,255]},{"1843796":[255]},{"1843798":[255]},{"1843800":[127,255]},{"1843803":[255]},{"1843805":[187,255]},{"1843808":[187,187,255,255,255,255,255,255,128,255,187,68,255,84,238,239,255,187]},{"1843832":[127,127,255,68,171,16]},{"1843839":[255,55,85,255,255,255,255,255,255,16,16,223,223,128,208,149,213,98,157,255]},{"1843860":[255]},{"1843862":[255]},{"1843864":[247,239,16,239,192,31,191,64,191,191,255,255,255,255,255,255,24,255,239,48,31,176,64,234,255,191]},{"1843896":[231,231,255,48,175,80,128,127,215,85,255,255,255,255,255,255]},{"1843913":[170,255,255]},{"1843918":[21,85,130,125,255]},{"1843924":[255]},{"1843926":[255]},{"1843928":[85,85]},{"1843931":[255]},{"1843933":[255,255,64,255,255,255,255,255,255,255,255,170,255,255]},{"1843948":[255]},{"1843951":[234,255,255]},{"1843960":[255,255,255]},{"1843964":[255]},{"1843966":[64,191,125,85,255,255,255,255,255,255]},{"1843977":[170,251,255]},{"1843982":[1]},{"1843984":[40,215,255]},{"1843988":[255]},{"1843990":[255]},{"1843992":[85,85,4,251]},{"1843997":[254,252,2,255,255,255,255,255,255,255,255,170,255,251]},{"1844012":[254,1,2,253,255,255]},{"1844024":[255,255,251,4,255]},{"1844030":[3,252,87,87,255,255,255,255,255,255]},{"1844041":[42,122,127,64,192]},{"1844049":[255,255]},{"1844052":[255]},{"1844054":[255]},{"1844056":[85,213,69,186,192,63,127,128,255,255,255,255,255,255,255,255,170,255,186,192,63,64,128,127,255,255]},{"1844088":[127,127,250,197,127,128,128,127,119,119,255,255,255,255,255,255,136,170,170,255,64]},{"1844110":[8,8]},{"1844113":[255,255]},{"1844116":[255]},{"1844118":[255]},{"1844120":[85,221,85,170,64,255,255,8,255,255,255,255,255,255,255,255,170,255,170]},{"1844140":[255]},{"1844142":[8,255,255,255]},{"1844152":[255,255,170,85,255]},{"1844158":[8,247,127,127,255,255,255,255,255,255,168,168,171,255,64,4,138,138]},{"1844177":[255,255]},{"1844180":[255]},{"1844182":[255]},{"1844184":[87,255,87,168,64,252,250,141,255,255,255,255,255,255,255,255,168,255,168,3,252,7,141,250,255,255]},{"1844216":[255,255,171,87,251,4,143,112,255,255,255,255,255,255,255,255,170,170,160,255,68]},{"1844238":[170,170]},{"1844241":[255,255]},{"1844244":[255]},{"1844246":[255]},{"1844248":[85,255,95,160,68,255,255,170,255,255,255,255,255,255,255,255,170,255,160]},{"1844268":[255]},{"1844270":[170,255,255,255]},{"1844280":[255,255,160,95,255]},{"1844286":[170,85,119,119,255,255,255,255,255,255,170,238]},{"1844299":[255,69]},{"1844302":[170,170]},{"1844305":[255,255]},{"1844308":[255]},{"1844310":[255]},{"1844312":[17,187,255]},{"1844316":[69,255,255,170,255,255,255,255,255,255,255,255,238,255]},{"1844332":[255]},{"1844334":[170,255,255,255]},{"1844344":[255,255]},{"1844347":[255,255]},{"1844350":[170,85,117,117,255,255,255,255,255,255,160,170,46,255,90,2,164,160]},{"1844369":[255,255]},{"1844372":[255]},{"1844374":[255]},{"1844376":[85,245,213,42,90,249,245,174,255,255,255,255,255,255,255,255,170,255,42,4,249,6,174,241,255,255]},{"1844408":[255,255,46,213,255]},{"1844414":[174,81,85,85,255,255,255,255,255,255,170,170,170,255,84]},{"1844430":[168,168]},{"1844433":[255,255]},{"1844436":[255]},{"1844438":[255]},{"1844440":[85,255,85,170,84,255,255,168,255,255,255,255,255,255,255,255,170,255,170]},{"1844460":[255]},{"1844462":[168,255,255,255]},{"1844472":[255,255,170,85,255]},{"1844478":[168,87,85,85,255,255,255,255,255,255,136,170,187,255,68]},{"1844497":[255,255]},{"1844500":[255]},{"1844502":[255]},{"1844504":[85,221,68,187,68,255,255]},{"1844512":[255,255,255,255,255,255,255,255,170,255,187]},{"1844524":[255]},{"1844527":[255,255,255]},{"1844536":[255,255,187,68,255]},{"1844543":[255,87,85,255,255,255,255,255,255,128,170,255,255,20,85,8,8,2,253,255]},{"1844564":[255]},{"1844566":[255]},{"1844568":[85,213,24,231,20,227,251,4,255,255,255,255,255,255,255,255,170,255,231,24,227,93,4,251,255,255]},{"1844600":[255,255,255,24,190,65,12,243,87,85,255,255,255,255,255,255]},{"1844617":[170,255,255,69,85]},{"1844624":[2,253,255]},{"1844628":[255]},{"1844630":[255]},{"1844632":[85,85]},{"1844635":[255,69,186,117,138,255,255,255,255,255,255,255,255,170,255,255]},{"1844652":[186,85,138,255,255,255]},{"1844664":[255,255,255]},{"1844668":[239,16,138,117,8,85,255,255,255,255,255,255]},{"1844681":[170,255,255,85,93]},{"1844688":[93,162,255]},{"1844692":[255]},{"1844694":[255]},{"1844696":[85,85,34,221,85,170,85,170,170,170,255,255,255,255,255,255,170,255,221,34,170,93,170,127,255,170]},{"1844728":[255,255,255,34,247,8,170,85,175]},{"1844738":[255,255,255,255,255,255]},{"1844745":[136,251,255,109,239]},{"1844752":[175,80,255]},{"1844756":[255]},{"1844758":[255]},{"1844760":[119,119,42,213,109,146,64,191,255,255,255,255,255,255,255,255,136,255,209,46,130,255,191,71,255,255]},{"1844792":[255,255,255,46,125,146,191,64,186]},{"1844802":[255,255,255,255,255,255]},{"1844809":[128,186,255,221,255]},{"1844816":[186,69,255]},{"1844820":[255]},{"1844822":[255]},{"1844824":[117,127,170,85,85,34]},{"1844831":[255,255,255,255,255,255,255,255,255,138,255,16,239,170,255,255,119,255,255]},{"1844856":[245,245,255,239,85,34,255]},{"1844864":[175]},{"1844866":[255,255,255,255,255,255]},{"1844874":[187,255,255,255]},{"1844880":[175,80,255]},{"1844884":[255]},{"1844886":[255]},{"1844888":[117,255,171,84,213]},{"1844895":[255,255,255,255,255,255,255,255,255,138,255,17,239,42,255,255,127,255,255]},{"1844920":[117,117,255,239,213]},{"1844926":[255]},{"1844928":[254]},{"1844930":[255,255,255,255,255,255]},{"1844938":[255,255,191,191]},{"1844944":[118,137,255]},{"1844948":[255]},{"1844950":[255]},{"1844952":[85,255,255]},{"1844956":[189,64]},{"1844959":[255,255,255,255,255,255,255,255,255,170,255,223,255,2,255,255,199,255,255]},{"1844984":[85,85,255,255,253,64,255]},{"1844992":[255]},{"1844994":[255,255,255,255,255,255]},{"1845002":[255,255,216,250]},{"1845008":[119,136,255]},{"1845012":[255]},{"1845014":[255]},{"1845016":[119,255,255]},{"1845020":[216,39]},{"1845023":[255,255,255,255,255,255,255,255,255,136,255,255,255,34,221,255,255,255,255]},{"1845048":[119,119,255,255,255,39,255]},{"1845056":[255]},{"1845058":[255,255,255,255,255,255,21,21,255,208]},{"1845069":[170]},{"1845071":[136,87,40,255]},{"1845076":[255]},{"1845078":[255]},{"1845080":[119,234,211,40]},{"1845085":[255]},{"1845087":[119,255,255,255,255,255,255,255,255,157,255,255,255,170,85,255,255,255,255]},{"1845112":[98,98,255,255,255,255,119]},{"1845120":[255]},{"1845122":[255,255,255,255,255,255,85,85,253,2,234,42]},{"1845135":[170,85,32,255]},{"1845140":[255]},{"1845142":[255]},{"1845144":[127,170,170,1,42,255]},{"1845151":[85,255,255,255,255,255,255,255,255,213,255,253,253,42,255,255,191,255,255]},{"1845176":[42,42,255,253,213,213,85]},{"1845184":[255]},{"1845186":[255,255,255,255,255,255,85,85,223,32,42,42]},{"1845199":[170,85]},{"1845202":[255]},{"1845204":[255]},{"1845206":[255]},{"1845208":[247,170,191]},{"1845212":[42,213]},{"1845215":[85,255,255,255,255,255,255,255,255,93,255,223,223,42,213,255,255,255,255]},{"1845240":[162,162,255,223,255,213,85]},{"1845248":[255]},{"1845250":[255,255,255,255,255,255,119,119,68,191,126,33,4,170,85]},{"1845266":[255]},{"1845268":[255]},{"1845270":[255]},{"1845272":[255,136,251]},{"1845276":[32,223,4,85,255,255,255,255,255,255,255,255,119,255,68,68,32,223,251,254,255,255]},{"1845304":[136,136,255,68,255,223,85]},{"1845313":[159,251,123,21,2,255,255,17,17,213,208,85,85,124,124,159,96,68,122,234,232,255,255,255,255,223,223,170,175,119,247,255,111,193,128,253,2,255,255,255,119,255,213,255,85,139,8,255]},{"1845362":[122,191,23,255,255,255,153,255,240,255,255,170,255,247]},{"1845377":[255,191,191,85,42,253,238,85,85,66,21,4,7,178,182,250]},{"1845394":[64,170,170,128,255,253,213,213,252,232,254,252,71,83,250,255,21]},{"1845412":[213,42,253,255,255,255,235,84,253,86,251,182,250,5,170,255,127,255,238,255,85,255,23,255,175,255,255,79]},{"1845441":[255,172,175,78,186,73,252,141,81]},{"1845451":[244]},{"1845453":[10,160,160,1]},{"1845458":[87,172,163,6,211,91,173,141,31,64,126,126,95,255,1,255,7,7,94,162,127,217,223,143,171,20,255,213,255,170]},{"1845489":[255,168,255,240,255,228,255,81,255,255,255,42,255,245,95,10,53,212,127,138,170,80,239,127]},{"1845514":[64,111]},{"1845517":[128,10,11,32,200,43,171,255,138,255,80,127,127,208,64,128,128,255,255,232,245,255,43,223,32,80,255,255,255,255]},{"1845548":[255,127,255,170,194,63]},{"1845555":[255,255,255,239,255]},{"1845561":[255,255,255,128,255,95,255,128,85]},{"1845571":[255,170,239]},{"1845575":[255,232,23]},{"1845579":[255,84]},{"1845582":[160,241]},{"1845585":[42,255,255,186,170,255]},{"1845592":[255,232]},{"1845595":[255,85,84,243,241,42,255,255,255,255]},{"1845607":[255,232,255]},{"1845612":[255,254,255,173]},{"1845617":[255]},{"1845619":[255,255,255,255,255,23,255,255,255,1,255,242,255,131,82,4,254,168,241,188,231,45,199,79,208,63,192,106,128,3,44,255,252,169,191,245,190,239,45,223,223,127,255,106,234,45,253,254,255,239,7,188,69,45,194,223,208,127,127,127,127]},{"1845681":[255]},{"1845683":[255,240,255,227,255,215,255,32,255]},{"1845693":[255,128,255,32,32,197,127,171,254,255,255,87,255,212,43,160,95,255]},{"1845712":[32,223,111,127,171,255,255,255,255,87,254,255,255,160,255,255,223,223,111,231,171]},{"1845734":[255]},{"1845736":[87,168,254,42,160,255,255,255,192,63,8,247,254,255,255,255,255,255]},{"1845755":[255,95,255]},{"1845759":[255,191,191,68,255,255,170,255,255,255,255,1,255,21,255,244,11,191,64,255,255,255,255,255,255,255,255,171,255,255,21,255,244,64,64,255,196,255]},{"1845798":[255]},{"1845800":[255]},{"1845802":[171,169,21,234,244,255]},{"1845809":[255,59,196,170,255,255,255,255,255,2,253,255,255,11,255,246,254,64,248,242,171,253,239,251,255,88,215,143,255,64,191,246,1,249,250,246,249,253,243,251,231,211,239,223,223,191,224,1]},{"1845858":[250,73,240,4,241]},{"1845864":[227]},{"1845866":[235,98,223,16,224,191,1,254,182,77,160,255,225,255,227,255,129,126,207,191,31,255,119,63,128,127,255,162,255,117,255,254]},{"1845899":[255,255,255,170,255,119,128,127,255,255,255,255,255,255,255,255,255,255,255,255,170,192,192,255]},{"1845924":[255]},{"1845926":[255]},{"1845928":[255]},{"1845930":[255]},{"1845932":[255]},{"1845934":[170,85,128,127,127,128,162,255,117,255,254,255,255]},{"1845948":[255,255,255,255,247,255]},{"1845955":[255,250,5,247,93,255,170]},{"1845963":[255,191,191,255,255,247]},{"1845970":[255,255,250,255,247,255,255,255,255,255,191,191,255,255]},{"1845986":[255]},{"1845988":[250]},{"1845990":[247]},{"1845992":[255]},{"1845994":[255]},{"1845996":[191,64,255]},{"1846001":[255,255]},{"1846005":[255,85,255,170,255,255]},{"1846012":[255,255,255,255,248,248,5,221,162,91,121,138,231,180,18,213,247,170,255,183,252,3,213,210,174,249,127,243,255,243,217,195,255,239,255,207,3,4,210]},{"1846052":[168,4,115,4,243,8,195,8,255,48,207]},{"1846064":[3,252,242,45,8,247,2,253,176,239,225,62,138,247,135,255,255,255,2,125]},{"1846085":[255,81,174,254,137]},{"1846091":[255,191,170,95,85,255]},{"1846098":[85,87]},{"1846101":[255,81,255,254,255,221,221,191,191,95,95]},{"1846114":[85,2]},{"1846118":[81]},{"1846120":[254]},{"1846122":[221]},{"1846124":[191,64,95,160]},{"1846129":[255,215,168]},{"1846133":[255]},{"1846135":[255,136,255,221,34,234,255,245,255,235,235,42,213]},{"1846149":[255]},{"1846151":[255,170,85]},{"1846155":[255,255]},{"1846158":[255,16,255,1,68,110]},{"1846165":[255]},{"1846167":[255,170,255,85,85,255,255,255,255,1,21,68,42]},{"1846184":[170]},{"1846186":[85]},{"1846188":[255]},{"1846190":[255]},{"1846192":[1,254,110,145]},{"1846197":[255]},{"1846199":[255]},{"1846201":[255,85,170]},{"1846205":[255,16,255,248,248,169,1,4,253,2,251,128,123,4,223,245,14,253,14,253,18,5,168,31,253,14,251,140,249,85,81,245,243,255,243,18,21,2,174,29,6,10,6,136,4,81]},{"1846252":[241]},{"1846254":[243,2,18,237,250,85,29,226,10,245,8,247,113,174]},{"1846269":[255]},{"1846271":[255,170,168,170,85]},{"1846277":[255]},{"1846279":[255,136,119]},{"1846283":[247,255]},{"1846286":[235,20,253,2]},{"1846291":[170,93,255]},{"1846295":[255,136,255,85,85,255,255,235,255]},{"1846305":[87]},{"1846307":[170,93]},{"1846312":[136]},{"1846314":[85]},{"1846316":[255]},{"1846318":[235]},{"1846320":[2,253,170,85,93,162]},{"1846327":[255]},{"1846329":[255,93,170]},{"1846333":[255,20,255,170,130,170,17]},{"1846341":[255]},{"1846343":[255,138,117]},{"1846347":[255,255]},{"1846350":[249,6,215,40]},{"1846355":[170,85,255]},{"1846359":[255,138,255,93,93,255,255,249,255]},{"1846369":[125]},{"1846371":[170,85]},{"1846376":[138]},{"1846378":[93]},{"1846380":[255]},{"1846382":[249]},{"1846384":[40,215,238,85,85,170]},{"1846391":[255]},{"1846393":[255,93,162]},{"1846397":[255,6,255,232,136,168,65,6,255,2,255,168,85,33,221,250,4,64,190,155,100,68,232,87,249,3,251,174,252,223,252,251,252,66,253,4,115,66,174,81]},{"1846438":[3,2,172,2,252,2,251,2,67,3,100,155,250,21,81,174,3,252,4,251,220,35]},{"1846461":[255,189,254,255,239,170,85]},{"1846469":[255]},{"1846471":[255,174,81]},{"1846475":[255,255]},{"1846478":[40,215,239,16,68,238,64,255]},{"1846487":[255,174,255,255,255,255,255,168,255]},{"1846497":[16,68,170,64]},{"1846504":[174]},{"1846506":[255]},{"1846508":[255]},{"1846510":[168,128,16,239,238,17,64,191]},{"1846519":[255]},{"1846521":[255,255]},{"1846525":[255,87,255,255,255,34,197]},{"1846533":[255,1,254,175,80,69,255,191,64]},{"1846543":[255,255]},{"1846546":[68,102,69,255,1,255,175,255,255,255,191,255]},{"1846559":[255]},{"1846562":[68,34,69]},{"1846566":[1]},{"1846568":[175]},{"1846570":[255,69,191]},{"1846577":[255,126,153,69,186]},{"1846583":[255]},{"1846585":[255,186,69,64,255,255,255,241,241]},{"1846595":[232,2,254,18,239,255,3,86,253,144,111]},{"1846607":[255,251,4,70,64,82,248,18,252,255,254,252,254,145,255]},{"1846623":[255,4,10,64,6,80]},{"1846630":[16]},{"1846632":[254,2,254,84,145,1]},{"1846640":[4,251,81,191,81,175]},{"1846647":[255]},{"1846649":[255,168,87,110,255,255,255,238,239]},{"1846659":[125]},{"1846661":[255,1,254,238,145,221,127,228,91,72,191,255,1]},{"1846676":[85,255,129,255,238,255,127,127,100,127,32,127]},{"1846689":[17]},{"1846692":[85]},{"1846694":[129,128,238,128,127,221,100,192,96,32,1,254,130,255,85,170]},{"1846711":[255]},{"1846713":[255,34,221,27,255,159,255,255,234,32,147,162,255,17,238,254,1,255,255]},{"1846733":[251,136,255,255]},{"1846739":[32,255,255,27,255,255,255,255,255,68,251]},{"1846751":[254,21,21,32]},{"1846756":[255,166,27,10,255,1,255,255,64,64,35]},{"1846769":[255,76,255,89,166]},{"1846775":[255]},{"1846777":[255]},{"1846779":[255,187,255,221,255,243,226,213,6,13,248,21,234,172,83,221,255]},{"1846797":[175]},{"1846799":[255,251,4,6,209,216,255,190,254,253,255,255,255,80,175]},{"1846815":[234,21,29,211,2,223,10,190,171,253,81,255,255,4]},{"1846830":[191]},{"1846832":[4,251,40,255,208,47]},{"1846839":[255,2,255]},{"1846843":[255,171,255,85,255,170,171,238]},{"1846852":[162,255,81,46,128,255,196,63,32,255,56,255,255]},{"1846867":[238,255,255,123,127,208,255,31,223,112,245,2,248,85,1,238]},{"1846884":[255,239,123,42,208,208,223,31,127,112,245,50]},{"1846897":[255,17,255,16,239,132,255,47,255,32,255,138,255,13,255,170,191,255,4,128,255]},{"1846919":[255]},{"1846921":[255,119,255,1,252,5,170,255]},{"1846930":[4,255,223,255,170,255]},{"1846937":[255,136,170,6]},{"1846942":[250]},{"1846944":[85,21,255,4,223,223,170,170]},{"1846954":[221,136,251,4,85,170]},{"1846961":[255]},{"1846963":[255]},{"1846965":[255,85,255,255,255,34,255,251,255,85,255,168,247,249,86,3,254,9,255]},{"1846985":[255,170,171,21,64,126,128,253]},{"1846994":[80,249,254,255,162,254]},{"1847001":[224,84,171,234,1,129,1,93,95,249,86,255,254,163,162,31]},{"1847018":[1]},{"1847020":[190,64,127,128]},{"1847025":[255]},{"1847027":[255]},{"1847029":[255,92,255,255,255,170,255,190,255,126,255]},{"1847041":[255,213,127,128,247,128,191]},{"1847049":[240,32,175,196,24,2,12,85]},{"1847058":[85,213,93,119,64,172,79,224,82,168,35,27,120,244,85,255,213,85,213,85,187,128,95,64,141,2,255]},{"1847086":[119,136]},{"1847089":[255,42,255,34,255,23,255,191,255,37,255,228,255,3,255]},{"1847105":[255,238,255]},{"1847109":[255,6,248,117]},{"1847114":[23,168,2,2]},{"1847119":[23,84]},{"1847122":[85,255,64,255,1]},{"1847128":[138,10,232]},{"1847132":[242,242,23]},{"1847136":[84,255,255,255,85,64,255]},{"1847144":[255]},{"1847146":[87,168,255,2,255]},{"1847152":[84,171]},{"1847155":[255,170,255,255,255,245,255,87,255,15,255,232,255]},{"1847169":[255,191,241,7,255,254,1,2,10,250]},{"1847180":[42,191,15,255,255]},{"1847186":[64,255]},{"1847189":[69]},{"1847192":[254,246,5,69,191,42,240]},{"1847200":[255,239,254,240,250]},{"1847206":[255]},{"1847208":[247,10,191]},{"1847212":[255,42,255]},{"1847216":[215,40,1,255,189,255,255,255,11,255,186,255,106,255,15,255,1,254,255,255,9,212,168,192,106,15,24]},{"1847244":[209,211,236,239,254]},{"1847251":[187,102,128,22,150,159,154,64,96,166,164,3,16,255,255,238,170,59,68,127]},{"1847272":[255,10,223,32,255,160,255]},{"1847280":[254,1,17,255,187,255,233,255,106,255,159,255,217,255,252,255,21,234,255,255,255]},{"1847304":[255,255]},{"1847307":[95,224,224,129,129,234]},{"1847314":[158,191]},{"1847317":[16,224,224,234,234,95]},{"1847325":[63]},{"1847327":[126,255,255,222]},{"1847332":[239]},{"1847334":[255]},{"1847336":[255,234,255]},{"1847340":[255,160,255]},{"1847344":[234,21,191,97,239,255,31,255,255,255,160,255,255,95,255,254,95,95,43,47,94,120,216,13,242,140,223,145,47,15,255,63,255,255,251,251,223,223,240,253,27,159,40,185,240,239,128,191]},{"1847393":[160,4,212,39,167,255,223,126,119,126,94,96,233,192,192,255,95,255,43,254,89,253,34,255,8,255,32,239]},{"1847422":[255]},{"1847424":[128,144,149,149,5,5,124,125,129,1,208,2,255,170,255,212,247,231,47,159,58,63,130,255,127,127,45,13]},{"1847453":[170]},{"1847455":[212,111,60,218,240,255,205,255,255,128,254,210,223,85,255,43,107,211,255,191,79,63,242,125,130,255,1,223]},{"1847484":[255]},{"1847486":[255]},{"1847490":[64]},{"1847492":[85,95]},{"1847495":[85,87,93,43,47,160,5,80,10,255,255,255,255,170,255,170,255,247,247,251,251,90,90,165,5,255,128,255,64,255,85,255,255,10,170,4,212,165,255,90,95,255,127,255,191,255,170,85,170,255,85,255,43,255]},{"1847550":[95]},{"1847553":[174,160,173]},{"1847557":[187,5]},{"1847560":[224,193,241,128,82,112,181,162,255,255,95,255,228,255,15,5,254,255,253,252,218,216,245,243,255,1,255,162,255,95,245,255,63,43,126,118,44,172,19,83,254,255,253,95,187,228,10,245,255,212,252,139,248,87,243,172,2,225,2,73,36,144,154,32,209,51,192,64,248,16,253,8,243,246,227,239,36,188,223,32,206,191,191,127,255,255,255,255,254,25,247,178,239,231,64,5,191,185,127,69,239,170,247,117,225,255,73,255,144,127,101,250,63,198,127,186,255,85,255,138,1,170,32,117,85]},{"1847686":[255]},{"1847688":[16,254,170,191,5,7,10,10,171,171,244,245,85,85,255]},{"1847704":[239,255,85,255,250,255,245,255,255,85,255,171,255,255]},{"1847720":[255,17,255,170,255,165,255,91,170,255,117,254]},{"1847733":[255]},{"1847735":[255,254,239,255,85,255,90,255,164,21,168,10,64,255]},{"1847750":[80]},{"1847753":[174,128,213,85,127,239,255,189,189,74,74,255,250,251,4,251,255,127,255,170,255,16,255,255,87,255,191,250,250,175]},{"1847784":[255,85,255,170,255,85,255,239,168,255,64,255]},{"1847797":[255,171,255,174,251,213,127,255,170,255,16,126,129,173]},{"1847812":[227,25,6,138,14,236,60,89,56,178,5,37,255,255,174,173,253,163,42,95,154,234,190,223,207,143,218,47,255,127,253,252,163,185,255,10,255,107,223,223,191,77,15,191,128,255]},{"1847859":[255,24,255,160,255,240,159,65,190,194,191,181,74,122,197,127,128,220,34,132,59]},{"1847885":[170]},{"1847887":[80,191,186,255,255,255]},{"1847895":[123]},{"1847900":[85,255,174,254,250,63,255,255,1,34,64]},{"1847912":[255,255,255,255,255,255,255,255,133,127]},{"1847923":[255,35,255,59,255]},{"1847929":[255]},{"1847931":[255,170,85,80,175,128,127,84,171,170,130,128,117,85]},{"1847946":[42]},{"1847952":[255,128,255,84,191,194,10,117,85,85,42,42]},{"1847966":[192,192,128,255,84,255,215]},{"1847976":[255,255,255,255,255,255,255,255,127,255,171,255,151,255,117,255]},{"1847993":[255]},{"1847995":[255]},{"1847997":[255]},{"1847999":[255,21,255,2,255,32,100,1,81,125,3,158,2,64,2,5,129,255,21,255,2,32,187,175,81,127,124,190,159,70,69,169,6,21,234,2,253,255]},{"1848038":[1,1,253,255,223,253,255,251,215,125,255,255,255,255,100,255,80,255,3,254,35,220,1,254,47,208,127,255,105,141,160,225,64,170,45,18,212,129,138]},{"1848080":[255,95,15,185,128,159,191,106,255,40,255,62,31,15,7,2,95,208,59,68,190,192,234,170,168,58,190,149,111,58,250,85,143,255,143,255,1,255]},{"1848119":[255,18,255,129,127,80,239,173,250,254,255,85,95]},{"1848133":[127,5,175,64,168,87]},{"1848140":[138,32]},{"1848144":[254,255,245,85]},{"1848149":[255,250,170,255]},{"1848154":[253,168,255,213,127,127,254]},{"1848162":[255]},{"1848164":[128]},{"1848166":[175,170,23,168,170]},{"1848172":[213,160,255]},{"1848176":[255,255,255,255,127,255]},{"1848183":[255,191,255,2,255,32,255,128,255,171,254,64,239]},{"1848197":[186,119,255]},{"1848202":[226]},{"1848204":[239]},{"1848206":[170]},{"1848208":[171,255,64,127,69,186,136,136,255]},{"1848218":[93]},{"1848220":[186,16,85,85,171]},{"1848226":[208]},{"1848230":[255,136,255]},{"1848234":[191]},{"1848236":[85]},{"1848238":[255]},{"1848240":[254,255,239,255,186,255]},{"1848247":[255,255,255,191,255,69,255,170,255,154,233,20,251,22,188,209,239,24,37,24,46,77,24,239,56,154,247,24,247,67,182,42,182,194,28,203,48,178,12,56,104,150,4,28,24,22,28,251,174,255]},{"1848298":[253,10,219,24,191,16,225,255,227,255,160,255,4,251,227,255,205,247,211,239,191,199,16,239]},{"1848323":[255]},{"1848325":[170,255,255]},{"1848329":[81,139,32,223]},{"1848334":[255]},{"1848336":[16,255]},{"1848339":[255,85,170]},{"1848343":[170,174]},{"1848346":[116,10,32,64]},{"1848351":[5,16]},{"1848358":[255,170,255]},{"1848362":[213,32,191]},{"1848366":[250]},{"1848368":[239,255,255,255,170,255]},{"1848375":[255,255,255,213,255,191,255,250,255]},{"1848385":[255]},{"1848387":[255]},{"1848389":[170,255,255,1,80,159,32,221]},{"1848398":[80]},{"1848401":[255]},{"1848403":[230,85,170]},{"1848407":[170,174]},{"1848410":[96]},{"1848412":[34,247,5,239]},{"1848418":[25]},{"1848422":[87,2,255]},{"1848426":[223,32,42]},{"1848430":[21,170,255,255,255,255,170,255,168,255,255,255,223,255,8,255,16,255]},{"1848449":[254,1,255,29,29,188,255,66,20,253,2,83]},{"1848462":[5,4,2,253,2,232,228,7,12,241,188,3,1,14,168,238,80,254,3,2,23,3,31,2,190,255,234,23,242]},{"1848492":[185,4,81,175,253,254,252,254,7,248,77,177,235,253,241,255,16,254]},{"1848511":[251,128,255]},{"1848515":[255,53,253,175,183,71,240,213,192,192,128,135,135,128,254,128,64,118,140,54,193,88,163,64,106,42,127,80,63,129,128,191,128,245,56,255,47,236,80,213,170,170,213,208,239,127,255,127,255,252,131,214,41,204,191,85,63]},{"1848573":[127,64,56]},{"1848577":[255]},{"1848579":[255]},{"1848581":[95,255,255,255]},{"1848586":[85]},{"1848590":[85,85]},{"1848593":[159,2]},{"1848596":[160,95,101,239]},{"1848601":[134]},{"1848603":[255,170,255]},{"1848607":[255,96]},{"1848610":[253,2,95]},{"1848614":[245,128,121]},{"1848619":[170,170,85]},{"1848623":[255,255,255,253,255]},{"1848629":[255,111,154,121,255]},{"1848635":[255]},{"1848637":[255]},{"1848639":[170]},{"1848641":[255]},{"1848643":[255]},{"1848645":[255,239,255,250,4,68]},{"1848652":[170,42,85,85]},{"1848657":[95,42]},{"1848661":[255,67,255,4,251]},{"1848667":[255]},{"1848669":[255]},{"1848671":[255,160]},{"1848674":[213,42,255]},{"1848678":[83]},{"1848681":[5]},{"1848683":[187]},{"1848685":[127]},{"1848687":[255,255,255,213,255]},{"1848693":[255,239,188]},{"1848697":[255]},{"1848699":[255]},{"1848701":[213]},{"1848703":[170,224,191,96,255,112,255,254,255,154,60,24,28,164,160,89,91]},{"1848721":[87,41,210,96,223,54,206,60,203,28,243,24,231,12,243,249]},{"1848738":[246,105,255,48,63,57,24,117,24,239,24,239,4,255,14,255,36,223,96,159,246,201,24,231,24,231,24,71,4,170]},{"1848769":[255]},{"1848771":[255]},{"1848773":[255,248,255,170]},{"1848780":[186,186,21,183]},{"1848785":[85,59,128,20,235,136,248]},{"1848793":[255]},{"1848795":[255]},{"1848797":[255,162,255,255]},{"1848802":[196,59,235,20,143,7]},{"1848809":[85]},{"1848811":[255]},{"1848813":[255]},{"1848815":[93,170,255,68,255]},{"1848821":[255,248,119]},{"1848825":[255]},{"1848827":[255]},{"1848829":[85]},{"1848831":[234]},{"1848833":[255]},{"1848835":[255]},{"1848837":[255,20,255,170,2,69,69,171,175,87,125,5,80,255]},{"1848852":[111,144]},{"1848855":[20]},{"1848857":[255]},{"1848859":[255,4,255,42,253,250,5]},{"1848867":[255,144,111,235,235]},{"1848873":[87]},{"1848875":[255]},{"1848877":[251,2,213,170,255]},{"1848883":[255]},{"1848885":[255,20,255]},{"1848889":[253]},{"1848891":[186]},{"1848893":[84,2,170,26,253,77,190,6,223,3,253,173,45,87,215,191,255,84,255,93,24,190,13,251,6,17,7,3,252,128,255,64,255,171,255,186,69,76,178,38,221,233,254,2,125]},{"1848939":[127]},{"1848941":[191,1,84,186,231,76,243,34,221,1,254,2,209]},{"1848955":[169]},{"1848957":[64]},{"1848959":[171,191,64,85,128,42,64]},{"1848967":[224,127,127,158,255,234,245,101,250,64,51,128,47,192,63,95,170,128,127,161,127,85,181,186,218,140,64,80,170,128,85,21,224,128,127,1,222,21,234,2,101,140,255,80,255,128,127,31,234,128]},{"1849019":[225]},{"1849021":[245]},{"1849023":[250,208]},{"1849026":[2,2,191,159,33,33,254,219,213,170,172,64,64,232,47,47,84,254]},{"1849045":[255,80,175,1,219,42,170,83,83,255,255,255]},{"1849058":[85,170]},{"1849061":[223,80,175,139,116,42,213,64,188,168,64,208,255,1,253]},{"1849077":[96,80,174]},{"1849081":[139]},{"1849083":[42]},{"1849085":[83]},{"1849087":[191,4]},{"1849090":[3,6,255,255,127,126,164,164,64]},{"1849100":[1,1,22]},{"1849104":[130,133,4,3]},{"1849109":[255]},{"1849111":[254,81,245,186,186,212,213,232,232,250,1,252,2,46,209]},{"1849127":[255,174,81,5,234,42,68,23,190,122,253,248,253]},{"1849141":[46]},{"1849143":[128,10,245,5,186,42,213,1,232,1,255,143,127,243,63,213,221,124,127,170,163,80,112,168,252,254]},{"1849170":[112,128,12,240,42,223]},{"1849177":[59,4,165,6,54,83,255,255]},{"1849186":[122,5,60,3,45,210,171,87,81,11,169,96,4,4,1,255,10,255]},{"1849205":[255,32,15,128,108,80,166,137,86,80,171,255,95,122,250,253,255,7,39,5,240,59,193,5,209,254,128,160,160,128,5]},{"1849237":[2,168,136,5,240,58,192,6,208,127,128,95,10,160,90,2,255,112,143,245,250,251,196,213,250,126,1,255,85,32,255]},{"1849269":[253,80,175,5]},{"1849274":[59]},{"1849276":[5]},{"1849278":[126,128,171,171]},{"1849285":[170,160,245,93,93,234,74,66,64,133,132]},{"1849297":[84]},{"1849299":[255]},{"1849301":[255]},{"1849303":[95,10,8,180]},{"1849308":[182]},{"1849310":[125,4,171,170,5]},{"1849316":[170,170,85,245,93,162,235,21,73,189,130,122,171,85,5,255]},{"1849333":[85]},{"1849335":[170,85]},{"1849338":[234]},{"1849340":[64]},{"1849342":[132]},{"1849344":[231,239,71,103,17,57]},{"1849351":[6,13,4,4]},{"1849356":[175]},{"1849358":[87]},{"1849361":[16,32,152]},{"1849365":[108]},{"1849367":[174,9]},{"1849370":[5]},{"1849372":[175]},{"1849374":[81,6,63,224,39,64,41,186,6,87,245,242,250,251,80,123,168,191,63,208,7,248,1,84]},{"1849399":[168,5]},{"1849408":[21,255,221,194,93,255,138,127]},{"1849417":[255,224,127,224,31,240,95]},{"1849425":[255,32,192]},{"1849429":[255]},{"1849431":[255]},{"1849433":[255]},{"1849435":[159]},{"1849437":[255]},{"1849439":[175]},{"1849442":[31,95]},{"1849445":[5]},{"1849456":[125]},{"1849458":[223]},{"1849460":[93]},{"1849462":[127]},{"1849464":[255]},{"1849466":[127]},{"1849468":[31]},{"1849470":[95]},{"1849472":[127,254,67,172,251,250,175,255,21,255,43,255,5,255,170,255]},{"1849489":[254,19,19,4,250]},{"1849495":[255]},{"1849497":[255]},{"1849499":[255]},{"1849501":[255]},{"1849503":[255,1,9,239,253,1,187]},{"1849511":[11]},{"1849520":[127]},{"1849522":[255,2,251]},{"1849526":[175]},{"1849528":[189]},{"1849530":[107]},{"1849532":[175]},{"1849534":[234]},{"1849536":[254,169,240,128,161,244,253,246,123,253,255,241,115,231,199,207]},{"1849553":[168,255,255,11,171,1,244,2,249,14,251,24,251,48,247,87,255,127,127,85,255,10,203,5,111,10,191,28,111,56,127,255]},{"1849586":[255,128,255]},{"1849590":[255]},{"1849592":[127]},{"1849594":[255]},{"1849596":[127,16,255]},{"1849600":[129,131,197,139,159]},{"1849606":[85,56,254,171,85,86,251,250,85,85,101,229,100,139,191,63,66,80]},{"1849625":[170,168,84,4,250,170,85,38,230,139,239,63,191,109,125,85,255,3,87,1,251]},{"1849647":[69,231,25,239,16,191,64,125,128,255]},{"1849658":[87]},{"1849660":[251]},{"1849662":[85]},{"1849664":[215,172,70,253,128]},{"1849670":[10,175,168,221,64,171,170,183,81,11,87,215]},{"1849683":[253,255,255,90,90,2,138,20,20,64,162,164,1,123,248,255,253,255,255,165,245,117,255,235,255,29,191,90,91,255,7,255]},{"1849716":[255]},{"1849718":[255,10,255]},{"1849722":[255]},{"1849724":[191]},{"1849726":[91]},{"1849728":[232]},{"1849730":[162,80,95,93,191,209,20,111,42,191,128,85,16,238,255,255]},{"1849747":[80,162,253,191,191,148,148,106,106,42,42,1,1,255,255,242,80,253,255,110,110,123,251,149,213,213,255,254,255,255]},{"1849778":[242,13,255]},{"1849782":[255,145,255,4,255,42,255]},{"1849790":[255]},{"1849792":[20,22,3]},{"1849796":[171,217,254,10,117,152,169,64,85,139,138,39,234,254,42]},{"1849812":[33,217,247,250,107,97,183,163,77,69,186,170,255,189,132,172,216,249,252,251,241,251,227,247,198,206,173,189,254,67,40,215,249,6,251,4,251,4,247,8,207,49,191,66,182,30,98,128,80,42,239,175,237,5,247,162,95,224,255,162,105,63,127,128,128,42,80,80,250,250,253,253,95,95,255,255,63,55,64,157,126,174,255,255,255,239,95,87,191,191,93,93,30,233,157,98,250,5,255]},{"1849912":[255,16,255,168,255,64,255,162,170,234,149]},{"1849924":[32]},{"1849926":[255,255,95,95,255,191,253,21,255,175,21,255,255,42,5]},{"1849943":[127,160,191,64,77,234,234,80,80,255,255,42,64,48,21,255,255,255,255,255,255,255,255,255,255,234,21,64,191,37,218,255]},{"1849976":[255]},{"1849978":[255]},{"1849980":[255]},{"1849982":[255]},{"1849984":[128,168,85]},{"1849990":[125,125,255,255,255,255,255,255,255,255,86,254,255,170,85]},{"1850006":[130,255]},{"1850009":[255]},{"1850011":[151]},{"1850013":[183]},{"1850015":[35,255,255,175]},{"1850020":[40,125,255,255,255,255,255,255,255,255,255,255,168,87]},{"1850035":[255,85,170,125,130,255]},{"1850042":[255]},{"1850044":[255]},{"1850046":[255]},{"1850048":[10,1,241,10,24,18,8,58,249,180,159,226,247,155,23,101,9,4,91,4,255,30,255,193,111,235,69,149,12,167,154,111,254,245,255,10,2,251,247,205,178,158,170,248,211,251,221,61,4,249,174,241,251]},{"1850102":[28,227,237,2,215,26,175,96,247,104]},{"1850114":[160,10]},{"1850117":[10]},{"1850119":[138,77,1,103,34,255,136,251,234,20]},{"1850130":[95,160,255,85,250,112,242,242,216,216,118,254,21,85,235,254,85,10,85,170,255,117,191,178,191,152,137,136,238,68,21,235,85,255,170,85]},{"1850167":[255,77,179,103,186,255]},{"1850174":[251,174]},{"1850178":[20,171,1,32]},{"1850183":[255,160,87,4,171,106,85,187,174,127,21,239,16,254,223,255]},{"1850200":[87]},{"1850202":[251,80,149,128,68,64,149,234,68,171,222,32,255]},{"1850216":[255,8,255,80,255,128,255,64,106,149,64,255,32,223]},{"1850231":[255,160,95,4,251,106,213,187,238]},{"1850243":[255,87]},{"1850247":[64,2,98]},{"1850251":[253,160,95]},{"1850255":[255,255,127,245,10,168,255,66,2,232,2,253]},{"1850268":[95]},{"1850270":[255]},{"1850272":[127,128,10,245,168]},{"1850278":[255]},{"1850280":[119,136,255]},{"1850284":[255]},{"1850286":[255]},{"1850288":[128,127]},{"1850291":[255]},{"1850293":[255,189,255,157,119,2,255,160,95]},{"1850303":[255,120,56,112,255,191,80,58,122,170,218,53,69,255,255,212,255,191,239,243,68,64,190,245,159,80,170]},{"1850331":[53,96,255,75,212,183,24,60,251,49,112,181,106,175,112,207,96,239,16,127,160,56,199,112,143,33,223,48,197,37,223,138,255,96,143,64,63,85]},{"1850371":[187,255]},{"1850374":[170,170,171,171,87,87,175,255,179,255,170,251,255]},{"1850389":[255]},{"1850391":[170]},{"1850393":[171]},{"1850395":[87,80,175,76,179,174]},{"1850402":[68,187]},{"1850406":[85,170,254,1,253,2,255]},{"1850414":[255]},{"1850416":[4,255,68,187]},{"1850421":[255,85,85,84,254,168,253]},{"1850429":[255]},{"1850431":[255,85,21]},{"1850435":[170,174,4,171,169,191,191,125,95,171,255,85,213,170,255,255]},{"1850453":[255,2,169]},{"1850457":[191,34,95,84,171,170,255,170,21,85,170]},{"1850469":[85,87,168,239,16,255]},{"1850476":[255]},{"1850478":[213,42]},{"1850481":[234,85,170]},{"1850485":[251,86,87,64,239,160,255]},{"1850493":[255]},{"1850495":[255,85,84,1,33,186,138,255,85,255,255,81,255,186,186,85,215,170,255,119,139,1,254,170,85]},{"1850521":[255,174,251,69,255,170,255,170,85,85,168,1,206,254,1,254,1,255]},{"1850540":[186,69,215,40]},{"1850545":[171,87,170,1,116,170,254]},{"1850553":[254]},{"1850555":[255]},{"1850557":[255]},{"1850559":[255,181,53,64,32,95,95,221,146,43,63,20,191,74,31,96,250,192,181,148,171,96,223,138,178,212,63,75,63,53,223,255,159,74,245,84,107,32,159,90,101,222,225,223,224,63,192,26,101,202,10,20,107,32,64,8,250,64,62,64,191,32,223]},{"1850623":[255,87,87,4,6,251,251,240,63,170,221,64,191,170,117,16,170]},{"1850641":[87,64,191]},{"1850645":[255,143,63,85,221,191,191,85,117,239,239,168,87,64,191]},{"1850661":[255,143,112,221,34,191,64,117,138,170,81,168,168,64,191]},{"1850677":[4,128,143]},{"1850681":[221]},{"1850683":[191]},{"1850685":[117]},{"1850687":[239,255,255,65,107,170,191,10,255,152,119,2,255,34,221]},{"1850703":[255]},{"1850705":[255]},{"1850707":[255,21,255,245,255,103,119,253,255,221,221,255,255]},{"1850721":[255]},{"1850723":[255]},{"1850725":[234,245,10,103,152,253,2,221,34,255]},{"1850739":[255]},{"1850741":[85]},{"1850743":[245]},{"1850745":[103]},{"1850747":[253]},{"1850749":[221]},{"1850751":[255,242,243,84,253,174,254,244,254,3,255,1,255,42,247,1,255,15,241,6,249,83,252,9,254,253,254,254,255,247,247,255,255,12,246,2,255,1,175,1,247,252,3,252,1,212,42,254,1,12,3,2,253]},{"1850805":[86]},{"1850807":[10]},{"1850809":[253]},{"1850811":[255]},{"1850813":[213]},{"1850815":[254,239,250,87,253,162,255,1,255,202,191,198,253,11,191,221,119,21,250,2,255,93,255,126,255,255,63,191,125,63,191,223,183,5,234]},{"1850851":[255]},{"1850853":[162,84,129,116,138,27,196,116,139,10,245,5,21]},{"1850867":[255]},{"1850869":[221]},{"1850871":[254,64,245,2,251]},{"1850877":[244,8,234,173,250,255,85,32,255,41,215,175,255,117,223,191,255,215,127,87,250,170,255,223,255,255,215,255,255,255,223,255,255,255,127,7,168]},{"1850915":[255]},{"1850917":[32,124,1,80,175,170,85,64,191,168,87,5,87]},{"1850931":[255]},{"1850933":[223,40,254]},{"1850937":[80,32,170]},{"1850941":[64,128,168,136,255,234,127,34,255,221,119,255,255,93,255,255,255,87,255,119,255,149,255,255,255,255,127,255,255,255,255,255,255,255,255,119,136]},{"1850979":[234,8,34,130,85]},{"1850985":[255,160,95]},{"1850989":[255]},{"1850991":[255]},{"1850993":[119]},{"1850995":[255]},{"1850997":[221,128,170]},{"1851003":[162]},{"1851007":[168,170,127]},{"1851011":[255,179,255,121,255,164,167,72,235,145,145,224,224,79,127,231,255,251,255,253,255,247,247,251,251,213,213,232,232,69,186,1,24]},{"1851045":[183,128,123,2,174,1,239]},{"1851053":[187]},{"1851055":[247]},{"1851057":[117]},{"1851059":[239]},{"1851061":[72]},{"1851063":[132]},{"1851065":[89]},{"1851067":[182]},{"1851069":[110]},{"1851071":[31,64,64,93,255,248,248,2,3,17,63,10,27,5,221,10,255,255,255,255,255,253,253,239,238,126,81,191,170,250,197,253,235]},{"1851105":[64,2,93,2,248,2,17,16,174,14,213,226,250,104,244]},{"1851121":[191]},{"1851123":[162]},{"1851125":[5]},{"1851127":[254]},{"1851129":[209]},{"1851131":[110]},{"1851133":[39,1,138,181,7,240,240,5,47,168,255,64,255,160,191]},{"1851149":[255,129,62,66,71,254,254,122,85,87,175,191,95,95,191,252,124,255,62,184,176]},{"1851171":[241]},{"1851173":[170]},{"1851175":[80]},{"1851177":[160,64,64,3,128,65,192,10,69]},{"1851187":[15]},{"1851189":[213,7,168,31,64,31,224,124,3,190,192,2,253,10,95,2,253,30,224,170,80,95,160,191,96,93,161,255,252,245,171,255,61,255,224,165]},{"1851226":[218,128,128,32,75,1,2,1]},{"1851235":[84,2,192,30,1,250,5,127]},{"1851244":[255]},{"1851246":[252,2,254]},{"1851250":[1,170,61]},{"1851254":[234]},{"1851257":[90,138,37]},{"1851261":[95,9,180,240,64,134,152,200,48,149,137,187,55,93,91,255,159,127,126,63,64,63,184,255]},{"1851286":[251,9,113,51,252,89,190,159,255,126,176,143,70,1,200,55,148,98,142,64,7,164,97,32]},{"1851311":[129,16,64,26,160,64]},{"1851318":[9,132,49,140,88,2,158,64,126]},{"1851328":[191,16,164,4,191,148,255,232,255,68,254,177,252,67,122,45,255,16,255,4,255,148,255,232,255,68,255,176,127,64,191,40]},{"1851361":[66,160,91]},{"1851365":[67]},{"1851367":[23]},{"1851369":[191,1,94,131,60,69,154,16]},{"1851378":[164]},{"1851380":[148]},{"1851382":[232]},{"1851384":[64,4,160,16,64,128,32,72,248]},{"1851394":[127,42,253,2,229,17,18,239,140,87,51,239,41,215,239,16,255,42,255]},{"1851414":[186,68,237,16,242,9,192,28,192,62,7,248]},{"1851427":[149,2,253,95,160,255]},{"1851434":[127,128,255]},{"1851438":[255]},{"1851442":[42]},{"1851446":[68]},{"1851448":[16]},{"1851450":[9]},{"1851452":[28]},{"1851454":[62]},{"1851456":[240,239,43,255,5,255,255,175,238,255,235,92,251,213,252,61]},{"1851473":[31]},{"1851475":[255]},{"1851477":[255]},{"1851479":[80,128,17]},{"1851483":[183,128,46]},{"1851487":[195]},{"1851491":[11]},{"1851504":[239]},{"1851506":[43]},{"1851508":[239]},{"1851510":[175]},{"1851512":[127]},{"1851514":[92]},{"1851516":[85]},{"1851518":[60]},{"1851520":[1,255,212,223,91,252,5,243,9,235,138,255,48,255,106,255]},{"1851537":[255,32,212,3,251,12,117,20,235]},{"1851547":[79]},{"1851549":[191]},{"1851551":[127]},{"1851554":[11,223,7,94,6,7]},{"1851561":[8,48,56,64,112,128,192,235]},{"1851570":[223]},{"1851572":[95,1,215]},{"1851576":[201]},{"1851578":[186]},{"1851580":[122]},{"1851582":[254]},{"1851584":[149,191,2,61,170,175,174,255,85,255,170,255,85,255,174,255,64,223,194,194,80,170]},{"1851607":[255]},{"1851609":[255]},{"1851611":[255]},{"1851613":[255]},{"1851615":[255,96,245,255,253,5,175]},{"1851623":[6]},{"1851625":[1]},{"1851627":[40]},{"1851629":[5]},{"1851631":[12,245]},{"1851634":[255,2,175]},{"1851638":[174]},{"1851640":[85]},{"1851642":[170]},{"1851644":[85]},{"1851646":[174]},{"1851648":[127,255,254]},{"1851652":[160,255,247,247,85,255,221,221,85,255,175,255]},{"1851665":[255,255,255]},{"1851669":[160,8,247]},{"1851673":[255,34,221]},{"1851677":[255]},{"1851679":[255]},{"1851681":[127,255,89,95,255]},{"1851687":[119]},{"1851689":[68]},{"1851691":[221]},{"1851693":[1]},{"1851695":[165,127]},{"1851698":[255,166,255]},{"1851702":[247]},{"1851704":[85]},{"1851706":[221]},{"1851708":[85]},{"1851710":[175]},{"1851712":[238,186,235,2,71,184,85,85,118,254,85,85,219,251,117,117,1,170,253,246,71,71,170,85,1,254,170,85,4,251,138,117,84,254,246,255,255,255]},{"1851751":[85]},{"1851753":[38]},{"1851755":[85]},{"1851757":[219]},{"1851759":[117,254]},{"1851762":[255]},{"1851764":[255]},{"1851766":[85]},{"1851768":[118]},{"1851770":[85]},{"1851772":[219]},{"1851774":[117]},{"1851776":[170,221,252,170,245,2,86,1,233,160,67,80,134,162,13,69]},{"1851793":[136,84,170,253,254,175,4,29,169,170,66,69,134,138,5,119,255,170,254,255,254,84,85,73,236,19,27,36,38,64,76,255]},{"1851826":[254,1,254,1,85,2,237,3,91,4,166,24,77,48,80,135,235,20,69,64,128,47,168,128,64]},{"1851852":[170,168,85,84,120,152,192,20,191,122,208,144,87,130,191,5,85,173,170,84,215,191,255,20,122,255,175,191,40,170,64,69,2,167,1,17,191,64,63,192,255]},{"1851894":[191]},{"1851896":[170]},{"1851898":[69]},{"1851900":[175]},{"1851902":[85]},{"1851904":[87,168,245]},{"1851908":[255,69]},{"1851911":[255]},{"1851913":[23]},{"1851915":[43]},{"1851917":[5]},{"1851919":[10,87,87]},{"1851924":[186,69]},{"1851928":[232,104,212,64,250,2,245,1,255,255,245]},{"1851940":[69,255,255,255,23,127,43,107,5,7,10,11,255]},{"1851954":[245,10,255]},{"1851958":[255]},{"1851960":[127]},{"1851962":[107]},{"1851964":[7]},{"1851966":[11]},{"1851968":[255,1,132,42,191,18,175,248]},{"1851977":[255,34,255]},{"1851981":[95]},{"1851983":[175,254,254,42]},{"1851988":[232,82,175,175]},{"1851994":[34,34,160,32,80,16,255,255,174]},{"1852004":[87,250,87,87,255,254,221,221,95,123,175,181,255]},{"1852018":[132,123,191,64,255,168,255]},{"1852026":[255,34,127]},{"1852030":[191]},{"1852032":[254,87,11,180,241,15,254,15,108,145,8,240,12,245,31,226,169,166,180,14,6,2,242,243,108,111,14,11,13,3,23,26,246,255,135,54,249,7,253,254,249,234,252,73,245,239,244,87,255]},{"1852082":[54,200,244]},{"1852086":[255,1,253,1,252]},{"1852092":[253]},{"1852094":[247,8,176,13,206,176,27,65,63,110,255,87,111,191,247,13,159,235,95,104,204,53,157,243,81,192,170,42,68,68,242,242,21,21,249,126,210,229,207,190,46,255,255,253,255,107,255,247,255,158,30,1,252,248,79,64,191,128,253]},{"1852154":[123]},{"1852156":[255]},{"1852158":[254]},{"1852160":[255,42,199,32,5,191,255,239,255,213,221,221,255,247,255,255,85,127,24,71,250,133,16]},{"1852184":[170,128]},{"1852187":[34,170,162,16,16,170,42,248,224,69,186,229,255,213,127,221,221,247,93,255,239,255]},{"1852210":[88,167,122,5,245,10,127]},{"1852218":[221,34,93]},{"1852222":[239]},{"1852224":[207,129,250,39,93,253,255,218,255,98,119,51,251,81,85,84,112,240,5,250,162,93,37,37,157,21,68,136,170,4,1,170,191,176]},{"1852259":[39,93,162,90,208,98,234,17,119,81,251,84,85,207,49,5,216,162,93,127,138,255]},{"1852282":[85,170,251,4,85,170,170,85,187,212,251,255,254,171,255,137,255,107,255,95,127,107,87,2,68,187,4,251,84,84,118,119,148,149,160,1,20,133,253]},{"1852323":[212,255]},{"1852326":[169,2,137,136,65,106,10,255,64,123,170,85,68,43]},{"1852341":[255,252,170,254,1,212,43,170,84,84,170,145,95,31,119,63,95,53,255,31,53,95,171,127,85,123,106,38,145,128,31,128,63,10,32,202,10,52,84,170,106,145,85,127,64,224,119,223,64,234,213,224,21,160,139,128,85,192,42,32,215,128,104,128,127]},{"1852407":[255,202,21,20,235,170,21,145,110,125,255,255,183,255,255,85,255,253,85,223,187,247,93,255,239,130,125]},{"1852435":[255]},{"1852437":[255,170]},{"1852440":[168,168,100,68,162,170,16,16,255]},{"1852451":[183,186,69,170,85,2,85,32,155,8,93]},{"1852463":[239]},{"1852465":[255]},{"1852467":[72]},{"1852469":[186]},{"1852471":[255,170,85,68,187,162,85,16,239,252,254,255,95,255,238,68,228,85,85,187,187,213,213,255,255,3,253]},{"1852499":[255]},{"1852501":[238,170,10]},{"1852512":[254,1]},{"1852515":[95,170,85,177,78,170,85,68,187,42,213]},{"1852527":[255]},{"1852529":[255]},{"1852531":[160]},{"1852533":[170,17,238,170,85,68,187,42,213]},{"1852543":[255,102,102,253,255,251,172,4,4,85,85,185,185,85,85,238,238,17,119,2,255,4,172,170,170]},{"1852570":[2,2]},{"1852576":[238,17]},{"1852579":[253,172,83,81,174,170,85,68,187,170,85,17,238,136,119]},{"1852595":[2]},{"1852597":[172,81,174,170,85,68,187,170,85,17,238,158,122,61,255,202,117,80,112,112,112,80,48,89,25,182,190,1,123,162,223,53,117,142,254,5,117,138,186,36,29,8,62,10,245]},{"1852643":[125,5,234,1,250,138,117,5,250,170,84,73,176]},{"1852657":[107]},{"1852659":[226]},{"1852661":[85,1,238,138,53,5,186,162,29,65,190,136,133,85,255,170,85,4]},{"1852686":[4]},{"1852688":[119,247,170,255,85,85,251,251,85,85,187,187,85,85,170,170,133,88]},{"1852707":[85,85,170]},{"1852711":[174,170,16,68,170,170,84,85,174]},{"1852721":[247]},{"1852723":[170]},{"1852725":[85]},{"1852727":[251,170,85,68,187,170,85,81,170,138,87,64,255,170,85]},{"1852743":[10]},{"1852750":[64]},{"1852752":[119,119,191,255,85,85,255,255,95,95,255,255,95,95,191,191,85,138,4,64,85,170,10,128,160]},{"1852779":[32,160,64,64,200]},{"1852785":[117]},{"1852787":[191]},{"1852789":[85]},{"1852791":[255,160,95]},{"1852795":[255,160,95]},{"1852799":[191,170,127]},{"1852803":[255,170,127,5,175,3,3]},{"1852812":[1,1]},{"1852816":[127,127,255,255,127,127,255,255,255,255,255,255,255,255,255,255,85,170]},{"1852836":[16,170,170,5]},{"1852841":[3]},{"1852845":[1]},{"1852849":[85]},{"1852851":[255]},{"1852853":[85]},{"1852855":[250]},{"1852857":[252]},{"1852859":[255]},{"1852861":[254]},{"1852863":[255,239,255]},{"1852867":[223,146,255,86,254,115,127,200,222,103,111]},{"1852879":[14,159,159,143,223,207,239,239,239,231,255,243,247,243,251,251,255]},{"1852897":[239,32,80]},{"1852901":[178,128,86]},{"1852905":[123,2,204]},{"1852909":[111]},{"1852911":[4]},{"1852913":[16]},{"1852915":[175]},{"1852917":[77]},{"1852919":[169]},{"1852921":[148]},{"1852923":[51]},{"1852925":[144]},{"1852927":[251,255,255,130,56,171,171,247,255,248,248,248,248,72,64,1]},{"1852944":[255,255,255,255,255,255,255,255,253,253,250,250,246,246,254,254]},{"1852961":[255]},{"1852963":[69]},{"1852965":[255]},{"1852967":[255]},{"1852969":[250,5,248,10,73,1,1]},{"1852979":[186]},{"1852983":[8]},{"1852985":[7]},{"1852987":[2]},{"1852989":[181]},{"1852991":[254,181,181,167,21,255,255,64,64,16,16]},{"1853005":[2,66,23,245,245,255,255,255,255,234,234,16,16,170,170,110,68,191,170]},{"1853025":[191,16,93]},{"1853029":[255,4,81,128,127]},{"1853035":[85,40,187,66,85]},{"1853041":[74]},{"1853043":[162]},{"1853047":[187]},{"1853049":[111]},{"1853051":[255]},{"1853053":[253]},{"1853055":[170]},{"1853058":[93,255,244,244,10,30]},{"1853065":[41,42,58,64,226,170,235,24,24,255,255,244,244,157,138,175]},{"1853082":[125,42,255,64,213,171,8,231,162,255]},{"1853093":[255,9,117,134,255,109,213,93,191,148,84]},{"1853105":[247]},{"1853109":[11]},{"1853111":[235]},{"1853113":[214]},{"1853115":[239]},{"1853117":[93,1,190,112,123,200,248,28,28,172,173]},{"1853129":[168,130,186]},{"1853133":[238,128,118,255,113,249,248,63,60,223,173,249]},{"1853146":[126,186,254,236,249,112,132,254,53,251,35,223,210,94,81,255,68,71,17,18,15,137,1,132]},{"1853171":[3]},{"1853173":[195,1,242]},{"1853177":[87,56,197,236,16,240,143,10,245,8,14,2,161,21,107,175,82,85,174,47,80,23,56,90,80,119,14,255,1,244,97,164,2,208,132,228,192,96,48,175]},{"1853218":[113,241,94,252,159,128,255]},{"1853226":[127]},{"1853228":[191]},{"1853230":[223,64,80,165,6,249,1,92,96,138]},{"1853241":[89,128,43,64,27,32,79,255,65,21,138,191,108,87,135,255,21,255,43,255,85,127,63,1,65,244,128,128,44,47,7,31,21,47,43,95,85,191,63,254]},{"1853282":[127,96,255]},{"1853286":[208,40,234,10,212,4,170,10,64,128,1,190,128,107]},{"1853301":[83,7,208,21,224,43,208,85,160,63,64,255,124,255,27,255,23,255,251,255,214,255,238,253,234,254,253,255,124,31,27,63,23,255,251,255,214,255,238,255,232,255,252,128,139,228,4,232,42]},{"1853351":[21]},{"1853353":[175]},{"1853355":[85,2,61,1,22,116,8,27,224,21,194,234,17,80,134,170,68,192,40,232,20,240,95,255,170,254,79,239,190,77,242,176,207,80,239,144,239,255,80,239,170,255,78,255,174,243,76,239,144,236,83,238,145,47,160,80,69,1,186,16,237,191,65,95,160,191,64,127,128,80]},{"1853426":[170,16,68,10,2,172,12,64,16,128,19,64,17,128,7,255,178,237,36,223,138,126]},{"1853449":[244,224,218,64,248,4,252,192,56,236,179,192,59]},{"1853463":[245,192,63,192,255,112,207,184,67,255]},{"1853474":[95,160,255]},{"1853478":[255]},{"1853480":[255]},{"1853482":[63,192,191,64,255]},{"1853488":[56]},{"1853490":[19,160,59]},{"1853494":[244]},{"1853496":[52]},{"1853498":[58,192,136,64,64]},{"1853504":[120,222,244,221,236,159,181,245,72,255,63,209,127,177,255,253,129,38,66,37]},{"1853525":[127,10,245]},{"1853529":[247]},{"1853531":[238,32,206]},{"1853535":[2]},{"1853539":[4]},{"1853541":[12]},{"1853543":[53]},{"1853545":[64]},{"1853552":[92]},{"1853554":[156]},{"1853556":[159]},{"1853558":[181]},{"1853560":[222]},{"1853562":[17]},{"1853564":[145]},{"1853566":[253]},{"1853568":[1,255]},{"1853571":[255]},{"1853573":[255,16,31,5,255,192,255,64,127,16,223]},{"1853585":[255]},{"1853587":[255]},{"1853589":[255,224,16]},{"1853593":[255]},{"1853595":[29]},{"1853597":[191]},{"1853599":[103]},{"1853606":[15,31]},{"1853609":[1]},{"1853616":[127]},{"1853618":[244]},{"1853620":[248]},{"1853622":[31]},{"1853624":[133]},{"1853626":[255]},{"1853628":[127]},{"1853630":[223]},{"1853632":[21,255,170,255,85,255,175,80,118,254,34,255]},{"1853645":[255,10,255]},{"1853649":[255]},{"1853651":[255]},{"1853653":[255,175,175,1,254]},{"1853659":[255]},{"1853661":[255]},{"1853663":[255]},{"1853665":[16]},{"1853667":[42]},{"1853669":[5,255,222]},{"1853673":[118]},{"1853680":[149]},{"1853682":[170]},{"1853684":[85]},{"1853686":[255,33,118]},{"1853690":[34]},{"1853692":[160]},{"1853694":[10]},{"1853696":[21,255,185,253,89,251,234]},{"1853704":[170,170,170,255,84,255,170,255]},{"1853713":[255,2,253,4,251,255,245,85,170]},{"1853723":[255]},{"1853725":[255]},{"1853727":[255]},{"1853729":[20]},{"1853731":[185]},{"1853733":[89,245,223]},{"1853737":[170]},{"1853739":[32]},{"1853741":[84]},{"1853744":[21]},{"1853746":[185]},{"1853748":[89]},{"1853750":[255,32,170]},{"1853754":[170]},{"1853756":[84]},{"1853758":[170]},{"1853760":[85,255,156,220,139,170,191,136,173,170,175,241,78,243,154,235]},{"1853777":[255,35,220,85,170,116,200,85,170,10,249,12,227,20,203]},{"1853793":[68]},{"1853795":[148]},{"1853797":[139,203,252,2,175,12,171,16,94,40,184,85]},{"1853810":[156]},{"1853812":[139]},{"1853814":[255]},{"1853816":[175]},{"1853818":[175]},{"1853820":[94]},{"1853822":[186]},{"1853824":[222,142,181,21,106,42,254,33,170,185,170,255,68,255,170,255,17,158,42,21,85,42,84,33,68,168]},{"1853851":[255]},{"1853853":[255]},{"1853855":[255,80,158,128,36]},{"1853861":[106,171,117,19,187]},{"1853872":[222,32,181,64,106,128,255]},{"1853880":[187]},{"1853882":[170]},{"1853884":[68]},{"1853886":[170]},{"1853888":[238,238,85,85,170,162,174,81]},{"1853897":[81,137,221,68,255,170,255,17,238,170,85,85,163]},{"1853911":[81,174]},{"1853914":[34,221]},{"1853917":[255]},{"1853919":[255]},{"1853921":[170]},{"1853923":[64,8,171,255,81,81,81]},{"1853936":[238]},{"1853938":[85]},{"1853940":[171]},{"1853942":[255]},{"1853944":[81]},{"1853946":[137]},{"1853948":[68]},{"1853950":[170]},{"1853952":[168,128,84]},{"1853957":[17,251]},{"1853961":[127,145,213,85,255,34,119,87,135,171]},{"1853972":[238]},{"1853976":[128]},{"1853978":[42,213]},{"1853981":[255,136,119,40,175,84,84,17,17,251]},{"1853992":[127,127]},{"1853997":[16]},{"1854000":[175]},{"1854002":[84]},{"1854004":[17]},{"1854006":[251,4,127]},{"1854010":[145]},{"1854012":[85]},{"1854014":[34]},{"1854017":[5]},{"1854019":[34]},{"1854021":[31,199,8,21,239,84,84,42,170,85,84,250,18,221,17,224,64,8]},{"1854040":[21,21,171,84,85,170,43,85,5,22,34,17,31,91,207]},{"1854056":[255,250]},{"1854061":[2,129,129,23]},{"1854066":[51]},{"1854068":[95]},{"1854070":[199,56,250]},{"1854074":[84]},{"1854076":[42]},{"1854078":[85]},{"1854080":[23,104,40,215,53,218,24,247,143,112,176,66,136,80,32,192,139,143,52,56,29,25,176,56,191,174,221,160,71,65,255]},{"1854112":[117,237,251,125,235,223,231,48,238,191,130,208,216,73]},{"1854127":[224,247]},{"1854130":[255]},{"1854132":[255]},{"1854134":[48,136,191]},{"1854138":[210,32,217,32,224]},{"1854144":[5,251,2,255,67,189]},{"1854151":[63,255,81]},{"1854155":[175]},{"1854157":[85]},{"1854160":[4,4]},{"1854164":[66,66,200]},{"1854168":[238,234,80,16,170]},{"1854174":[119]},{"1854176":[255,173,255,66,255,227,63,192,251,191,175,16,85]},{"1854190":[136,136,255]},{"1854194":[255]},{"1854196":[255]},{"1854198":[192,8,191]},{"1854202":[191]},{"1854204":[85]},{"1854208":[63,215,187,255,255,125]},{"1854215":[191,255,24]},{"1854219":[255]},{"1854221":[127]},{"1854223":[111,42,42,16,16,170,170,64]},{"1854232":[239,136]},{"1854236":[128]},{"1854238":[16]},{"1854240":[255,189,255,171,255,215,191,64,152,247,255]},{"1854252":[127]},{"1854254":[239,128,253]},{"1854258":[239]},{"1854260":[215]},{"1854262":[64]},{"1854264":[247]},{"1854266":[255]},{"1854268":[127]},{"1854270":[111]},{"1854272":[254,244,213,209,250,242,139,255,238,129,97,253]},{"1854285":[255]},{"1854287":[255,170,161,68,106,170,167]},{"1854295":[139,238,145,65,67]},{"1854304":[244,94,209,149,242,88,255]},{"1854312":[129,111,255,32,255]},{"1854318":[255]},{"1854320":[94,1,149,42,88,5]},{"1854327":[139,110,16,190,2,255]},{"1854334":[255]},{"1854336":[235,64,85,2,169,2,63,255,173,83,215,209,127,251,246,243,170,23,86,169,168,85,128,63,174,85,84,121,124,127,116,126,64,232,2,84,2,168,252,3,80,251,217,134,251]},{"1854382":[251]},{"1854384":[234,21,84,171,168,85]},{"1854391":[188,174]},{"1854394":[140,41,132,3,140,10,191,85,242,167,106,209,255,255,41,86,213,85,186,59,85,85,42,128,80,205,170,21]},{"1854423":[255,41,119,213,255,170,111,85,255,64,63,5,183,17,251,127,128,214,94,85]},{"1854444":[59,129,85]},{"1854448":[42,149,80,42,170,68]},{"1854455":[127,169]},{"1854458":[128,42,144,68]},{"1854463":[170,221,119,170,255,32,159,255,117,241,14,68,84,170,186,81,81,136,42]},{"1854483":[85,32,223]},{"1854487":[117,241,255,68,254,170,255,81,251,34,247,85,255,159,191,117,138,14,14,84,17,186,16,81,4,136,85]},{"1854515":[170,32,64]},{"1854519":[117,241]},{"1854523":[170]},{"1854525":[69]},{"1854527":[170,85,255,170,255,69,255,223,17,16,234]},{"1854539":[1,170,171]},{"1854545":[170]},{"1854547":[85]},{"1854549":[186,32,49,16,250]},{"1854555":[171,170,255]},{"1854559":[170,170,255,85,255,186,255,17,206,239,234,1,85,171,1]},{"1854575":[85]},{"1854577":[85]},{"1854579":[170]},{"1854581":[69]},{"1854583":[49,21]},{"1854587":[170]},{"1854589":[84]},{"1854591":[170,85,255,170,255,84,254,255]},{"1854601":[170]},{"1854603":[157]},{"1854605":[85]},{"1854609":[170]},{"1854611":[85]},{"1854613":[170]},{"1854617":[170]},{"1854619":[191]},{"1854621":[85]},{"1854623":[170,170,255,85,255,171,254]},{"1854631":[255,255,170,157,221,85,255]},{"1854639":[85]},{"1854641":[85]},{"1854643":[170,1,84]},{"1854648":[85]},{"1854651":[34]},{"1854655":[170,29,149,178,178,108,214,239,40,28,148,16,195,24,97,85,34,32,177,8,56,16,146,16,56]},{"1854681":[148,9,203,5,101,73,170,194,188,69,186,131,238]},{"1854695":[255,231,152,230,218,96,250,99,62,66,21,69,130,1,84]},{"1854712":[99,4,37]},{"1854716":[1,4,65,128,17,144,168,168,69,69,247,73,1]},{"1854731":[245]},{"1854733":[255,16,239]},{"1854737":[144,2,170]},{"1854741":[69,73,73]},{"1854746":[36,245,129,255,17,239,239,129,85,2,186]},{"1854759":[247,255,1,219,209,126,126,254,238,110,16,85,170,186,69]},{"1854775":[8,254]},{"1854778":[46]},{"1854780":[129]},{"1854782":[17]},{"1854784":[70]},{"1854786":[21]},{"1854788":[26]},{"1854790":[85,138,6]},{"1854794":[162,231]},{"1854797":[254]},{"1854799":[255,17,17,170,170,69,69,170,170,81,81,5,231,150,254,174,255,238,70,85,191,186,26]},{"1854823":[117,174,6,88,64,105,104,81,81,168,17,64,170,160,69]},{"1854839":[138,168,81,29,162,151]},{"1854846":[174]},{"1854848":[42]},{"1854850":[84]},{"1854852":[170]},{"1854854":[17,139,170]},{"1854858":[174,170,4,174,8,95,85,85,171,171,85,85,239,239,85,85]},{"1854875":[170,170,164,87,95,170,42,84,84,170,170]},{"1854887":[117,170,170,85,4,81,10,160]},{"1854896":[128,85]},{"1854899":[171]},{"1854901":[85]},{"1854903":[138]},{"1854905":[85,81,170,241,4,247,8,160,6,68,7,168,1,16,155,168]},{"1854922":[235,124,64,255,168,255,93,95,189,191,86,87,254,255,85,85,20,104,191,198,87,186,160,163,64,70,168,171]},{"1854951":[117,170,169,131,151]},{"1854957":[57]},{"1854959":[69]},{"1854961":[92]},{"1854963":[185]},{"1854965":[84]},{"1854967":[138]},{"1854969":[84]},{"1854971":[104,134,64,18,168,128,40,193,148,188,134,85,213,5]},{"1854986":[10,159,224,255,32,111,127,85,190,170,198,196,255,255,218,216,245,238,191,171,143,197,130,170,65,213,60,187]},{"1855015":[127,47,199]},{"1855019":[81]},{"1855021":[244,16,106]},{"1855025":[87]},{"1855027":[42]},{"1855029":[69]},{"1855031":[128]},{"1855033":[18,4,170,11]},{"1855038":[5,128]},{"1855041":[133,162,247,16,42,87,127,16,174,128,255]},{"1855053":[255]},{"1855055":[255,175]},{"1855058":[247,162,171]},{"1855062":[255,255,175]},{"1855066":[127,157,255,62,255,255,42,255,162,93,145,255,40,255,17,255]},{"1855083":[98]},{"1855085":[193]},{"1855089":[122]},{"1855091":[170]},{"1855093":[197]},{"1855097":[65,29,128,62]},{"1855102":[255]},{"1855105":[187,128,255,64,127,104,232]},{"1855113":[255,5,250,42,213,5,250,255,3,127,174,191,71,232,232,255,1,255,250,250,208,229,224,68,252]},{"1855139":[81,128,184,148,235]},{"1855145":[254,5]},{"1855148":[47]},{"1855150":[31]},{"1855152":[3,68,46,128,7,192]},{"1855159":[3,1]},{"1855162":[250]},{"1855164":[208,5,224,26,10,245,5,122,43,212]},{"1855175":[5,46,193,85,172,191,96,125,132,218,208,245,112,255,212,215,192,254,192,210,132,144,32,42,4,47]},{"1855202":[143,128,43]},{"1855206":[82,63,63,16,125,2,255]},{"1855214":[253,2,208,37,112,138,212]},{"1855223":[186,192,17,128,41]},{"1855229":[79,40,209,31,128,15,154,135,108,1,14,251,48,85,1,190,25,127,126,48]},{"1855250":[82,26,24,12,255,14,198,48,174,1,88,24,255,126,255,32,205,96,247,16,241,240,255,4,87,170,167,64,1,128]},{"1855281":[175,18,229,8,243,14,240]},{"1855289":[13]},{"1855291":[82,24,167,126]},{"1855296":[255,87,255,63,255,95,87,168,255,23,255,250,255,92,127,104,127,87,127,63,127,95,64]},{"1855320":[191,23,255,250,127,92,255,104,168,40,192,64,160,34,255]},{"1855336":[232,168]},{"1855339":[5,128,47,128,151,87,128,63,128,93,130]},{"1855351":[191,23,64,250]},{"1855356":[80,140,104,128,253,195,250,239,253,102,255,14,253,115,250,71,224,191,232,31,255,193,255,234,255,100,31,14,255,113,255,66,255,160,254,9,2,189,5,90,2,189,241,17,2,189,5,250,31,224,23,232,64,129,160,74,64,36,14,224,64,49]},{"1855419":[66]},{"1855421":[160,1,8]},{"1855425":[255,193,191]},{"1855429":[255,254,187,64,191,19,255,3,255,38,254,240,15,186,196,244,11,255,186,253,2,224,12,192,60,192,25,255]},{"1855458":[127,128,255]},{"1855462":[65,86,191,64,255]},{"1855468":[255]},{"1855470":[255]},{"1855472":[15]},{"1855474":[68,128,11]},{"1855478":[168,18,2]},{"1855482":[12]},{"1855484":[60]},{"1855486":[24]},{"1855489":[220,64,239,1,214,128,255]},{"1855497":[208,160,160]},{"1855502":[128,128,12,243,6,185]},{"1855509":[255,251,132]},{"1855513":[255]},{"1855515":[95]},{"1855517":[255]},{"1855519":[127,255]},{"1855522":[255]},{"1855524":[255]},{"1855526":[127,128,255]},{"1855530":[255]},{"1855532":[255]},{"1855534":[255]},{"1855536":[208]},{"1855538":[169]},{"1855540":[215]},{"1855542":[4,128,208]},{"1855552":[127,169,255,222,95,235,255,246,127,250,255,254,95,251,248,215,168,86,212,33,226,20,80,9,248,5,212,1,250,4]},{"1855583":[47]},{"1855600":[1]},{"1855602":[10]},{"1855604":[9]},{"1855606":[166]},{"1855608":[2]},{"1855610":[42]},{"1855612":[1]},{"1855614":[212]},{"1855616":[240,255,224,235,240,179,240,31,250,159,253,107,224,255,165,245]},{"1855633":[15]},{"1855635":[31]},{"1855637":[79]},{"1855639":[231,128,100]},{"1855643":[150]},{"1855645":[31,10,245]},{"1855663":[165,255]},{"1855666":[233]},{"1855668":[179]},{"1855670":[31]},{"1855672":[31]},{"1855674":[107]},{"1855676":[255]},{"1855678":[165]},{"1855680":[1,255,2,255]},{"1855685":[255]},{"1855687":[255]},{"1855689":[255]},{"1855691":[223]},{"1855693":[255]},{"1855695":[175]},{"1855697":[255]},{"1855699":[255]},{"1855701":[255]},{"1855703":[95]},{"1855705":[255]},{"1855707":[255]},{"1855709":[255,80]},{"1855726":[175,175,169]},{"1855730":[198]},{"1855732":[250]},{"1855734":[245]},{"1855736":[238]},{"1855738":[213]},{"1855740":[170]},{"1855742":[175]},{"1855744":[1,255,42,255,4,254,129,252,7,252,10,253,85,251,142,113]},{"1855761":[255]},{"1855763":[255,1,254,3,253,3,254,2,248,4,245,142,134]},{"1855782":[1]},{"1855784":[2,7,5,15,14,31,247,127,129]},{"1855794":[42]},{"1855796":[132]},{"1855798":[129,1,175]},{"1855802":[15]},{"1855804":[95]},{"1855806":[255,128,56,207,106,47,96,63,168,63,128,255,32,255]},{"1855821":[255,191,96,48,143,208,47,192,191,192,63]},{"1855833":[255]},{"1855835":[255]},{"1855837":[255,191,191,64,120,32,96,128,224]},{"1855847":[128]},{"1855849":[128]},{"1855854":[255,95,120]},{"1855858":[106]},{"1855860":[226]},{"1855862":[168]},{"1855864":[138]},{"1855866":[100]},{"1855870":[223,128]},{"1855873":[255,162,255]},{"1855877":[255]},{"1855879":[255]},{"1855881":[255]},{"1855883":[255]},{"1855885":[255,255]},{"1855889":[255]},{"1855891":[255]},{"1855893":[255]},{"1855895":[255]},{"1855897":[255]},{"1855899":[255]},{"1855901":[255,255,223]},{"1855918":[223,239,8]},{"1855922":[162]},{"1855924":[34]},{"1855928":[170]},{"1855930":[85]},{"1855934":[255,16,1,255,42,255]},{"1855941":[255]},{"1855943":[255]},{"1855945":[255]},{"1855947":[255]},{"1855949":[255,255]},{"1855953":[255]},{"1855955":[255]},{"1855957":[255]},{"1855959":[255]},{"1855961":[255]},{"1855963":[255]},{"1855965":[255,255,85]},{"1855982":[85,255,1]},{"1855986":[42]},{"1855988":[170]},{"1855990":[1]},{"1855992":[174]},{"1855994":[85]},{"1855998":[255]},{"1856000":[1,255,34,255]},{"1856005":[255,10,255,2,253,65,190]},{"1856013":[255,255]},{"1856017":[255]},{"1856019":[255]},{"1856021":[255]},{"1856023":[255]},{"1856025":[255]},{"1856027":[255]},{"1856029":[255,255,80]},{"1856046":[80,255,1]},{"1856050":[34]},{"1856054":[10]},{"1856056":[136]},{"1856062":[255]},{"1856064":[85,252,138,220,2,248,135,240,7,241,14,241,13,243,255]},{"1856080":[2,252,34,220,4,252,4,240,9,241,10,241,8,225,247]},{"1856096":[1]},{"1856099":[2,2,4,11,12,7]},{"1856106":[4,10,22,26,8,247,85]},{"1856114":[138,1,6,1,135]},{"1856120":[134]},{"1856122":[14]},{"1856124":[31]},{"1856126":[255]},{"1856128":[98,170,149,85,144,58]},{"1856135":[117]},{"1856137":[255,42,221]},{"1856141":[186,255]},{"1856144":[149,42,40,21,197,58,128,117]},{"1856153":[255]},{"1856155":[255,69,186,255]},{"1856160":[64,128,194,66]},{"1856165":[128,10,10]},{"1856171":[34]},{"1856175":[255,226]},{"1856178":[213]},{"1856180":[144]},{"1856186":[8]},{"1856190":[255]},{"1856192":[160,161,64,64]},{"1856197":[170,64,80]},{"1856201":[238,128,213,8,170,247,8,94,160,157,64,85,170,37,80,17,238]},{"1856219":[213,85,170,247,8,1]},{"1856226":[34,34]},{"1856230":[138,138]},{"1856234":[42,42]},{"1856238":[8,255,161]},{"1856242":[64]},{"1856246":[64]},{"1856250":[128]},{"1856252":[8]},{"1856254":[247]},{"1856257":[21]},{"1856259":[12,160,160]},{"1856265":[170]},{"1856267":[84]},{"1856270":[85,42,234]},{"1856274":[209,128,95,160,85]},{"1856280":[69,170,1,84,255]},{"1856286":[85,170,21]},{"1856290":[46,162]},{"1856294":[170,170,16,16,170,170]},{"1856302":[42,127,21]},{"1856306":[140]},{"1856308":[160]},{"1856318":[85,128]},{"1856321":[127]},{"1856323":[63]},{"1856325":[21]},{"1856327":[1]},{"1856329":[128]},{"1856334":[85,171,128]},{"1856338":[64]},{"1856340":[234]},{"1856342":[84]},{"1856344":[127,128,85]},{"1856348":[191]},{"1856350":[85,171,127]},{"1856354":[191,128,21]},{"1856358":[171,170]},{"1856362":[170,170,64,64,171,254,127]},{"1856370":[63]},{"1856372":[21]},{"1856374":[1]},{"1856382":[84]},{"1856384":[6,250,13,250,10,93,5,65,15,25,4,11,30,83,85,171,4,6,9,9,168,9,17,9,235,11,84,14,190,22,85,171,251]},{"1856418":[254]},{"1856420":[95,1,231,160,29]},{"1856426":[171,170,83,8,171,254,253,2,245]},{"1856436":[82]},{"1856438":[70,8,22]},{"1856442":[5]},{"1856444":[77]},{"1856446":[84]},{"1856448":[223,255,127,255,29,255]},{"1856455":[85]},{"1856457":[70]},{"1856460":[1,81,85,63,222,222,85,85,29,29]},{"1856472":[168]},{"1856474":[85]},{"1856476":[171,1,85,191,255]},{"1856482":[255]},{"1856484":[255]},{"1856486":[255,170,87,17,170,170,85,4,63,106,33]},{"1856498":[170]},{"1856500":[226]},{"1856502":[85]},{"1856504":[70]},{"1856508":[80]},{"1856510":[64,128,235,235,254,254,239,239,125,125,4,46,20,17,48,24]},{"1856527":[254,234,234,84,84,170,170,85,85,132,4,84,16,178,16]},{"1856543":[254,235,20,254,1,255,16,255,130,127,81,187,170,93,69,254,255,1]},{"1856562":[170]},{"1856564":[69]},{"1856566":[40]},{"1856568":[42]},{"1856570":[1]},{"1856572":[8]},{"1856576":[170,170,234,234,238,238,255,255,234,106,21,85,186,186]},{"1856591":[255,170,170,64,64,186,170,85,85,234,106,21,21,186,186]},{"1856607":[255,170,85,234,21,238,17,255]},{"1856616":[127,21,255,170,255,69,255,255]},{"1856626":[170]},{"1856628":[68]},{"1856630":[170]},{"1856634":[64]},{"1856640":[128,128,170,170,230,230,154,154,170,170,85,85,170,170]},{"1856655":[255,128,128]},{"1856660":[162,162,85,16,191,170,85,85,239,170]},{"1856671":[255,128,127,170,85,230,25,186,101,234,85,255,170,186,85,255,255]},{"1856690":[170]},{"1856692":[68]},{"1856694":[138]},{"1856704":[12,3,140,130,1,19,164,34,164,162,80,80,160,170]},{"1856719":[241]},{"1856721":[3]},{"1856723":[34,4,22,137,10,224,162,209,80,224,170]},{"1856735":[241,19,239,146,79,27,242,166,87,174,87,126,161,174,91,255,241,16]},{"1856754":[144,32,9,4,160,8,8]},{"1856762":[14]},{"1856764":[4]},{"1856766":[14]},{"1856768":[68,17,8,163,85]},{"1856774":[170]},{"1856776":[184,168,34,32,162,162]},{"1856783":[85,68,17,8,163,85]},{"1856790":[170]},{"1856792":[186,168,215]},{"1856796":[170,162,69,16,85,187,171,247,85,170,170,85,184,71,34,221,162,93,186,85,68]},{"1856818":[8]},{"1856820":[85]},{"1856822":[170]},{"1856824":[16]},{"1856826":[34]},{"1856830":[170]},{"1856833":[119,160,11,4,65,168,2,5]},{"1856842":[42]},{"1856847":[21,52,119,168,11,4,65,170,2,133]},{"1856858":[106]},{"1856862":[21]},{"1856864":[67,203,163,87,69,251,168,85,5,250,42,213]},{"1856877":[255,234,21,52]},{"1856882":[168]},{"1856884":[4]},{"1856886":[170]},{"1856888":[5]},{"1856890":[42]},{"1856894":[234]},{"1856897":[255]},{"1856899":[191,2,85,136,34,83]},{"1856906":[171]},{"1856908":[174]},{"1856910":[159]},{"1856912":[159,255,172,191,86,85,170,34,83]},{"1856922":[171]},{"1856924":[174]},{"1856928":[96,96,19,83,3,169,136,85,83,172,171,84,174,81,255,159,159]},{"1856946":[172]},{"1856948":[84]},{"1856950":[170]},{"1856952":[81]},{"1856954":[170]},{"1856956":[4]},{"1856958":[96]},{"1856961":[255]},{"1856963":[255,10,85,23,232,123]},{"1856970":[251]},{"1856972":[174,81,144,19,255,255,253,255,95,85,255,232,251]},{"1856986":[255]},{"1856988":[255,81,60,63]},{"1856994":[2,2,10,160,23]},{"1857000":[123,132,251,4,174]},{"1857006":[64,191,255]},{"1857010":[253]},{"1857012":[85]},{"1857014":[234]},{"1857016":[80]},{"1857018":[170]},{"1857020":[81]},{"1857025":[191,40,239,186,109,201,50,229,2,225,18,162,81,137,194,207,215,223,143,247,113,239,6,247,28,253,4,254,14,58,4]},{"1857057":[120,16,120,130,60,193,52,225,30,225,18,160,91,2,194,135]},{"1857074":[135]},{"1857076":[65]},{"1857078":[138]},{"1857082":[168]},{"1857084":[2]},{"1857086":[61]},{"1857088":[138,117,85,170,191,64,237,2,250,170,224,64,63,67,168,24,255,117,255,170,255,64,252]},{"1857112":[85,170,191,64,124,3,166,230,138]},{"1857122":[85]},{"1857124":[191]},{"1857126":[239,16,250,5,224,31,191,64,129,254,117]},{"1857138":[170]},{"1857140":[64]},{"1857142":[168,3,80]},{"1857146":[160]},{"1857152":[191,72,119,136,250,48,217,17,170,8,5,5,170,160,149,106,181,8,114]},{"1857172":[69,48,174,17,87,8,255,5,87,160,127,34,255]},{"1857186":[255]},{"1857188":[250,5,217,38,170,87]},{"1857195":[250,170,87,149,200]},{"1857201":[66,34,141]},{"1857205":[138,136,64]},{"1857209":[160,5]},{"1857213":[8,34]},{"1857216":[250,144,85,5,171,1,23,23,191,55,95,95,191,191,119,141,5,144,175,5,95,1,255,23,255,55,255,95,255,191,242,133,250,5,80,170,170,94]},{"1857255":[232,136,200]},{"1857259":[160]},{"1857261":[64,127]},{"1857265":[106,5,80,1,160,23]},{"1857272":[55]},{"1857274":[95]},{"1857276":[191]},{"1857278":[128,8,255,87,95,95,255,253,255,254,255,85,255,235,255,212,117,128,255,87,255,95,255,253,255,254,255,85,255,235,255,212,15]},{"1857312":[168,168]},{"1857315":[160]},{"1857317":[2]},{"1857319":[17]},{"1857321":[171]},{"1857323":[21]},{"1857325":[43,245,15,87]},{"1857330":[95]},{"1857332":[253]},{"1857334":[238,16,84,1,234,1,212]},{"1857343":[240,255,48,255,155,253,106,254,171,252,87,254,11,255,5,255,255,63,48,159,155,207,104,239,170,255,84,255,10,255,5,255,255,192,31,96,15,50,141,17,70,11,232,5,244,2,251]},{"1857392":[32,208,144,107,64,24,168,18,20,64,10]},{"1857404":[4,1,255]},{"1857408":[64,191,130,125,4,251,136,247,1,255,4,255,5,255,250,191,255]},{"1857426":[253,2,249,6,246,137,240,14,250,1,240,10,255,186,191,64,127,128,255]},{"1857446":[127,128,255]},{"1857450":[255]},{"1857452":[255]},{"1857454":[5,90]},{"1857458":[2]},{"1857460":[6]},{"1857462":[9,128,14]},{"1857466":[1]},{"1857468":[10]},{"1857470":[160,26,21,253,34,250,20,252,64,248]},{"1857481":[208,104,232,16,212,97,159]},{"1857489":[234,128,93]},{"1857493":[235]},{"1857495":[191]},{"1857497":[255]},{"1857499":[151]},{"1857501":[239,138,116,255]},{"1857506":[255]},{"1857508":[255]},{"1857510":[255]},{"1857512":[255]},{"1857514":[255]},{"1857516":[255]},{"1857518":[255]},{"1857520":[232]},{"1857522":[88]},{"1857524":[232]},{"1857526":[184]},{"1857528":[208]},{"1857530":[128]},{"1857532":[196]},{"1857534":[116]},{"1857536":[2,2]},{"1857540":[2,2,1,1,10,10,5,5,2,2,26,250,2,253]},{"1857555":[255,2,253,1,254,10,245,5,250,2,253,128,101,255]},{"1857570":[255]},{"1857572":[255]},{"1857574":[255]},{"1857576":[255]},{"1857578":[255]},{"1857580":[255]},{"1857582":[255]},{"1857598":[96]},{"1857600":[127,232,47,255,149,255,175,255,21,255,2,255,149,127,82,175,232,23,253]},{"1857620":[127]},{"1857622":[255]},{"1857624":[255]},{"1857626":[255]},{"1857628":[107]},{"1857630":[175]},{"1857650":[2]},{"1857665":[255,255,122,255,170,255,252,119,234,255,247,85,254,175,255]},{"1857681":[255,80,133,170,85,80,3,234,21,213,8,254,1,255]},{"1857712":[250]},{"1857714":[42]},{"1857718":[172]},{"1857722":[34]},{"1857728":[1,255,236,79,238,13,248,1,248,179,248,70,242,187,229,230]},{"1857745":[255]},{"1857747":[179]},{"1857749":[243]},{"1857751":[255,160,78,65,188,164,75,72,23]},{"1857761":[1]},{"1857768":[1,1,2,2]},{"1857773":[2]},{"1857775":[4,1]},{"1857778":[79]},{"1857780":[13]},{"1857784":[17]},{"1857786":[2]},{"1857788":[26]},{"1857790":[164]},{"1857792":[84,238,96,223,160,246,28,185,189,219,127,200,255]},{"1857806":[255,40,17,214,32,239]},{"1857813":[191,64,39]},{"1857817":[230]},{"1857819":[183]},{"1857821":[255]},{"1857823":[215,56,124,48,112,64,224,128,128]},{"1857833":[128]},{"1857840":[124]},{"1857842":[117]},{"1857844":[230]},{"1857846":[153]},{"1857848":[155]},{"1857850":[72]},{"1857854":[40]},{"1857856":[96,234]},{"1857859":[184,2,77,124,128,223,32,254]},{"1857868":[255]},{"1857870":[217,1,21,234]},{"1857875":[255]},{"1857877":[255]},{"1857879":[255]},{"1857881":[255]},{"1857883":[255]},{"1857885":[255,1,254]},{"1857889":[96]},{"1857904":[96]},{"1857906":[152]},{"1857908":[77]},{"1857910":[128]},{"1857912":[32]},{"1857920":[34,170]},{"1857923":[1]},{"1857925":[162,139,64,239,8,229]},{"1857932":[255,2,191,17,85,170]},{"1857939":[255]},{"1857941":[255]},{"1857943":[255,8,247]},{"1857947":[255,2,253,17,238]},{"1857953":[34]},{"1857968":[34]},{"1857970":[1]},{"1857972":[162]},{"1857974":[64]},{"1857985":[170,249]},{"1857988":[248]},{"1857990":[156]},{"1857992":[255,10,23,4,255,10,245,21,85,170]},{"1858003":[255]},{"1858005":[255]},{"1858007":[255,10,245,4,251,10,245,21,234]},{"1858048":[8,136,240,2,2]},{"1858054":[9]},{"1858056":[40,1,27,1,168,169,85,84,119,136]},{"1858067":[255]},{"1858069":[255]},{"1858071":[255]},{"1858073":[255]},{"1858075":[255,168,86,87,169]},{"1858081":[8]},{"1858092":[1,1,1,1,8]},{"1858106":[1]},{"1858108":[1]},{"1858110":[1]},{"1858112":[184,132,57,70,52,72,98,24,105,144,207]},{"1858124":[223,72,151,5,107,160,56,207,48,143,224,79,96,63,224,95,200,247,197,58,52,172,8,56,64,112,80,112,160,224,64,192,192,128]},{"1858159":[128,188]},{"1858162":[56]},{"1858164":[112]},{"1858166":[112]},{"1858168":[224]},{"1858170":[192]},{"1858172":[128]},{"1858174":[128]},{"1858178":[80,175,162,69,69,186,85]},{"1858186":[240,2,89]},{"1858190":[165]},{"1858192":[255]},{"1858195":[255]},{"1858197":[255]},{"1858199":[255]},{"1858201":[255]},{"1858203":[255]},{"1858205":[255]},{"1858207":[255]},{"1858230":[16]},{"1858242":[106,157,2,93,139,36,52,1,169,2,68]},{"1858254":[226,8,255]},{"1858259":[255]},{"1858261":[255]},{"1858263":[255]},{"1858265":[255]},{"1858267":[255]},{"1858269":[255,8,255]},{"1858275":[34]},{"1858279":[138]},{"1858283":[32]},{"1858290":[8]},{"1858305":[17,42,213,4,251,170,85,2,85,122,128,16,69,64,138,238]},{"1858323":[255]},{"1858325":[255]},{"1858327":[255]},{"1858329":[255,128,255,4,255,170,223,17]},{"1858339":[42]},{"1858341":[4]},{"1858343":[170]},{"1858347":[42]},{"1858350":[32]},{"1858352":[17]},{"1858369":[21,160,85,69,186,170,85,17,68,174,80,78,17,246,8,234]},{"1858387":[245]},{"1858389":[255]},{"1858391":[255]},{"1858393":[255]},{"1858395":[255,1,255,8,255,21]},{"1858402":[10,170]},{"1858405":[69]},{"1858407":[170]},{"1858409":[17]},{"1858411":[170]},{"1858413":[68]},{"1858415":[162,21]},{"1858432":[27,87,149,92,93,190,150,93,29,90,154,89,88,25,177,118,187,23,20,221,28,255,52,223,124,219,28,219,61,219,118,247,87,12,62,171,28,65,28,138,24,1,56,162,24,64,56,136,72]},{"1858496":[21,119,152]},{"1858500":[149,42,117]},{"1858504":[117,138,171,84,85,42,170,69,157,21,69,152,64,191,130,117]},{"1858521":[255,16,255]},{"1858525":[255,69,255,119]},{"1858530":[34,186]},{"1858533":[149,8,125]},{"1858537":[117]},{"1858539":[171]},{"1858541":[85]},{"1858543":[170,98]},{"1858560":[127,255,205]},{"1858564":[247]},{"1858566":[244]},{"1858568":[118,136,255]},{"1858572":[5,250,170,85,127,127,16,205,8,247,3,244,1,254]},{"1858587":[255,208,255,85,255,255]},{"1858594":[34,239]},{"1858597":[247,8,252]},{"1858601":[118]},{"1858603":[255]},{"1858605":[5]},{"1858607":[170,128]},{"1858624":[238,110,65]},{"1858628":[167]},{"1858630":[245]},{"1858632":[255]},{"1858634":[255]},{"1858636":[87,168,162,93,239,110,20,65,89,166]},{"1858647":[245]},{"1858649":[255]},{"1858651":[255,168,255,93,255,126,17,170,235]},{"1858661":[166,10,255]},{"1858665":[255]},{"1858667":[255]},{"1858669":[87]},{"1858671":[162]},{"1858688":[234,234,85]},{"1858692":[179]},{"1858694":[85]},{"1858696":[255]},{"1858698":[255]},{"1858700":[255]},{"1858702":[170,85,255,234,21,64,25,162]},{"1858711":[85,1,254]},{"1858715":[255]},{"1858717":[255,85,255,234,21,170,234,68,230,170,255]},{"1858729":[254]},{"1858731":[255]},{"1858733":[255]},{"1858735":[170]},{"1858752":[160,163,80,4,218,6,80,2,248]},{"1858762":[252,6,248]},{"1858766":[252]},{"1858768":[226,161,88,4,122,132,88,2,16,232,44,214,4,248,4,248,165,91,166,173,4,135,162,175]},{"1858793":[239,6,211]},{"1858797":[255]},{"1858799":[251,4]},{"1858802":[2]},{"1858816":[128,128,85,1,255,5,85]},{"1858824":[127]},{"1858826":[95]},{"1858828":[255]},{"1858830":[127]},{"1858832":[128,128,95,1,255,5,85]},{"1858840":[247,8,95]},{"1858844":[213,42,139,116,128,127,161,170,5]},{"1858854":[170,170]},{"1858857":[8,160,160]},{"1858861":[42]},{"1858863":[245]},{"1858882":[84,16,186,16,85,4,255]},{"1858890":[255]},{"1858892":[255]},{"1858894":[255]},{"1858898":[255,16,255,16,95,4,255]},{"1858906":[255]},{"1858908":[85,170,255]},{"1858913":[255,16,171,16,69,164,170]},{"1858925":[170]},{"1858927":[1]},{"1858944":[110,3,64,64,170,8,81]},{"1858952":[255]},{"1858954":[255]},{"1858956":[255]},{"1858958":[255]},{"1858960":[111]},{"1858962":[255,64,255,8,255]},{"1858968":[255]},{"1858970":[255]},{"1858972":[223,32,254,1,108,147,64,191,8,85]},{"1858983":[174]},{"1858989":[32]},{"1858991":[5]},{"1859008":[157,225]},{"1859012":[170]},{"1859014":[81]},{"1859016":[255]},{"1859018":[255,34,255]},{"1859022":[255]},{"1859024":[225,1,255]},{"1859028":[255]},{"1859030":[255]},{"1859032":[255]},{"1859034":[255,34,255]},{"1859038":[255]},{"1859040":[30,253]},{"1859043":[255]},{"1859045":[85]},{"1859047":[174]},{"1859053":[10]},{"1859055":[81]},{"1859066":[34]},{"1859072":[16,56,2,4,169]},{"1859078":[84]},{"1859080":[255,20,255,2,255]},{"1859086":[255]},{"1859088":[99,103,255,7,253,1,255,1,255,20,255,2,255]},{"1859102":[255]},{"1859104":[160,92]},{"1859107":[250,2,85]},{"1859111":[171,1]},{"1859117":[42]},{"1859119":[23,3]},{"1859122":[4]},{"1859128":[20]},{"1859130":[2]},{"1859136":[160,113,129,129,127,149,31,14,63,32,31,162,47,64,255,152,131,146,127,1,127,21,191,14,223,224,191,2,255]},{"1859166":[239,152,14,241]},{"1859171":[254,64,128,192,160,32,203,64,173,32,223,112,7]},{"1859186":[1]},{"1859188":[21]},{"1859190":[14]},{"1859194":[2]},{"1859198":[136]},{"1859200":[234,104,255,191,255,85,255,170,255]},{"1859210":[255,32,253,2,248,5,151,104,255,191,255,85,255,170,255]},{"1859226":[255,32,255]},{"1859230":[255]},{"1859232":[234,23]},{"1859237":[34]},{"1859239":[17]},{"1859241":[255]},{"1859243":[223,2,253,7,248]},{"1859250":[191]},{"1859252":[85]},{"1859254":[170]},{"1859258":[32]},{"1859264":[171,1,255,170,255,64,255,128,245,10,250,5,84,171,136,87,255,1,255,170,255,64,255,128,255]},{"1859290":[255]},{"1859292":[255]},{"1859294":[255]},{"1859296":[170,254]},{"1859299":[85]},{"1859301":[191]},{"1859303":[127,10,245,5,250,171,84,119,136,1]},{"1859314":[170]},{"1859316":[64]},{"1859318":[128]},{"1859328":[255,84,234,21,212,107,232,23]},{"1859337":[255]},{"1859339":[127,42,191,5,127,255,84,255]},{"1859348":[255,64,255]},{"1859352":[255]},{"1859354":[255]},{"1859356":[213]},{"1859358":[248,2,128,171,21,234,43,212,23,232,255]},{"1859370":[255]},{"1859372":[255]},{"1859374":[255]},{"1859376":[84]},{"1859381":[64]},{"1859390":[2]},{"1859392":[253,23]},{"1859395":[255]},{"1859397":[255,5,255,237,255,28,255,185,253,70,254,255,21,255]},{"1859412":[245,10,234,16,16,2,160,67,64,6,128,57,2,252,255]},{"1859428":[255]},{"1859430":[255]},{"1859432":[255]},{"1859434":[255]},{"1859436":[255]},{"1859438":[255]},{"1859440":[1,20]},{"1859444":[10]},{"1859446":[16]},{"1859448":[2]},{"1859450":[67]},{"1859452":[4]},{"1859454":[56]},{"1859456":[198,63,192,250,68,180,32,216,68,124,244,252,80,94,173,175,240,9,224,223,224,27,240,15,24,163,8,3,4,171,2,80,63,192,63,192,191,64,223,32,255]},{"1859498":[255]},{"1859500":[255]},{"1859502":[255]},{"1859504":[9]},{"1859506":[26,192,16]},{"1859510":[8]},{"1859512":[32]},{"1859516":[10]},{"1859520":[80,240]},{"1859524":[2,2,129,129,10,10,5,5,43,43,23,23]},{"1859537":[175]},{"1859539":[255,2,253,1,126,10,245,5,250,43,212,23,232,255]},{"1859554":[255]},{"1859556":[255]},{"1859558":[255]},{"1859560":[255]},{"1859562":[255]},{"1859564":[255]},{"1859566":[255]},{"1859568":[160]},{"1859584":[10,10,85,85,191,191,87,87,191,191,95,95,255,255,126,127,10,245,85,170,191,64,87,168,191,64,95,160,255]},{"1859614":[126,129,255]},{"1859618":[255]},{"1859620":[255]},{"1859622":[255]},{"1859624":[255]},{"1859626":[255]},{"1859628":[255]},{"1859630":[255]},{"1859648":[1]},{"1859650":[2]},{"1859652":[3]},{"1859654":[4]},{"1859656":[5]},{"1859658":[6]},{"1859660":[7]},{"1859662":[8]},{"1859664":[9]},{"1859666":[10]},{"1859668":[11]},{"1859670":[12]},{"1859672":[13]},{"1859674":[14]},{"1859676":[15]},{"1859678":[16]},{"1859680":[17]},{"1859682":[18]},{"1859684":[19]},{"1859686":[20]},{"1859688":[21]},{"1859690":[22]},{"1859692":[23]},{"1859694":[24]},{"1859696":[25]},{"1859698":[26]},{"1859700":[27]},{"1859702":[28]},{"1859704":[29]},{"1859706":[30]},{"1859708":[31]},{"1859710":[32]},{"1859712":[33]},{"1859714":[34]},{"1859716":[35]},{"1859718":[36]},{"1859720":[37]},{"1859722":[38]},{"1859724":[39]},{"1859726":[40]},{"1859728":[41]},{"1859730":[42]},{"1859732":[43]},{"1859734":[44]},{"1859736":[45]},{"1859738":[46]},{"1859740":[47]},{"1859742":[48]},{"1859744":[49]},{"1859746":[50]},{"1859748":[51]},{"1859750":[52]},{"1859752":[53]},{"1859754":[54]},{"1859756":[55]},{"1859758":[56]},{"1859760":[57]},{"1859762":[58]},{"1859764":[59]},{"1859766":[60]},{"1859768":[61]},{"1859770":[62]},{"1859772":[63]},{"1859774":[64]},{"1859776":[65]},{"1859778":[66]},{"1859780":[67]},{"1859782":[68]},{"1859784":[69]},{"1859786":[70]},{"1859788":[71]},{"1859790":[72]},{"1859792":[73]},{"1859794":[74]},{"1859796":[75]},{"1859798":[76]},{"1859800":[77]},{"1859802":[78]},{"1859804":[79]},{"1859806":[80]},{"1859808":[81]},{"1859810":[82]},{"1859812":[83]},{"1859814":[84]},{"1859816":[85]},{"1859818":[86]},{"1859820":[87]},{"1859822":[88]},{"1859824":[89]},{"1859826":[90]},{"1859828":[91]},{"1859830":[92]},{"1859832":[93]},{"1859834":[94]},{"1859836":[95]},{"1859838":[96]},{"1859840":[97]},{"1859842":[98]},{"1859844":[99]},{"1859846":[100]},{"1859848":[101]},{"1859850":[102]},{"1859852":[103]},{"1859854":[104]},{"1859856":[105]},{"1859858":[106]},{"1859860":[107]},{"1859862":[108]},{"1859864":[109]},{"1859866":[110]},{"1859868":[111]},{"1859870":[112]},{"1859872":[113]},{"1859874":[114]},{"1859876":[115]},{"1859878":[116]},{"1859880":[117]},{"1859882":[118]},{"1859884":[119]},{"1859886":[120]},{"1859888":[121]},{"1859890":[122]},{"1859892":[123]},{"1859894":[124]},{"1859896":[125]},{"1859898":[126]},{"1859900":[127]},{"1859902":[128]},{"1859904":[129]},{"1859906":[130]},{"1859908":[131]},{"1859910":[132]},{"1859912":[133]},{"1859914":[134]},{"1859916":[135]},{"1859918":[136]},{"1859920":[137]},{"1859922":[138]},{"1859924":[139]},{"1859926":[140]},{"1859928":[141]},{"1859930":[142]},{"1859932":[143]},{"1859934":[144]},{"1859936":[145]},{"1859938":[146]},{"1859940":[147]},{"1859942":[148]},{"1859944":[149]},{"1859946":[150]},{"1859948":[151]},{"1859950":[152]},{"1859952":[153]},{"1859954":[154]},{"1859956":[155]},{"1859958":[156]},{"1859960":[157]},{"1859962":[158]},{"1859964":[159]},{"1859966":[160]},{"1859968":[161]},{"1859970":[162]},{"1859972":[163]},{"1859974":[164]},{"1859976":[165]},{"1859978":[166]},{"1859980":[167]},{"1859982":[168]},{"1859984":[169]},{"1859986":[170]},{"1859988":[171]},{"1859990":[172]},{"1859992":[173]},{"1859994":[174]},{"1859996":[175]},{"1859998":[176]},{"1860000":[177]},{"1860002":[178]},{"1860004":[179]},{"1860006":[180]},{"1860008":[181]},{"1860010":[182]},{"1860012":[183]},{"1860014":[184]},{"1860016":[185]},{"1860018":[186]},{"1860020":[187]},{"1860022":[188]},{"1860024":[189]},{"1860026":[190]},{"1860028":[191]},{"1860030":[192]},{"1860032":[193]},{"1860034":[194]},{"1860036":[195]},{"1860038":[196]},{"1860040":[197]},{"1860042":[198]},{"1860044":[199]},{"1860046":[200]},{"1860048":[201]},{"1860050":[202]},{"1860052":[203]},{"1860054":[204]},{"1860056":[205]},{"1860058":[206]},{"1860060":[207]},{"1860062":[208]},{"1860064":[209]},{"1860066":[210]},{"1860068":[211]},{"1860070":[212]},{"1860072":[213]},{"1860074":[214]},{"1860076":[215]},{"1860078":[216]},{"1860080":[217]},{"1860082":[218]},{"1860084":[219]},{"1860086":[220]},{"1860088":[221]},{"1860090":[222]},{"1860092":[223]},{"1860094":[224]},{"1860096":[225]},{"1860098":[226]},{"1860100":[227]},{"1860102":[228]},{"1860104":[229]},{"1860106":[230]},{"1860108":[231]},{"1860110":[232]},{"1860112":[233]},{"1860114":[234]},{"1860116":[235]},{"1860118":[236]},{"1860120":[237]},{"1860122":[238]},{"1860124":[239]},{"1860126":[240]},{"1860128":[241]},{"1860130":[242]},{"1860132":[243]},{"1860134":[244]},{"1860136":[245]},{"1860138":[246]},{"1860140":[247]},{"1860142":[248]},{"1860144":[249]},{"1860146":[250]},{"1860148":[251]},{"1860150":[252]},{"1860152":[253]},{"1860154":[254]},{"1860156":[255]},{"1860159":[1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55,1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,1,64,1,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,107,1,108,1,109,1,110,1,111,1,112,1,113,1,114,1,115,1,116,1,117,1,118,1,119,1,120,1,121,1,122,1,123,1,124,1,125,1,126,1,127,1,128,1,129,1,130,1,131,1,132,1,133,1,134,1,135,1,136,1,137,1,138,1,139,1,140,1,141,1,142,1,143,1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151,1,152,1,153,1,154,1,155,1,156,1,157,1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165,1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1,174,1,175,1,176,1,177,1,178,1,179,1,180,1,181,1,182,1,183,1,184,1,185,1,186,1,187,1,188,1,189,1,190,1,191,1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199,1,200,1,201,1,202,1,203,1,204,1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212,1,213,1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,221,1,222,1,223,1,224,1,225,1,226,1,227,1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235,1,236,1,237,1,238,1,239,1,240,1,241,1,242,1,243,1,244,1,245,1,246,1,247,1,248,1,249,1,250,1,251,1,252,1,253,1,254,1,255,1]},{"1860671":[2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2,62,2,63,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2,71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,2,79,2,80,2,81,2,82,2,83,2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91,2,92,2,93,2,94,2,95,2,96,2,97,2,98,2,99,2,100,2,101,2,102,2,103,2,104,2,105,2,106,2,107,2,108,2,109,2,110,2,111,2,112,2,113,2,114,2,115,2,116,2,117,2,118,2,119,2,120,2,121,2,122,2,123,2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131,2,132,2,133,2,134,2,135,2,136,2,137,2,138,2,139,2,140,2,141,2,142,2,143,2,144,2,145,2,146,2,147,2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155,2,156,2,157,2,158,2,159,2,160,2,161,2,162,2,163,2,164,2,165,2,166,2,167,2,168,2,169,2,170,2,171,2,172,2,173,2,174,2,175,2,176,2,177,2,178,2,179,2,180,2,181,2,182,2,183,2,184,2,185,2,186,2,187,2,188,2,189,2,190,2,191,2,192,2,193,2,194,2,195,2,196,2,197,2,198,2,199,2,200,2,201,2,202,2,203,2,204,2,205,2,206,2,207,2,208,2,209,2,210,2,211,2,212,2,213,2,214,2,215,2,216,2,217,2,218,2,219,2,220,2,221,2,222,2,223,2,224,2,225,2,226,2,227,2,228,2,229,2,230,2,231,2,232,2,233,2,234,2,235,2,236,2,237,2,238,2,239,2,240,2,241,2,242,2,243,2,244,2,245,2,246,2,247,2,248,2,249,2,250,2,251,2,252,2,253,2,254,2,255,2]},{"1861183":[3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,3,27,3,28,3,29,3,30,3,31,3,32,3,33,3,34,3,35,3,36,3,37,3,38,3,39,3,40,3,41,3,42,3,43,3,44,3,45,3,46,3,47,3,48,3,49,3,50,3,51,3,52,3,53,3,54,3,55,3,56,3,57,3,58,3,59,3,60,3,61,3,62,3,63,3,64,3,65,3,66,3,67,3,68,3,69,3,70,3,71,3,72,3,73,3,74,3,75,3,76,3,77,3,78,3,79,3,80,3,81,3,82,3,83,3,84,3,85,3,86,3,87,3,88,3,89,3,90,3,91,3,92,3,93,3,94,3,95,3,96,3,97,3,98,3,99,3,100,3,101,3,102,3,103,3,104,3,105,3,106,3,107,3,108,3,109,3,110,3,111,3,112,3,113,3,114,3,115,3,116,3,117,3,118,3,119,3,120,3,121,3,122,3,123,3,124,3,125,3,126,3,127,3,128,3,129,3,130,3,131,3,132,3,133,3,134,3,135,3,136,3,137,3,138,3,139,3,140,3,141,3,142,3,143,3,144,3,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154,3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,162,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,170,3,171,3,172,3,173,3,174,3,175,3,176,3,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,194,3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,202,3,203,3,204,3,205,3,206,3,207,3,208,3,209,3,210,3,211,3,212,3,213,3,214,3,215,3,216,3,217,3,218,3,219,3,220,3,221,3,222,3,223,3,224,3,225,3,226,3,227,3,228,3,229,3,230,3,231,3,232,3,233,3,234,3,235,3,236,3,237,3,238,3,239,3,240,3,241,3,242,3,243,3,244,3,245,3,246,3,247,3,248,3,249,3,250,3,251,3,252,3,253,3,254,3,255,3]},{"1861695":[4]},{"1861698":[35,12,33,8,35,16,103,32,132,32,36,12,36,20,69,20,37,24,70,24,166,24,49,90,174,57,100,28,99,20,7,49,50,74,202,52,98,24,99,32,197,40,130,28,65,16,97,24,33,16,65,12,196,36,6,45,99,12,42,41,135,36,166,40,233,56,139,61,106,65,164,40,131,32,230,44,199,32,208,69,100,32,73,65,234,64,41,57,206,69,77,57,7,57,101,44,231,48,50,102,86,102,108,69,195,36,57,107,255,127,222,119,23,95,167,48,186,123,91,111,78,102,71,61,215,94,25,103,181,94,70,20,38,20,139,73,206,97,125,123,57,123,147,94,181,106,38,24,39,32,213,94,169,48,197,48,163,40,200,48,170,48,103,40,102,48,12,65,165,48,178,89,216,94,186,101,129,32,129,28,221,118,61,118,188,105,213,80,46,73,92,110,190,113,62,109,156,104,172,56,137,40,204,52,89,106,126,113,217,92,49,73,40,28,40,40,84,78,118,85,14,65,123,113,40,36,104,36,105,48,110,77,144,61,114,85,80,81,181,89,79,69,108,52,106,48,106,40,105,40,237,56,89,101,172,48,239,64,22,85,52,77,240,68,174,60,188,110,54,89,135,56,236,64,180,76,197,56,231,56,39,73,41,65,174,89,106,73,195,40,195,52,241,72,117,85,206,56,170,60,163,48,176,68,51,85,238,72,202,56,172,64,178,72,232,64,229,64,5,57,52,85,83,89,168,56,88,93,72,73,237,72,76,73,235,72,77,85,43,73,42,65,199,64,41,73,6,65,161,40,108,56,113,89,45,73,74,85,5,49,118,89,116,89,180,101,52,89,170,89,218,113,48,81,107,56,110,60,241,80,242,76,246,96,51,89,48,89,71,69,81,114,117,86,218,122,213,118,85,123,86,114,176,72,238,80,235,80,7,81,178,106,41,48,171,64,173,72,175,72,137,64,174,68,233,72,210,118,165,56,104,56,231,72,150,94,71,77,42,52,106,36,76,44,113,68,178,68,227,64,195,56,5,65,30,123,3,61,111,68,30,119,90,114,217,106,26,107,5,73,191,127,157,123,3,65,89,103,24,95,92,111,190,119,157,119,220,127,125,119,221,119,60,119,94,119,61,123,150,86,126,123,149,86,33,4,26,103,107,64]},{"2064384":[8,226,32,175,205,80,127,240,16,24,105,41,197,188,240,9,133,188,156,16,7,34,48,128,191,40,107,175,205,80,127,208,34,169,16,133,188,194,33,175,91,243,126,34,255,237,27,107,226,48,175,205,80,127,208,11,194,48,175,84,243,126,34,33,238,27,107,218,90,72,139,75,171,194,32,175,91,243,126,41,255]},{"2064466":[170,191,6,236,27,41,255]},{"2064474":[10,105]},{"2064477":[240,133]},{"2064480":[194,16,169,226,1,162,14]},{"2064488":[155,170,165,188,41,255]},{"2064495":[133,2,167]},{"2064499":[159]},{"2064501":[195,126,159]},{"2064505":[197,126,230]},{"2064509":[230]},{"2064511":[232,232,136,16,237,226,48,171,230,21,104,122,250,107]}] \ No newline at end of file +[{"35":[92,0,136,161]},{"47":[34,0,255,161,234]},{"87":[0]},{"89":[161]},{"99":[193]},{"127":[176]},{"155":[164]},{"204":[92,70,128,161]},{"215":[92,109,223,160,234]},{"221":[43]},{"257":[43]},{"827":[128,1]},{"980":[92,146,133,164]},{"2027":[128,50]},{"2379":[34,194,129,160]},{"2385":[162,2,0]},{"2404":[234,234,234]},{"2414":[234,234,234]},{"2424":[234,234,234]},{"2434":[234,234,234]},{"2444":[234,234,234]},{"2456":[34,69,176,164]},{"2561":[165,188]},{"3097":[34,125,132,164,234]},{"4993":[3]},{"5002":[181]},{"5011":[164]},{"20581":[49]},{"20594":[51]},{"20636":[49,49]},{"20804":[168]},{"20817":[144]},{"20859":[160,176]},{"21027":[0]},{"21040":[0]},{"21082":[0,0]},{"21809":[92,118,196,160]},{"21847":[34,78,197,160,234]},{"21854":[34,219,148]},{"21858":[234,234]},{"23454":[63]},{"23562":[63]},{"24418":[92,151,253]},{"24422":[234,234]},{"25951":[32]},{"26189":[92,42,253,160,96,234]},{"27785":[160]},{"27789":[160]},{"27884":[160]},{"27887":[176]},{"30972":[14,161,160]},{"30994":[144,161,160]},{"31001":[14,161,160]},{"31011":[144,161,160]},{"31046":[227,218,160]},{"31102":[34,90,151,160,234,234,234,234,234,234]},{"32725":[48]},{"32727":[11,5]},{"50088":[202,218,160]},{"50445":[191,80,128,48]},{"50965":[191,80,128,48]},{"51006":[34,29,196,160,234,234,234,234]},{"51019":[234,234]},{"51027":[0]},{"53095":[34,103,219,160]},{"59775":[1,8]},{"59778":[1,7]},{"60395":[92,182,147,164,234]},{"60790":[230,219,160]},{"61077":[170,178,160]},{"61133":[34,156,193,160,234]},{"62723":[34,32,132,160]},{"65511":[34,121,237,160]},{"65607":[133,236,160]},{"65778":[34,53,141,160,234,234]},{"65879":[34,169,191,160,234]},{"65894":[34,215,191,160]},{"66284":[34,250,191,160]},{"66292":[92,137,247,160]},{"66579":[234,234,234,234,234,234,34,165,128,160,208]},{"66710":[92,111,239,160]},{"67552":[34,126,128,164,234,234,234,234,234]},{"67579":[34,213,130,164]},{"67619":[34,143,128,160]},{"67793":[34,119,220,160,234,234]},{"67934":[55,249,160]},{"68495":[34,150,152,160,208,6,234]},{"68584":[59,249,160]},{"69776":[34,150,152,160,208,4,234]},{"70410":[59,249,160]},{"71576":[234,234,234,234,234,234]},{"71853":[34,130,247,160,234]},{"72216":[156,218,160]},{"72241":[34,215,191,160]},{"72246":[117,151,160]},{"73041":[34,113,152,160]},{"73263":[124,236,160]},{"73340":[34,241,128,160,234]},{"73937":[34,231,191,160]},{"74833":[34,213,130,164]},{"76423":[34,126,237,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"78138":[28,248,160]},{"78172":[34,18,220,160,34,90,151,160,234,234]},{"79603":[34,208,218,160]},{"79767":[34,134,220,160]},{"82676":[59,249,160]},{"87892":[34,95,247,160,234,234,234,234,234]},{"88488":[4]},{"88505":[34,172,238,160]},{"90651":[34,230,235,160,234,234]},{"93230":[34,246,154,164,234,234]},{"93325":[34,178,153,164,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"93521":[34,246,154,164,234,234]},{"97647":[34,122,129,160,107]},{"97776":[34,146,129,160,96]},{"130070":[177,198,249,201,198,249]},{"157614":[34,213,153,164]},{"166195":[5]},{"166200":[1]},{"166205":[7]},{"166331":[34,113,152,160]},{"167201":[4]},{"167203":[252]},{"167207":[254]},{"173045":[229,178,160]},{"173058":[229,178,160]},{"173307":[229,178,160]},{"173320":[229,178,160]},{"183384":[34,45,249,160,234]},{"186959":[80]},{"186977":[80]},{"187009":[80]},{"187802":[34,113,152,160]},{"187902":[34,136,152,160]},{"188153":[0]},{"188234":[16,236,160]},{"188261":[34,143,130,164,96]},{"188337":[34,95,149,160]},{"188959":[34,17,235,160,128,13]},{"189655":[34,60,193,160,234,234]},{"190938":[0]},{"190954":[64]},{"190970":[0]},{"190986":[64]},{"191002":[0]},{"191018":[0]},{"191034":[64]},{"191050":[64]},{"191439":[34]},{"191441":[194,160,234,234]},{"191760":[234,234,234,234,234]},{"191967":[34,109,194,160,234,234]},{"192037":[34,136,152,160]},{"192083":[34,126,141,160,234,234]},{"192095":[34,147,192,160,234]},{"192121":[227,192,160]},{"192140":[34,43,142,160,234]},{"192151":[234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"192286":[34,61,133,160]},{"192350":[141,133,160]},{"192378":[235,132,160]},{"192463":[164,132,160]},{"192506":[34,80,133,160,234,234,234,234,234,234]},{"192561":[182,132,160]},{"192650":[34,106,132,160,176,24,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"192877":[0,128,162]},{"192887":[34,112,141,160]},{"192893":[34,136,152,160]},{"192937":[0,128,162]},{"192957":[0,128,162]},{"192975":[0,128,162]},{"192985":[0,128,162]},{"193014":[34,113,152,160]},{"193025":[252,141,160]},{"193033":[34,113,152,160]},{"193140":[34,156,176,160]},{"193157":[34,149,176,160]},{"193440":[34,191,216,160]},{"193472":[166,234,160]},{"193546":[34,191,216,160]},{"193578":[110,234,160]},{"193854":[34,135,141,160]},{"193859":[32]},{"193888":[35,192,160]},{"194141":[34,251,192,160,234,234,234,234,234]},{"194177":[34,113,192,160,96,234,234,234,234,234,234,234,234]},{"195214":[92,17,235,160]},{"195327":[34,46,141,160,240,2,96,234]},{"195539":[34,45,196,160]},{"195589":[7,174,160]},{"195710":[34,29,174,160,234,234,234,234,234]},{"195735":[234,234,234,234,234,234]},{"195743":[224,173,160]},{"195909":[234,173,160]},{"196477":[34,136,152,160]},{"196497":[34,113,152,160]},{"197750":[250,189,160]},{"198721":[34,161,215,160,234,234]},{"198801":[234,234,234,234,234,234,234,234,34,39,184,164]},{"198942":[34,85,153,164]},{"199084":[6,240]},{"199188":[234,234,234,234,234,234,234,234]},{"199596":[34,83,141,160]},{"199659":[34,168,163,160,96,234]},{"199950":[34,119,141,160]},{"199964":[169,173,160]},{"199993":[34,244,173,160]},{"200070":[34,69,141,160]},{"200470":[34,62,141,160]},{"200845":[34,76,141,160,201]},{"200851":[240]},{"200853":[34]},{"200855":[141,160]},{"200858":[8]},{"200893":[34,83,141,160]},{"201132":[34,0,128,164,234,234]},{"207430":[11]},{"207432":[11]},{"207434":[11]},{"207436":[11]},{"207438":[75]},{"207532":[240]},{"208729":[92,179,195,160,96]},{"208796":[22,244]},{"208799":[41,1,208]},{"208969":[92,141,160]},{"208994":[34,83,141,160,234,234]},{"209010":[139]},{"209098":[235,141,160]},{"209199":[41,247]},{"210057":[92,243,216,160,234,234,234,234]},{"210164":[162,141,160]},{"211413":[218,141,160]},{"213139":[189,185,164]},{"213169":[103,133,160]},{"214205":[34,54,178,160]},{"214972":[200,177,160]},{"215101":[48]},{"215190":[3]},{"215429":[3]},{"217490":[34,51,219,160]},{"217579":[34,156,190,160]},{"224597":[34,191,215,160]},{"224693":[34,211,215,160]},{"224710":[34,75,129,164]},{"225501":[34,12,128,164,234,234]},{"225992":[34,154,129,164]},{"226026":[34,225,216,160,234]},{"226304":[34,20,216,160,234]},{"229522":[115]},{"229524":[133,0,156]},{"229529":[173,123,3,208,93]},{"229574":[34,92,237,160]},{"230816":[186,176,160]},{"230955":[186,176,160]},{"233256":[160,150,160]},{"233266":[34,165,128,160]},{"233297":[34,101,237,160,234]},{"233987":[57,218,160]},{"234731":[34,150,218,160]},{"234747":[34,112,237,160]},{"235953":[34,5,133,160,144,3]},{"236024":[152,201,160]},{"236047":[124,190,160]},{"236578":[34,67,134,164]},{"237653":[34,92,133,164,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"237676":[34,240,132,164]},{"237682":[234,175]},{"238447":[234,234,234,234,234]},{"238458":[7,195,160]},{"238498":[34,178,193,160,128,3]},{"238562":[34,203,195,160,240,4,234]},{"238751":[34,77,217,160]},{"238964":[34,77,217,160]},{"239190":[34,77,217,160]},{"239964":[44,220,160]},{"240044":[92,231,153,164]},{"240196":[234,234,234,234,234,234,34,192,128,160,208]},{"241065":[16]},{"241115":[34,53,216,160]},{"241165":[34,53,216,160]},{"241175":[34,235,128,164]},{"241294":[34,53,216,160]},{"241304":[34,235,128,164]},{"241814":[34,53,216,160,24,125,139,176]},{"241869":[11,235,160]},{"241877":[34,53,216,160,24,125,139,176]},{"242942":[34,127,235,160]},{"242973":[255]},{"243003":[255]},{"243060":[34,171,219,160,234]},{"243067":[234,234,34,141,213,160,234]},{"250411":[34,156,128,164,234,234]},{"250420":[34,83,216,160,234]},{"250478":[34,137,216,160,234]},{"259329":[142,1]},{"259373":[144,1,145,1]},{"259455":[144,1]},{"259501":[145,1]},{"261983":[34,37,151,164,96]},{"270714":[201,3,144]},{"271374":[201,3,176]},{"273121":[34,86,243,160,234]},{"273608":[34,42,180,160,76,230,172]},{"275716":[34,14,180,160,234]},{"276202":[34,75,180,160,76,8,183,32,86,248,107]},{"279550":[64]},{"279552":[49,80,127]},{"279585":[92,239,224,160,234]},{"279601":[34,156,128,160,234]},{"279644":[177,133,160,34,191,237,160,234,234]},{"280037":[34,159,233,160,234,234]},{"280055":[234,234,234,234,234]},{"280063":[11,235,160]},{"280106":[92,70,225,160,234]},{"280265":[128,207,160]},{"280287":[128,206,160]},{"280314":[128,207,160]},{"280335":[34,82,177,160]},{"282028":[34,106,153,164,234,234,234,234,234]},{"282124":[92,32,130,164,234,234,234]},{"282393":[34,73,130,164]},{"282569":[107]},{"283541":[34,150,191,160,234,234]},{"285863":[34,27,129,164,234]},{"285881":[34,53,216,160]},{"285891":[34,182,128,164]},{"295207":[34,198,132,164]},{"295219":[34,223,132,164]},{"296429":[34,197,197,160,234]},{"296466":[128,208]},{"296471":[129,208]},{"296480":[128,210]},{"296488":[128,208]},{"296493":[129,208]},{"296502":[128,210,34,0,128,160]},{"296583":[34,113,152,160]},{"296619":[128,211]},{"296810":[144,205]},{"297038":[176,203]},{"297052":[160,204]},{"297087":[34,33,133,160,234,176]},{"297144":[128,206]},{"297200":[176,203]},{"297225":[160,204]},{"297263":[129,212]},{"297292":[34,94,192,160]},{"297309":[136,212]},{"297904":[34,91,129,160,234]},{"301947":[34,126,130,164,234,234,234,234,144]},{"304330":[240]},{"304340":[240]},{"304350":[240]},{"304360":[240]},{"304370":[240]},{"304380":[240]},{"304390":[240]},{"304400":[240]},{"304410":[240]},{"304420":[240]},{"304430":[240]},{"304440":[240]},{"305387":[5]},{"313527":[189,247]},{"313655":[176]},{"313943":[37]},{"315565":[15,67,255,18,25,22]},{"316450":[15,69,255,18,25,22]},{"324619":[34,138,150,160]},{"324675":[34,149,219,160]},{"324780":[8,8,16]},{"324896":[34,215,235,160,34,125,219,160,234,234,234,234,234,234]},{"324996":[34,231,191,160]},{"325098":[169,2,0,234]},{"325131":[34,7,236,160]},{"325203":[34,156,175,164]},{"325565":[6,31,64,18,1,63,20,1,63,19,31,66,26,31,75,26,32,75,37,45,63,41,32,63,42,60,63]},{"341871":[149,237,160]},{"342245":[34,39,132,160,34,254,218,160,156,0,16,156,1,16,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"342345":[34,196,248,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"343854":[0,1]},{"343880":[50]},{"343898":[50]},{"344082":[234,234,234,234,234,234,234,234,34,136,152,160]},{"344119":[34,136,152,160]},{"344185":[34,136,152,160]},{"344248":[34,136,152,160]},{"344312":[34,136,152,160]},{"344375":[34,136,152,160]},{"344441":[34,136,152,160]},{"344499":[34,136,152,160]},{"344565":[34,136,152,160]},{"344623":[34,136,152,160]},{"344689":[34,136,152,160]},{"344747":[34,136,152,160]},{"344813":[34,136,152,160]},{"344871":[34,136,152,160]},{"344937":[34,136,152,160]},{"345406":[34,166,151,160]},{"345531":[34,185,151,160,96]},{"345560":[34,185,151,160,96]},{"393133":[202,218,160]},{"410028":[94,255,161]},{"410347":[34,156,175,164]},{"412057":[234,234,234,234]},{"412775":[66,0,0,175]},{"412810":[82,237,160]},{"412876":[92,106,175,164]},{"413015":[107]},{"413094":[134,145,164]},{"413109":[34,179,235,160]},{"413141":[34,150,142,164,234,234,234,234,234,234,234,234]},{"413199":[234,234,234,234,234,234,234,234,234]},{"413249":[34,43,146,164,234,234,234,234]},{"413264":[34,82,146,164,234,234,234,234,234,234]},{"413297":[92,121,146,164,234]},{"413317":[234,234,234,234]},{"413448":[34,205,175,164]},{"414010":[76,29]},{"414014":[104]},{"414018":[105]},{"414022":[130]},{"414026":[136,1]},{"414032":[92,29]},{"414036":[120]},{"414040":[121]},{"414044":[146]},{"414048":[136,1]},{"414472":[66,0,0]},{"414504":[77]},{"414506":[78,29,101]},{"414510":[78,29,109]},{"414514":[78,29,136,1]},{"414522":[136,1]},{"414526":[136,1]},{"414532":[93]},{"414534":[94,29,117]},{"414538":[94,29,125]},{"414542":[94,29,136,1]},{"414550":[136,1]},{"414554":[136,1]},{"414611":[34,150,142,164,234,234,234,234,234,234,234,234]},{"414774":[68]},{"414776":[36]},{"414790":[128]},{"414947":[34,107,175,164,128,18,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"414988":[204]},{"414990":[74,1,202,1,42]},{"414996":[146,1,18,1]},{"415015":[34,3,135,164,234]},{"415036":[66]},{"415040":[234,234]},{"415090":[64]},{"415102":[61]},{"415421":[81]},{"415659":[34,107,175,164]},{"415678":[34,171,146,164]},{"416378":[30,147,164]},{"416491":[34,245,146,164,234]},{"416529":[34,208,146,164]},{"416588":[234,234,234,234]},{"416912":[34,236,146,164]},{"416937":[34,222,146,164]},{"417380":[136,1]},{"417384":[136,1]},{"417388":[136,1]},{"417392":[136,1]},{"417396":[136,1]},{"417400":[136,1]},{"417406":[136,1]},{"417410":[136,1]},{"417414":[136,1]},{"417418":[136,1]},{"417422":[136,1]},{"417426":[136,1]},{"417432":[77]},{"417434":[78,29,101]},{"417438":[78,29,109]},{"417442":[78,29,136,1,79,29,98]},{"417450":[101,29,78]},{"417456":[136,1]},{"417462":[93]},{"417464":[94,29,117]},{"417468":[94,29,125]},{"417472":[94,29,136,1,95,29,114]},{"417480":[117,29,94]},{"417486":[136,1]},{"417798":[77]},{"417800":[78,29,101]},{"417804":[78,29,109]},{"417808":[78,29,136,1,79,29,98]},{"417816":[101,29,78]},{"417822":[139]},{"417826":[136,1]},{"417836":[93]},{"417838":[94,29,117]},{"417842":[94,29,125]},{"417846":[94,29,136,1,95,29,114]},{"417854":[117,29,94]},{"417860":[155]},{"417864":[136,1]},{"417870":[136,1]},{"417874":[136,1]},{"417878":[136,1]},{"417882":[136,1]},{"417886":[136,1]},{"417890":[136,1]},{"417894":[136,1]},{"417898":[136,1]},{"417902":[136,1]},{"417906":[136,1]},{"417910":[136,1]},{"417914":[136,1]},{"417918":[136,1]},{"417924":[136,1]},{"417928":[136,1]},{"417932":[136,1]},{"417936":[136,1]},{"417940":[136,1]},{"417944":[136,1]},{"417948":[136,1]},{"417952":[136,1]},{"417956":[136,1]},{"417960":[136,1]},{"417964":[136,1]},{"417968":[136,1]},{"417972":[136,1]},{"417978":[76,29,74,29,103,29,76,29,78,29,101,29,136,1]},{"417996":[136,1]},{"418000":[136,1]},{"418004":[136,1]},{"418010":[92,29,90,29,119,29,92,29,94,29,117,29,136,1]},{"418028":[136,1]},{"418032":[136,1]},{"418036":[136,1]},{"418348":[136,1,76,29,104]},{"418354":[105,29,130]},{"418360":[79]},{"418362":[98,29,101]},{"418366":[78,29,136,1]},{"418382":[136,1,92,29,120]},{"418388":[121,29,146]},{"418394":[95]},{"418396":[114,29,117]},{"418400":[94,29,136,1]},{"418458":[76,29]},{"418462":[74,29]},{"418466":[103,29]},{"418470":[76,29]},{"418474":[78,29,136,1,101,29,136,1]},{"418484":[136,1]},{"418490":[92,29]},{"418494":[90,29]},{"418498":[119,29]},{"418502":[92,29]},{"418506":[94,29,136,1,117,29,136,1]},{"418516":[136,1]},{"418523":[128,13,97,13,98,13,76,13,97,13,134,13,136,1]},{"418541":[144,13,113,13,114,13,92,13,113,13,150,13,136,1]},{"418716":[128,13,97,13,78,13,107,13,78,13,134,13,136,1]},{"418734":[144,13,113,13,94,13,123,13,94,13,150,13,136,1]},{"418842":[9]},{"418848":[9]},{"418854":[9]},{"418860":[9]},{"418866":[9]},{"418872":[9]},{"418874":[44]},{"418878":[73]},{"418880":[73]},{"418882":[73]},{"418884":[73]},{"418886":[201]},{"418888":[45]},{"418890":[30]},{"418892":[9]},{"418898":[9]},{"418900":[9]},{"418902":[9]},{"418904":[9]},{"418906":[137]},{"418908":[77]},{"418910":[30,128,9]},{"418914":[109]},{"418916":[30,128,9]},{"418920":[141]},{"418922":[30,128,9]},{"418926":[173]},{"418928":[30]},{"418930":[137]},{"418936":[73]},{"418942":[9]},{"418948":[9]},{"418954":[73]},{"418960":[9]},{"418966":[201]},{"418972":[137]},{"418978":[137]},{"418984":[9]},{"418986":[9]},{"418988":[9]},{"418990":[9]},{"418992":[9]},{"418994":[9]},{"418996":[9]},{"418998":[9]},{"419004":[9]},{"419006":[9]},{"419008":[9]},{"419010":[9]},{"419012":[9]},{"419014":[9]},{"419016":[9]},{"419018":[9]},{"419024":[5]},{"422780":[138,243,160,234,234]},{"436680":[165,2,105,0]},{"439171":[7]},{"439312":[75]},{"443170":[7]},{"444489":[34,136,152,160]},{"449502":[34,77,220,160,234,234,234,234,234,234]},{"449516":[16,39]},{"449521":[15,39]},{"449575":[34,175]},{"449578":[160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"449609":[34,205]},{"449612":[160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"449691":[34,154,243,160,234,234,234,234,234,234]},{"450109":[128]},{"450137":[34,183,152,160,96]},{"450208":[4]},{"450227":[34,180,132,164]},{"450334":[34,10,153,160]},{"450360":[34,102,180,160,144]},{"450366":[76,136,223,32,70,227,107,234,234,234]},{"450458":[34,210,181,160,234]},{"450492":[34]},{"450494":[152,160,234,234,234]},{"450861":[34,232,181,160]},{"451151":[242]},{"451157":[244]},{"451163":[50,18]},{"451169":[52,18]},{"451292":[76,241,226]},{"451775":[34,209,132,164]},{"452340":[128]},{"452537":[34,125,153,160,234]},{"452559":[34,107,153,160,234]},{"452581":[34,143,153,160,234]},{"452634":[96]},{"453064":[34,170,157,160,96]},{"453452":[242]},{"453458":[244]},{"453464":[50,18]},{"453470":[52,18]},{"453536":[128]},{"453538":[126,0]},{"453542":[64]},{"453546":[34,180,190,160,234,234,76,230,236]},{"453867":[34,161,153,160,234]},{"453892":[34,179,153,160]},{"454092":[34,28,153,160,234,234,234,234,234]},{"454233":[34,28,153,160,234,234,234,234,234]},{"454256":[34,28,192,160,234]},{"454282":[34,28,153,160,234,234,234,234,234]},{"454459":[34,28,153,160,234,234,234,234,234]},{"456591":[19]},{"456599":[18]},{"456607":[20]},{"456631":[21]},{"456871":[75,60]},{"456879":[79,44]},{"456887":[47,36]},{"457299":[34,223,131,160]},{"457344":[34,140,151,160,234,234,234,234]},{"457367":[176,134]},{"457374":[33]},{"457503":[34,160,213,160]},{"457513":[34,198,213,160,128,18,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234]},{"457783":[34,88,193,160,128,15,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,92,199,235,160,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,226,48,162,255]},{"477379":[55]},{"478834":[71]},{"478858":[7]},{"478866":[7]},{"478882":[71]},{"478890":[7]},{"478906":[71]},{"479162":[118]},{"480090":[55]},{"480098":[55]},{"480106":[55]},{"480851":[9]},{"480868":[0]},{"484946":[74,179,35]},{"485100":[34,157,225,160]},{"485416":[34,156,175,35,183,124,234]},{"485439":[183,124,234]},{"485459":[183,124,234]},{"485466":[34,163,179,35]},{"485485":[34,178,176,35,76,253,232]},{"486667":[34,187,131,164,234,234]},{"486677":[34,187,131,164,234,234]},{"486698":[34,200,131,164,234,234]},{"486832":[172,179,35]},{"486873":[34,192,179,35]},{"487006":[151,233,160]},{"487403":[169,2,0,234]},{"487935":[34,197,225,160]},{"488156":[34,197,225,160]},{"488213":[34,197,225,160]},{"488242":[34,197,225,160]},{"488309":[34,197,225,160]},{"488340":[34,197,225,160]},{"488721":[34,197,225,160]},{"489560":[34,197,225,160]},{"490022":[34,197,225,160]},{"490060":[34,197,225,160]},{"490164":[34,197,225,160]},{"490184":[34,197,225,160]},{"490209":[34,197,225,160]},{"490257":[34,197,225,160]},{"490438":[34,213,225,160,96]},{"561458":[12]},{"561460":[30]},{"561462":[63]},{"561464":[127]},{"561466":[127]},{"561468":[63]},{"561470":[19]},{"561473":[12,18,45,94,82,46,19,0]},{"561482":[112]},{"561484":[248,0,252,0,238,0,254,0,254,0,252,0,0,112,136,116,234,154,234,100]},{"561840":[7]},{"561842":[15]},{"561844":[10]},{"561846":[9,1,12,4,7,3,3]},{"561856":[5,8,13,14,11,4,3]},{"561864":[184,0,120,96,254,192,62,0,127,0,254]},{"561876":[254]},{"561878":[8]},{"561880":[248,144,28,246,162,54,220]},{"859925":[0,43]},{"882113":[34,164,153,164]},{"883347":[15]},{"883371":[15]},{"883395":[15]},{"883419":[15]},{"883443":[15]},{"883467":[15]},{"883789":[34,16,132,160]},{"883797":[234,234,234,234,234,234]},{"899214":[92,173,239,160]},{"900244":[34,1,238,160,208,39,234,234,234,234,234,234]},{"900357":[92,248,239,160,234]},{"900437":[92,146,238,160,234]},{"900447":[34,81,247,160,234,234,234]},{"900458":[34,208,218,160]},{"901799":[34,118,150,164,107,32,222,201,107]},{"903876":[34,58,240,160,208,3,107,234,234]},{"912889":[34,27,128,191,107,234]},{"912923":[34]},{"912925":[128,191,107]},{"917533":[188,170,191,174,201,172,184,183,189,178,183,190,174,248,188,170,191,174,201,186,190,178,189,249,172,184,183,189,178,183,190,174,251]},{"917567":[223]},{"917575":[223]},{"917582":[223]},{"917590":[223]},{"917596":[172,170,183,216,189,255,194,184,190]},{"917606":[189,170,180,174,248,182,174,255,188,184,182,174]},{"917619":[185,181,170,172,174,249,183,178,172,174,205,251,252,0,247,228,248,255,249]},{"917639":[254,113,251,252,0,247,255,248,228,249,255,254,113,251,252,0,247,255,248]},{"917659":[249]},{"917662":[113]},{"917664":[252,0,247,228,248,255,254,114,251,252,0,247,255,248,228,254,114,251,178,216,182,255,179,190,188,189,255,176,184,178,183,176,248,184,190,189,255,175,184,187,255,170,255,185,170,172,180,249,184,175,255,188,182,184,180,174,188,205,251,254,110,0,254,107,4,251,184,183,181,194,255,170,173,190,181,189,188,248,188,177,184,190,181,173,255,189,187,170,191,174,181,249,170,189,255,183,178,176,177,189,205,251,194,184,190,255,172,170,183,255,185,187,174,188,188,248,193,255,189,184,255,188,174,174,255,189,177,174,249,182,170,185,205,251,185,187,174,188,188,255,189,177,174,255,170,248,171,190,189,189,184,183,255,189,184,255,181,178,175,189,249,189,177,178,183,176,188,255,171,194,255,194,184,190,205,251,192,177,174,183,255,194,184,190,255,177,170,188,255,170,248,188,192,184,187,173,200,255,185,187,174,188,188,255,171,249,189,184,255,188,181,170,188,177,255,178,189,205,251,12,36,131,154,99,255,117,40,113,124,95,110,54,20,251,170,187,174,255,192,174,255,187,174,170,181,181,194,248,188,189,178,181,181,255,187,174,170,173,178,183,176,249,189,177,174,188,174,198,251,179,174,174,195,174,199,255,189,177,174,187,174,248,187,174,170,181,181,194,255,170,187,174,255,170,249,181,184,189,255,184,175,255,189,177,178,183,176,188,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4]},{"917988":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,189,177,174,194,255,189,184,184,180,255,177,174,187,248,189,184,255,189,177,174,255,172,170,188,189,181,174,199,249,189,170,180,174,255,194,184,190,187,250,246,188,192,184,187,173,255,170,183,173,255,188,170,191,174,246,177,174,187,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,107,2,252,6,178,216,182,255,178,183,255,189,177,174,248,172,170,188,189,181,174,249,171,170,188,174,182,174,183,189,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,107,2,252,6,177,178,255,254,106,200,248,177,170,191,174,255,194,184,190,255,171,174,174,183,249,189,177,178,183,180,178,183,176,255,170,171,184,190,189,250,246,182,174,198,246,170,187,187,187,187,187,176,176,177,177,204,246,204,255,204,255,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,177,174,194,170,200,255,254,106]},{"918267":[181,184,183,176,255,189,178,182,174,255,183,184,249,188,174,174,205,250,246,194,184,190,255,192,170,183,189,255,170,246,182,170,188,189,174,187,255,188,192,184,187,173,198,246,250,246,192,174,181,181,255,176,184,184,173,255,181,190,172,180,246,192,178,189,177,255,189,177,170,189,205,251,178,189,255,184,172,172,190,187,188,255,189,184,248,182,174,255,189,177,170,189,255,178,255,181,178,180,174,249,189,184,170,188,189,255,170,183,173,255,179,170,182,200,250,246,171,190,189,255,172,177,174,174,188,174,255,170,183,173,246,172,187,170,172,180,174,187,188,255,178,188,246,171,174,189,189,174,187,205,250,246,194,184,190,255,181,178,180,174,198,246]},{"918430":[255,228,255,172,177,174,174,188,174,246,255,255,255,255,179,170,182,254,104,251,170,183,194,192,177,184,200,255,178,255,177,170,191,174,248,189,177,178,183,176,188,255,189,184,255,173,184,205,249,194,184,190,255,188,174,174,255,189,177,184,188,174,250,246,162,255,184,191,174,183,188,198,246,246,194,174,170,177,200,255,162,199,250,246,192,177,184,255,177,170,188,255,162,246,184,191,174,183,188,246,183,184,192,170,173,170,194,188,198,199,251,172,184,184,181,255,188,192,184,187,173,199,248,249,250,246,204,246,246,250,246,204,246,246,250,246,185,181,174,170,188,174]},{"918573":[188,170,191,174,255,190,188,251,176,190,170,187,173,188,199,255,177,174,181,185,199,248,189,177,174]},{"918599":[172,187,174,174,185,174,187,249,254,106,255,178,188,255,177,174,187,174,199,251,254,109,1,172,184,184,181,255,171,174,170,183,188,200,248,171,190,189,255,178,255,189,177,178,183,180,249,194,184,190,255,188,177,184,190,181,173,250,246,182,184,188,174,194,255,184,183,255,184,191,174,187,246,189,184,255,189,177,174,255,181,184,188,189,246,192,184,184,173,188,205,251,254,110,0,254,107,4,251,254,109,1,188,170,177,170,188,187,170,177,181,170,200,255,178,248,170,182,205,255,194,184,190,255,192,184,190,181,173,249,173,184,255,192,174,181,181,255,189,184,250,246,175,178,183,173,255,189,177,174,255,163,246,185,174,183,173,170,183,189,188,255,175,187,184,182,246,189,177,174,255,163,255,173,190,183,176,174,184,183,188,250,246,178,183,255,189,177,174,255,181,178,176,177,189,246,192,184,187,181,173,205,246,190,183,173,174,187,188,189,170,183,173,198,250,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,254,110,0,254,107,4,251,254,109,1,181,178,180,174,200,255,178,255,188,178,189,248,177,174,187,174,200]},{"918860":[170,183,173,255,189,174,181,181,249,194,184,190,255,192,177,170,189,255,189,184,250,246,173,184,198,246,246,250,246,170,181,187,178,176,177,189,200,255,176,184,246,170,183,173,255,175,178,183,173,255,170,181,181,246,189,177,174,255,182,170,178,173,174,183,188,200,250,246,189,177,174,187,174,255,170,187,174,200,246,181,178,180,174,200,255,182,170,194,171,174,255,167,246,184,175,255,189,177,174,182,205,255,178,250,246,173,190,183,183,184,255,170,183,194,182,184,187,174,205,246,178,216,182,255,184,181,173,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,224,255,173,194,178,183,176,255,190,183,172,181,174,248,255,255,189,177,178,188,255,192,170,194,204,251,210,211]},{"919053":[187,170,183,173,184,182,178,195,174,187,248,189,177,174,255,189,174,181,174,185,170,189,177,178,172,249,189,178,181,174,188,255,172,170,183,255,177,170,191,174,250,246,177,178,183,189,188,199,251,172,170,191,174,255,189,184]},{"919110":[181,184,188,189,200,248,184,181,173,255,182,170,183,205,249,176,184,184,173,255,181,190,172,180,205,251,248,224,255,181,184,188,189,255,192,184,184,173,188]},{"919150":[173,170,183,176,174,187,199,248,173,174,174,185,255,192,170,189,174,187,199,249,195,184,187,170,188,199,251,192,174,181,172,184,182,174,255,189,184,255,189,177,174,248,182,170,176,178,172,255,188,177,184,185,185,174,251,172,170,191,174,255,170,192,170,194,255,175,187,184,182,248,188,180,194,255,172,170,171,171,170,176,174,188,251,225,255,181,170,180,174,255,177,194,181,178,170,248,249,255,170,181,188,184,200,255,170,255,188,177,184,185,251,227,255,180,170,180,170,187,178,180,184,248,255,255,191,178,181,181,170,176,174,251,227,255,173,174,188,174,187,189,248,249,255,255,255,255,255,178,189,216,188,255,177,184,189,205,251,224,226,255,185,184,189,178,184,183,188,199,248,249,192,178,188,177,255,192,170,189,174,187,175,170,181,181,251,226,255,174,170,188,189,255,185,170,181,170,172,174,248,249,227,255,172,170,188,189,181,174,251,248,255,181,170,180,174,255,255,177,178,187,178,170,177,251,173,184,183,216,189,255,189,170,181,180,255,189,184,248,182,174,255,184,187,255,189,184,190,172,177,255,182,194,249,188,178,176,183,199,251,181,190,182,171,174,187,179,170,172,180,188,200,248,178,183,172,205,249,194,184,190,255,188,174,174,255,216,174,182,200,250,246,192,174,255,188,170,192,255,216,174,182,205,251,225,255,180,170,180,170,187,178,180,184,248,255,255,191,178,181,181,170,176,174,251,173,184,190,171,181,174,200,255,173,184,190,171,181,174,248,189,184,178,181,255,170,183,173,249,189,187,184,190,171,181,174,199,250,246,171,187,178,183,176,255,182,174,255,170,246,182,190,188,177,187,184,184,182,199,251,254,110,0,254,107,4,251,194,184,190,255,176,184,189,255,189,184,248,176,178,191,174,255,182,174,255,189,177,174,249,182,190,188,177,187,184,184,182,200,250,246,183,190,182,185,189,194,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,178,175,255,184,183,181,194,255,194,184,190,248,177,170,173,255,188,184,182,174,189,177,178,183,176,249,189,184,255,185,190,189,255,189,177,170,189,250,246,178,183,200,255,181,178,180,174,255,170,246,171,184,189,189,181,174,204,251,192,177,184,170,200,255,171,190,172,180,184,199,248,183,184,255,174,182,185,189,194,249,171,184,189,189,181,174,188,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0]},{"919706":[107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110]},{"919747":[254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4]},{"919793":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4]},{"919849":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0]},{"919909":[107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,182,174,189,177,178,183,176,255,178,188,248,182,178,188,188,178,183,176,204,249,189,177,174,255,171,178,176,255,180,174,194,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,192,177,184,170,199,255,178,255,172,170,183,248,189,170,181,180,255,170,176,170,178,183,199,251,194,170,183,180,255,184,183,255,189,177,174,248,185,178,189,172,177,175,184,187,180,255,178,183,249,189,177,174,255,172,174,183,189,174,187,255,184,175,250,246,189,184,192,183,200,255,194,170,255,177,174,170,187,173,246,178,189,255,177]},{"920101":[187,174]},{"920104":[251,176,170,183,184,183,255,178,188,255,188,190,172,177,248,170,255,173,178,183,176,190,188,200,255,183,184,249,184,183,174,255,181,178,180,174,188,255,177,178,182,200,250,246,194,170,255,177,174,170,187,173,255,178,189,246,177,174,187,174,205,251,189,177,174,187,174,255,178,188,255,170,248,185,184,187,189,170,181,255,183,174,170,187,249,189,177,174,255,181,184,188,189,250,246,192,184,184,173,188,200]},{"920206":[194,170,246,177,174,170,187,173,255,178,189,255,177,174,187,174,205,251,190,188,174,255,171,184,182,171,188,255,189,184,248,186,190,178,172,180,181,194,255,180,178,181,181,249,189,177,174,255,177,178,183,184,193,200,255,194,170,250,246,177,174,170,187,173,255,178,189,255,177,174,187,174,205,251,178,255,172,170,183,255,171,187,174,170,189,177,174,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,162,160,255,187,190,185,174,174,188,205,248,165,255,170,187,187,184,192,188]},{"920329":[249,192,178,183,255,187,190,185,174,174,188,199,250,246,192,170,183,189,255,189,184,255,185,181,170,194,198,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,181,174,189,216,188,255,173,184,255,189,177,178,188,199,251,192,177,174,187,174,255,170,187,174,255,194,184,190,248,176,184,178,183,176,198,249,188,189,187,170,178,176,177,189]},{"920419":[190,185,199,251,180,174,174,185,255,185,181,170,194,178,183,176]},{"920436":[248]},{"920441":[194,174,188,249,255]},{"920449":[183,184,254,104,251,201,192,178,188,177,178,183,176,255,185,184,183,173,201,248,249,255,184,183,255,191,170,172,170,189,178,184,183,251,185,178,172,180,255,188,184,182,174,189,177,178,183,176,248,189,184,255,189,177,187,184,192,255,178,183,205,254,105,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,194,184,190,255,188,190,187,174,198,248,255,255,228,255,184,177,255,194,174,170,177,249,255,255,255,255,190,182,254,104,251,192,174,181,181,200,255,178,255,173,184,183,216,189,248,192,170,183,189,255,178,189,200,255,188,184,249,189,170,180,174,255,178,189,255,171,170,172,180,205,251,254,110,0,254,107,4,251,178,255,176,187,170,183,189]},{"920613":[194,184,190,248,189,177,174,255,170,171,178,181,178,189,194,255,189,184,249,171,181,184,172,180,250,246,175,178,187,174,171,170,181,181,188,205,246,173,184,183,216,189,255,181,184,188,174,246,189,177,178,188,255,189,184,255,170,250,246,185,178,180,178,189,199,251,188,184,200,255,192,184,190,181,173,183,216,189,248,178,189,255,171,174,255,183,178,172,174,255,189,184,249,180,178,181,181]},{"920711":[176,170,183,184,183,198,250,246,189,177,174,188,174,255,188,177,184,190,181,173,246,177,174,181,185,255,178,183,255,189,177,174,246,175,178,183,170,181,255,185,177,170,188,174,205,251,171,184,189,189,181,174,255,175,178,181,181,174,173,199,248,182,184,183,174,194,255,188,170,191,174,173,199,251,189,177,170,183,180,255,194,184,190,255,175,184,187,248,189,177,174]},{"920803":[188,192,184,187,173,200,249,177,174,187,174,255,178,188,255,170,250,246,188,189,178,172,180,255,184,175,246,171,190,189,189,174,187,205,251,177,170,185,185,178,183,174,188,188,255,190,185,199,248,194,184,190,255,170,187,174,255,183,184,192,249,254,108,1,254,108,0,255,177,170,185,185,194,199,251,194,184,190,187,255,192,178,188,177,198,248,255,255,228,182,184,187,174,255,171,184,182,171,188,249,255,255,255,182,184,187,174,255,170,187,187,184,192,188,254,104,251,192,184,184,201,177,184,184,199,248,194,184,190,255,172,170,183,255,183,184,192,249,172,170,187,187,194]},{"920947":[254,108,1,254,108,0,255,171,184,182,171,188,251,192,184,184,201,177,184,184,199,248,194,184,190,255,172,170,183,255,183,184,192,249,177,184,181,173,255,254,108,1,254,108,0,255,170,187,187,184,192,188,251,194,184,190,255,177,170,191,174,255,170,181,181,255,178,248,172,170,183,255,176,178,191,174,255,194,184,190,200,249,177,174,187,174,255,170,187,174,255,194,184,190,187,250,246,187,190,185,174,174,188,255,171,170,172,180,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,181,178,175,174,198,255,181,184,191,174,198,248,177,170,185,185,178,183,174,188,188,198,255,189,177,174,249,186,190,174,188,189,178,184,183,255,194,184,190,250,246,188,177,184,190,181,173,255,187,174,170,181,181,194,246,170,188,180,255,178,188,255,255,192,170,188]},{"921180":[189,177,178,188,255,176,174,183,174,187,170,189,174,173,250,246,171,194,255,188,189,184,184,185,188,255,170,181,190,246,184,187,255,188,189,184,184,185,188,255,179,174,189,198,251,194,184,190,255,188,177,184,190,181,173,248,185,181,170,194,255,189,177,170,189,249,175,181,190,189,174,255,175,184,187,255,189,177,174,250,246,192,174,170,189,177,174,187,191,170,183,174,200]},{"921274":[172,170,190,188,174,255,187,174,170,188,184,183,188]},{"921288":[251,194,184,190,255,188,177,184,190,181,173,248,185,181,170,194,255,189,177,170,189,249,175,181,190,189,174,255,175,184,187,255,189,177,174,250,246,192,174,170,189,177,174,187,191,170,183,174,200,246,172,170,190,188,174,255,187,174,170,188,184,183,188,205,251,181,178,175,174,198,255,181,184,191,174,198,248,177,170]},{"921368":[185,178,183,174,188,188,198,255,189,177,174,249,186,190,174,188,189,178,184,183,255,194,184,190,250,246,188,177,184,190,181,173,255,187,174,170,181,181,194,246,170,188,180,255,178,188,255,255,192,170,188,246,189,177,178,188,255,176,174,183,174,187,170,189,174,173,250,246,171,194,255,188,189,184,184,185,188,255,170,181,190,246,184,187,255,188,189,184,184,185,188,255,179,174,189,198,251,189,177,178,188,255,178,188,248,172,177,187,178,188,189,184,188,216,255,177,190,189,205,249,250,246,177,174,216,188,255,184,190,189,200,246,188,174,170,187,172,177,178,183,176,255,175,184,187,246,170,255,171,184,192,205,251,177,178,200,255,173,184,255,194,184,190,248,180,183,184,192,255,191,174,174,189,184,187,185,198,249,250,246,194,184,190,255,187,174,170,181,181,194,246,188,177,184,190,181,173,205,255,170,183,173,246,170,181,181,255,189,177,174,255,184,189,177,174,187,250,246,176,187,174,170,189,255,176,190,194,188,255,192,177,184,246,182,170,173,174,255,189,177,178,188,246,185,184,188,188,178,171,181,174,205,250,246,176,184,255,189,177,170,183,180,255,189,177,174,182,205,246,246,250,246,178,175,255,194,184,190,255,172,170,183,246,172,170,189,172,177,255,189,177,174,182,204,251,192,177,194,255,170,187,174,255,194,184,190,248,187,174,170,173,178,183,176,255,189,177,178,188,249,188,178,176,183,198,255,187,190,183,199,199,199,251,194,184,190,255,183,174,174,173,255,172,170,185,174,200,248,171,190,189,255,183,184,189,249,177,184,184,180,188,177,184,189,251,189,184,188,188,255,187,184,172,180,188,248,189,184,188,188,255,178,189,174,182,188,249,189,184,188,188,255,172,184,184,180,178,174,188,251,224,255,188,180,190,181,181,255,192,184,184,173,188,248,249,225,255,188,189,174,191,174,216,188,255,189,184,192,183,251,248,226,255,180,170,187,180,170,189,188,255,172,170,191,174,251,248,226,255,173,170,187,180,255,185,170,181,170,172,174,251,248,227,255,171,184,182,171,255,188,177,184,185,185,174,251,248,227,255,182,178,188,174,187,194,255,182,178,187,174,249,255,183,184,255,192,170,194,255,178,183,205]},{"921873":[183,184,255,192,170,194,255,184,190,189,205,251,177,170,191,174,255,170,255,189,187,190,181,178,174,248,170,192,174,188,184,182,174,255,173,170,194,199,251,192,170,189,174,187,175,170,181,181,248,190,185,255,170,177,174,170,173,249,182,170,180,174,255,192,178,188,177,174,188,251,226,224,255,177,170,191,174,255,194,184,190,248,182,174,189,255,192,184,174,175,190,181,249,178,180,174,198,251,181,184,184,180,178,183,176,255,175,184,187,255,170,248,185,187,178,183,172,174,188,188,198,255,181,184,184,180,249,173,184,192,183,188,189,170,178,187,188,205,251,183,184,255,181,184,183,180,188,248,170,181,181,184,192,174,173,199,251,254,107,2,194,184,190,255,183,174,174,173,255,170,255,171,184,192,248,189,184,255,176,174,189]},{"922055":[185,170,188,189,249,189,177,174,255,187,174,173,250]},{"922069":[174,194,174,176,184,187,174,205,255,173,174,187,185,194,251,254,107,2,178,175,255,194,184,190,255,175,178,183,173,255,170,248,188,177,178,183,194,255,171,170,181,181,200,249,194,184,190,255,172,170,183,255,171,174,255,194,184,190,250,246,178,183,255,189,177,174,255,173,170,187,180,246,192,184,187,181,173,205,251,221,223,223,255,221,223,223,255,221,223,223,248,255,222,255,221,223,223,221,255,222,249,221,223,223,255,222,221,221,222,255,223,223,222,251,170,255,189,174,188,189,255,184,175,248,188,189,187,174,183,176,189,177,255,255,178,175,249,194,184,190,255,177,170,191,174,255,163,250,246,185,174,183,173,170,183,189,188,200,255,178,216,182,246,194,184,190,187,188,205,251,254,107,2,190,188,174,255,189,177,174,248,182,178,187,187,184,187,200,255,184,187,255,189,177,174,249,177,184,184,180,188,177,184,189,255,170,183,173,250,246,177,170,182,182,174,187,200,255,189,184,255,176,174,189]},{"922294":[189,184,255,189,184,192,174,187,255,184,175,246,177,174,187,170,199,251,254,107,2,173,187,170,178,183,255,189,177,174,248,175,181,184,184,173,176,170,189,174,255,189,184,249,187,170,178,188,174,255,189,177,174,250,246,192,170,189,174,187,255,177,174,187,174,199,251,254,107,2,171,181,178,183,173,255,177,170,189,174,216,188,248,171,187,178,176,177,189,255,181,178,176,177,189,205,251,254,107,2,181,178,176,177,189,178,183,176,255,164,248,189,184,187,172,177,174,188,255,192,178,181,181,249,184,185,174,183,255,194,184,190,187,255,192,170,194,250,246,175,184,187,192,170,187,173,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,174,172,184,183,173,170,187,194,248,189,184,190,187,183,170,182,174,183,189,249,192,178,183,183,174,187,188,250,254,121,45,246,255,255,206,206,206,162,160,161,167,206,206,206,246,170,255,255,195,170,174,183,251,254,107,2,189,177,178,188,255,178,188,255,170,248,175,190,183,183,194,255,181,184,184,180,178,183,176]},{"922537":[174,183,174,182,178,195,174,187,251,254,107,2,189,177,178,183,176,188,255,172,170,183,255,171,174,248,180,183,184,172,180,174,173,255,173,184,192,183,200,249,178,175,255,194,184,190,255,175,170,183,172,194,250,246,194,184,190,187,188,174,181,175,255,170,246,173,170,188,177,178,183,176,255,173,190,173,174,205,251,254,107,2,194,184,190]},{"922623":[172,170,183,248,187,174,175,181,174,172,189,249,170,176,170,177,183,178,182,216,188,250,246,174,183,174,187,176,194,255,192,178,189,177,246,188,192,184,187,173,200,255,171,190,176,201,183,174,189,246,184,187,255,177,170,182,182,174,187,205,251,254,107,2,170,181,181,255,187,178,176,177,189,255,188,189,184,185,248,172,184,181,181,170,171,184,187,170,189,174,249,170,183,173,255,181,178,188,189,174,183,250,246,178,172,174,255,178,188]},{"922733":[171,170,172,180,246,192,178,189,177,255,182,194,255,171,187,170,183,173,246,183,174,192,255,178,183,191,174,183,189,178,184,183,205,251,254,107,2,194,184,190,255,188,177,170,181,181]},{"922780":[183,184,189,248,185,170,188,188,204,255,192,178,189,177,184,190,189,249,189,177,174,255,187,174,173]},{"922806":[172,170,183,174,205,251,254,107,2,194,184,190,255,172,170,183,255,190,188,174,248,175,178,187,174,255,187,184,173,255,184,187,249,171,184,182,171,184,188,255,189,184,250,246,185,170,188,188,205,251,254,107,2,180,183,184,172,180,255,216,174,182,255,173,184,192,183,248,170,183,173,255,189,177,174,183]},{"922883":[171,184,182,171,249,189,177,174,182,255,173,174,170,173,205,251,254,107,2,189,177,178,188,255,178,188,255,170,255,171,170,173,248,185,181,170,172,174,200,255,192,178,189,177,255,170,249,176,190,194,255,192,177,184,255,192,178,181,181,250,246,182,170,180,174,255,194,184,190,255,175,170,181,181,204,246,246,250,246,170,255,181,184,189,205,251,187,170,183,173,184,182,178,195,174,187,248,189,184,190,187,183,170,182,174,183,189,249,192,178,183,183,174,187,188,250,254,121,45,246,255,255,206,206,206,162,160,161,168,206,206,206,246,188,255,255,170,183,173,194,246,250,246,255,255,206,206,206,162,160,161,167,206,206,206,246,170,255,255,170,179,183,174,171,161,167,164,246,188,255,255,170,179,183,174,171,161,167,164]},{"923063":[172,170,190,176,177,189,255,170,255,171,174,174,248,255,255,228,255,180,174,174,185,249,255]},{"923087":[255,255,187,174,181,174,170,188,174,254,104,251,172,170,190,176,177,189,255,175,170,178,187,194,199,248,255,255,228,255,180,174,174,185,249,255,255,255,255,187,174,181,174,170,188,174,254,104,251,192,177,184,170,200,255,171,190,172,180,184,199,248,183,184,255,174,182,185,189,194,249,171,184,189,189,181,174,188,205,251,194,184,190,187,255,189,178,182,174,255,192,170,188,248,254,108,3,254,108,2,255,182,178,183,255,254,108,1,254,108,0,255,188,174,172,205,251,194,184,190,255,177,170,191,174,255,161,165,248,188,174,172,184,183,173,188,200,249,176,184,204,255,176,184,204,255,176,184,204,251,183,178,172,174,199,248,194,184,190,255,172,170,183,255,177,170,191,174,249,189,177,178]},{"923260":[255,189]},{"923263":[170,188,177,199,251,189,184,184,255,188,181,184,192,199,248,178,255,180,174,174,185,255,182,194,249,185,187,174,172,178,184,190,188,199,251,194,184,190,255,170,181,187,174,170,173,194,248,177,170,191,174,255,194,184,190,187,249,185,187,178,195,174]},{"923326":[255,173,178,183,176,190,188,199,251,189,177,184,190,176,177,189,255,194,184,190,248,172,184,190,181,173,255,188,183,174,170,180,249,178,183,200,255,174,177,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,175,178,183,174,199,255,178,255,173,178,173,183,216,189,248,192,170,183,189,255,194,184,190,187,249,182,184,183,174,194,255,170,183,194,192,170,194,205,251,173,190,173,174,199,255,194,184,190,248,170,181,187,174,170,173,194,255,177,170,191,174,249,178,189,205,251,172,184,184,181,199,255,170,255,171,174,174,199,248,177,174,187,174,216,188,255,161,160,160,249,187,190,185,174,174,188,205,251,192,177,184,170,199,255,170,255,175,178,188,177,199,248,194,184,190,255,192,170,181,180,174,173,249,189,177,178,188,255,170,181,181,255,189,177,174,250,246,192,170,194,255,177,174,187,174,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,177,200,255,172,184,182,174,255,171,194,248,170,183,194,255,189,178,182,174,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,178,255,181,184,188,189,255,182,194,248,175,187,178,174,183,173,205,255,177,174,181,185,249,182,174,255,175,178,183,173,255,177,178,182]},{"923635":[254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,182,174,189,177,178,183,176,255,189,177,178,188,248,185,187,174,172,178,184,190,188,255,189,170,180,174,188,249,189,178,182,174,204,255,172,184,182,174,250,246,171,170,172,180,255,181,170,189,174,187,205,251,189,177,170,183,180,188,199,248,249,189,177,170,183,180,188,199,251,173,174,187,183,189,255,189,170,180,174,255,174,187,248,179,174,187,171,188,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,177,255,178,255,188,174,174,200,255,183,184,189,248,176,184,184,173,255,174,183,184,190,176,177,249,175,184,187,255,194,184,190,204]},{"923790":[175,178,183,174]},{"923795":[251,188,189,178,181,181,255,177,170,191,174,183,216,189,248,175,184,190,183,173,255,189,177,174,249,178,189,174,182,198,255,173,178,176,255,178,183,250,246,189,177,174,255,181,178,176,177,189,246,192,184,187,181,173,255,170,187,184,190,183,173,246,177,174,187,174,200,255,173,178,183,176,190,188,199,251,188,184]},{"923874":[178,255,176,170,191,174,255,194,184,190,248,170,183,255,178,189,174,182,200,255,170,183,173,249,194,184,190,216,187,174,255,188,189,178,181,181,250,246,177,174,187,174,205,246,246,250,246,246,246,250,246,178,255,182,174,170,183,200,255,192,174,255,172,170,183,246,188,178,189,255,177,174,187,174,255,170,183,173,246,188,189,170,187,174,255,170,189,255,174,170,172,177,250,246,184,189,177,174,187,200,255,178,175,255,194,184,190,246,181,178,180,174,204,246,250,246,246,246,250,246,246,246,250,246,175,178,183,174,200,255,178,255,176,190,174,188,188,246,194,184,190,255,188,177,184,190,181,173,246,179,190,188,189,255,176,184,205,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174,255,171,184,184,180,249,184,185,174,183,188,255,189,177,174,250,246,173,174,188,174,187,189,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,183,184,189,177,178,183,176,249,173,184,178,183,176,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,178,216,182,249,172,177,174,170,185,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,170,182,255,178,249,172,177,174,170,185,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,195,184,187,170,249,181,178,191,174,188,255,170,189,255,189,177,174,250,246,174,183,173,255,184,175,255,189,177,174,246,187,178,191,174,187,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174,255,172,170,185,174,249,172,170,183,255,185,170,188,188,250,246,189,177,187,184,190,176,177,255,189,177,174,246,171,170,187,187,178,174,187,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200]},{"924324":[188,185,178,183,200,249,177,170,182,182,174,187,200,255,184,187,255,183,174,189,250,246,189,184,255,177,190,187,189,246,170,176,170,177,183,178,182,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,172]},{"924390":[183,249,179,190,182,185,255,178,183,255,189,177,174,250,246,192,174,181,181,255,171,194,255,189,177,174,246,171,181,170,172,180,188,182,178,189,177,188,251,254,109,1,189,177,174,255,171,181,170,172,180,255,172,170,189,188,248,170,187,174,255,177,190,183,176,187,194,200,249,172,184,182,174,255,171,170,172,180,255,192,178,189,177]},{"924474":[246,187,190,185,174,174,188,251,254,109,1,192,174,181,172,184,182,174,255,189,184,255,189,177,174,248,175,184,187,189,190,183,174,249,188,177,184,185,185,174,199,250,246,175,170,183,172,194,255,170,255,187,174,170,173,198,246,255,255,228,178,255,182,190,188,189,255,180,183,184,192,246,255,255,255,183,174,176,170,189,178,191,174,254,104,251,254,109,1,175,184,187,255,254,108,0,254,108,1,255,187,190,185,174,174,188,248,178,189,255,178,188,255,173,184,183,174,205,249,171,174,255,176,184,183,174,199,251,254,109,1,192,174,181,181,255,189,177,174,183,200,255,192,177,194,248,173,178,173,255,194,184,190,255,174,191,174,183,249,172,184,182,174,255,178,183,255,177,174,187,174,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,192,177,194]},{"924673":[194,184,190,249,173,184,198,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,185,170,183,173,170,249,172,187,170,172,180,174,187,188,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,189,177,174,249,182,178,188,188,178,183,176,250,246,171,181,170,172,180,188,182,178,189,177,255,178,188,246,188,184,190,189,177,255,184,175,255,189,177,174,246,191,178,181,181,170,176,174,255,184,175,250,246,184,190,189,172,170,188,189,188]},{"924801":[254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,184,185,174,183,249,172,177,174,188,189,188,255,189,184,255,176,174,189,250,246,188,189,190,175,175,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,172,170,183,249,171,190,194,255,170,255,183,174,192,255,171,184,182,171,250,246,170,189,255,189,177,174,255,171,184,182,171,246,188,177,184,185,185,174,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,171,178,176,249,171,184,182,171,188,255,171,181,184,192,255,190,185,250,246,172,187,170,172,180,174,173,255,192,170,181,181,188,246,178,183,255,185,194,187,170,182,178,173,188,251,254,109,1,171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200,255,194,184,190,255,183,174,174,173,249,170,181,181,255,189,177,174,250,246,172,187,194,188,189,170,181,188,255,189,184,246,184,185,174,183,255,176,170,183,184,183,216,188,246,189,184,192,174,187,251,254,109]},{"925055":[171,194,255,189,177,174,255,171,181,170,172,180,248,172,170,189,188,200]},{"925074":[188,178,181,191,174,187,249,170,187,187,184,192,188,255,192,178,181,181,250,246,173,174,175,174,170,189,255,176,170,183,184,183,246,178,183,255,177,178,188,255,175,178,183,170,181,246,185,177,170,188,174,251,175,184,187,255,162,160,255,187,190,185,174,174,188,248,178,216,181,181,255,189,174,181,181,255,194,184,190,249,188,184,182,174,189,177,178,183,176,198,250,246,177,184,192,255,170,171,184,190,189,255,178,189,198,246,255,255,228,255,194,174,188,246,255,255,255,255,183,184,254,104,251,178,255,184,183,172,174,255,192,170,188,255,170,248,189,174,170,255,180,174,189,189,181,174,200,249,171,190,189,255,189,177,174,183,255,178,250,246,182,184,191,174,173,255,190,185,255,178,183,246,189,177,174,255,192,184,187,181,173,200,255,170,183,173,246,183,184,192,255,194,184,190,255,172,170,183,250,246,188,174,174,255,182,174,255,170,188,246,189,177,178,188,205,255,182,170,180,174,188,246,194,184,190,255,192,184,183,173,174,187,205,250,246,192,177,170,189,255,178,255,172,184,190,181,173,246,171,174,255,183,174,193,189,255,189,178,182,174,205,251,189,177,174,183,255,176,184,255,170,192,170,194,199,251,189,177,174,187,174,255,178,188,255,170,248,189,177,178,174,175,255,178,183,255,189,177,174,249,173,174,188,174,187,189,200,255,177,174,255,172,170,183,250,246,184,185,174,183,255,172,187,174,174,185,194,246,172,177,174,188,189,188,255,189,177,170,189,246,175,184,181,181,184,192,255,194,184,190,205,250,246,171,190,189,255,183,184,192,255,189,177,170,189,246,192,174,255,177,170,191,174,255,189,177,170,189,246,184,190,189,255,184,175,255,189,177,174,250,246,192,170,194,200,255,173,184,255,194,184,190,246,181,178,180,174,255,182,194,255,177,170,178,187,198,246,178,216,191,174,255,188,185,174,183,189,250,246,174,184,183,188,255,176,174,189,189,178,183,176,246,178,189,255,189,177,178,188,255,192,170,194,205,251,192,178,189,177,255,172,187,194,188,189,170,181,188,248,165,255,166,200,255,194,184,190,255,172,170,183,249,175,178,183,173,255,170,255,176,187,174,170,189,250,246,175,170,178,187,194,255,178,183,255,189,177,174,246,185,194,187,170,182,178,173,205,246,250,246,175,181,184,182,185,255,175,181,184,182,185,200,246,192,177,178,195,195,181,174,255,192,177,184,182,185,251,170,181,181,255,178,255,172,170,183,255,188,170,194,248,178,188,255,189,177,170,189,255,182,194,249,181,178,175,174,255,178,188,255,185,187,174,189,189,194,250,246,185,181,170,178,183,200]},{"925669":[178,255,181,178,180,174,246,192,170,189,172,177,178,183,216,255,189,177,174,250,246,185,190,173,173,181,174,188,255,176,170,189,177,174,187,246,187,170,178,183,200,246,170,183,173,255,170,181,181,255,178,255,172,170,183,250,246,173,184,255,178,188,255,179,190,188,189,246,185,184,190,187,255,188,184,182,174,255,189,174,170,246,175,184,187,255,189,192,184,200,250,246,170,183,173,255,188,185,174,170,180,255,182,194,246,185,184,178,183,189,255,184,175,255,191,178,174,192,246,171,190,189,255,178,189,216,188,255,183,184,189,250,246,188,170,183,174,200,246,178,189,216,188,255,183,184,189,255,188,170,183,174,251,254,109,1,178,216,182,255,188,178,172,180,199,255,188,177,184,192,248,182,174,255,170,255,171,184,189,189,181,174,200,249,176,174,189,255,188,184,182,174,189,177,178,183,176,199,251,254,110,0,254,107,4,251,254,109,1,181,174,170,191,174,255,182,174,255,170,181,184,183,174,248,178,216,182,255,188,178,172,180,205,255,194,184,190,249,177,170,191,174,255,182,194,255,178,189,174,182,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,222,222,255,222,221,223,222,223]},{"925972":[223,221,223,248,223,221,221]},{"925980":[223,221,221,223,222,249,223,223,221,222,223,255,221,223,222,222,221,251,172,170,183]},{"926002":[194,184,190,255,182,170,180,174,248,189,177,178,183,176,188,255,175,170,181,181,249,184,190,189,255,184,175,255,189,177,174,250,246,188,180,194,198,255,192,178,189,177,255,189,177,174,246,182,170,188,189,174,187,255,188,192,184,187,173,200,246,194,184,190,255,172,170,183,199,251,172,170,183]},{"926076":[194,184,190,255,182,170,180,174,248,189,177,178,183,176,188,255,175,170,181,181,249,184,190,189,255,184,175,255,189,177,174,250,246,188,180,194,198,255,192,178,189,177,255,189,177,174,246,182,170,188,189,174,187,255,188,192,184,187,173,200,246,194,184,190,255,172,170,183,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,119,7,252,3,254,107,2,254,103,255,174,185,178,188,184,173,174,255,255,178,178,178,255,254,120,3,248,255,170,255,181,178,183,180]},{"926199":[189,184,255]},{"926203":[255,255,249]},{"926209":[189,177,174,255,185,170,188,189,255,255,255,254,120,3,246,255,255,187,170,183,173,184,182,178,195,174,187,254,120,3,246,170,175,189,174,187,255,182,184,188,189,181,194,246,173,178,188,187,174,176,170,187,173,178,183,176,246,192,177,170,189,255,177,170,185,185,174,183,174,173,246,178,183,255,189,177,174,255,175,178,187,188,189,246,189,192,184,255,176,170,182,174,188,205,254,120,3,246,181,178,183,180]},{"926312":[170,192,170,180,174,183,188,246,189,184,255,177,178,188,255,190,183,172,181,174,246,181,174,170,191,178,183,176,255,189,177,174,246,177,184,190,188,174,205,254,120,3,246,177,174,255,179,190,188,189,255,187,190,183,188,246,184,190,189,255,189,177,174,255,173,184,184,187,200,254,120,3,246,178,183,189,184,255,189,177,174,255,187,170,178,183,194,246,183,178,176,177,189,205,254,120,3,254,103,254,103,246,176,170,183,184,183,255,177,170,188,246,182,184,191,174,173,255,170,187,184,190,183,173,246,170,181,181,255,189,177,174,255,178,189,174,182,188,246,178,183,255,177,194,187,190,181,174,205,254,120,7,246,194,184,190,255,192,178,181,181,255,177,170,191,174,246,189,184,255,175,178,183,173,255,170,181,181,246,189,177,174,255,178,189,174,182,188,246,183,174,172,174,188,188,170,187,194,255,189,184,246,171,174,170,189,255,176,170,183,184,183,205,254,120,7,246,189,177,178,188,255,178,188,255,194,184,190,187,246,172,177,170,183,172,174,255,189,184,255,171,174,255,170,246,177,174,187,184,205,254,120,3,254,103,254,103,246,194,184,190,255,182,190,188,189]},{"926579":[176,174,189,246,174,183,184,190,176,177,246,172,187,194,188,189,170,181,188,255,189,184,246,171,174,170,189,255,176,170,183,184,183,205,254,120,9,254,103,254,103,251,254,107,2,254,119,7,252,3,247,181,184,184,180,255,170,189,255,189,177,178,188,248,188,189,170,181,175,184,188,255,184,183,255,189,177,174,249,189,177,187,184,183,174,205,251,254,107]},{"926669":[254,119,7,252,3,247,178,189,255,178,188,255,194,184,190,187,248,189,178,182,174,255,189,184,255,188,177,178,183,174,199,251,254,107,2,254,119,7,252,3,247,170,181,188,184,200,255,194,184,190,255,183,174,174,173,248,189,184,255,173,174,175,174,170,189,255,189,177,178,188,249,176,190,194,199,251,254,110,0,254,107,4,251,163,160,255,171,184,182,171,188,255,175,184,187,248,161,160,160,255,187,190,185,174,174,188,205,249,176,184,184,173,255,173,174,170,181,188,255,170,181,181,250,246,173,170,194,199,251,163,160,255,171,184,182,171,188]},{"926807":[175,184,187,248,161,160,160,255,187,190,185,174,174,188,200,249,161,160,160,255,187,190,185,174,174,188,255,161,250,246,171,178,176,255,171,184,182,171,205,255,176,184,184,173,246,173,174,170,181,188,255,170,181,181,255,173,170,194,199,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,177,174,177,200,255,176,184,184,173,255,181,190,172,180,248,176,174,189,189,178,183,176,255,178,183,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,185,175,175,189,205,255,178,255,177,170,191,174,248,183,184,255,187,174,170,188,184,183,255,189,184,249,177,170,183,176,205,255,188,174,174,255,194,170,199,251,183,184,255,183,184,255,183,184,255,183,184,248,183,184,199,255,192]},{"926994":[255,188,177,184,190,181,173,249,185,181,170,194,255,171,194,255,182,194,250,246,187,190,181,174,188,199,246,176,184,184,173,171,194,174,204,251,254,110]},{"927033":[254,107,4,251,170,170,170,170,177,177,177,177,206,199,248,188,201,188,184,255,171,187,178,176,177,189,206,199,251,254,110,0,254,107,4,251,178,255,184,183,172,174,255,177,170,173,255,170,248,175,178,188,177,255,173,178,183,183,174,187,205,255,178,249,188,189,178,181,181,255,187,174,182,174,182,171,174,187,250,246,178,189,255,189,184,255,189,177,178,188,246,173,170,194,205,251,173,184,255,194,184,190,248,187,174,182,174,182,171,174,187,255,192,177,174,183,249,178,255,192,170,188,255,194,184,190,183,176,198,250,246,246,178,255,188,190,187,174,255,173,184,183,216,189,205,251,188,184,200,255,178,216,191,174,255,171,174,174,183,248,181,178,191,178,183,176,255,178,183,255,189,177,178,188,249,172,170,191,174,255,175,184,187,250,246,194,174,170,187,188,200,255,170,183,173,255,194,184,190,246,189,177,178,183,180,255,194,184,190,255,172,170,183,246,179,190,188,189,255,172,184,182,174,250,246,170,181,184,183,176,255,170,183,173,255,171,184,182,171,246,184,185,174,183,255,192,170,181,181,188,198,251,184,183,172,174,200,255,178,255,175,170,187,189,174,173,248,178,183,255,189,177,178,188,255,172,170,191,174,249,188,184,255,171,170,173,255,170,181,181,255,189,177,174,250,246,179,170,195,195,255,177,170,183,173,188,246,176,190,194,188,255,187,170,183]},{"927349":[170,192,170,194,246,170,183,173,255,177,178,173,255,178,183,255,189,177,174,250,246,188,170,183,173,205,251,185,170,183,173,170,188,255,170,187,174,248,191,174,187,194,255,191,178,172,178,184,190,188]},{"927400":[170,183,178,182,170,181,188,205,255,183,174,191,174,187]},{"927416":[175,184,187,176,174,189,204,246,246,250,246,246,246,178,255,183,174,191,174,187,255,192,178,181,181,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,184,183,174,255,184,175,255,190,188,248,170,181,192,170,194,188,255,181,178,174,188,205,251,184,183,174,255,184,175,255,190,188,248,170,181,192,170,194,188,255,189,174,181,181,188,249,189,177,174,255,189,187,190,189,177,205,251,184,183,174,255,184,175,255,190,188,248,181,178,180,174,188,255,185,174,170,183,190,189,249,171,190,189,189,174,187,205,251,178,255,192,170,181,181,174,173,255,184,175,175,248,182,194,255,171,187,184,189,177,174,187,255,181,174,184,249,250,246,192,177,170,189,255,170,255,173,178,183,176,190,188,205,251,183,184,192,255,178,255,188,177,184,190,181,173,248,185,187,184,171,170,171,181,194,255,189,170,181,180,249,189,184,255,177,178,182,204,251,173,178,173,255,194,184,190,255,172,184,182,174,248,175,187,184,182,255,182,194,249,171,187,184,189,177,174,187,188,255,187,184,184,182,198,250,246,246,170,187,174,255,192,174,255,172,184,184,181,198,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,175,178,183,174,199,248,176,184,255,176,174,189,255,188,184,182,174,249,182,184,187,174]},{"927832":[182,184,183,174,194,250,246,175,178,187,188,189,205,251,254,110,0,254,107,4,251,182,194,255,176,187,170,183,173,185,170,255,178,188,248,184,191,174,187,255,178,183,255,189,177,174,249,174,170,188,189,205,255,178,216,182,255,171,170,173,250,246,192,178,189,177,246,173,178,187,174,172,189,178,184,183,188,205,246,178,216,181,181,255,182,170,187,180,255,194,184,190,187,250,246,182,170,185,205,255,171,174,188,189,255,184,175,246,181,190,172,180,199,254,121,45,251,188,184,182,174,173,170,194,255,178,216,181,181,248,171,174,255,178,183,255,170,255,177,178,176,177,249,188,172,177,184,184,181,255,171,170,183,173,199,251,173,178,173,255,194,184,190,255,180,183,184,192,204,248,249,250,246,170,255,189,187,174,174,246,189,194,185,178,172,170,181,181,194,255,177,170,188,246,182,170,183,194,255,188,174,172,184,183,173,170,187,194,250,246,171,187,170,183,172,177,174,188,246,188,190,185,185,184,187,189,174,173,246,172,181,174,170,187,255,184,175,255,189,177,174,250,246,176,187,184,190,183,173,255,171,194,255,189,177,174,246,189,187,190,183,180,205,255,189,177,178,188,246,189,187,190,183,180,250,246,189,194,185,178,172,170,181,181,194,246,172,184,183,189,170,178,183,188,255,192,184,184,173,194,246,189,178,188,188,190,174,255,175,184,187,250,246,188,189,187,174,183,176,189,177,200,255,170,183,173,246,191,170,188,172,190,181,170,187,246,189,178,188,188,190,174,255,189,184,250,246,172,170,187,187,194,246,182,170,189,174,187,178,170,181,188,255,175,187,184,182,246,184,183,174,255,185,170,187,189,255,184,175,250]},{"928213":[189,177,174,255,189,187,174,174,255,189,184,246,170,183,184,189,177,174,187,205,251,248,201,192,178,188,177,178,183,176,255,185,184,183,173,201,249,250,246,189,177,187,184,192,255,178,189,174,182]},{"928263":[178,183,198,246,255,255,228,255,194,174,188,177,246,255,255]},{"928279":[255,183,184,254,104,251]},{"928286":[255,255,255,188,189,184,185,255,178,189,199,251,248,255,255,175,178,183,174,255,189,177,174,183,199,251,184,180,170,194]},{"928317":[255,177,174,187,174,216,188,248,194,184,190,187,255,178,189,174,182,249,171,170,172,180,200,255,172,170,190,188,174,255,178,250,246,172,170,183,216,189,255,190,188,174,255,178,189,205,246,178,216,182,255,188,189,190,172,180,255,178,183,246,189,177,178,188,255,175,184,190,183,189,170,178,183,205,251,177,184,192,255,182,170,183,194,198,248,255,255,228,254,108,1,254,108,0,255,187,190,185,174,174,188,249,255,255,255,254,108,3,254,108,2,255,187,190,185,174,174,188,254,104,251,178,255,181,178,180,174,255,194,184,190,200,255,188,184,248,177,174,187,174,216,188,255,170,255,189,177,178,183,176,249,194,184,190,255,172,170,183,255,190,188,174,255,189,184,250,246,171,174,170,189,255,190,185,255,176,170,183,184,183,205,251,248,178,188,255,176,187,174,170,189,255,181,190,172,180,251,248,255,178,188,255,176,184,184,173]},{"928524":[181,190,172,180,251,248,255,178,188,255,182,174,177]},{"928538":[181,190,172,180,251,192,177,194,255,194,184,190,255,172,184,182,174,248,178,183,255,177,174,187,174,255,170,183,173,249,185,187,174,189,174,183,173,255,181,178,180,174,250,246,194,184,190,255,177,170,191,174,246,188,184,182,174,189,177,178,183,176,255,189,177,178,188,246,175,184,190,183,189,170,178,183,250,246,192,170,183,189,188,198,255,172,184,182,174,246,171,170,172,180]},{"928633":[192,178,189,177,246,171,184,189,189,181,174,188,199,251,171,194,255,189,177,174,255,192,170,194,200,248,194,184,190,187,255,175,184,187,189,190,183,174,200,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,192,174,181,181,255,173,184,183,174,200,248,181,174,189,189,190,172,174,255,177,170,191,174,255,170,249,172,190,185,255,184,175]},{"928741":[189,174,170,204,251,178,255,192,187,184,189,174,255,170,248,192,184,187,173,205,255,179,190,188,189,249,184,183,174,205,255,184,183,255,170,250,246,188,189,184,183,174,255,170,183,173,246,189,177,187,174,192,255,178,189,255,178,183,189,184,246,189,177,174,255,184,172,174,170,183,205,255,178,189,250,246,192,170,188,255,182,194,255,192,184,187,173,205,246,178,189,255,192,170,188,255,192,177,170,189,246,192,184,190,181,173,255,188,170,191,174,255,182,174,205,250,246,178,255,177,184,185,174,255,188,184,182,174,173,170,194,246,188,184,182,174,184,183,174,255,175,178,183,173,188,246,189,177,170,189,255,192,184,187,173,255,170,183,173,250,246,171,187,178,183,176,188,255,178,189,255,189,184,246,182,174]},{"928918":[255,189,177,174,255,192,184,187,173,246,178,188,255,189,177,174,250,246,171,174,176,178,183,183,178,183,176,255,184,175,246,182,194,255,188,184,183,176,205,251,178,255,192,187,184,189,174,255,170,248,188,184,183,176,205,255,179,190,188,189,249,184,183,174,205,255,184,183,255,170,250,246,176,190,178,189,170,187,255,170,183,173,246,189,177,187,174,192,255,178,189,255,178,183,189,184,246,189,177,174,255,188,180,194,205,255,178,189,250,246,192,170,188,255,182,194,255,188,184,183,176,205,246,178,189,255,172,184,190,181,173,255,189,170,182,174,246,171,174,170,188,189,188,255,170,183,173,250,246,175,187,174,174]},{"929072":[182,178,183,173,188,205,255,178,189,246,175,181,178,189,189,174,187,188]},{"929091":[184,183,246,189,177,174,255,192,178,183,173,255,170,183,173,250,246,181,190,187,180,188,255,178,183,255,184,190,187,246,182,178,183,173,188,205,255,178,189,255,178,188,246,189,177,174,255,188,184,183,176,255,184,175,250,246,183,170,189,190,187,174,200,255,184,175,246,177,190,182,170,183,178,189,194,200,255,184,175,246,173,187,174,170,182,188,255,170,183,173,250,246,173,187,174,170,182,174,187,188,205,251,170,173,173,255,176,170,187,181,178,172,200,248,176,178,183,176,174,187,255,170,183,173,249,170,185,185,181,174,255,170,183,173,255,172,184,184,180,250,246,175,184,187,255,162,255,182,178,183,190,189,174,188,205,246,170,173,173,255,172,170,187,187,184,189,188,200,246,185,184,189,170,189,184,174,188,200,250,246,176,170,187,170,182,255,182,170,188,170,181,170,246,170,183,173,255,172,190,187,187,194,246,185,184,192,173,174,187,255,170,183,173,250,246,188,189,178,187,255,192,174,181,181,205,255,170,173,173,246,189,184,182,170,189,184,255,185,170,188,189,174,200,246,188,189,178,187,255,192,174,181,181,255,170,183,173,250,246,188,181,184,192,181,194,255,170,173,173,255,187,174,173,246,192,178,183,174,255,170,183,173,255,171,187,178,183,176,246,189,184,255,170,255,171,184,178,181,205,255,170,173,173,250,246,188,190,176,170,187,200,255,188,184,194,246,188,170,190,172,174,255,170,183,173,246,192,170,189,174,187,200,255,188,189,178,187,250,246,170,183,173,255,171,187,178,183,176,255,189,184,255,170,246,171,184,178,181,255,170,176,170,178,183,205,251,178,255,189,177,178,183,180,255,178,248,175,184,187,176,184,189,255,177,184,192,255,189,184,249,188,182,178,181,174,204,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,200,255,181,178,180,174,200,255,194,184,190,248,183,174,174,173,255,163,160,249,187,190,185,174,174,188,205,250,246,188,178,181,181,194,199,251,194,184,190,255,192,170,183,189,255,189,184,248,185,181,170,194,255,170,255,176,170,182,174,198,249,189,170,181,180,255,189,184,255,182,174,205,251,194,184,190,216,191,174,255,184,185,174,183,174,173,248,189,177,174,255,172,177,174,188,189,188,199,249,189,178,182,174,255,189,184,255,176,184,205,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,184,200,255,181,178,180,174,200,255,194,184,190,248,170,181,187,174,170,173,194,255,177,170,191,174,249,184,183,174,255,184,175,255,189,177,184,188,174]},{"929669":[251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251]},{"929699":[110,0,254,107,4,251,254,110,0,254,107,4,251,192,177,194,255,173,184,174,188,255,183,184,248,184,183,174,255,184,192,183,249,171,184,189,189,181,174,188,198,255,176,184,250,246,175,178,183,173,255,184,183,174,246,175,178,187,188,189,199,251,194,184,190,255,170,187,174,248,172,170,187,187,194,178,183,176,255,189,184,249,182,190,172,177,255,172,187,170,185,200,255,176,184,250,246,190,188,174,255,188,184,182,174,255,184,175,255,178,189,246,175,178,187,188,189,199,251,194,184,190,255,173,187,184,191,174,248,170,192,170,194,255,182,194,255,184,189,177,174,187,249,188,174,181,175,200,255,170,176,170,177,183,178,182,200,250,246,189,192,184,255,189,178,182,174,188,204,246,171,190,189,200,255,178,255,192,184,183,216,189,246,176,178,191,174,255,194,184,190,255,189,177,174,250,246,189,187,178,175,184,187,172,174,205,246,178,216,181,181,255,173,174,175,174,170,189,246,194,184,190,199,251,172,170,183,255,194,184,190,255,171,174,170,189,248,182,194,255,173,170,187,180,183,174,188,188,249,189,174,172,177,183,178,186,190,174,198,251,177,170,191,174,255,194,184,190,255,188,174,174,183,248,170,183,173,194,198,249,250,246,177,174,255,192,170,188,255,184,190,189,246,181,184,184,180,178,183,176,255,175,184,187,246,184,190,187,255,185,187,178,195,174,173,250,246,174,189,177,174,187,246,182,174,173,170,181,181,178,184,183,205,246,178,255,192,184,183,173,174,187,255,192,177,174,183,250,246,177,174,255,192,178,181,181,255,171,174,246,171,170,172,180,198,251,178,216,182,255,179,190,188,189,255,188,184,182,174,248,173,190,173,174,205,255,189,177,178,188,255,178,188,249,171,181,178,183,173,216,188,255,177,190,189,205,251,252,2,254,109,0,254,107,2,255,255,255,255,255,176,255,176,251,184,190,172,177,199,248,249,194,184,190,255,179,174,187,180,199,251,173,184]},{"930143":[216,189,255,170,187,176,190,174,248,192,178,189,177,255,170,255,175,187,184,195,174,183,249,173,174,170,173,187,184,172,180]},{"930175":[250,246,177,174,216,181,181]},{"930183":[183,174,191,174,187,246,172,177,170,183,176,174,255,177,178,188,246,185,184,188,178,189,178,184,183,199,251,254,110,0,254,107,4,251,188,184,255,194,184,190,200]},{"930225":[181,178,180,174,200,248,171,190,188,189,174,173,255,173,184,192,183]},{"930243":[182,194,249,173,184,184,187,200,255,170,183,173,255,170,187,174,250,246,171,174,178,183,176,255,170,255,179,174,187,180,246,171,194,255,189,170,181,180,178,183,176,255,189,184,246,182,174,198,255,183,184,187,182,170,181,181,194,255,178,250,246,192,184,190,181,173,255,171,174,255,170,183,176,187,194,246,170,183,173,255,182,170,180,174,255,194,184,190,246,185,170,194,255,175,184,187,255,178,189,200,250,246,171,190,189,255,178,255,171,174,189,246,194,184,190,216,187,174]},{"930362":[179,190,188,189,246,176,184,178,183,176,255,189,184,255,171,187,174,170,180,250,246,170,181,181,255,182,194,255,185,184,189,188,246,170,183,173,255,188,189,174,170,181,255,182,194,246,165,160,255,187,190,185,174,174,188,205,251,178,216,182,255,170,255,187,190,185,174,174,248,185,184,189,255,175,170,187,182,174,187,205,249,184,183,174,255,173,170,194,255,178,255,192,178,181,181,250,246,189,170,180,174,255,184,191,174,187,255,189,177,174,246,192,184,187,181,173,255,192,178,189,177]},{"930484":[182,194,246,188,180,178,181,181,195,205,255,177,170,191,174,250,246,194,184,190,255,182,174,189,255,182,194,246,171,187,184,189,177,174,187,255,178,183,255,189,177,174,246,173,174,188,174,187,189,198,255,177,174,216,188,250,246,192,170,194,255,187,178,172,177,174,187]},{"930552":[189,177,170,183,255,178]},{"930559":[170,182,205,251,206,206,255,173,174,191,255,172,170,191,174]},{"930575":[206,206,248,255,255,183,184,255,175,170,187,182,178,183,176,249,255,255,255,187,174,186,190,178,187,174,173,251,173,178,173,255,194,184,190,255,177,174,170,187,248,189,177,170,189,255,191,174,174,189,184,187,185,249,171,174,170,189,255,170,179,183,174,171,161,167,164,250,246,178,183,255,170,255,161,255,184,183,255,161,246,187,170,172,174,255,170,189,255,170,176,173,186,198,251,194,184,190,255,175,184,190,183,173,248,188,177,170,171,170,173,184,184,200,255,177,190,177,198,249,183,178,178,178,178,178,172,174,205,251,194,184,199,255,178,216,182,255,183,184,189,248,187,190,183,183,178,183,176,255,170,249,172,177,170,187,178,189,194,255,177,174,187,174,205,251,188,182,170,181,181,177,170,172,180,174,187,204,248,249,250,246,192,170,188,255,177,178,173,178,183,176,200,246,194,184,190,255,175,184,190,183,173,255,182,174,199,246,250,246,246,184,180,170,194,200,255,194,184,190,255,172,170,183,246,181,174,170,191,174,255,183,184,192,205,251,185,170,194,255,162,160,255,187,190,185,174,174,188,200,248,184,185,174,183,255,161,255,172,177,174,188,189,205,249,170,187,174,255,194,184,190,255,181,190,172,180,194,198,250,246,188,184,200,255,185,181,170,194,255,176,170,182,174,198,246,255]},{"930873":[228]},{"930875":[185,181,170,194,246,255]},{"930884":[183,174,191,174,187,199,254,104,251,176,184,184,173,255,181,190,172,180,255,189,177,174,183,251,192,174,181,181,255,175,178,183,174,200]},{"930919":[178,248,173,178,173,183,216,189,255,192,170,183,189,249,194,184,190,187,255,187,190,185,174,174,188,205,251,185,170,194,255,161,160,160]},{"930954":[187,190,185,174,174,188,248,184,185,174,183,255,161,255,172,177,174,188,189,205,249,170,187,174]},{"930979":[194,184,190,255,181,190,172,180,194,198,250,246,188,184,200,255,185,181,170,194,255,176,170,182,174,198,246,255,255,228,255,185,181,170,194,246,255,255,255,255,183,174,191,174,187,199,254,104,251,178,255,188,190,187,174,255,173,184,255,177,170,191,174,248,170,255,181,184,189,255,184,175,255,171,174,173,188,205,249,250,246,195,184,187,170,255,178,188,255,170,246,172,177,174,170,185,188,180,170,189,174,255,170,183,173,246,192,178,181,181,255,189,187,194,255,189,184,250,246,188,174,181,181,255,194,184,190,255,177,178,188,246,189,187,170,188,177,255,175,184,187,255,165,160,160,246,187,190,185,174,174,188,204,251,178,255,188,190,187,174,255,173,184,255,177,170,191,174,248,170,255,181,184,189,255,184,175,255,171,174,173,188,205,249,250,246,173,178,173,255,194,184,190,255,180,183,184,192,246,178,175,255,194,184,190,255,185,181,170,194,174,173,246,189,177,174,255,175,181,190,189,174,255,178,183,250,246,189,177,174,255,172,174,183,189,174,187,255,184,175,246,189,184,192,183,255,189,177,178,183,176,188,246,172,184,190,181,173,255,177,170,185,185,174,183,198,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174,248,255,188,170,183,172,189,190,170,187,194,254,114,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174,248,255,188,170,183,172,189,190,170,187,194,249,255,182,184,190,183,189,170,178,183,255,172,170,191,174,254,113,251,252,0,228,172,184,183,189,178,183,190,174,248,255,188,170,191,174,255,170,183,173]},{"931343":[186,190,178,189,254,114,251,254,110,0,254,107,4,251,254,110,0,254,107,4,251,188,177,184,191,174,181,255,187,174,183,189,170,181,248,178,188,255,168,160,255,187,190,185,174,174,188,205,249,178,255,177,170,191,174,255,170,181,181,255,173,170,194,251,189,178,182,174,216,188,255,190,185,199]},{"931418":[189,178,182,174,255,175,184,187,255,194,184,190,249,189,184]},{"931434":[176,184,205,251,172,184,182,174,255,171,170,172,180,248,181,170,189,174,187,200,255,178,255,177,170,191,174,249,189,184,255,171,190,187,194,250,246,189,177,178,183,176,188,205,251,188,184,182,174,189,177,178,183,176,255,178,188,248,175,184,181,181,184,192,178,183,176,255,194,184,190,205,249,178,255,173,184,183,216,189,255,181,178,180,174,205,251,254,109,0,252,0,228,254,106,216,188,255,177,184,190,188,174,248,255,182,184,190,183,189,170,178,183,255,172,170,191,174,254,114,251,194,184,190,255,189,177,178,183,180]},{"931565":[194,184,190,248,170,187,174,255,187,174,170,173,194,255,189,184,249,175,170,172,174,255,182,174,198,250,246,246,178,255,192,178,181,181,255,183,184,189,255,173,178,174,246,250,246,190,183,181,174,188,188,255,194,184,190,246,172,184,182,185,181,174,189,174,255,194,184,190,187,246,176,184,170,181,188,205,255,173,178,183,176,190,188,199,251,176,184,189]},{"931654":[192,170,193]},{"931658":[178,183,248,194,184,190,187,255,174,170,187,188,198,255,178,249,172,170,183,183,184,189,255,173,178,174,199,251,177,184,192,255,173,178,173]},{"931694":[194,184,190,248,176,174,189,255,190,185,255,177,174,187,174,198,251,178,189,216,188,255,170,255,188,174,172,187,174,189,248,189,184,255,174,191,174,187,194,184,183,174,205,251,194,184,190,255,183,174,174,173,255,170,181,181,255,167,248,172,187,194,188,189,170,181,188,255,189,184,249,174,183,189,174,187,205,251,194,184,190,255,183,174,174,173,255,170,181,181,255,167,248,172,187,194,188,189,170,181,188,255,189,184,249,171,174,170,189,255,176,170,183,184,183,205,251,194,184,190,255,177,170,191,174,255,183,184,248,171,184,192,205,255,173,178,183,176,190,188,199,251,194,184,190,255,172,170,183,216,189,255,171,174,188,189,248,182,174,255,192,178,189,177,184,190,189,249,188,178,181,191,174,187,255,170,187,187,184,192,188,199,251,194,184,190,255,172,170,183,216,189,255,171,174,188,189,248,182,174,255,192,178,189,177,184,190,189,249,188,178,181,191,174,187,255,170,187,187,184,192,188,199,251,184,177,255,183,184,199,255,188,178,181,191,174,187,199,248,182,194,255,184,183,174,255,189,187,190,174,249,192,174,170,180,183,174,188,188,199,251,177,174,181,181,184,255,254,106,205,255,178,248,170,182,255,182,190,187,170,177,173,170,177,181,170,200,249,171,187,184,189,177,174,187,255,184,175,250,246,188,170,177,170,188,187,170,177,181,170,255,170,183,173,246,170,176,178,183,170,177,205,255,171,174,177,184,181,173,246,189,177,174,255,185,184,192,174,187,255,184,175,250,246,178,183,191,178,188,178,171,178,181,178,189,194,205,254,120,3,246,204,255,204,255,204,246,192,170,178,189,199,255,194,184,190,255,172,170,183,250,246,188,174,174,255,182,174,198]},{"932084":[178,255,180,183,174,192,246,178,255,188,177,184,190,181,173,255,177,170,191,174,246,177,178,173,173,174,183,255,178,183,255,255,170,250,246,177,184,181,181,184,192,255,189,187,174,174,205,251,255]},{"932134":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932251":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932333":[255]},{"932335":[255,255,255,255,255,255,255,255,255]},{"932348":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932364":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932544":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932636":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932725":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932864":[255]},{"932866":[255,255,255,255,255,255,255,255]},{"932878":[255,255,255,255,255,255,255,255,255,255,255,255]},{"932891":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"932938":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933050":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933207":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933260":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933322":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933413":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933485":[255,255]},{"933488":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933595":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933615":[255,255]},{"933618":[255,255]},{"933621":[255,255,255,255,255,255,255,255,255,255]},{"933632":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933726":[255]},{"933728":[255,255,255,255,255,255,255]},{"933739":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933820":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933842":[255,255,255,255,255]},{"933848":[255,255,255,255,255,255,255]},{"933856":[255,255,255,255,255,255,255,255,255,255,255]},{"933868":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933883":[255,255,255,255,255,255,255,255]},{"933892":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933918":[255,255,255,255,255,255,255,255]},{"933927":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933966":[255,255,255,255,255,255,255]},{"933974":[255]},{"933976":[255,255,255]},{"933980":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"933998":[255,255,255,255,255,255,255,255,255,255,255]},{"934010":[255,255,255,255,255,255,255]},{"934018":[255]},{"934020":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934040":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934094":[255,255,255,255,255,255]},{"934101":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934128":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934145":[255,255,255,255,255,255,255,255,255,255]},{"934157":[255]},{"934172":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934198":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934215":[255,255,255,255,255,255,255,255,255,255,255]},{"934231":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934255":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934274":[255,255,255,255,255,255,255,255,255,255]},{"934291":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934312":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934330":[255]},{"934345":[255,255,255,255,255,255,255]},{"934353":[255,255,255,255,255,255,255,255,255,255,255]},{"934365":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934382":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934398":[255,255,255,255,255,255,255,255,255,255,255]},{"934410":[255,255,255,255,255,255]},{"934422":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934443":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934462":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934476":[255,255,255,255,255,255,255,255,255,255,255,255]},{"934489":[255,255,255,255,255,255,255,255]},{"934504":[255]},{"934519":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934555":[255]},{"934570":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934743":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934790":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"934833":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935013":[255]},{"935015":[255,255,255,255,255,255,255,255]},{"935027":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935044":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935076":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935109":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935168":[255]},{"935170":[255,255,255,255,255,255,255,255,255]},{"935183":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935199":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935230":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935268":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935307":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935372":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935498":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935516":[255]},{"935518":[255]},{"935520":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935922":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"935975":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936045":[255,255,255]},{"936049":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936123":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936202":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936231":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936288":[255]},{"936302":[255]},{"936316":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936376":[255]},{"936391":[255]},{"936399":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936471":[255]},{"936486":[255]},{"936501":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936571":[255]},{"936584":[255]},{"936597":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936674":[255]},{"936689":[255]},{"936704":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936773":[255]},{"936787":[255]},{"936800":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936866":[255]},{"936881":[255]},{"936893":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"936970":[255]},{"936985":[255]},{"937000":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937031":[255]},{"937033":[255]},{"937035":[255]},{"937037":[255]},{"937039":[255,255,255,255,255,255,255,255,255,255,255,255]},{"937052":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937109":[255]},{"937123":[255]},{"937137":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937204":[255]},{"937219":[255]},{"937234":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937296":[255]},{"937311":[255]},{"937321":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937366":[255]},{"937380":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937441":[255]},{"937455":[255]},{"937466":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937538":[255]},{"937553":[255]},{"937564":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937624":[255]},{"937639":[255]},{"937646":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937696":[255]},{"937708":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937781":[255]},{"937795":[255]},{"937807":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937870":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"937927":[255]},{"937941":[255]},{"937955":[255,255,255,255,255,255,255,255,255,255]},{"937966":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938020":[255]},{"938032":[255]},{"938046":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938117":[255]},{"938132":[255]},{"938145":[255,255,255,255,255,255,255,255,255,255,255]},{"938157":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938196":[255]},{"938211":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938284":[255]},{"938299":[255]},{"938314":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938385":[255]},{"938399":[255]},{"938414":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938437":[255,255,255,255]},{"938442":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938468":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938525":[255]},{"938539":[255]},{"938553":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938632":[255]},{"938646":[255]},{"938660":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938727":[255]},{"938742":[255]},{"938756":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938813":[255]},{"938828":[255]},{"938839":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938902":[255]},{"938916":[255]},{"938924":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"938959":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939016":[255]},{"939030":[255]},{"939044":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939114":[255]},{"939129":[255]},{"939144":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939220":[255]},{"939234":[255]},{"939249":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939324":[255]},{"939339":[255]},{"939354":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939423":[255]},{"939434":[255]},{"939448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939516":[255]},{"939531":[255]},{"939544":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939577":[255]},{"939579":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939598":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939655":[255]},{"939669":[255]},{"939683":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939752":[255]},{"939767":[255]},{"939780":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939854":[255]},{"939868":[255]},{"939882":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"939953":[255]},{"939967":[255]},{"939982":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940050":[255]},{"940065":[255]},{"940078":[255,255,255,255,255,255,255,255,255,255]},{"940089":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940153":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940197":[255]},{"940212":[255]},{"940226":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940258":[255]},{"940260":[255]},{"940262":[255,255,255,255,255]},{"940281":[255]},{"940291":[255]},{"940298":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940371":[255]},{"940386":[255]},{"940401":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940467":[255]},{"940482":[255]},{"940491":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940557":[255]},{"940572":[255]},{"940581":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940653":[255]},{"940668":[255]},{"940683":[255,255,255]},{"940687":[255,255]},{"940690":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940715":[255]},{"940717":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940787":[255]},{"940789":[255]},{"940792":[255,255]},{"940798":[255,255,255,255,255,255,255,255,255,255]},{"940809":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940867":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940911":[255]},{"940926":[255]},{"940940":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"940972":[255]},{"940974":[255]},{"940976":[255,255,255,255,255]},{"940995":[255]},{"941005":[255]},{"941012":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941085":[255]},{"941100":[255]},{"941115":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941181":[255]},{"941196":[255]},{"941205":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941271":[255]},{"941286":[255]},{"941295":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941362":[255]},{"941371":[255]},{"941385":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941457":[255]},{"941472":[255]},{"941484":[255,255,255]},{"941488":[255,255]},{"941491":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941516":[255]},{"941518":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941563":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941611":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941628":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941742":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941775":[255,255,255,255,255,255,255,255,255]},{"941785":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"941954":[255]},{"941956":[255,255,255,255,255,255,255,255,255]},{"941969":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942030":[255]},{"942032":[255,255,255,255,255,255,255,255,255,255]},{"942046":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942076":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942170":[255,255,255,255,255,255,255]},{"942179":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942789":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942832":[255]},{"942834":[255,255,255,255,255,255,255]},{"942845":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942899":[255]},{"942901":[255]},{"942903":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"942923":[255]},{"942925":[255,255,255,255,255,255,255,255,255,255]},{"942939":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943097":[255,255,255,255,255]},{"943104":[255,255,255,255,255]},{"943112":[255,255,255,255,255]},{"943119":[255,255,255,255,255]},{"943127":[255,255,255,255,255]},{"943134":[255,255,255,255,255]},{"943142":[255,255,255,255,255,255]},{"943150":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943187":[255,255]},{"943195":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943211":[255,255]},{"943219":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943235":[255,255]},{"943243":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943259":[255,255]},{"943267":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943298":[255,255]},{"943306":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943346":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943360":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943570":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943586":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943830":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943882":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943936":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"943957":[255]},{"943959":[255,255,255,255,255,255,255]},{"943970":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944480":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944607":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944909":[255]},{"944911":[255]},{"944913":[255,255,255,255,255]},{"944930":[255]},{"944945":[255]},{"944952":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"944981":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945024":[255]},{"945039":[255]},{"945053":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945121":[255]},{"945134":[255]},{"945148":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945213":[255]},{"945227":[255]},{"945241":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945317":[255]},{"945332":[255]},{"945347":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945418":[255]},{"945433":[255]},{"945448":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945517":[255]},{"945532":[255]},{"945545":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945616":[255]},{"945631":[255]},{"945646":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945682":[255]},{"945684":[255]},{"945686":[255]},{"945688":[255,255,255,255,255,255,255]},{"945696":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945924":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"945941":[255,255,255,255,255,255,255]},{"945949":[255]},{"945951":[255]},{"945953":[255]},{"945955":[255,255,255,255,255,255,255,255,255]},{"945965":[255,255,255,255,255,255,255]},{"945973":[255]},{"945975":[255]},{"945977":[255,255,255,255,255,255,255,255]},{"945987":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946002":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946074":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946091":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946110":[255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946124":[255,255,255,255,255,255,255,255,255,255,255,255]},{"946137":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946210":[255]},{"946213":[255,255,255,255,255,255,255]},{"946225":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946346":[255]},{"946349":[255,255,255,255,255,255,255]},{"946361":[255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946376":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946558":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946679":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946711":[255,255,255,255,255,255,255,255,255,255,255]},{"946723":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946743":[255,255,255,255,255,255,255,255,255,255]},{"946755":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946826":[255]},{"946828":[255,255,255,255,255]},{"946837":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946864":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"946908":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"947006":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"950962":[143]},{"954488":[34,253,233,160,96]},{"954852":[65,179,160]},{"955117":[220,233,160]},{"955529":[61,179,160]},{"962925":[26,179,160]},{"962951":[26,179,160]},{"963167":[26,179,160]},{"963214":[26,179,160]},{"965041":[26,179,160]},{"965069":[26,179,160]},{"965214":[26,179,160]},{"965298":[26,179,160]},{"965316":[26,179,160]},{"967797":[34,138,177,160,234,234,234,234,234,234,234,234]},{"967817":[234,234,234,234,34,164,177,160]},{"972824":[233,178,160]},{"972834":[233,178,160]},{"972851":[233,178,160]},{"974665":[92,189,194,160,234]},{"974706":[242,194,160]},{"974722":[215,194,160]},{"975106":[34,142,141,160]},{"975132":[34,142,141,160]},{"975265":[34,206,194,160,234,234]},{"975332":[34,180,194,160,234,234]},{"975401":[255]},{"976357":[22,179,160]},{"976423":[22,179,160]},{"978658":[6,179,160]},{"979078":[34,211,216,160]},{"979173":[204]},{"979181":[234]},{"979189":[250]},{"979197":[234]},{"979205":[250]},{"979213":[206]},{"979221":[206]},{"979229":[206]},{"979237":[206]},{"979245":[236]},{"979253":[235]},{"979261":[251]},{"979269":[235]},{"979277":[251]},{"979285":[236]},{"979293":[236]},{"979301":[236]},{"979309":[236]},{"979317":[236]},{"979325":[235]},{"979333":[251]},{"979341":[235]},{"979349":[251]},{"979357":[206]},{"979365":[206]},{"979373":[206]},{"979381":[206]},{"979389":[204]},{"979397":[234]},{"979405":[250]},{"979413":[234]},{"979421":[250]},{"979429":[204]},{"979437":[204]},{"979445":[204]},{"979453":[204]},{"979461":[235]},{"979469":[251]},{"979477":[235]},{"979485":[251]},{"979493":[251]},{"979501":[251]},{"979509":[251]},{"979517":[251]},{"979525":[251]},{"982376":[146,178,160]},{"982421":[15]},{"982430":[234,234,234,234,234,234,234,234]},{"982440":[34,144,193,160]},{"983466":[6,179,160]},{"983651":[6,179,160]},{"988539":[18,179,160]},{"988657":[18,179,160]},{"988668":[18,179,160]},{"988874":[18,179,160]},{"988902":[18,179,160]},{"989142":[18,179,160]},{"994007":[157,80]},{"994143":[157,80]},{"995192":[106,129,160]},{"996856":[10,179,160]},{"999246":[14,179,160]},{"999265":[14,179,160]},{"999359":[14,179,160]},{"999574":[14,179,160]},{"1002731":[92,57,205,30]},{"1003079":[92,138,194,160]},{"1003229":[34,113,152,160]},{"1003277":[34,113,152,160]},{"1004410":[200,130,160]},{"1004774":[34,79,128,164,234,234]},{"1004919":[92,92,128,164]},{"1005119":[237,178,160]},{"1005176":[234,234,34,111,128,164]},{"1005296":[237,178,160]},{"1007982":[234,234,234,234,234,234,234,234]},{"1008002":[0,128,162]},{"1008025":[34,235]},{"1008028":[160,234,234,234,234,234,234,234,234,234,234,234]},{"1008815":[34,130,128,160,234,234]},{"1009927":[4,240]},{"1009930":[34,53,141,160,234,234]},{"1010175":[188,141,160]},{"1011427":[34,48,167,160,96,234]},{"1011808":[34,125,142]},{"1011812":[234]},{"1012601":[234,234,234,234]},{"1041509":[30]},{"1048568":[32,25,8,49]},{"1048576":[34,19,182,160,48,66,192,27,240,63,192,5,240,59,192,4,240,55,192,12,240,51,192,11,240,47,192,58,240,43,192,73,240,57,192,1,240,53,192,80,240,49,192,2,240,45,192,59,240,30,192,42,240,26,192,13,240,22,192,20,240,18,192,19,240,14,192,41,240,10,135]},{"1048648":[107,199]},{"1048651":[176,249,167]},{"1048655":[107,72,167]},{"1048659":[208,4,104,135]},{"1048664":[107,104,107,72,152,201,73,208,2,169]},{"1048675":[201,80,208,2,169,1,26,207,23,244,126,176,14,175,23,244,126,58,168,104,175,23,244,126,130,200,255,104,130,196,255,169]},{"1048708":[143,211,243,126,169,10,143,204,243,126,107,175,197,243,126,240,6,175,145,80,127,73,1,107,165,138,201,128,208,2,165,35,107,175,87,243,126,240,1,107,175,202,243,126,41,64,72,175,74,128,48,208,5,104,73,64,128,1,104,107,165,27,240,1,107,175,87,243,126,240,1,107,165,138,41,64,72,175,74,128,48,208,5,104,73,64,128,1,104,107,173,224,2,240,13,34,165,128,160,240,7,100,93,156,224,2,100,86,96,175,116,129,48,240,16,34,165,128,160,208,10,32,13,129,169,4,141,44,1,128,5,169,9,141,44,1,107,218,90,169,23,133,93,169,1,141,224,2,133,86,34,138,253,2,122,250,96,175,202,243,126,208,16,175,204,243,126,201,7,208,26,169,8,143,204,243,126,128,14,175,204,243,126,201,8,208,10,169,7,143,204,243,126,34,99,212]},{"1048905":[96,175,164,128,48,208,10,173,12,4,201,12,208,3,156,122,4,107,142,216,2,34,4,157,9,144,1,107,100,174,100,175,107,100,167,194,32,156,24,6,156,26,6,226,32,92,138,187,13,194,32,175,89,243,126,133,12,175,91,243,126,41,255]},{"1048969":[34,149,253,2,34,48,128,191,107,165,16,201,14,3,240,25,201,14,7,240,20,167]},{"1048992":[159]},{"1048994":[195,126,159]},{"1048998":[197,126,230]},{"1049002":[230]},{"1049004":[232,232,136,16,237,107,167]},{"1049012":[159]},{"1049014":[197,126,230]},{"1049018":[230]},{"1049020":[232,232,136,16,241,107,169,112,72,171,34,184,130,160,34,104,218,160,107,175,74,128,48,240,3,76,66,130,175,160,128,48,240,6,175,83,243,126,240,10,175,197,243,126,201,3,144,2,128,20,169]},{"1049072":[143,202,243,126,175,204,243,126,201,7,208,6,169,8,143,204,243,126,107,175,74,128,48,240,3,76,115,130,165,27,240,17,173,12,4,201,255,208,13,165,160,208,6,175,113,129,48,208,12,76,207,129,175,162,128,48,208,23,76,228,129,169,64,143,202,243,126,175,204,243,126,201,8,208,6,169,7,143,204,243,126,107,175,160,128,48,240,6,175,83,243,126,240,10,175,197,243,126,201,3,144,2,128,26,169,64,143,202,243,126,175,204,243,126,201,7,240,6,201,8,240,2,128,6,169]},{"1049198":[143,204,243,126,107,165,27,240,17,173,12,4,201,255,208,13,165,160,208,6,175,113,129,48,208,12,76,207,129,175,162,128,48,208,23,76,78,130,169]},{"1049238":[143,202,243,126,175,204,243,126,201,7,208,6,169,8,143,204,243,126,107,175,116,129,48,240,8,165,138,41,64,143,202,243,126,107,175,204,243,126,201,14,240,1,107,169]},{"1049283":[143,204,243,126,107,169]},{"1049290":[143,204,243,126,34,69,249]},{"1049298":[107,175,197,243,126,201,1,240,1,107,175,200,243,126,201,3,208,47,175,133,129,48,56,239,110,243,126,144,4,143,115,243,126,175,134,129,48,56,239,67,243,126,144,4,143,117,243,126,175,135,129,48,56,239,119,243,126,144,4,143,118,243,126,128,100,201,2,208,47,175,136,129,48,56,239,110,243,126,144,4,143,115,243,126,175,137,129,48,56,239,67,243,126,144,4,143,117,243,126,175,138,129,48,56,239,119,243,126,144,4,143,118,243,126,128,49,201,4,208,45,175,139,129,48,56,239,110,243,126,144,4,143,115,243,126,175,140,129,48,56,239,67,243,126,144,4,143,117,243,126,175,141,129,48,56,239,119,243,126,144,4,143,118,243,126,107,175,197,243,126,201,1,208,30,175,77,128,48,137,4,240,4,143,202,80,127,137,2,240,4,143,201,80,127,137,1,240,4,143,200,80,127,128,42,175,77,128,48,137,4,240,6,169]},{"1049512":[143,202,80,127,175,77,128,48,137,2,240,6,169]},{"1049526":[143,201,80,127,175,77,128,48,137,1,240,6,169]},{"1049540":[143,200,80,127,107,175,129,129,48,240,15,175,64,243,126,201,3,144,7,56,233,2,143,64,243,126,107,175,196,80,127,201,1,208,1,107,201,255,208,2,26,107,175,74,243,126,208,27,175,202,243,126,208,17,173,12,4,208,6,175,56,128,48,128,10,175,57,128,48,128,4,175,58,128,48,107,175,197,243,126,201,2,144,3,169,1,107,175,204,243,126,107,34,223,131,160,133,29,107,34,184,130,160,175,61,128,48,208,40,175,187,242,126,41,223,143,187,242,126,175,251,242,126,41,223,143,251,242,126,175,22,242,126,41,127,143,22,242,126,175,81,240,126,41,254,143,81,240,126,175,161,128,48,240,10,175,106,240,126,41,127,143,106,240,126,107,218,90,188,128,14,208,5,34,161,133,160,168,34,190,133,160,156,233,2,192,38,208,15,175,107,243,126,26,41,3,143,107,243,126,208,14,128]},{"1049744":[34,179,145,7,34,157,153,7,24,130,1]},{"1049756":[56,34,254,176,160,122,250,107,218,90,34,250,189,160,188,128,14,208,5,34,139,138,160,168,128,196,8,34,247,148,160,144,44,72,90,175]},{"1049793":[80,127,240,7,34,103,133,160,130,27]},{"1049804":[189,128,14,72,34,238,146,160,144,8,189,96,14,9,32,157,96,14,104,34,58,148,160,34,92,220,6,122,104,40,107,8,34,247,148,160,144,247,72,90,175]},{"1049846":[80,127,240,6,34,141,133,160,128,231,189,128,14,128,202,192,32,240,22,192,55,240,18,192,56,240,14,192,57,240,10,34,190,140,160,144,4,169,46,56,107,24,107,189,94,12,192,32,240,19,192,55,240,15,192,56,240,11,192,57,240,7,72,34,190,140,160,104,107,24,107,175,51,80,127,240,8,58,143,51,80,127,169]},{"1049930":[107,191,128,242,126,107,175,52,80,127,240,6,58,143,52,80,127,107,191,128,242,126,9,64,159,128,242,126,107,72,175,147,129,48,240]},{"1049966":[169,1,143]},{"1049970":[80,127,165,93,201,20,240,17,169]},{"1049980":[143]},{"1049982":[80,127,34,161,133,160,157,128,14,34,212,147,160,104,107,72,169]},{"1050000":[143]},{"1050002":[80,127,34,139,138,160,157,128,14,34,212,147,160,104,107,165,27,240,7,34,219,133,160,130,4]},{"1050028":[34,120,135,160,107,34,88,173,9,72,169,1,143]},{"1050042":[80,127,104,107,72,8,165,27,208,20,194,32,165,138,201,42]},{"1050059":[208,11,175,22,244,126,9,1]},{"1050068":[143,22,244,126,40,104,107,8,194,32,165,160,201,225]},{"1050083":[208,50,175,135,128,48,208,6,175]},{"1050093":[128,48,128,35,218,8,194,48,165]},{"1050103":[72,165,2,72,169]},{"1050109":[128,133]},{"1050112":[169,48]},{"1050115":[133,2,169]},{"1050120":[34,67,147,164,250,134,2,250,134,1,40,250,130,92,1,201,226]},{"1050138":[208,50,175,135,128,48,208,6,175,1,128,48,128,35,218,8,194,48,165]},{"1050158":[72,165,2,72,169]},{"1050164":[128,133]},{"1050167":[169,48]},{"1050170":[133,2,169,1]},{"1050175":[34,67,147,164,250,134,2,250,134,1,40,250,130,37,1,201,234]},{"1050193":[208,50,175,135,128,48,208,6,175,2,128,48,128,35,218,8,194,48,165]},{"1050213":[72,165,2,72,169]},{"1050219":[128,133]},{"1050222":[169,48]},{"1050225":[133,2,169,2]},{"1050230":[34,67,147,164,250,134,2,250,134,1,40,250,130,238]},{"1050245":[201,27,1,208,108,165,34,235,41,1]},{"1050256":[208,50,175,135,128,48,208,6,175,3,128,48,128,35,218,8,194,48,165]},{"1050276":[72,165,2,72,169]},{"1050282":[128,133]},{"1050285":[169,48]},{"1050288":[133,2,169,3]},{"1050293":[34,67,147,164,250,134,2,250,134,1,40,250,130,175]},{"1050308":[175,135,128,48,208,6,175,4,128,48,128,35,218,8,194,48,165]},{"1050326":[72,165,2,72,169]},{"1050332":[128,133]},{"1050335":[169,48]},{"1050338":[133,2,169,4]},{"1050343":[34,67,147,164,250,134,2,250,134,1,40,250,130,125]},{"1050358":[201,38,1,208,50,175,135,128,48,208,6,175,5,128,48,128,35,218,8,194,48,165]},{"1050381":[72,165,2,72,169]},{"1050387":[128,133]},{"1050390":[169,48]},{"1050393":[133,2,169,5]},{"1050398":[34,67,147,164,250,134,2,250,134,1,40,250,130,70]},{"1050413":[201,39,1,208,50,175,135,128,48,208,6,175,6,128,48,128,35,218,8,194,48,165]},{"1050436":[72,165,2,72,169]},{"1050442":[128,133]},{"1050445":[169,48]},{"1050448":[133,2,169,6]},{"1050453":[34,67,147,164,250,134,2,250,134,1,40,250,130,15]},{"1050468":[201,135]},{"1050471":[208,7,175,98,129,48,130,3]},{"1050480":[169,23]},{"1050483":[41,255]},{"1050486":[40,107,8,194,32,165,138,201,3]},{"1050496":[208,107,165,34,201,98,7,144,50,175,135,128,48,208,6,175,64,129,48,128,35,218,8,194,48,165]},{"1050523":[72,165,2,72,169,64,129,133]},{"1050532":[169,48]},{"1050535":[133,2,169]},{"1050540":[34,67,147,164,250,134,2,250,134,1,40,250,130,203,2,175,135,128,48,208,6,175,22,128,48,128,35,218,8,194,48,165]},{"1050573":[72,165,2,72,169,16,128,133]},{"1050582":[169,48]},{"1050585":[133,2,169,6]},{"1050590":[34,67,147,164,250,134,2,250,134,1,40,250,130,153,2,201,5]},{"1050608":[208,50,175,135,128,48,208,6,175,65,129,48,128,35,218,8,194,48,165]},{"1050628":[72,165,2,72,169,64,129,133]},{"1050637":[169,48]},{"1050640":[133,2,169,1]},{"1050645":[34,67,147,164,250,134,2,250,134,1,40,250,130,98,2,201,40]},{"1050663":[208,50,175,135,128,48,208,6,175,66,129,48,128,35,218,8,194,48,165]},{"1050683":[72,165,2,72,169,64,129,133]},{"1050692":[169,48]},{"1050695":[133,2,169,2]},{"1050700":[34,67,147,164,250,134,2,250,134,1,40,250,130,43,2,201,42]},{"1050718":[208,50,175,135,128,48,208,6,175,74,129,48,128,35,218,8,194,48,165]},{"1050738":[72,165,2,72,169,64,129,133]},{"1050747":[169,48]},{"1050750":[133,2,169,10]},{"1050755":[34,67,147,164,250,134,2,250,134,1,40,250,130,244,1,201,48]},{"1050773":[208,107,165,34,201]},{"1050779":[2,176,50,175,135,128,48,208,6,175,67,129,48,128,35,218,8,194,48,165]},{"1050800":[72,165,2,72,169,64,129,133]},{"1050809":[169,48]},{"1050812":[133,2,169,3]},{"1050817":[34,67,147,164,250,134,2,250,134,1,40,250,130,182,1,175,135,128,48,208,6,175,23,128,48,128,35,218,8,194,48,165]},{"1050850":[72,165,2,72,169,16,128,133]},{"1050859":[169,48]},{"1050862":[133,2,169,7]},{"1050867":[34,67,147,164,250,134,2,250,134,1,40,250,130,132,1,201,53]},{"1050885":[208,50,175,135,128,48,208,6,175,68,129,48,128,35,218,8,194,48,165]},{"1050905":[72,165,2,72,169,64,129,133]},{"1050914":[169,48]},{"1050917":[133,2,169,4]},{"1050922":[34,67,147,164,250,134,2,250,134,1,40,250,130,77,1,201,59]},{"1050940":[208,50,175,135,128,48,208,6,175,69,129,48,128,35,218,8,194,48,165]},{"1050960":[72,165,2,72,169,64,129,133]},{"1050969":[169,48]},{"1050972":[133,2,169,5]},{"1050977":[34,67,147,164,250,134,2,250,134,1,40,250,130,22,1,201,66]},{"1050995":[208,50,175,135,128,48,208,6,175,70,129,48,128,35,218,8,194,48,165]},{"1051015":[72,165,2,72,169,64,129,133]},{"1051024":[169,48]},{"1051027":[133,2,169,6]},{"1051032":[34,67,147,164,250,134,2,250,134,1,40,250,130,223]},{"1051047":[201,74]},{"1051050":[208,50,175,135,128,48,208,6,175,70,129,48,128,35,218,8,194,48,165]},{"1051070":[72,165,2,72,169,64,129,133]},{"1051079":[169,48]},{"1051082":[133,2,169,6]},{"1051087":[34,67,147,164,250,134,2,250,134,1,40,250,130,168]},{"1051102":[201,91]},{"1051105":[208,50,175,135,128,48,208,6,175,71,129,48,128,35,218,8,194,48,165]},{"1051125":[72,165,2,72,169,64,129,133]},{"1051134":[169,48]},{"1051137":[133,2,169,7]},{"1051142":[34,67,147,164,250,134,2,250,134,1,40,250,130,113]},{"1051157":[201,104]},{"1051160":[208,50,175,135,128,48,208,6,175,72,129,48,128,35,218,8,194,48,165]},{"1051180":[72,165,2,72,169,64,129,133]},{"1051189":[169,48]},{"1051192":[133,2,169,8]},{"1051197":[34,67,147,164,250,134,2,250,134,1,40,250,130,58]},{"1051212":[201,129]},{"1051215":[208,50,175,135,128,48,208,6,175,73,129,48,128,35,218,8,194,48,165]},{"1051235":[72,165,2,72,169,64,129,133]},{"1051244":[169,48]},{"1051247":[133,2,169,9]},{"1051252":[34,67,147,164,250,134,2,250,134,1,40,250,130,3]},{"1051267":[169,23]},{"1051270":[41,255]},{"1051273":[40,107,8,194,32,165,160,201,200]},{"1051283":[208,50,175,135,128,48,208,6,175,80,129,48,128,35,218,8,194,48,165]},{"1051303":[72,165,2,72,169,80,129,133]},{"1051312":[169,48]},{"1051315":[133,2,169]},{"1051320":[34,67,147,164,250,134,2,250,134,1,40,250,130,242,1,201,51]},{"1051338":[208,50,175,135,128,48,208,6,175,81,129,48,128,35,218,8,194,48,165]},{"1051358":[72,165,2,72,169,80,129,133]},{"1051367":[169,48]},{"1051370":[133,2,169,1]},{"1051375":[34,67,147,164,250,134,2,250,134,1,40,250,130,187,1,201,7]},{"1051393":[208,50,175,135,128,48,208,6,175,82,129,48,128,35,218,8,194,48,165]},{"1051413":[72,165,2,72,169,80,129,133]},{"1051422":[169,48]},{"1051425":[133,2,169,2]},{"1051430":[34,67,147,164,250,134,2,250,134,1,40,250,130,132,1,201,90]},{"1051448":[208,50,175,135,128,48,208,6,175,83,129,48,128,35,218,8,194,48,165]},{"1051468":[72,165,2,72,169,80,129,133]},{"1051477":[169,48]},{"1051480":[133,2,169,3]},{"1051485":[34,67,147,164,250,134,2,250,134,1,40,250,130,77,1,201,6]},{"1051503":[208,50,175,135,128,48,208,6,175,84,129,48,128,35,218,8,194,48,165]},{"1051523":[72,165,2,72,169,80,129,133]},{"1051532":[169,48]},{"1051535":[133,2,169,4]},{"1051540":[34,67,147,164,250,134,2,250,134,1,40,250,130,22,1,201,41]},{"1051558":[208,50,175,135,128,48,208,6,175,85,129,48,128,35,218,8,194,48,165]},{"1051578":[72,165,2,72,169,80,129,133]},{"1051587":[169,48]},{"1051590":[133,2,169,5]},{"1051595":[34,67,147,164,250,134,2,250,134,1,40,250,130,223]},{"1051610":[201,172]},{"1051613":[208,50,175,135,128,48,208,6,175,86,129,48,128,35,218,8,194,48,165]},{"1051633":[72,165,2,72,169,80,129,133]},{"1051642":[169,48]},{"1051645":[133,2,169,6]},{"1051650":[34,67,147,164,250,134,2,250,134,1,40,250,130,168]},{"1051665":[201,222]},{"1051668":[208,50,175,135,128,48,208,6,175,87,129,48,128,35,218,8,194,48,165]},{"1051688":[72,165,2,72,169,80,129,133]},{"1051697":[169,48]},{"1051700":[133,2,169,7]},{"1051705":[34,67,147,164,250,134,2,250,134,1,40,250,130,113]},{"1051720":[201,144]},{"1051723":[208,50,175,135,128,48,208,6,175,88,129,48,128,35,218,8,194,48,165]},{"1051743":[72,165,2,72,169,80,129,133]},{"1051752":[169,48]},{"1051755":[133,2,169,8]},{"1051760":[34,67,147,164,250,134,2,250,134,1,40,250,130,58]},{"1051775":[201,164]},{"1051778":[208,50,175,135,128,48,208,6,175,89,129,48,128,35,218,8,194,48,165]},{"1051798":[72,165,2,72,169,80,129,133]},{"1051807":[169,48]},{"1051810":[133,2,169,9]},{"1051815":[34,67,147,164,250,134,2,250,134,1,40,250,130,3]},{"1051830":[169,62]},{"1051833":[41,255]},{"1051836":[40,107,194,32,165,160,201,200]},{"1051845":[208,4,56,130,82]},{"1051851":[201,51]},{"1051854":[208,4,56,130,73]},{"1051860":[201,7]},{"1051863":[208,4,56,130,64]},{"1051869":[201,90]},{"1051872":[208,4,56,130,55]},{"1051878":[201,6]},{"1051881":[208,4,56,130,46]},{"1051887":[201,41]},{"1051890":[208,4,56,130,37]},{"1051896":[201,172]},{"1051899":[208,4,56,130,28]},{"1051905":[201,222]},{"1051908":[208,4,56,130,19]},{"1051914":[201,144]},{"1051917":[208,4,56,130,10]},{"1051923":[201,164]},{"1051926":[208,4,56,130,1]},{"1051932":[24,226,32,107,175,17,244,126,41,8,107,175,17,244,126,41,4,107,175,17,244,126,41,128,107,175,16,244,126,41,1,201,1,107,175,16,244,126,41,2,107,175,16,244,126,41,4,107,175,16,244,126,41,8,107,175,16,244,126,41,8,74,74,107,34,48,208,13,175,16,244,126,41,8,240,4,128,5,169,5,189,128,13,107,175,16,244,126,41,16,107,175,16,244,126,41,128,107,175,17,244,126,42,42,42,42,107,175,17,244,126,41,32,107,175,16,244,126,41,32,107,72,175,17,244,126,9,8,143,17,244,126,104,107,72,175,17,244,126,9,4,143,17,244,126,104,107,72,175,17,244,126,9,128,143,17,244,126,104,107,34,157,153,7,72,175,16,244,126,9,1,143,16,244,126,104,107,72,175,16,244,126,9,2,143,16,244,126,104,107,34,157,153,7,72,175,16,244,126,9,4,143,16,244,126,104,107,34,157,153,7,72,175,16,244,126,9,8,143,16,244,126,104,107,34,157,153,7,72,175,16,244,126,9,16,143,16,244,126,104,107,72,175,16,244,126,9,32,143,16,244,126,104,107,34,157,153,7,72,175,16,244,126,9,128,143,16,244,126,104,107,72,175,17,244,126,9,16,143,17,244,126,188,128,14,208,48,175,135,128,48,208,6,175,19,128,48,128,35,218,8,194,48,165]},{"1052237":[72,165,2,72,169,16,128,133]},{"1052246":[169,48]},{"1052249":[133,2,169,3]},{"1052254":[34,67,147,164,250,134,2,250,134,1,40,250,168,104,156,233,2,107,72,175,17,244,126,9,32,143,17,244,126,104,107,254,128,13,72,8,194,32,165,160,201,35,1,208,50,175,135,128,48,208,6,175,16,128,48,128,35,218,8,194,48,165]},{"1052317":[72,165,2,72,169,16,128,133]},{"1052326":[169,48]},{"1052329":[133,2,169]},{"1052334":[34,67,147,164,250,134,2,250,134,1,40,250,168,128,57,201,30,1,208,50,175,135,128,48,208,6,175,17,128,48,128,35,218,8,194,48,165]},{"1052372":[72,165,2,72,169,16,128,133]},{"1052381":[169,48]},{"1052384":[133,2,169,1]},{"1052389":[34,67,147,164,250,134,2,250,134,1,40,250,168,128,2,160,70,40,104,107,32,72,215,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,21,72,32,121,215,207,150,128,48,144,10,104,175,151,128,48,34,249,142,160,107,104,218,139,75,171,170,191,241,143,160,171,250,201,248,176,1,107,201,249,208,12,175,123,243,126,208,3,169,59,107,169,60,107,201,250,208,7,34,49,214,160,76,249,142,201,251,208,7,34,237,214,160,76,249,142,201,253,208,22,175,91,243,126,207,148,128,48,144,9,175,149,128,48,34,249,142,160,107,169,4,107,201,254,208,43,175,89,243,126,207,144,128,48,144,9,175,145,128,48,34,249,142,160,107,201]},{"1052568":[208,3,169,67,107,201,1,208,3,169,68,107,201,2,208,3,169,69,107,169,70,107,201,255,208,44,175,22,244,126,41,192,74,74,74,74,74,74,207,146,128,48,144,9,175,147,128,48,34,249,142,160,107,201]},{"1052623":[208,3,169,45,107,201,1,208,3,169,32,107,169,46,107,201,248,208,14,175,64,243,126,201]},{"1052648":[208,3,169,41,107,169,42,107,107,6,68,69,70,45,32,46,9,9,10,8,5,16,11,44,27,26,28,20,25,12,7,29,47,7,21,18,13,13,14,17,23,40,39,4,4,15,22,3,19,1,30,16]},{"1052706":[48,34,33,36,36,36,35,35,35,41,42,44,43,3,3,52,53,49,51,2,50,54,55,44,67,12,56,57,58,249,60,68,61,62,63,64,44]},{"1052745":[65,36,71,72,72,72,254,255,253,13,250,251,248,248,255,255,255,255,73,74,73,255,255,255,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,32,72,215,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,21,72,32,121,215,207,150,128,48,144,10,104,175,151,128,48,34,241,144,160,107,104,218,139,75,171,170,191,238,145,160,171,250,201,248,176,1,107,201,253,208,43,175,89,243,126,207,144,128,48,144,9,175,145,128,48,34,241,144,160,107,201]},{"1053008":[208,3,169,4,107,201,1,208,3,169,4,107,201,2,208,3,169,2,107,169,8,107,201,254,208,44,175,22,244,126,41,192,74,74,74,74,74,74,207,146,128,48,144,9,175,147,128,48,34,241,144,160,107,201]},{"1053063":[208,3,169,4,107,201,1,208,3,169,2,107,169,8,107,201,255,208,29,175,91,243,126,207,148,128,48,144,9,175,149,128,48,34,241,144,160,107,201]},{"1053103":[208,3,169,4,107,169,2,107,201,252,208,12,175,84,243,126,208,3,169,2,107,169,8,107,201,248,208,12,175,84,243,126,208,3,169,8,107,169,2,107,201,250,208,7,34,49,214,160,76,241,144,201,251,208,7,34,237,214,160,76,241,144,107]},{"1053167":[4,2,8,4,2,8,2,4,2,2,2,4,4,4,8,8,8,2,2,4,2,2,2,4,2,4,2,8,8,4,2,10,2,4,2,4,4]},{"1053205":[4,4,8,2,2,8,4,2,8,4,4,8,8,8,4,2,8,2,4,8,2,4,4,2,2,8,8,2,4,4,8,8,8,4,4,4,2,8,8,8,8,4,8,8,8,8,4]},{"1053254":[2,6,2,2,4,8,253,254,255,252,250,251,248,248]},{"1053272":[8,8,8]},{"1053278":[8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,72,218,139,75,171,32,72,215,201,22,240,26,201,43,240,22,201,44,240,18,201,45,240,14,201,60,240,10,201,61,240,6,201,72,240,2,128,22,32,121,215,207,150,128,48,144,11,175,151,128,48,34,238,146,160,130,128]},{"1053480":[128,107,201,94,208,22,175,89,243,126,207,144,128,48,144,10,175,145,128,48,34,238,146,160,128,102,128,81,201,95,208,35,175,22,244,126,41,192,208,25,56,128,85,74,74,74,74,74,74,207,146,128,48,144,10,175,147,128,48,34,238,146,160,128,63,128,60,201,96,208,20,175,91,243,126,207,148,128,48,144,10,175,149,128,48,34,238,146,160,128,37,201,98,208,6,34,49,214,160,128,8,201,99,208,4,34,237,214,160,162]},{"1053591":[224,36,176,12,223,172,147,160,208,3,56,128,4,232,128,240,24,171,250,104,107,4,7,8,9,10,11,12,19,21,24,36,42,52,53,54,66,67,69,89,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,255,255,255,255,255,72,218,90,32,230,147,34,249,142,160,34,45,213]},{"1053666":[122,250,104,107,72,8,72,194,32,169]},{"1053678":[143,37,192,126,143,39,192,126,169]},{"1053688":[2,143,43,192,126,226,32,169,36,143,41,192,126,163,1,34,241,144,160,143,42,192,126,143,50,192,126,104,34,238,146,160,176,2,128,27,194,32,169]},{"1053729":[143,44,192,126,143,51,192,126,169]},{"1053739":[8,143,46,192,126,169]},{"1053746":[52,143,48,192,126,40,104,96,34,238,146,160,176,15,169,1,133,6,169,12,34,136,186,13,169,2,72,128,13,169,2,133,6,169,16,34,136,186,13,169,3,72,169,37,133,8,169,192,133,9,100,7,169,126,139,72,171,169,1,143,8,80,127,34,112,223,5,169]},{"1053815":[143,8,80,127,171,165,144,24,105,8,133,144,165,146,26,26,133,146,104,107,34,238,146,160,176,12,169,1,133,6,169,4,34,136,186,13,128,10,169,2,133,6,169,8,34,136,186,13,169,37,133,8,169,192,133,9,100,7,169,126,139,72,171,169,1,143,8,80,127,34,112,223,5,175,115,129,48,208,6,169]},{"1053896":[143,8,80,127,171,165,144,24,105,8,133,144,165,146,26,26,133,146,107,72,175,66,80,127,240,13,170,160,2]},{"1053926":[169]},{"1053929":[143,66,80,127,128,6,162,64,45,160,2]},{"1053941":[104,107,32,32,149,176,35,194,32,165,226,72,56,233,15]},{"1053957":[133,226,165,232,72,56,233,15]},{"1053966":[133,232,226,32,32,32,149,194,32,104,133,232,104,133,226,226,32,107,189,16,13,197,226,189,48,13,229,227,208,14,189]},{"1053998":[13,197,232,189,32,13,229,233,208,2,56,96,24,96,132,11,133,8,189]},{"1054018":[13,133]},{"1054021":[56,229,232,133,6,189,32,13,133,1,189,16,13,133,2,56,229,226,133,7,189,48,13,133,3,107,175,8,80,127,240,14,169]},{"1054056":[143,8,80,127,165,4,41,255,240,133,4,177,8,69,4,107,72,72,169,144,144,133,4,133,6,104,201,232,3,144,8,230,4,56,233,232,3,128,243,201,100]},{"1054098":[144,8,230,5,56,233,100]},{"1054106":[128,243,201,10]},{"1054111":[144,8,230,6,56,233,10]},{"1054119":[128,243,201,1]},{"1054124":[144,8,230,7,56,233,1]},{"1054132":[128,243,165,4,143,4,80,127,165,6,143,6,80,127,104,107,139,75,171,170,74,74,74,74,168,138,41,7,170,185,218,149,127,218,149,160,171,107]},{"1054171":[1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,218,174]},{"1054189":[16,41,127]},{"1054193":[157,2,16,232,232,104,10,41,255,127,9]},{"1054205":[112,157,2,16,232,232,152,157,2,16,232,232,226,32,169,255,157,2,16,142]},{"1054226":[16,169,1,133,20,194,32,107,218,174]},{"1054237":[16,41,127]},{"1054241":[157,2,16,232,232,104,10,41,255,63,157,2,16,232,232,218,187,72,138,24,105,2,16,168,104,84,126,127,24,99,1,250,170,226,32,169,255,157,2,16,142]},{"1054283":[16,169,1,133,20,194,32,107,8,165,93,201,4,208,42,175,86,243,126,208,36,175,1,80,127,240,30,165,138,207,152,80,127,240,22,175,22,244,126,9,4,143,22,244,126,169]},{"1054330":[143,109,243,126,169]},{"1054336":[143,1,80,127,40,175,109,243,126,107,162]},{"1054348":[175,22,244,126,137,4,240,9,41,251,143,22,244,126,169,240,107,169,6,107,34,232,152,9,169]},{"1054374":[143,1,80,127,107,165,93,201,4,208,20,175,86,243,126,208,8,169,1,143,1,80,127,128,6,169]},{"1054401":[143,1,80,127,107,72,165,138,143,152,80,127,104,107,169,32,141,226,2,156,123,3,100,85,156,96,3,107,175,48,128,48,47,20,130,48,240,4,34,236,150,160,107,72,173]},{"1054447":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,128,141]},{"1054477":[67,141,1,67,169,64,141,129,33,169,243,141,130,33,169,126,141,131,33,156,2,67,169,30,141,3,67,169,112,141,4,67,169,128,141,5,67,169,1,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1054551":[67,104,107,8,226,32,175,202,243,126,73,64,143,202,243,126,240,4,169,7,128,2,169,3,143,199,243,126,40,107,72,175,114,129,48,240,10,104,175,139,243,126,34,136,250,13,107,104,34,136,250,13,107,175,114,129,48,240,11,169]},{"1054612":[143,23,192,126,175,139,243,126,107,169]},{"1054623":[143,23,192,126,169,255,107,218,138,10,170,175,202,243,126,73,64,208,1,232,191,96,128,48,250,107,218,175,202,243,126,41,64,208,54,175,59,128,48,240,36,175,104,243,126,15,20,244,126,41,1,208,24,218,191,92,152,160,170,191,104,243,126,31,20,244,126,250,63,102,152,160,208,3,130,98]},{"1054700":[191,81,152,160,16,3,24,128,90,170,128,52,175,59,128,48,240,36,175,104,243,126,15,20,244,126,41,2,208,24,218,191,95,152,160,170,191,104,243,126,31,20,244,126,250,63,106,152,160,208,3,130,44]},{"1054754":[191,85,152,160,170,128,3,56,250,107,191,80,128,48,41,64,208,13,175,116,243,126,63,155,160,2,208,16,24,128,14,175,122,243,126,63,155,160,2,208,3,24,128,1,56,250,107,2,10,3,255,6,8,12,11,7,9,5,1]},{"1054814":[1,1]},{"1054819":[1]},{"1054821":[1,32,32,16]},{"1054826":[2,128,8,16,1,64,4,8,226,32,175,202,243,126,73,64,208,4,169,7,128,2,169,3,143,199,243,126,40,107,175,202,243,126,41,64,240,3,169,7,107,169,3,107,175,90,128,48,41,255]},{"1054877":[208,12,175,116,243,126,47,165,160,2,41,255]},{"1054890":[107,175,122,243,126,47,165,160,2,41,255]},{"1054902":[107,194,32,175,19,130,48,41,255]},{"1054912":[240,5,169,8]},{"1054917":[128,4,175,72,128,48,73,255,255,24,105,1]},{"1054930":[24,101,234,201,24,255,176,3,169,24,255,133,234,201,24,255,226,32,208,3,238]},{"1054952":[2,107,175,19,130,48,41,255]},{"1054961":[240,5,169,8]},{"1054966":[128,7,175,72,128,48,41,255]},{"1054975":[24,101,234,48,3,169]},{"1054983":[133,234,107,175,73,128,48,208,5,165,244,41,16,107,165,240,41,16,73,16,107,173,12,4,41,255]},{"1055010":[201,255]},{"1055013":[208,1,107,175,22,244,126,41,32]},{"1055023":[240,4,169]},{"1055028":[107,173,12,4,41,255]},{"1055035":[201,255]},{"1055038":[107,218,8,226,48,173,12,4,197,31,144,26,74,170,175,111,243,126,159,124,243,126,224]},{"1055062":[208,4,143,125,243,126,224,1,208,4,143,124,243,126,34,186,237,160,40,250,107,175,69,128,48,208,6,169,8,22,133]},{"1055094":[107,169,136,21,133]},{"1055100":[107,175,69,128,48,208,6,169,16,22,133]},{"1055112":[107,169,144,21,133]},{"1055118":[107,175,69,128,48,208,6,169,24,22,133]},{"1055130":[107,169,152,21,133]},{"1055136":[107,175,69,128,48,208,6,169,32,22,133]},{"1055148":[107,169,160,21,133]},{"1055154":[107,175,69,128,48,208,1,107,8,194,48,169,80,45,141,70,22,169,84,45,141,72,22,169,81,45,141,76,22,169,82,45,141,78,22,169,83,45,141,80,22,169,85,45,141,84,22,169,86,45,141,86,22,169,87,45,141,88,22,169,88,45,141,90,22,169,89,45,141,92,22,169,90,45,141,94,22,169,91,45,141,96,22,169,92,45,141,100,22,162]},{"1055246":[169,245,36,157,134,22,157,198,22,232,232,224,32]},{"1055260":[144,240,175,22,244,126,41,32]},{"1055269":[240,3,130,200,1,175,69,128,48,41,1]},{"1055281":[208,3,130,231]},{"1055286":[169,16,40,141,132,22,226,32,169,22,24,111,125,243,126,141,134,22,169,40,105]},{"1055308":[141,135,22,169,22,24,111,128,243,126,141,136,22,169,40,105]},{"1055325":[141,137,22,169,22,24,111,126,243,126,141,140,22,169,40,105]},{"1055342":[141,141,22,169,22,24,111,127,243,126,141,142,22,169,40,105]},{"1055359":[141,143,22,169,22,24,111,134,243,126,141,144,22,169,40,105]},{"1055376":[141,145,22,169,22,24,111,130,243,126,141,148,22,169,40,105]},{"1055393":[141,149,22,169,22,24,111,129,243,126,141,150,22,169,40,105]},{"1055410":[141,151,22,169,22,24,111,132,243,126,141,152,22,169,40,105]},{"1055427":[141,153,22,169,22,24,111,135,243,126,141,154,22,169,40,105]},{"1055444":[141,155,22,169,22,24,111,133,243,126,141,156,22,169,40,105]},{"1055461":[141,157,22,169,22,24,111,131,243,126,141,158,22,169,40,105]},{"1055478":[141,159,22,169,22,24,111,136,243,126,141,160,22,169,40,105]},{"1055495":[141,161,22,169,22,24,111,137,243,126,141,164,22,169,40,105]},{"1055512":[141,165,22,194,32,175,69,128,48,41,2]},{"1055524":[208,3,130,201]},{"1055529":[169,17,40,141,196,22,175,103,243,126,41,64]},{"1055542":[240,6,169,38,40,141,198,22,175,103,243,126,41,8]},{"1055557":[240,6,169,38,40,141,200,22,175,103,243,126,41,32]},{"1055572":[240,6,169,38,40,141,204,22,175,103,243,126,41,16]},{"1055587":[240,6,169,38,40,141,206,22,175,102,243,126,41,32]},{"1055602":[240,6,169,38,40,141,208,22,175,103,243,126,41,2]},{"1055617":[240,6,169,38,40,141,212,22,175,103,243,126,41,4]},{"1055632":[240,6,169,38,40,141,214,22,175,102,243,126,41,128]},{"1055647":[240,6,169,38,40,141,216,22,175,102,243,126,41,16]},{"1055662":[240,6,169,38,40,141,218,22,175,102,243,126,41,64]},{"1055677":[240,6,169,38,40,141,220,22,175,103,243,126,41,1]},{"1055692":[240,6,169,38,40,141,222,22,175,102,243,126,41,8]},{"1055707":[240,6,169,38,40,141,224,22,175,102,243,126,41,4]},{"1055722":[240,6,169,38,40,141,228,22,175,22,244,126,41,32]},{"1055737":[208,3,130,170,1,175,69,128,48,41,4]},{"1055749":[208,3,130,201]},{"1055754":[169,33,40,141,132,22,175,105,243,126,41,64]},{"1055767":[240,6,169,38,40,141,134,22,175,105,243,126,41,8]},{"1055782":[240,6,169,38,40,141,136,22,175,105,243,126,41,32]},{"1055797":[240,6,169,38,40,141,140,22,175,105,243,126,41,16]},{"1055812":[240,6,169,38,40,141,142,22,175,104,243,126,41,32]},{"1055827":[240,6,169,38,40,141,144,22,175,105,243,126,41,2]},{"1055842":[240,6,169,38,40,141,148,22,175,105,243,126,41,4]},{"1055857":[240,6,169,38,40,141,150,22,175,104,243,126,41,128]},{"1055872":[240,6,169,38,40,141,152,22,175,104,243,126,41,16]},{"1055887":[240,6,169,38,40,141,154,22,175,104,243,126,41,64]},{"1055902":[240,6,169,38,40,141,156,22,175,105,243,126,41,1]},{"1055917":[240,6,169,38,40,141,158,22,175,104,243,126,41,8]},{"1055932":[240,6,169,38,40,141,160,22,175,104,243,126,41,4]},{"1055947":[240,6,169,38,40,141,164,22,175,69,128,48,41,8]},{"1055962":[208,3,130,201]},{"1055967":[169,32,44,141,196,22,175,101,243,126,41,64]},{"1055980":[240,6,169,38,44,141,198,22,175,101,243,126,41,8]},{"1055995":[240,6,169,38,44,141,200,22,175,101,243,126,41,32]},{"1056010":[240,6,169,38,44,141,204,22,175,101,243,126,41,16]},{"1056025":[240,6,169,38,44,141,206,22,175,100,243,126,41,32]},{"1056040":[240,6,169,38,44,141,208,22,175,101,243,126,41,2]},{"1056055":[240,6,169,38,44,141,212,22,175,101,243,126,41,4]},{"1056070":[240,6,169,38,44,141,214,22,175,100,243,126,41,128]},{"1056085":[240,6,169,38,44,141,216,22,175,100,243,126,41,16]},{"1056100":[240,6,169,38,44,141,218,22,175,100,243,126,41,64]},{"1056115":[240,6,169,38,44,141,220,22,175,101,243,126,41,1]},{"1056130":[240,6,169,38,44,141,222,22,175,100,243,126,41,8]},{"1056145":[240,6,169,38,44,141,224,22,175,100,243,126,41,4]},{"1056160":[240,6,169,38,44,141,228,22,40,107,8,139,75,171,194,48,162]},{"1056179":[191,242,158,160,157,234,18,191,6,159,160,157,42,19,191,26,159,160,157,106,19,191,46,159,160,157,170,19,191,66,159,160,157,234,19,191,86,159,160,157,42,20,191,106,159,160,157,106,20,191,126,159,160,157,170,20,191,146,159,160,157,234,20,232,232,224,20]},{"1056247":[144,186,175,116,243,126,41,4]},{"1056256":[240,24,169,43,61,141,50,19,169,44,61,141,52,19,169,45,61,141,114,19,169,46,61,141,116,19,175,116,243,126,41,2]},{"1056289":[240,24,169,43,45,141,174,19,169,44,45,141,176,19,169,45,45,141,238,19,169,46,45,141,240,19,175,116,243,126,41,1]},{"1056322":[240,24,169,43,37,141,182,19,169,44,37,141,184,19,169,45,37,141,246,19,169,46,37,141,248,19,175,122,243,126,41,2]},{"1056355":[240,12,169,68,45,141,172,20,169,69,45,141,174,20,175,122,243,126,41,16]},{"1056376":[240,12,169,68,45,141,110,20,169,69,45,141,112,20,175,122,243,126,41,64]},{"1056397":[240,12,169,68,45,141,176,20,169,69,45,141,178,20,175,122,243,126,41,32]},{"1056418":[240,12,169,68,45,141,114,20,169,69,45,141,116,20,175,122,243,126,41,4]},{"1056439":[240,12,169,68,37,141,180,20,169,69,37,141,182,20,175,122,243,126,41,1]},{"1056460":[240,12,169,68,37,141,118,20,169,69,37,141,120,20,175,122,243,126,41,8]},{"1056481":[240,12,169,68,45,141,184,20,169,69,45,141,186,20,171,40,107,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,245,36,245,36,245,36,43,49,44,49,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,61,49,46,49,245,36,245,36,245,36,252,104,252,40,245,36,43,49,44,49,245,36,245,36,43,49,44,49,245,36,252,104,252,40,245,36,61,49,46,49,245,36,245,36,61,49,46,49,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,70,49,71,49,70,49,71,49,70,49,71,49,245,36,252,104,252,40,70,49,71,49,70,49,71,49,70,49,71,49,70,49,71,49,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,33,37,34,37,35,37,36,37,63,37,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,59,33,60,33,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,61,33,62,33,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,59,33,60,33,245,36,245,36,59,33,60,33,245,36,252,104,252,40,245,36,61,33,62,33,245,36,245,36,61,33,62,33,245,36,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,251,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,249,40,251,104,252,40,47,37,52,37,53,37,54,37,55,37,245,36,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,70,49,71,49,70,49,71,49,245,36,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,70,49,71,49,70,49,71,49,70,49,71,49,245,36,252,104,252,40,245,36,245,36,245,36,245,36,245,36,245,36,245,36,245,36,252,104,252,40,245,36,245,36,70,49,71,49,70,49,71,49,245,36,245,36,252,104,251,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,249,168,251,232,194,32,165,160,201,23,1,208,6,226,32,169,160,128,76,226,32,175,132,128,48,201,160,176,66,175,146,80,127,208,23,175,132,128,48,24,111,109,243,126,207,108,243,126,144,4,175,108,243,126,143,146,80,127,175,109,243,126,207,146,80,127,144,19,169]},{"1057104":[143,114,243,126,173,10,2,208,14,169]},{"1057115":[143,146,80,127,56,107,169,8,143,114,243,126,24,107,175,109,243,126,207,108,243,126,144,21,175,108,243,126,143,109,243,126,169]},{"1057149":[143,114,243,126,173,10,2,208,8,56,107,169,160,143,114,243,126,24,107,194,32,165,160,201,23,1,208,6,226,32,169,128,128,61,226,32,175,133,128,48,201,128,176,51,175,147,80,127,208,19,175,133,128,48,24,111,110,243,126,201,128,144,2,169,128,143,147,80,127,175,110,243,126,207,147,80,127,144,8,169]},{"1057230":[143,147,80,127,56,107,169,1,143,115,243,126,24,107,226,48,175,110,243,126,201,128,176,9,169,128,143,115,243,126,226,48,107,226,49,107,218,90,8,160,255,162]},{"1057273":[165,12,201,232,3,144,3,130,24]},{"1057283":[201,100]},{"1057286":[144,3,130,97]},{"1057291":[201,10]},{"1057294":[144,3,130,170]},{"1057299":[201,1]},{"1057302":[144,3,130,243]},{"1057307":[100,10,165,12,201,232,3,144,8,56,233,232,3,230,10,128,243,133,12,192,255,208,10,160,6,165,14,24,121,160,163,133,14,165,14,159]},{"1057344":[201,126,232,232,169,56]},{"1057351":[159]},{"1057353":[201,126,232,232,164,10,152,10,168,185,140,163,159]},{"1057367":[201,126,232,232,169]},{"1057374":[159]},{"1057376":[201,126,232,232,165,14,24,105,8]},{"1057386":[133,14,100,10,165,12,201,100]},{"1057395":[144,8,56,233,100]},{"1057401":[230,10,128,243,133,12,192,255,208,10,160,4,165,14,24,121,160,163,133,14,165,14,159]},{"1057425":[201,126,232,232,169,56]},{"1057432":[159]},{"1057434":[201,126,232,232,164,10,152,10,168,185,140,163,159]},{"1057448":[201,126,232,232,169]},{"1057455":[159]},{"1057457":[201,126,232,232,165,14,24,105,8]},{"1057467":[133,14,100,10,165,12,201,10]},{"1057476":[144,8,56,233,10]},{"1057482":[230,10,128,243,133,12,192,255,208,10,160,2,165,14,24,121,160,163,133,14,165,14,159]},{"1057506":[201,126,232,232,169,56]},{"1057513":[159]},{"1057515":[201,126,232,232,164,10,152,10,168,185,140,163,159]},{"1057529":[201,126,232,232,169]},{"1057536":[159]},{"1057538":[201,126,232,232,165,14,24,105,8]},{"1057548":[133,14,100,10,165,12,201,1]},{"1057557":[144,8,56,233,1]},{"1057563":[230,10,128,243,133,12,192,255,208,10,160]},{"1057575":[165,14,24,121,160,163,133,14,165,14,159]},{"1057587":[201,126,232,232,169,56]},{"1057594":[159]},{"1057596":[201,126,232,232,164,10,152,10,168,185,140,163,159]},{"1057610":[201,126,232,232,169]},{"1057617":[159]},{"1057619":[201,126,232,232,165,14,24,105,8]},{"1057629":[133,14,226,32,138,74,74,74,133,6,10,10,72,165,34,207,34,80,127,144,13,207,35,80,127,176,7,104,34,132,186,13,128,5,104,34,128,186,13,138,74,74,74,40,122,250,96,48,2,49,2,2,2,3,2,18,2,19,2,34,2,35,2,50,2,51,2,4]},{"1057700":[252,255,248,255,218,90,8,194,48,162]},{"1057712":[191,1,200,48,197,160,208,66,191,5,200,48,41,64]},{"1057727":[208,13,175,153,80,127,41,255]},{"1057736":[223,3,200,48,208,44,226,32,191]},{"1057746":[200,48,143,80,80,127,191,5,200,48,143,81,80,127,41,3,10,10,143,96,80,127,191,6,200,48,143,99,80,127,191,7,200,48,143,98,80,127,128,33,191]},{"1057788":[200,48,41,255]},{"1057793":[201,255]},{"1057796":[240,10,232,232,232,232,232,232,232,232,128,160,226,32,169,255,143,81,80,127,130,222]},{"1057819":[226,32,162]},{"1057824":[160]},{"1057827":[152,207,96,80,127,144,3,130,172]},{"1057837":[191,1,201,48,201,255,208,3,130,161]},{"1057848":[191]},{"1057850":[201,48,207,80,80,127,240,3,130,137]},{"1057861":[191,1,201,48,218,187,159,82,80,127,250,191,2,201,48,218,187,159,83,80,127,250,191,3,201,48,218,187,159,84,80,127,250,90,218,169]},{"1057898":[235,152,74,74,24,111,98,80,127,170,191,2,243,126,187,159,85,80,127,168,250,191,4,201,48,240,43,152,223,4,201,48,144,36,122,191,5,201,48,218,187,159,82,80,127,250,191,6,201,48,218,187,159,83,80,127,250,191,7,201,48,218,187,159,84,80,127,250,128,1,122,218,90,218,187,191,82,80,127,250,168,194,32,163,1,170,191,106,165,160,170,32,137,165,122,250,200,200,200,200,232,232,232,232,232,232,232,232,130,74,255,165,160,201,255,208,13,173,55,33,173,63,33,173,61,33,201,60,144,243,169,128,141]},{"1058032":[33,32,164,165,169,15,141]},{"1058040":[33,175,81,80,127,137,32,240,14,169]},{"1058051":[235,175,98,80,127,170,191,2,243,126,128,2,169]},{"1058065":[143,95,80,127,175,82,80,127,201,255,208,12,175,95,80,127,15,196,170,160,143,95,80,127,175,86,80,127,201,255,208,12,175,95,80,127,15,197,170,160,143,95,80,127,175,90,80,127,201,255,208,12,175,95,80,127,15,198,170,160,143,95,80,127,40,122,250,175,81,80,127,201,255,208,13,104,104,104,254,160,11,189,64,14,92,241,139,6,107]},{"1058158":[128]},{"1058163":[1]},{"1058166":[169,160,143,68,80,127,169,165,143,69,80,127,169,160,143,70,80,127,96,138,24,105,128,17,143,66,80,127,226,48,152,34,249,142,160,34,45,213]},{"1058205":[194,16,96,32,164,165,107,173]},{"1058214":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,1,141]},{"1058244":[67,169,24,141,1,67,169,128,141,21,33,169,128,141,2,67,169,161,141,3,67,169,126,141,4,67,175,81,80,127,41,16,208,3,130,141]},{"1058281":[169,64,141,5,67,156,6,67,169,64,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,64,141,22,33,169,91,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,91,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,90,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,91,141,23,33,169,1,141,11,66,130,138]},{"1058422":[169,64,141,5,67,156,6,67,169,96,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,96,141,22,33,169,93,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,128,141,22,33,169,93,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,160,141,22,33,169,92,141,23,33,169,1,141,11,66,169,64,141,5,67,156,6,67,169,160,141,22,33,169,93,141,23,33,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1058587":[67,96,104,104,104,169,30,72,169,238,72,169,233,72,189,128,14,92,129,135]},{"1058608":[175,81,80,127,201,255,208,3,76,29,167,139,75,171,34,231,244,30,32,107,167,175,81,80,127,137,128,240,22,137,32,208,18,218,175,98,80,127,170,191,2,243,126,240,3,250,128,9,250,128]},{"1058659":[32,136,171,32,136,169,171,107,175,99,80,127,41,7,240,26,201,1,208,3,130,165]},{"1058682":[201,2,208,3,130,227]},{"1058689":[201,3,208,3,130,110,1,201,4,208,1,96,218,162]},{"1058704":[165,26,41,16,240,12,189,255,167,159]},{"1058715":[201,126,232,224,16,144,244,189,15,168,159]},{"1058727":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1058786":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1058817":[248,255]},{"1058822":[2]},{"1058827":[16]},{"1058830":[2]},{"1058833":[248,255]},{"1058838":[2]},{"1058843":[16,64]},{"1058846":[2,169,1,133,6,169,4,34,128,186,13,100,7,165,26,41,8,240,10,169,84,133,8,169,168,133,9,128,8,169,92,133,8,169,168,133,9,34,112,223,5,165,144,24,105,4,133,144,165,146,26,133,146,96]},{"1058904":[70,10]},{"1058907":[2]},{"1058912":[70,74]},{"1058915":[2,218,162]},{"1058919":[165,26,41,64,240,12,189,214,168,159]},{"1058930":[201,126,232,224,16,144,244,189,230,168,159]},{"1058942":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1059001":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1059032":[248,255,132]},{"1059037":[2]},{"1059042":[16]},{"1059045":[2]},{"1059048":[248,255,132]},{"1059053":[2]},{"1059058":[16,64]},{"1059061":[2,218,162]},{"1059065":[165,26,41,64,240,12,189,104,169,159]},{"1059076":[201,126,232,224,16,144,244,189,120,169,159]},{"1059088":[201,126,232,224,16,144,244,250,175,99,80,127,74,74,74,74,41,14,15,5,201,126,143,5,201,126,175,99,80,127,74,74,74,74,41,14,15,13,201,126,143,13,201,126,139,169,2,133,6,169,8,34,128,186,13,100,7,169]},{"1059147":[133,8,169,201,133,9,169,126,72,171,34,112,223,5,165,144,24,105,8,133,144,165,146,26,26,133,146,171,96]},{"1059178":[248,255,142]},{"1059183":[2]},{"1059188":[16]},{"1059191":[2]},{"1059194":[248,255,142]},{"1059199":[2]},{"1059204":[16,64]},{"1059207":[2,218,90,8,160]},{"1059213":[90,152,74,74,168,175,95,80,127,57,196,170,240,3,122,128,48,122,173,238]},{"1059234":[221,32,15,208,39,32,91,171,32,199,170,34,230,131,6,144,3,32,123,171,32,49,171,34,230,131,6,144,15,165,246,41,128,240,9,165,16,201,12,176,3,32,221,169,200,200,200,200,152,207,96,80,127,144,180,40,122,250,96,218,90,187,191,82,80,127,201,14,240,14,201,46,240,10,201,47,240,6,201,48,240,2,128,6,34,40,222,30,48,38,175,81,80,127,41,128,208,46,194,32,175,96,243,126,223,83,80,127,226,32,176,32,169,122,160,1,34,25,226,5,169,60,141,46,1,130,159]},{"1059362":[169,107,160,1,34,25,226,5,169,60,141,46,1,130,143]},{"1059378":[175,81,80,127,41,128,208,17,194,32,175,96,243,126,56,255,83,80,127,143,96,243,126,226,32,191,82,80,127,168,34,157,153,7,191,85,80,127,26,159,85,80,127,138,74,74,170,175,81,80,127,137,128,208,33,175,95,80,127,29,196,170,143,95,80,127,218,138,24,111,98,80,127,170,191,2,243,126,26,240,4,159,2,243,126,250,128,55,137,32,208,25,175,95,80,127,9,7,143,95,80,127,218,175,98,80,127,170,169,1,159,2,243,126,250,128,26,175,95,80,127,29,196,170,143,95,80,127,218,175,98,80,127,170,175,95,80,127,159,2,243,126,250,122,250,96,1,2,4,194,32,165]},{"1059531":[72,226,32,189,48,13,235,189,16,13,194,32,72,90,175,81,80,127,41,3]},{"1059552":[58,10,168,185,125,172,133]},{"1059560":[122,104,24,113]},{"1059565":[24,105,2]},{"1059569":[226,32,133,4,235,133,10,189,32,13,235,189]},{"1059582":[13,194,32,90,200,200,24,113]},{"1059591":[122,72,175,81,80,127,41,128]},{"1059600":[240,7,104,24,105,4]},{"1059607":[128,1,104,226,32,133,5,235,133,11,169,12,133,6,169,14,133,7,194,32,104,133]},{"1059630":[226,32,96,8,226,32,165,4,56,233,10,133,4,165,10,233]},{"1059647":[133,10,165,5,56,233,8,133,5,165,11,233]},{"1059660":[133,11,165,6,24,105,20,133,6,169,40,133,7,40,96,169,8,133,2,133,3,165,34,24,105,4,133]},{"1059688":[165,35,105]},{"1059692":[133,8,165,32,105,8,133,1,165,33,105]},{"1059704":[133,9,96,218,34]},{"1059710":[245,28,100,94,34,179,145,7,250,96,139,75,171,218,90,138,143,97,80,127,162]},{"1059732":[160]},{"1059734":[175,81,80,127,41,3,201,3,208,5,32,185,171,128,4,201,2,208,5,32,185,171,128,4,201,1,208,3,32,185,171,122,250,171,96,175,95,80,127,57,196,170,240,3,130,178]},{"1059781":[90,175,81,80,127,41,3,58,10,168,194,32,185,125,172,133]},{"1059798":[163,1,10,10,168,177]},{"1059805":[143,37,192,126,200,200,175,81,80,127,41,128]},{"1059818":[208,8,177]},{"1059822":[143,39,192,126,128,10,177]},{"1059830":[24,105,4]},{"1059834":[143,39,192,126,226,32,122,191,82,80,127,201,46,208,2,128,15,201,47,208,2,128,9,201,48,240,5,185,155,172,128,2,169,192,235,175,81,80,127,41,16,240,5,235,56,233,34,235,235,143,41,192,126,191,82,80,127,34,241,144,160,143,42,192,126,169]},{"1059901":[143,43,192,126,191,82,80,127,34,238,146,160,176,10,169,2,143,44,192,126,169,1,128,11,169]},{"1059927":[143,44,192,126,32,112,173,169,2,218,72,175,97,80,127,170,104,32,39,173,250,175,81,80,127,41,128,208,3,32,158,172,200,232,232,232,232,96,131,172,135,172,143,172,8]},{"1059973":[40]},{"1059975":[240,255,40]},{"1059979":[32]},{"1059981":[40]},{"1059983":[216,255,40]},{"1059987":[8]},{"1059989":[40]},{"1059991":[56]},{"1059993":[40]},{"1059995":[198,200,202,139,75,171,218,90,8,194,32,90,175,81,80,127,41,3]},{"1060014":[58,10,168,185,125,172,133]},{"1060022":[185,21,173,133,2,122,90,152,10,10,168,177]},{"1060035":[133,14,152,74,168,177,2,143,34,80,127,200,177,2,143,35,80,127,122,191,83,80,127,133,12,240,50,32,242,161,226,32,133,6,100,7,72,169]},{"1060074":[133,8,169,201,133,9,169,126,72,171,218,72,175,97,80,127,170,104,34,112,223,5,250,163,1,10,10,24,101,144,133,144,104,24,101,146,133,146,40,122,250,171,96,27,173,29,173,33,173]},{"1060124":[255]},{"1060126":[128,128,255]},{"1060130":[96,96,144,144,255,218,90,72,133,6,165,32,201,98,176,10,163,1,10,10,34,128,186,13,128,8,163,1,10,10,34,132,186,13,163,1,133,6,100,7,169,37,133,8,169,192,133,9,169,126,139,72,171,34,112,223,5,171,163,1,10,10,24,101,144,133,144,165,146,24,99,1,133,146,104,122,250,96,218,162]},{"1060211":[194,32,191,37,192,126,24,105,4]},{"1060221":[159,37,192,126,159,45,192,126,191,39,192,126,24,105,8]},{"1060237":[159,47,192,126,191,41,192,126,24,105,16]},{"1060249":[159,49,192,126,191,43,192,126,159,51,192,126,226,32,250,96,175,135,128,48,208,6,175,18,128,48,128,35,218,8,194,48,165]},{"1060283":[72,165,2,72,169,16,128,133]},{"1060292":[169,48]},{"1060295":[133,2,169,2]},{"1060300":[34,67,147,164,250,134,2,250,134,1,40,250,157,128,14,34,212,147,160,107,72,189,128,14,34,58,148,160,104,107,72,188,128,14,104,34,26,142,160,107,169,8,157,80,15,169]},{"1060347":[143]},{"1060349":[80,127,32,68,174,34,212,147,160,107,72,175]},{"1060362":[80,127,240,6,34,249,173,160,128,7,32,68,174,34,139,148,160,104,107,32,68,174,201,36,208,24,90,160,36,34,19,182,160,122,175,111,243,126,26,143,111,243,126,169,47,34,138,187,13,107,90,168,34,157,153,7,122,107,165,160,201,115,208,6,175,96,129,48,128,12,201,140,208,6,175,97,129,48,128,2,169,36,96,185,121,55,158,218,173,228,80,133,8,173,230,80,133,10,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,24,165,10,106,133,10,165,8,106,133,8,173,224,80,133,12,173,226,80,133,14,24,165,12,42,133,12,165,14,42,133,14,24,165,12,42,133,12,165,14,42,133,14,165,8,69,12,141,242,80,165,10,69,14,141,244,80,173,228,80,133,8,173,230,80,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,24,165,8,42,133,8,165,10,42,133,10,173,224,80,133,12,173,226,80,133,14,24,165,14,106,133,14,165,12,106,133,12,24,165,14,106,133,14,165,12,106,133,12,24,165,14,106,133,14,165,12,106,133,12,165,8,69,12,141,246,80,165,10,69,14,141,248,80,173,242,80,24,109,246,80,141,242,80,173,244,80,109,248,80,141,244,80,173,232,80,77,224,80,133,8,173,234,80,77,226,80,133,10,173,236,80,41,3]},{"1060713":[77,240,80,10,10,170,189,208,80,77,228,80,133,12,189,210,80,77,230,80,133,14,165,8,24,101,12,141,246,80,165,10,101,14,141,248,80,173,242,80,77,246,80,133,8,173,244,80,77,248,80,133,10,250,96,8,139,226,48,169,127,72,171,100,5,162]},{"1060780":[191,117,176,160,197,4,144,3,232,128,245,191,118,176,160,133,6,100,7,194,32,138,10,10,170,191,119,176,160,141,232,80,191,121,176,160,141,234,80,173]},{"1060821":[81,141,224,80,173,2,81,141,226,80,173,232,80,74,74,41,3]},{"1060839":[141,240,80,165,4,58,141,236,80,240,56,10,10,170,189,252,80,141,228,80,189,254,80,141,230,80,32,97,174,173,236,80,10,10,170,189]},{"1060876":[81,56,229,8,157]},{"1060882":[81,141,224,80,189,2,81,229,10,157,2,81,141,226,80,173,236,80,58,141,236,80,128,198,165,4,58,10,10,170,189]},{"1060914":[81,141,228,80,189,2,81,141,230,80,32,97,174,173]},{"1060929":[81,56,229,8,141]},{"1060935":[81,141,224,80,173,2,81,229,10,141,2,81,141,226,80,173,232,80,56,239,93,174,160,141,232,80,173,234,80,239,95,174,160,141,234,80,198,6,240,3,130,109,255,171,40,107,1,32,32,55,239,198,72,175,17,244,126,9,1,143,17,244,126,104,107,72,175,17,244,126,9,2,143,17,244,126,104,107,175,17,244,126,41,1,107,175,17,244,126,41,2,107,34,249,142,160,72,165,138,201,3,240,6,34,136,176,160,128,4,34,123,176,160,104,107,34,120,135,160,72,34,212,147,160,169,1,143,51,80,127,143,52,80,127,34,163,176,160,169,235,143]},{"1061077":[254,127,34,93,246,29,104,153,128,14,165,34,153,16,13,165,35,153,48,13,165,32,153]},{"1061101":[13,165,33,153,32,13,169]},{"1061109":[153,32,15,169,127,153,112,15,107,72,8,34,40,177,160,144,31,156,18,1,156,239,3,169]},{"1061134":[133,93,194,32,165,138,201,48]},{"1061143":[208,10,226,32,169,2,133,47,169,60,133,70,226,32,40,104,107,194,32,165,138,201,3]},{"1061167":[208,13,165,34,201,98,7,176,4,56,130,19]},{"1061180":[128,16,201,48]},{"1061185":[208,11,165,34,201]},{"1061191":[2,144,4,56,130,1]},{"1061198":[24,226,32,107,191,128,206,160,145,146,107,201,2,240,44,194,32,165,8,133]},{"1061219":[226,32,34,16,247,8,169,52,145,144,200,191,128,207,160,16,2,165,116,10,9,48,145,144,200,90,152,56,233,4,74,74,168,169]},{"1061254":[145,146,122,107,175,36,128,48,143,114,243,126,107,175,36,128,48,143,114,243,126,175,37,128,48,143,115,243,126,107,175,36,128,48,240,10,175,109,243,126,207,108,243,126,208,17,175,37,128,48,240,8,175,110,243,126,201,128,208,3,169]},{"1061316":[107,169,1,107,175,126,129,48,208,7,169,72,34,240,225,5,107,90,34,47,241,6,144,88,175,92,243,126,201,2,208,5,169,28,72,128,55,175,93,243,126,201,2,208,5,169,29,72,128,42,175,94,243,126,201,2,208,5,169,30,72,128,29,175,95,243,126,201,2,208,5,169,31,72,128,16,169,10,157,128,13,169,81,160,1,34,240,225,5,76,48,178,169,2,157,128,13,100,47,169,1,141,228,2,104,141,232,28,158,176,14,24,122,107,165,160,201,21,8,208,83,169,114,34,93,246,29,173,216,15,153,16,13,173,217,15,153,48,13,173,218,15,56,233,64,153]},{"1061463":[13,173,219,15,233]},{"1061469":[153,32,13,169,1,153,160,13,169,187,34,93,246,29,169,8,153,208,13,173,216,15,153,16,13,173,217,15,153,48,13,173,218,15,56,233,32,153]},{"1061508":[13,173,219,15,233]},{"1061514":[153,32,13,158,208,13,40,107,175,1,254,127,207,32,128,48,176,5,34,113,186,13,107,175]},{"1061539":[254,127,208,245,169,4,107,34,194,219,160,173,196,4,207,33,128,48,240,15,34,113,186,13,41,7,201,7,240,19,34,212,219,160,107,169,51,133,200,173,3,4,41,64,208,3,169,7,107,34,212,219,160,34,113,186,13,41,7,201,7,208,2,169]},{"1061604":[107,169]},{"1061607":[128,107,169,1,128,103,165,160,201,32,208,51,169,2,34,89,179,160,72,175,134,128,48,240,4,104,9,1,107,104,107,169,3,128,74,169,4,128,70,169,5,128,66,169,6,128,62,169,7,128,58,169,8,128,54,169,9,128,50,169,10,128,46,169,11,34,89,179,160,72,175,134,128,48,240,4,104,9,1,107,104,107,169,12,128,23,169,13,128,19,169,14,34,89,179,160,72,175,134,128,48,240,4,104,41,254,107,104,107,34,89,179,160,107,218,8,194,32,41,127]},{"1061728":[10,170,191]},{"1061732":[82,127,26,41,255,3,159]},{"1061740":[82,127,170,10,191]},{"1061746":[128,175,40,250,107,218,8,194,48,162]},{"1061758":[191,174,179,160,159]},{"1061764":[82,127,232,232,191,174,179,160,159]},{"1061774":[82,127,232,232,191,174,179,160,159]},{"1061784":[82,127,232,232,191,174,179,160,159]},{"1061794":[82,127,232,232,224,127]},{"1061801":[144,211,40,250,107]},{"1061808":[64]},{"1061810":[128]},{"1061812":[192]},{"1061815":[1,64,1,128,1,192,1]},{"1061823":[2,64,2,128,2,192,2]},{"1061831":[3,64,3,128,3,192,3,165,138,201,112,208,25,175,240,242,126,41,32,208,17,160,2,34,241,182,8,144,9,169,3,141,198,4,100,176,100,200,107,165,138,201,71,208,25,175,199,242,126,41,32,208,17,160,3,34,241,182,8,144,9,169,4,141,198,4,100,176,100,200,107,100,80,156,193,15,72,175,34,128,48,208,4,34,206,179,160,175,35,128,48,208,4,34,238,179,160,104,107,72,169]},{"1061933":[143,65,80,127,175,34,128,48,201,1,208,4,34,206,179,160,175,35,128,48,201,1,208,4,34,238,179,160,104,107,72,175,34,128,48,201,2,208,4,34,206,179,160,175,35,128,48,201,2,208,4,34,238,179,160,104,107,165,244,137,64,208,63,137,32,208,39,165,240,137,32,208,31,175,22,244,126,41,32,240,19,175,22,244,126,41,223,143,22,244,126,165,27,240,5,169,32,141,47,1,34,65,223,13,24,107,175,22,244,126,9,32,143,22,244,126,169,32,141,47,1,34,65,223,13,107,169,16,141,7,2,173,2,2,201,2,208,28,175,140,243,126,41,192,201,192,208,108,175,65,243,126,73,3,143,65,243,126,169,32,141,47,1,130,205]},{"1062099":[201,1,208,84,175,142,243,126,41,192,201,192,208,76,218,162]},{"1062116":[224,10,176,13,189,74,12,201,9,208,3,250,128,95,232,128,239,250,175,129,129,48,240,23,165,160,5,161,240,17,175,64,243,126,201,3,144,35,56,233,2,143,64,243,126,128,62,175,64,243,126,56,233,1,73,2,24,105,1,143,64,243,126,169,32,141,47,1,130,117]},{"1062187":[128,2,128,34,201,5,208,28,175,140,243,126,41,48,201,48,208,240,175,68,243,126,73,3,143,68,243,126,169,32,141,47,1,130,81]},{"1062223":[128,2,128,72,201,13,208,56,173,122,3,201,1,240,61,175,140,243,126,137,4,240,53,41,3,240,49,175,76,243,126,201,1,208,16,175,140,243,126,41,1,240,4,169,3,128,6,169,2,128,2,169,1,143,76,243,126,169,32,141,47,1,128,17,201,16,208,8,34,162,181,160,128,7,24,107,169,60,141,46,1,56,107,165,244,41,64,240,37,175,79,243,126,240,28,218,26,201,5,144,2,169,1,170,191,91,243,126,208,2,162,1,138,143,79,243,126,169,32,141,47,1,250,169]},{"1062348":[107,165,244,41,12,107,165,246,41,64,240,15,169,16,141,7,2,169,32,141,47,1,169,7,141]},{"1062374":[2,107,165,246,41,64,240,19,169,16,141,7,2,169,32,141,47,1,238]},{"1062394":[2,156,5,2,169]},{"1062400":[107,165,244,41,12,107,175,67,244,126,240,1,107,72,218,8,76,251,182,72,218,8,192,12,208,13,175,140,243,126,9,128,143,140,243,126,130,212]},{"1062439":[192,42,208,13,175,140,243,126,9,64,143,140,243,126,130,195]},{"1062456":[192,41,208,13,175,140,243,126,9,40,143,140,243,126,130,178]},{"1062473":[192,13,208,13,175,140,243,126,9,16,143,140,243,126,130,161]},{"1062490":[192,19,208,13,175,140,243,126,9,4,143,140,243,126,130,144]},{"1062507":[192,20,208,13,175,140,243,126,9,2,143,140,243,126,130,127]},{"1062524":[192,74,208,13,175,140,243,126,9,1,143,140,243,126,130,110]},{"1062541":[192,11,208,19,175,117,129,48,208,10,175,142,243,126,9,128,143,142,243,126,130,87]},{"1062564":[192,58,208,13,175,142,243,126,9,128,143,142,243,126,130,70]},{"1062581":[192,59,208,29,175,142,243,126,9,64,143,142,243,126,175,117,129,48,208,10,175,142,243,126,9,128,143,142,243,126,130,37]},{"1062614":[192,67,208,19,175,117,129,48,240,10,175,142,243,126,9,128,143,142,243,126,130,14]},{"1062637":[192,88,208,10,175,142,243,126,9,64,143,142,243,126,175,67,244,126,240,3,130,202,4,192,32,208,3,130,118,2,192,38,208,3,130,111,2,192,46,208,3,130,104,2,192,47,208,3,130,97,2,192,48,208,3,130,90,2,192,55,208,3,130,83,2,192,56,208,3,130,76,2,192,57,208,3,130,69,2,192]},{"1062718":[208,3,130,62,2,192,4,144,14,192,73,240,10,192,80,240,6,192,94,240,2,128,3,130,103]},{"1062744":[192,59,208,3,130,96]},{"1062751":[165,27,240,92,173,233,2,201,1,240,85,8,194,32,173,142,4,201,18,1,208,3,130,67]},{"1062776":[201,15,1,208,3,130,59]},{"1062784":[201,16,1,208,3,130,51]},{"1062792":[201,28,1,208,3,130,43]},{"1062800":[201,31,1,208,3,130,35]},{"1062808":[201,255]},{"1062811":[208,3,130,27]},{"1062816":[201,20,1,208,3,130,19]},{"1062824":[201,21,1,208,3,130,11]},{"1062832":[201,22,1,208,3,130,3]},{"1062840":[40,128,4,40,130,15,4,165,27,208,3,130,134,1,226,32,173,12,4,201]},{"1062861":[208,2,128,4,201,2,208,21,192,50,208,3,130,165,1,175,52,244,126,24,105,16,143,52,244,126,130,98,1,201,4,208,30,175,54,244,126,26,41,7,170,175,54,244,126,41,248,143,54,244,126,138,15,54,244,126,143,54,244,126,130,64,1,201,6,208,14,175,53,244,126,24,105,32,143,53,244,126,130,46,1,201,8,208,30,175,53,244,126,26,41,3,170,175,53,244,126,41,252,143,53,244,126,138,15,53,244,126,143,53,244,126,130,12,1,201,10,208,34,72,218,175,57,244,126,26,41,15,170,175,57,244,126,41,240,143,57,244,126,138,15,57,244,126,143,57,244,126,250,104,130,230]},{"1063014":[201,12,208,34,72,218,175,52,244,126,26,41,15,170,175,52,244,126,41,240,143,52,244,126,138,15,52,244,126,143,52,244,126,250,104,130,192]},{"1063052":[201,14,208,34,72,218,175,56,244,126,26,41,15,170,175,56,244,126,41,240,143,56,244,126,138,15,56,244,126,143,56,244,126,250,104,130,154]},{"1063090":[201,16,208,14,175,55,244,126,24,105,16,143,55,244,126,130,136]},{"1063108":[201,18,208,14,175,56,244,126,24,105,16,143,56,244,126,130,118]},{"1063126":[201,20,208,32,175,53,244,126,24,105,4,41,28,170,175,53,244,126,41,227,143,53,244,126,138,15,53,244,126,143,53,244,126,130,82]},{"1063162":[201,22,208,34,72,218,175,55,244,126,26,41,15,170,175,55,244,126,41,240,143,55,244,126,138,15,55,244,126,143,55,244,126,250,104,130,44]},{"1063200":[201,24,208,14,175,57,244,126,24,105,16,143,57,244,126,130,26]},{"1063218":[201,26,208,22,175,54,244,126,24,105,8,143,54,244,126,175,102,243,126,41,4,208,3,32,188,189,192,59,208,10,175,42,244,126,137,32,240,2,128,39,175,85,243,126,208,9,175,50,244,126,26,143,50,244,126,175,83,243,126,208,9,175,51,244,126,26,143,51,244,126,175,35,244,126,26,143,35,244,126,192]},{"1063299":[208,9,32,86,188,32,135,188,130,64,2,192,1,208,6,32,86,188,130,54,2,192,2,208,6,32,86,188,130,44,2,192,3,208,6,32,86,188,130,34,2,192,4,208,6,32,135,188,130,24,2,192,5,208,6,32,135,188,130,14,2,192,6,208,6,32,135,188,130,4,2,192,7,144,10,192,14,176,6,32,184,188,130,246,1,192,20,208,9,32,20,188,32,184,188,130,233,1,192,15,144,10,192,23,176,6,32,184,188,130,219,1,192,23,208,6,32,28,189,130,209,1,192,24,144,10,192,26,176,6,32,184,188,130,195,1,192,26,208,9,32,53,188,32,184,188,130,182,1,192,29,208,6,32,184,188,130,172,1,192,27,144,10,192,32,176,6,32,196,188,130,158,1,192,32,208,6,32,68,189,130,148,1,192,33,208,6,32,184,188,130,138,1,192,34,144,10,192,36,176,6,32,96,189,130,124,1,192,36,208,6,32,112,189,130,114,1,192,37,208,6,32,144,189,130,104,1,192,38,208,3,130,97,1,192,39,208,6,32,216,189,130,87,1,192,40,208,6,32,216,189,130,77,1,192,41,208,6,32,184,188,130,67,1,192,42,144,10,192,46,176,6,32,184,188,130,53,1,192,49,208,6,32,216,189,130,43,1,192,50,208,6,32,176,189,130,33,1,192,51,208,6,32,238,189,130,23,1,192,55,144,10,192,58,176,6,32,224,188,130,9,1,192,58,144,10,192,60,176,6,32,165,188,130,251]},{"1063635":[192,60,208,6,32,184,188,130,241]},{"1063645":[192,61,208,6,32,184,188,130,231]},{"1063655":[192,62,144,10,192,64,176,6,32,56,189,130,217]},{"1063669":[192,72,208,6,32,184,188,130,207]},{"1063679":[192,73,208,6,32,86,188,130,197]},{"1063689":[192,74,208,9,32,20,188,32,184,188,130,184]},{"1063702":[192,75,208,9,32,243,187,32,196,188,130,171]},{"1063715":[192,76,208,9,32,252,188,32,216,189,130,158]},{"1063728":[192,77,144,10,192,80,176,6,32,252,188,130,144]},{"1063742":[192,80,208,6,32,86,188,130,134]},{"1063752":[192,81,144,10,192,85,176,6,32,252,188,130,120]},{"1063766":[192,88,208,6,32,165,188,130,110]},{"1063776":[192,94,208,6,32,86,188,130,100]},{"1063786":[192,95,208,6,32,135,188,130,90]},{"1063796":[192,96,208,6,32,96,189,130,80]},{"1063806":[192,97,208,6,32,196,188,130,70]},{"1063816":[192,100,144,10,192,102,176,6,32,165,188,130,56]},{"1063830":[192,112,144,10,192,128,176,6,32,238,189,130,42]},{"1063844":[192,128,144,10,192,144,176,6,32,144,189,130,28]},{"1063858":[192,144,144,10,192,160,176,6,32,176,189,130,14]},{"1063872":[192,160,144,10,192,176,176,6,32,112,189,130]},{"1063886":[40,250,104,107,194,32,175,88,244,126,208,22,175,90,244,126,208,16,175,62,244,126,143,88,244,126,175,64,244,126,143,90,244,126,226,32,96,194,32,175,92,244,126,208,22,175,94,244,126,208,16,175,62,244,126,143,92,244,126,175,64,244,126,143,94,244,126,226,32,96,194,32,175,96,244,126,208,22,175,98,244,126,208,16,175,62,244,126,143,96,244,126,175,64,244,126,143,98,244,126,226,32,96,194,32,175,100,244,126,208,22,175,102,244,126,208,16,175,62,244,126,143,100,244,126,175,64,244,126,143,102,244,126,226,32,96,32,210,187,152,201,80,208,2,169,1,201,73,208,2,169]},{"1064038":[26,207,23,244,126,144,14,72,175,23,244,126,41,248,3,1,143,23,244,126,104,175,34,244,126,24,105,32,143,34,244,126,96,175,34,244,126,24,105,8,41,24,170,175,34,244,126,41,231,143,34,244,126,138,15,34,244,126,143,34,244,126,96,192,59,208,15,175,42,244,126,137,32,240,1,96,9,32,143,42,244,126,175,33,244,126,24,105,8,143,33,244,126,96,175,33,244,126,26,41,7,170,175,33,244,126,41,248,143,33,244,126,138,15,33,244,126,143,33,244,126,96,175,41,244,126,26,41,3,170,175,41,244,126,41,252,143,41,244,126,138,15,41,244,126,143,41,244,126,96,72,218,175,82,244,126,26,41,15,170,175,82,244,126,41,240,143,82,244,126,138,15,82,244,126,143,82,244,126,250,104,96,175,72,244,126,26,41,31,170,175,72,244,126,41,224,143,72,244,126,138,15,72,244,126,143,72,244,126,96,175,41,244,126,24,105,16,143,41,244,126,96,175,34,244,126,26,41,7,170,175,34,244,126,41,248,143,34,244,126,138,15,34,244,126,143,34,244,126,96,175,36,244,126,24,105,64,143,36,244,126,96,32,112,189,107,72,218,175,36,244,126,26,41,63,170,175,36,244,126,41,192,143,36,244,126,138,15,36,244,126,143,36,244,126,250,104,96,72,218,175,40,244,126,26,41,15,170,175,40,244,126,41,240,143,40,244,126,138,15,40,244,126,143,40,244,126,250,104,96,175,39,244,126,24,105,16,143,39,244,126,96,175,42,244,126,26,41,31,170,175,42,244,126,41,224,143,42,244,126,138,15,42,244,126,143,42,244,126,96,175,42,244,126,41,128,208,13,175,42,244,126,9,128,143,42,244,126,32,184,188,96,175,40,244,126,24,105,16,143,40,244,126,96,32,254,189,107,175,89,243,126,208,12,175,82,244,126,24,105,16,143,82,244,126,96,201,255,240,240,201,1,208,12,175,37,244,126,24,105,16,143,37,244,126,96,201,2,208,32,72,218,175,37,244,126,26,41,15,170,175,37,244,126,41,240,143,37,244,126,138,15,37,244,126,143,37,244,126,250,104,96,201,3,208,12,175,38,244,126,24,105,16,143,38,244,126,96,201,4,208,31,72,218,175,38,244,126,26,41,15,170,175,38,244,126,41,240,143,38,244,126,138,15,38,244,126,143,38,244,126,250,104,96,175,67,243,126,208,17,175,117,243,126,240,11,58,143,117,243,126,169,1,143,67,243,126,34,127,219,13,34,186,237,160,107,143,117,243,126,173,3,3,208,14,169,4,141,2,2,169,1,141,3,3,34,120,250,13,107,173,2,2,41,255]},{"1064634":[201,2]},{"1064637":[208,14,175,140,243,126,41,192]},{"1064646":[201,192]},{"1064649":[240,79,128,64,201,1]},{"1064656":[208,14,175,142,243,126,41,192]},{"1064665":[201,192]},{"1064668":[240,60,128,45,201,5]},{"1064675":[208,14,175,140,243,126,41,48]},{"1064684":[201,48]},{"1064687":[240,41,128,26,201,13]},{"1064694":[208,16,175,140,243,126,137,4]},{"1064703":[240,12,41,3]},{"1064708":[208,20,128,5,201,16]},{"1064715":[240,5,169,96,124,128,19,173,7,2,41,32]},{"1064728":[208,5,169,79,61,128,6,32,41,191,169,62,45,153,196,255,107,185,192,255,41,255,239,153,192,255,185,194,255,41,255,239,153,194,255,185,254,255,41,255,239,153,254,255,185,4]},{"1064775":[41,255,239,153,4]},{"1064781":[185,62]},{"1064784":[41,255,239,153,62]},{"1064790":[185,68]},{"1064793":[41,255,239,153,68]},{"1064799":[185,128]},{"1064802":[41,255,239,153,128]},{"1064808":[185,130]},{"1064811":[41,255,239,153,130]},{"1064817":[185,190,255,41,255,239,153,190,255,185,196,255,41,255,239,153,196,255,185,132]},{"1064838":[41,255,239,153,132]},{"1064844":[185,126]},{"1064847":[41,255,239,153,126]},{"1064853":[96,175,140,243,126,41,252,9,1,143,140,243,126,169,3,143,76,243,126,107,175,114,129,48,240,1,107,173,12,4,201,255,107,165,4,41,255]},{"1064891":[201,144]},{"1064894":[208,3,169,127]},{"1064899":[9]},{"1064901":[36,143,100,199,126,165,5,41,255]},{"1064911":[9]},{"1064913":[36,143,102,199,126,107,175,114,129,48,240,5,175,139,243,126,107,191,124,243,126,107,72,175,114,129,48,240,6,104,143,139,243,126,107,104,159,124,243,126,107,72,34,35,240,160,34,169,130,160,32,222,128,175,114,129,48,240,10,104,175,139,243,126,143,111,243,126,107,104,143,111,243,126,107,100,2,100,3,194,48,107,34,93,246,29,175,135,128,48,208,6,175,20,128,48,128,35,218,8,194,48,165]},{"1065017":[72,165,2,72,169,16,128,133]},{"1065026":[169,48]},{"1065029":[133,2,169,4]},{"1065034":[34,67,147,164,250,134,2,250,134,1,40,250,153,160,13,34,212,147,160,107,159,92,243,126,72,175,79,243,126,208,6,138,26,143,79,243,126,104,107,173,218,2,208,28,175]},{"1065080":[80,127,240,15,189,160,13,34,212,147,160,169]},{"1065093":[143]},{"1065095":[80,127,128,7,189,160,13,34,58,148,160,107,169]},{"1065109":[157,192,13,72,169,1,143]},{"1065117":[80,127,165,93,201,20,240,60,169]},{"1065127":[143]},{"1065129":[80,127,175,135,128,48,208,6,175,19,128,48,128,35,218,8,194,48,165]},{"1065149":[72,165,2,72,169,16,128,133]},{"1065158":[169,48]},{"1065161":[133,2,169,3]},{"1065166":[34,67,147,164,250,134,2,250,134,1,40,250,157,128,14,34,212,147,160,104,107,72,90,175]},{"1065191":[80,127,240,6,34,152,192,160,128,7,189,128,14,34,58,148,160,122,104,107,188,160,13,208,48,175,135,128,48,208,6,175,20,128,48,128,35,218,8,194,48,165]},{"1065234":[72,165,2,72,169,16,128,133]},{"1065243":[169,48]},{"1065246":[133,2,169,4]},{"1065251":[34,67,147,164,250,134,2,250,134,1,40,250,168,156,233,2,34,157,153,7,34,112,142,160,107,175,140,243,126,41,223,143,140,243,126,41,16,240,7,169,2,143,68,243,126,107,169]},{"1065299":[143,68,243,126,107,175,123,243,126,41,255]},{"1065311":[201,2]},{"1065314":[240,22,169,247,40,143,4,199,126,169,81,40,143,6,199,126,169,250,40,143,8,199,126,107,169,247,40,143,4,199,126,169]},{"1065347":[40,143,6,199,126,169,1,40,143,8,199,126,107,143]},{"1065362":[254,127,72,169,27,141,47,1,104,107,224,7,208,12,165,160,201,6,208,6,169,27,141,47,1,107,169,14,141,47,1,107,169,1,143]},{"1065398":[80,127,173,252,3,240,7,34,75,253,29,130,144]},{"1065412":[173,91,3,41,1,208,3,130,134]},{"1065422":[90,8,139,75,171,226,48,165,27,240,3,76,81,194,165,138,201,42,240,111,201,104,240,107,34,113,186,13,137,3,208,99,74,74,170,191]},{"1065459":[129,48,143]},{"1065463":[254,127,34,93,246,29,162]},{"1065471":[165,47,201,4,240,1,232,191,85,194,160,153,80,13,169]},{"1065487":[153,64,13,169,24,153,128,15,169,255,153,88,11,169,48,153,16,15,165,34,24,127,87,194,160,41,240,153,16,13,165,35,105]},{"1065521":[153,48,13,165,32,24,105,22,41,240,153]},{"1065533":[13,165,33,105]},{"1065538":[153,32,13,169]},{"1065543":[153,32,15,187,169,48,34,138,187,13,171,40,122,107,240,16]},{"1065560":[19,175,204,243,126,201,8,240,10,201,7,240,6,201,12,240,2,24,107,56,107,175,197,243,126,201,2,176,20,169]},{"1065591":[143,200,80,127,143,201,80,127,143,202,80,127,169,2,143,197,243,126,107,169]},{"1065612":[143,145,80,127,156,216,2,156,218,2,100,46,169,2,133,47,175,122,243,126,41,127,201,127,208,6,169,8,143,199,243,126,34,221,150,160,92,53,207,30,175,195,225,29,34,212,147,160,107,189,144,13,201,255,208,4,92,78,223,29,201]},{"1065674":[92,82,223,29,175,133,225,29,34,212,147,160,107,165,138,201,129,208,12,169,1,143]},{"1065697":[80,127,175,195,225,29,128,4,175,133,225,29,34,58,148,160,107,34,157,153,7,165,138,201,129,208,6,34,205,141,160,128,4,34,13,142,160,107,165,138,201,42,240,1,107,165,27,240,1,107,175,135,128,48,208,6,175,74,129,48,128,35,218,8,194,48,165]},{"1065765":[72,165,2,72,169,64,129,133]},{"1065774":[169,48]},{"1065777":[133,2,169,10]},{"1065782":[34,67,147,164,250,134,2,250,134,1,40,250,34,212,147,160,169,235,143]},{"1065802":[254,127,34,93,246,29,162]},{"1065810":[165,47,201,4,240,1,232,191,175,195,160,153,80,13,169]},{"1065826":[153,64,13,169,24,153,128,15,169,255,153,88,11,169,48,153,16,15,165,34,24,127,177,195,160,41,240,153,16,13,165,35,105]},{"1065860":[153,48,13,165,32,24,105,22,41,240,153]},{"1065872":[13,165,33,105]},{"1065877":[153,32,13,169]},{"1065882":[153,32,15,187,166,138,191,128,242,126,41,64,208,6,169,27,34,138,187,13,107,240,16]},{"1065906":[19,165,16,201,26,240,9,169,1,141,221,15,92,93,175,6,189,128,13,201,3,92,94,175,6,175,74,128,48,240,56,175,76,243,126,201,3,240,48,165,138,201,24,208,42,194,32,165,32,201,96,7,144,33,201,224,7,176,28,165,34,201,207,1,144,21,201,48,2,176,16,226,32,169,45,133,17,160]},{"1065985":[169,55,34,253,140,9,128,10,226,32,169,128,141,240,3,169,19,107,226,32,169,128,141,240,3,169]},{"1066012":[107,173,12,4,201,8,240,8,191,252,198,1,34,29,165,5,107,34,175,141,160,175,135,128,48,208,6,175,21,128,48,128,35,218,8,194,48,165]},{"1066051":[72,165,2,72,169,16,128,133]},{"1066060":[169,48]},{"1066063":[133,2,169,5]},{"1066068":[34,67,147,164,250,134,2,250,134,1,40,250,201,255,240,9,168,156,233,2,34,157,153,7,107,175,210,251,5,143,123,243,126,107,201,12,208,6,160,92,92,71,213]},{"1066112":[201,35,208,6,160,93,92,71,213]},{"1066122":[201,72,208,6,160,96,92,71,213]},{"1066132":[201,36,176,6,160,91,92,71,213]},{"1066142":[201,55,176,6,160,92,92,71,213]},{"1066152":[201,57,176,6,160,93,92,71,213]},{"1066162":[160,50,92,71,213]},{"1066168":[192,9,48]},{"1066172":[96]},{"1066174":[144]},{"1066176":[192]},{"1066179":[3,24,3,48,3,72,3,96,3,120,3,144,3,48,9,240,3,32,4,80,4,104,4]},{"1066203":[6,48,6,96,6,144,6,192,6,240,6,32,7,80,7,104,7]},{"1066221":[9,48,9,96,9,144,9,240,9]},{"1066232":[240]},{"1066234":[32,10,80,10,96,6]},{"1066241":[6,24,6,48,6,72,6,120,6,216,6,168,6,8,7,56,7,104,7,96,9]},{"1066263":[9,192,3,144,9,168,9,192,9,216,9,8,10,56,10]},{"1066279":[6,48,6]},{"1066283":[6,48,6,96,6,144,6,192,6,240,6,32,7,80,7]},{"1066299":[9,216,9,48,9,96,9,144,9,192,9,240,9,192,9,32,10,80,10,165]},{"1066320":[127,184,196,160,107,165]},{"1066327":[72,165,1,72,165,2,72,90,8,139,169,175,72,171,173,216,2,201,224,208,74,194,48,175,80,244,126,10,170,191]},{"1066358":[132,175,24,105]},{"1066363":[136,133]},{"1066366":[226,32,169,175,133,2,34,231,225,160,175,80,244,126,26,143,80,244,126,226,16,175,103,129,48,240,25,175,24,244,126,26,143,24,244,126,207,103,129,48,144,10,175,148,129,48,208,4,34,153,215,160,162,1,128,2,162]},{"1066424":[171,40,122,104,133,2,104,133,1,104,133]},{"1066436":[96,218,173,216,2,34,29,226,160,201,11,208,23,175,142,243,126,41,64,240,12,175,129,129,48,208,6,169,3,143,64,243,126,130,169,3,201,59,208,29,175,118,243,126,208,4,169,3,128,2,169,4,143,64,243,126,175,142,243,126,9,64,143,142,243,126,130,136,3,201,76,208,20,169,50,56,239,52,128,48,143,112,243,126,169,50,143,117,243,126,130,112,3,201,77,208,20,169,70,56,239,53,128,48,143,113,243,126,169,70,143,118,243,126,130,88,3,201,78,208,22,175,123,243,126,201,2,176,5,26,143,123,243,126,169,128,143,115,243,126,130,62,3,201,79,208,15,169,2,143,123,243,126,169,128,143,115,243,126,130,43,3,201,80,208,17,175,89,243,126,201,2,176,9,169,2,143,89,243,126,130,22,3,201,81,208,22,175,112,243,126,24,105,5,143,112,243,126,175,128,128,48,143,117,243,126,130,252,2,201,82,208,22,175,112,243,126,24,105,10,143,112,243,126,175,129,128,48,143,117,243,126,130,226,2,201,83,208,22,175,113,243,126,24,105,5,143,113,243,126,175,130,128,48,143,118,243,126,130,200,2,201,84,208,22,175,113,243,126,24,105,10,143,113,243,126,175,131,128,48,143,118,243,126,130,174,2,201,85,208,27,175,97,128,48,208,14,175,98,128,48,208,8,175,99,128,48,208,2,128,4,34,96,128,48,130,143,2,201,86,208,27,175,102,128,48,208,14,175,103,128,48,208,8,175,104,128,48,208,2,128,4,34,101,128,48,130,112,2,201,87,208,27,175,107,128,48,208,14,175,108,128,48,208,8,175,109,128,48,208,2,128,4,34,106,128,48,130,81,2,201,88,208,43,175,129,129,48,208,25,175,130,129,48,41,1,240,17,175,64,243,126,240,11,201,3,176,7,24,105,2,143,64,243,126,175,117,129,48,240,6,169,1,143,118,243,126,201,89,208,20,194,32,175,96,243,126,56,239,54,128,48,143,96,243,126,226,32,130,10,2,201,90,208,3,130,3,2,201,91,208,32,194,32,175,84,244,126,24,111]},{"1066907":[130,48,143,84,244,126,175,86,244,126,111,2,130,48,143,86,244,126,226,32,130,223,1,201,92,208,32,194,32,175,84,244,126,24,111,4,130,48,143,84,244,126,175,86,244,126,111,6,130,48,143,86,244,126,226,32,130,187,1,201,93,208,32,194,32,175,84,244,126,24,111,8,130,48,143,84,244,126,175,86,244,126,111,10,130,48,143,86,244,126,226,32,130,151,1,201,94,208,3,130,144,1,201,95,208,3,130,137,1,201,96,208,3,130,130,1,201,97,208,3,130,123,1,201,98,208,3,130,116,1,201,99,208,3,130,109,1,201,100,208,3,130,102,1,201,101,208,3,130,95,1,201,106,208,7,34,153,215,160,130,84,1,201,107,208,2,128,4,201,108,208,34,175,103,129,48,240,25,175,24,244,126,26,143,24,244,126,207,103,129,48,144,10,175,148,129,48,208,4,34,153,215,160,130,40,1,201,109,208,7,34,131,185,164,130,29,1,201,110,208,7,34,131,185,164,130,18,1,201,112,144,63,201,128,176,59,41,15,201,8,176,22,170,169,1,224]},{"1067154":[240,4,10,202,128,248,15,104,243,126,143,104,243,126,130,238]},{"1067171":[56,233,8,170,169,1,224]},{"1067179":[240,4,10,202,128,248,137,192,240,2,169,192,15,105,243,126,143,105,243,126,130,207]},{"1067202":[201,128,144,63,201,144,176,59,41,15,201,8,176,22,170,169,1,224]},{"1067221":[240,4,10,202,128,248,15,100,243,126,143,100,243,126,130,171]},{"1067238":[56,233,8,170,169,1,224]},{"1067246":[240,4,10,202,128,248,137,192,240,2,169,192,15,101,243,126,143,101,243,126,130,140]},{"1067269":[201,144,144,63,201,160,176,59,41,15,201,8,176,22,170,169,1,224]},{"1067288":[240,4,10,202,128,248,15,102,243,126,143,102,243,126,130,104]},{"1067305":[56,233,8,170,169,1,224]},{"1067313":[240,4,10,202,128,248,137,192,240,2,169,192,15,103,243,126,143,103,243,126,130,73]},{"1067336":[201,160,144,69,201,176,176,65,41,15,170,191,124,243,126,26,159,124,243,126,224]},{"1067358":[208,4,143,125,243,126,224,1,208,4,143,124,243,126,175,114,129,48,240,31,175,111,243,126,26,143,111,243,126,130,19]},{"1067390":[138,10,205,12,4,208,9,175,111,243,126,26,143,111,243,126,130]},{"1067409":[250,173,233,2,201,1,107,72,218,34,179,237,160,173,216,2,32,72,215,141,216,2,32,30,215,201,22,208,19,32,121,215,207,150,128,48,144,7,175,151,128,48,141,216,2,130,231,1,201,43,208,19,32,121,215,207,150,128,48,144,7,175,151,128,48,141,216,2,130,208,1,201,44,208,19,32,121,215,207,150,128,48,144,7,175,151,128,48,141,216,2,130,185,1,201,45,208,19,32,121,215,207,150,128,48,144,7,175,151,128,48,141,216,2,130,162,1,201,60,208,19,32,121,215,207,150,128,48,144,7,175,151,128,48,141,216,2,130,139,1,201,61,208,19,32,121,215,207,150,128,48,144,7,175,151,128,48,141,216,2,130,116,1,201,72,208,19,32,121,215,207,150,128,48,144,7,175,151,128,48,141,216,2,130,93,1,201,78,208,14,175,123,243,126,240,5,169,79,141,216,2,130,75,1,201,94,208,64,175,89,243,126,207,144,128,48,144,10,175,145,128,48,141,216,2,130,51,1,201]},{"1067639":[208,8,169,73,141,216,2,130,39,1,201,1,208,8,169,80,141,216,2,130,27,1,201,2,208,8,169,2,141,216,2,130,15,1,169,3,141,216,2,130,7,1,201,95,208,95,175,22,244,126,74,74,74,74,74,74,207,146,128,48,144,10,175,147,128,48,141,216,2,130,233]},{"1067711":[175,22,244,126,41,192,208,19,169,4,141,216,2,175,22,244,126,24,105,64,143,22,244,126,130,206]},{"1067738":[201,64,208,19,169,5,141,216,2,175,22,244,126,24,105,64,143,22,244,126,130,183]},{"1067761":[169,6,141,216,2,175,22,244,126,24,105,64,143,22,244,126,130,164]},{"1067780":[201,96,208,39,175,91,243,126,207,148,128,48,144,10,175,149,128,48,141,216,2,130,140]},{"1067804":[201]},{"1067806":[208,8,169,34,141,216,2,130,128]},{"1067816":[169,35,141,216,2,128,121,201,97,208,20,175,84,243,126,208,7,169,27,141,216,2,128,104,169,28,141,216,2,128,97,201,100,208,40,175,64,243,126,26,74,207,152,128,48,144,10,175,153,128,48,141,216,2,130,71]},{"1067873":[201]},{"1067875":[208,7,169,58,141,216,2,128,60,169,59,141,216,2,128,53,201,101,208,7,169,32,12,142,243,128,205,201,98,208,19,34,49,214,160,141,216,2,235,32,188,214,169,255,143,144,80,127,128,19,201,99,208,15,34,237,214,160,141,216,2,169,255,143,144,80,127,128]},{"1067944":[250,104,139,75,92,228,133,9,251,251,251,251,251,252,252,251,251,252,252,252,254,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,251,252,252,252,252,252,252,254,252,252,252,252,252,252,252,252,252,254,254,254,252,252,252,252,252,252,252,252,252,252,252,254,254,252,254,252,252,252,251,252,252,252,252,252,252,251,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,4,4,4,4,4]},{"1068199":[4,4,4,4,4,5]},{"1068211":[4]},{"1068213":[4]},{"1068216":[4]},{"1068228":[4]},{"1068234":[5]},{"1068244":[4,4,4]},{"1068258":[4,4]},{"1068261":[4]},{"1068265":[4]},{"1068272":[4]},{"1068281":[4]},{"1068352":[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]},{"1068432":[6,24,24,24,45,32,46,9,9,10,8,5,16,11,44,27,26,28,20,25,12,7,29,47,7,21,18,13,13,14,17,23,40,39,4,4,15,22,3,19,1,30,16]},{"1068481":[48,34,33,36,36,36,35,35,35,41,42,44,43,3,3,52,53,49,51,2,50,54,55,44,6,12,56,57,58,59,60,24,61,62,63,64]},{"1068520":[65,36,71,72,72,72,255,255,4,13,255,255,255,255,255,255,255,255,73,74,73,255,255,255,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73]},{"1068677":[2,2]},{"1068685":[2,2,2,2,2,2]},{"1068692":[2]},{"1068694":[2,2]},{"1068697":[2,2,2,2,2,2,2,2,2,2,2]},{"1068709":[2,2,2,2,2]},{"1068715":[2,2,2,2,2,2,2,2,2]},{"1068727":[2,2,2,2,2,2,2,2,2,2,2]},{"1068740":[2]},{"1068742":[2,2,2]},{"1068746":[2,2,2,2,2,2]},{"1068753":[2,2,2,2,2,2,2,2]},{"1068762":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]},{"1068848":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,255,5,5,5,5,5,1,2,1,1,1,2,2,2,4,4,4,1,1,2,1,1,1,2,1,2,1,4,4,2,1,6,1,2,1,2,2,1,2,2,4,1,1,4,2,1,4,2,2,4,4,4,2,1,4,1,2,2,1,2,2,1,1,4,4,1,2,2,4,4,4,2,5,2,1,4,4,4,4,5,4,4,4,4,4,4,4,1,3,1,1,2,4,255,255,255,255,255,255]},{"1069034":[4,4,4]},{"1069040":[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,89,243,89,243,89,243,89,243,90,243,90,243,90,243,69,243,70,243,75,243,66,243,64,243,65,243,68,243,92,243,71,243,72,243,73,243,74,243,76,243,76,243,80,243,92,243,107,243,81,243,82,243,83,243,84,243,84,243,78,243,86,243,87,243,122,243,77,243,91,243,91,243,111,243,100,243,108,243,117,243,117,243,68,243,65,243,92,243,92,243,92,243,109,243,110,243,110,243,117,243,102,243,104,243,96,243,96,243,96,243,116,243,116,243,116,243,64,243,64,243,92,243,92,243,108,243,108,243,96,243,96,243,114,243,118,243,118,243,115,243,96,243,96,243,92,243,89,243,76,243,85,243,117,243,118,243,115,243,115,243,89,243,117,243,117,243,118,243,118,243,26,244,28,244,30,244,64,243,96,243,106,243,84,244,84,244,84,244,89,243,90,243,91,243,84,243,106,243,106,243,64,243,64,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,106,243,1,2,3,4,1,2,3,1,1,1,1,1,1,2,255,1,1,1,1,1,2,1,255,255,1,1,2,1,2,1,1,1,255,1,255,2,255,255,255,255,255,255,2,255,255,255,255,255,255,255,255,255,255,251,236,255,255,255,1,3,255,255,255,255,156,206,255,1,10,255,255,255,255,1,3,1,50,70,128,128,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1069953":[128]},{"1069955":[64]},{"1069957":[32]},{"1069959":[16]},{"1069961":[8]},{"1069963":[4]},{"1069965":[2]},{"1069967":[1,128]},{"1069970":[64]},{"1069972":[32]},{"1069974":[16]},{"1069976":[8]},{"1069978":[4]},{"1070209":[22,43,44,45,61,60,72,46,47,48,255,14,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,53,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,139,75,171,152,32,72,215,133,3,196,3,208,4,169,255,133,3,171,107,175,117,129,48,240,9,34,198,213,160,175,64,243,126,107,175,64,243,126,208,16,175,142,243,126,41,64,240,4,34,198,213,160,175,64,243,126,107,175,117,129,48,240,51,175,119,243,126,240,70,175,64,243,126,208,10,175,142,243,126,41,64,208,31,128,4,201,3,176,25,169,167,143,32,199,126,169,32,143,33,199,126,169,169,143,34,199,126,169,32,143,35,199,126,107,169,134,143,32,199,126,169,36,143,33,199,126,169,135,143,34,199,126,169,36,143,35,199,126,107,169,127,143,32,199,126,169,36,143,33,199,126,169,127,143,34,199,126,169,36,143,35,199,126,107,90,175,144,80,127,201,255,240,7,170,235,191]},{"1070654":[160,48,107,162]},{"1070659":[34,113,186,13,41,127,232,224,127,144,4,169]},{"1070672":[128,6,207,127,160,48,176,235,143,32,80,127,162]},{"1070686":[168,152,32,152,214,240,30,175,32,80,127,26,207,127,160,48,144,2,169]},{"1070706":[143,32,80,127,232,168,138,207,127,160,48,144,224,169,90,128,4,175,32,80,127,170,191]},{"1070730":[160,48,235,175,32,80,127,143,144,80,127,235,122,107,74,74,74,170,191,80,244,126,143,34,80,127,218,175,32,80,127,41,7,170,175,34,80,127,224]},{"1070770":[240,4,74,202,128,248,250,41,1,96,74,74,74,143,33,80,127,170,191,80,244,126,143,34,80,127,175,32,80,127,41,7,170,169,1,224]},{"1070807":[240,4,10,202,128,248,72,175,33,80,127,170,104,15,34,80,127,159,80,244,126,96,175,144,80,127,201,255,240,7,170,235,191,128,160,48,107,162]},{"1070846":[34,113,186,13,41,127,232,224,127,144,4,165]},{"1070859":[128,6,207,255,160,48,176,235,143,144,80,127,170,235,191,128,160,48,107,218,72,162]},{"1070882":[191]},{"1070884":[192,48,201,255,240,27,195,1,208,17,218,138,74,74,170,191,144,243,126,26,159,144,243,126,250,240,6,232,232,232,232,128,221,104,250,96,218,72,162]},{"1070924":[191]},{"1070926":[192,48,201,255,240,34,195,1,208,24,218,138,74,74,170,191,144,243,126,250,223,1,192,48,144,6,191,2,192,48,131,1,240,6,232,232,232,232,128,214,104,250,96,162]},{"1070971":[175,92,243,126,240,1,232,175,93,243,126,240,1,232,175,94,243,126,240,1,232,175,95,243,126,240,1,232,138,96,100,17,100,176,92,134,220,160,175,198,243,126,41,4,240,15,169,10,157,16,13,169,3,157,48,13,169,144,157,208,14,189]},{"1071034":[13,24,105,3,107,189,32,14,201,136,208,9,32,247,215,201,4,144,1,58,107,32,247,215,107,224,24,9,208,5,175,157,80,127,107,8,194,32,138,74,170,176,10,40,191]},{"1071080":[200,49,74,74,74,74,107,40,191]},{"1071090":[200,49,41,15,107,175,192,80,127,240,18,24,111,89,243,126,208,3,169,1,96,201,5,144,3,169,4,96,96,175,89,243,126,96,72,175,91,243,126,24,111,194,80,127,201,255,208,2,169]},{"1071140":[201,3,144,2,169,2,143,32,80,127,104,24,111,32,80,127,107,175,195,80,127,240,19,24,111,123,243,126,201,255,208,3,169]},{"1071174":[107,201,3,144,2,169,2,107,175,123,243,126,107,165,160,201,145,240,42,201,146,240,38,201,147,240,34,165,93,201,1,240,28,201,23,240,24,201,28,240,20,165,94,201,2,240,14,165,91,208,10,173,72,3,15,199,80,127,41,17,107,173,72,3,41,17,107,165,160,201,145,240,42,201,146,240,38,201,147,240,34,165,93,201,1,240,28,201,23,240,24,201,28,240,20,165,94,201,2,240,14,165,91,208,10,173,72,3,15,199,80,127,41,1,107,173,72,3,41,1,107,175,68,128,48,240,9,175,75,243,126,240,3,169,2,107,175,89,243,126,107,175,93,128,48,240,3,169,255,107,175,89,243,126,107,175,63,128,48,240,6,189,32,14,201,216,107,189,32,14,201,214,107,34,39,141,160,240,4,92,157,180,6,175,41,128,48,208,4,92,145,180,6,194,32,175,96,243,126,201,10]},{"1071376":[226,32,176,19,194,16,169,122,160,1,34,25,226,5,169,60,141,46,1,226,16,128,34,175,42,128,48,168,156,233,2,218,34,157,153,7,250,194,32,175,96,243,126,56,233,10]},{"1071423":[143,96,243,126,226,32,34,162,141,160,92,157,180,6,139,218,90,175,65,128,48,208,3,130,205]},{"1071449":[165,27,240,121,194,32,165,160,201,14]},{"1071460":[208,33,165,34,41,255,1,201,104,1,144,98,201,136,1,176,93,165,32,41,255,1,201,122,1,144,83,201,154,1,176,78,130,167]},{"1071495":[201,126]},{"1071498":[208,33,165,34,41,255,1,201,104]},{"1071508":[144,60,201,136]},{"1071513":[176,55,165,32,41,255,1,201,122,1,144,45,201,154,1,176,40,130,129]},{"1071533":[201,222]},{"1071536":[208,32,165,34,41,255,1,201,104,1,144,22,201,136,1,176,17,165,32,41,255,1,201,122]},{"1071561":[144,7,201,154]},{"1071566":[176,2,128,92,226,32,128,80,165,138,201,112,208,36,175,34,128,48,170,191,54,218,160,205,3,3,208,60,175,240,242,126,41,32,208,52,169,8,72,171,160,2,34,241,182,8,176,48,128,38,201,71,208,34,175,35,128,48,170,191,54,218,160,205,3,3,208,20,175,199,242,126,41,32,208,12,169,8,72,171,160,3,34,241,182,8,176,8,122,250,171,175,89,243,126,107,226,32,122,250,171,169,2,107,15,16,17,72,175,67,244,126,208,34,175,46,244,126,56,239,63,80,127,201,30,144,21,175,46,244,126,143,63,80,127,175,32,244,126,26,201,100,240,4,143,32,244,126,104,34,223,147,9,107,72,175,67,244,126,208,19,165,16,201,23,208,13,175,45,244,126,26,201,100,240,4,143,45,244,126,104,107,72,175,67,244,126,208,9,175,45,244,126,58,143,45,244,126,104,107,191,31,195,1,128,71,34,61,137]},{"1071776":[175,130,129,48,41,2,240,32,173,14,1,201,123,208,25,175,142,243,126,41,64,240,17,175,64,243,126,240,11,201,3,176,7,24,105,2,143,64,243,126,128,25,34,97,184,2,128,19,175,199,80,127,240,9,34,179,145,7,169]},{"1071836":[141,1,3,169,15,133,16,72,8,175,67,244,126,208,16,194,32,175,60,244,126,26,201,231,3,240,4,143,60,244,126,40,104,107,175,67,244,126,208,9,175,75,244,126,26,143,75,244,126,34,227,218,160,107,143,111,243,126,218,175,67,244,126,208,4,34,108,189,160,34,63,153,160,90,160,24,34,6,182,160,122,34,120,250,13,250,107,143,111,243,126,218,175,67,244,126,208,4,34,108,189,160,34,63,153,160,165,27,240,23,8,194,32,173,142,4,201,135]},{"1071955":[208,11,40,90,160,24,34,6,182,160,122,128,1,40,34,120,250,13,250,107,143,111,243,126,34,63,153,160,107,72,175,67,244,126,208,4,34,250,189,160,104,107,72,175,67,244,126,208,15,175,109,243,126,208,9,175,73,244,126,26,143,73,244,126,104,107,159,92,243,126,72,175,67,244,126,208,9,175,83,244,126,26,143,83,244,126,104,107,169,1,141,233,2,72,175,67,244,126,208,9,175,66,244,126,26,143,66,244,126,104,107,72,175,67,244,126,208,9,175,66,244,126,58,143,66,244,126,104,107,72,175,67,244,126,208,9,175,35,244,126,58,143,35,244,126,104,107,34,97,184,2,72,175,67,244,126,208,31,72,218,175,39,244,126,26,41,15,170,175,39,244,126,41,240,143,39,244,126,138,15,39,244,126,143,39,244,126,250,104,104,107,72,175,67,244,126,208,15,175,202,243,126,240,9,175,58,244,126,26,143,58,244,126,104,76,227,218,72,175,67,244,126,208,20,173,12,4,201,255,240,13,175,59,244,126,26,143,59,244,126,34,227,218,160,104,34,168,160,2,107,58,16,8,169]},{"1072211":[143,96,243,126,107,72,8,175,67,244,126,41,255]},{"1072225":[208,14,175,43,244,126,26,201,15,39,240,4,143,43,244,126,40,104,107,76,227,218,169,1,143]},{"1072251":[80,127,156,70,6,156,66,6,76,227,218,72,218,8,226,48,175,67,244,126,208,29,26,143,67,244,126,34,250,189,160,175,36,244,126,24,105,64,143,36,244,126,175,60,244,126,58,143,60,244,126,175,37,244,126,74,74,74,74,24,111,37,244,126,143,55,80,127,175,38,244,126,74,74,74,74,24,111,38,244,126,24,111,55,80,127,41,15,143,55,80,127,175,62,244,126,56,239,46,244,126,143,56,80,127,175,63,244,126,239,47,244,126,143,57,80,127,175,64,244,126,239,48,244,126,143,58,80,127,175,65,244,126,239,49,244,126,143,59,80,127,175,43,244,126,24,111,98,243,126,143,60,80,127,175,44,244,126,111,99,243,126,143,61,80,127,175,35,244,126,56,239,66,244,126,143,62,80,127,40,250,104,169,25,133,16,100,17,100,176,107,8,194,16,72,218,90,173,44,1,240,7,48,5,205,51,1,208,11,141,43,1,156,44,1,122,250,104,40,107,156]},{"1072473":[66,175,26,130,48,240,3,130,195]},{"1072483":[174,2,32,224,83,45,240,3,130,6,1,174,4,32,224,77,83,208,245,174,6,32,224,85,49,208,237,226,16,173,44,1,201,2,240,33,201,9,240,46,201,13,240,56,201,16,240,70,201,17,240,73,201,22,240,69,201,21,208,100,173,12,4,74,24,105,45,128,88,72,175]},{"1072555":[243,126,41,64,240,5,104,169,60,128,74,104,128,71,72,175,113,243,126,201,127,208,244,104,169,61,128,57,72,175,202,243,126,240,232,165,138,201,64,208,226,104,169,15,128,39,173,12,4,201,8,208,35,173,12,4,74,24,105,33,141,44,1,201,46,208,21,175,102,243,126,41,4,240,13,175,167,80,127,41,4,240,5,169,59,141,44,1,173,44,1,58,72,41,7,168,104,74,74,74,170,191,160,80,127,240,33,201,255,240,12,192]},{"1072668":[240,4,74,136,128,248,41,1,240,17,169,255,141,64,33,169,160,133]},{"1072687":[169,208,133,1,169,48,128,76,174,44,1,191,63,208,48,205,44,1,240,49,224,35,144,4,224,47,144,5,141,44,1,128,179,139,194,16,174,12,4,169,2,72,171,164]},{"1072732":[90,194,32,191,128,208,48,133]},{"1072741":[226,32,178]},{"1072745":[122,132]},{"1072748":[226,16,171,141,44,1,128,143,169,255,141,64,33,169,192,133]},{"1072765":[169,208,133,1,169,48,194,16,34,29,137]},{"1072777":[169,1,143,173,80,127,169,129,141]},{"1072787":[66,173,44,1,201,8,240,50,165,16,201,7,240,55,201,14,240,51,201,9,208,33,226,16,162,5,165,138,201,112,208,8,175,240,242,126,41,32,240,8,175,197,243,126,201,2,176,2,162,1,142,45,1,194,16,173,44,1,141,43,1,156,44,1,122,250,104,40,107,173,44,1,141,43,1,156,44,1,122,250,104,40,92,150,130,2,8,194,32,169]},{"1072879":[141,6,32,143,170,80,127,173,2,32,201,83,45,208,103,173,4,32,201,77,83,208,95,173,6,32,201,85,49,208,87,169]},{"1072913":[162,255,160,1,226,32,152,194,32,141,4,32,24,105,100]},{"1072929":[232,226,32,168,173]},{"1072935":[32,137,64,208,249,173]},{"1072942":[32,137,8,240,228,138,143,170,80,127,169,64,162,7,160,7,141,4,32,156,5,32,72,24,173]},{"1072968":[32,137,64,208,249,173]},{"1072975":[32,137,8,208,1,56,191,160,80,127,42,159,160,80,127,136,16,8,202,16,3,104,40,107,160,7,104,58,128,209,226,32,173,16,66,194,32,173,2,32,201,83,45,240,6,226,48,92,220,128]},{"1073026":[173,4,32,201,77,83,208,242,173,6,32,201,85,49,208,234,226,48,174,43,1,208,98,175,169,80,127,240,50,173]},{"1073057":[32,137,64,240,4,92,220,128]},{"1073066":[173]},{"1073068":[32,137,8,240,4,92,220,128]},{"1073077":[169,255,141,41,1,141,39,1,141,6,32,175,169,80,127,141,7,32,169]},{"1073097":[143,169,80,127,92,220,128]},{"1073105":[173,39,1,205,41,1,208,4,92,220,128]},{"1073117":[144,12,233,2,176,14,156,39,1,156,7,32,128,6,105,16,144,2,169,255,141,39,1,141,6,32,92,220,128]},{"1073147":[224,255,208,4,92,220,128]},{"1073155":[224,243,208,12,142,64,33,169,255,141,41,1,92,220,128]},{"1073171":[224,242,208,12,142,64,33,169,128,141,41,1,92,220,128]},{"1073187":[224,241,208,13,142,64,33,156,41,1,156,11,1,92,220,128]},{"1073204":[236,11,1,208,8,224,27,240,4,92,220,128]},{"1073217":[236,51,1,240,243,169]},{"1073224":[235,175,171,80,127,240,13,207,170,80,127,144,7,56,239,170,80,127,128,243,218,72,138,250,194,32,240,7,24,105,100]},{"1073256":[202,208,249,141,4,32,226,32,156,7,32,250,142,11,1,191]},{"1073273":[208,48,143,169,80,127,191,63,208,48,201,35,144,35,201,47,176,31,139,194,16,174,12,4,169,2,72,171,164]},{"1073303":[90,194,32,191,128,208,48,133]},{"1073312":[226,32,178]},{"1073316":[122,132]},{"1073319":[226,16,171,170,223,63,208,48,240,6,191,63,208,48,128,243,141,43,1,92,220,128]},{"1073342":[141,11,1,170,169]},{"1073348":[235,175,171,80,127,240,13,207,170,80,127,144,7,56,239,170,80,127,128,243,72,138,250,194,32,240,7,24,105,100]},{"1073379":[202,208,249,141,4,32,226,32,92,220,128]},{"1073391":[175,19,130,48,208,64,175,27,130,48,208,71,194,32,173,2,32,201,83,45,208,48,173,4,32,201,77,83,208,40,173,6,32,201,85,49,208,32,226,32,173]},{"1073433":[32,137,8,208,23,175,169,80,127,208,13,173]},{"1073446":[32,137,16,240,23,169]},{"1073453":[143,173,80,127,92,38,196,8,226,32,173,64,33,208,239,175,173,80,127,208,239,92,43,196,8,175,19,130,48,208,64,175,27,130,48,208,71,194,32,173,2,32,201,83,45,208,48,173,4,32,201,77,83,208,40,173,6,32,201,85,49,208,32,226,32,173]},{"1073520":[32,137,8,208,23,175,169,80,127,208,13,173]},{"1073533":[32,137,16,240,23,169]},{"1073540":[143,173,80,127,92,55,198,8,226,32,173,64,33,208,239,175,173,80,127,208,239,92,47,198,8,194,32,173,2,32,201,83,45,208,25,173,4,32,201,77,83,208,17,173,6,32,201,85,49,208,9,226,32,173]},{"1073595":[32,137,16,208,249,226,32,169,34,107,175,53,80,127,240,5,191]},{"1073613":[87,127,107,191]},{"1073618":[18,127,107,156,240,28,156,241,28,169]},{"1073629":[143,53,80,127,169,28,141,233,28,107,156,240,28,156,241,28,169,1,143,53,80,127,194,32,175,148,80,127,170,160]},{"1073661":[226,32,183]},{"1073665":[159]},{"1073667":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073686":[143,148,80,127,226,32,107,143,64,80,127,72,218,90,8,139,75,171,226,32,194,16,165]},{"1073710":[72,165,1,72,165,2,72,175,106,129,48,208,3,130,74,7,169]},{"1073728":[143,16,80,127,175,106,129,48,41,1,201,1,208,127,175,64,80,127,201,36,208,119,169,170,133]},{"1073754":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073772":[226,32,183]},{"1073776":[159]},{"1073778":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073797":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1073817":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073835":[226,32,183]},{"1073839":[159]},{"1073841":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073860":[143,148,80,127,226,32,130,154,6,175,106,129,48,41,2,201,2,208,127,175,64,80,127,201,37,208,119,169,52,133]},{"1073891":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073909":[226,32,183]},{"1073913":[159]},{"1073915":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073934":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1073954":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1073972":[226,32,183]},{"1073976":[159]},{"1073978":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1073997":[143,148,80,127,226,32,130,17,6,175,106,129,48,41,4,201,4,208,127,175,64,80,127,201,51,208,119,169]},{"1074026":[133]},{"1074028":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074046":[226,32,183]},{"1074050":[159]},{"1074052":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074071":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1074091":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074109":[226,32,183]},{"1074113":[159]},{"1074115":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074134":[143,148,80,127,226,32,130,136,5,175,106,129,48,41,8,201,8,208,127,175,64,80,127,201,50,208,119,169,112,133]},{"1074165":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074183":[226,32,183]},{"1074187":[159]},{"1074189":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074208":[143,148,80,127,226,32,175,150,80,127,58,58,143,148,80,127,169,130,133]},{"1074228":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074246":[226,32,183]},{"1074250":[159]},{"1074252":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074271":[143,148,80,127,226,32,130,255,4,175,64,80,127,41,240,201,112,208,56,169]},{"1074292":[133]},{"1074294":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074312":[226,32,183]},{"1074316":[159]},{"1074318":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074337":[143,148,80,127,226,32,130,213]},{"1074346":[201,128,208,56,169,52,133]},{"1074354":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074372":[226,32,183]},{"1074376":[159]},{"1074378":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074397":[143,148,80,127,226,32,130,153]},{"1074406":[201,144,208,55,169,112,133]},{"1074414":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074432":[226,32,183]},{"1074436":[159]},{"1074438":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074457":[143,148,80,127,226,32,128,94,201,160,208,87,175,64,80,127,201,175,208,3,130,88,4,169,170,133]},{"1074484":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074502":[226,32,183]},{"1074506":[159]},{"1074508":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074527":[143,148,80,127,226,32,104,41,15,143,32,80,127,169,15,56,239,32,80,127,72,169,1,143,16,80,127,128,3,130,9,4,175,150,80,127,58,58,143,148,80,127,175,64,80,127,41,15,143,17,80,127,175,16,80,127,240,15,175,16,80,127,169,15,56,239,17,80,127,143,17,80,127,175,17,80,127,201]},{"1074606":[208,56,169,216,133]},{"1074612":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074630":[226,32,183]},{"1074634":[159]},{"1074636":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074655":[143,148,80,127,226,32,130,127,3,201,1,208,56,169,241,133]},{"1074672":[169,128,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074690":[226,32,183]},{"1074694":[159]},{"1074696":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074715":[143,148,80,127,226,32,130,67,3,201,2,208,56,169,8,133]},{"1074732":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074750":[226,32,183]},{"1074754":[159]},{"1074756":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074775":[143,148,80,127,226,32,130,7,3,201,3,208,56,169,35,133]},{"1074792":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074810":[226,32,183]},{"1074814":[159]},{"1074816":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074835":[143,148,80,127,226,32,130,203,2,201,4,208,56,169,60,133]},{"1074852":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074870":[226,32,183]},{"1074874":[159]},{"1074876":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074895":[143,148,80,127,226,32,130,143,2,201,5,208,56,169,87,133]},{"1074912":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074930":[226,32,183]},{"1074934":[159]},{"1074936":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1074955":[143,148,80,127,226,32,130,83,2,201,6,208,56,169,116,133]},{"1074972":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1074990":[226,32,183]},{"1074994":[159]},{"1074996":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075015":[143,148,80,127,226,32,130,23,2,201,7,208,56,169,139,133]},{"1075032":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075050":[226,32,183]},{"1075054":[159]},{"1075056":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075075":[143,148,80,127,226,32,130,219,1,201,8,208,56,169,164,133]},{"1075092":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075110":[226,32,183]},{"1075114":[159]},{"1075116":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075135":[143,148,80,127,226,32,130,159,1,201,9,208,56,169,189,133]},{"1075152":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075170":[226,32,183]},{"1075174":[159]},{"1075176":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075195":[143,148,80,127,226,32,130,99,1,201,10,208,56,169,214,133]},{"1075212":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075230":[226,32,183]},{"1075234":[159]},{"1075236":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075255":[143,148,80,127,226,32,130,39,1,201,11,208,56,169,241,133]},{"1075272":[169,129,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075290":[226,32,183]},{"1075294":[159]},{"1075296":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075315":[143,148,80,127,226,32,130,235]},{"1075324":[201,12,208,56,169,12,133]},{"1075332":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075350":[226,32,183]},{"1075354":[159]},{"1075356":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075375":[143,148,80,127,226,32,130,175]},{"1075384":[201,13,208,55,169,41,133]},{"1075392":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075410":[226,32,183]},{"1075414":[159]},{"1075416":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075435":[143,148,80,127,226,32,128,116,201,14,208,55,169,72,133]},{"1075451":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075469":[226,32,183]},{"1075473":[159]},{"1075475":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075494":[143,148,80,127,226,32,128,57,201,15,208,53,169,101,133]},{"1075510":[169,130,133,1,169,50,133,2,194,32,175,148,80,127,170,160]},{"1075528":[226,32,183]},{"1075532":[159]},{"1075534":[87,127,232,200,201,127,208,244,194,32,138,26,143,150,80,127,169]},{"1075553":[143,148,80,127,226,32,156,240,28,156,241,28,169,1,143,53,80,127,169,1,143,159,80,127,104,133,2,104,133,1,104,133]},{"1075586":[171,40,122,250,104,107,104,133,2,104,133,1,104,133]},{"1075601":[171,40,122,250,104,107,34,78,216]},{"1075611":[156,232,28,107,176,4,192,152,144,5,169,255,255,128,3,185,1,195,201,255,255,107,175,126,129,48,240,32,175,92,243,126,15,93,243,126,15,94,243,126,15,95,243,126,208,14,189,128,13,24,105,8,157,128,13,169,81,160,1,107,169,136,160]},{"1075675":[107,34,182,129,164,176,12,194,32,169,140,1,141,240,28,226,32,128,10,194,32,169,109,1,141,240,28,226,32,34,17,235,160,107,34,182,129,164,176,12,194,32,169,141,1,141,240,28,226,32,128,90,175,142,243,126,41,128,208,12,194,32,169,146,1,141,240,28,226,32,128,70,175,142,243,126,41,64,240,12,194,32,169,149,1,141,240,28,226,32,128,50,175,142,243,126,41,32,208,12,194,32,169,148,1,141,240,28,226,32,128,30,175,142,243,126,41,128,240,12,194,32,169,147,1,141,240,28,226,32,128,10,194,32,169,110,1,141,240,28,226,32,34,17,235,160,107,72,173,2,2,201,15,240,6,104,34,25,226,5,107,36,244,80,246,175,68,128,48,240,8,175,75,243,126,240,14,128,22,175,89,243,126,201,255,240,4,201,2,176,10,104,169,12,160,1,34,25,226,5,107,104,107,72,173,2,2,201,15,240,6,104,34,25,226,5,107,36,244,80,246,175,68,128,48,240,8,175,75,243,126,240,14,128,22,175,89,243,126,201,255,240,4,201,2,176,10,104,169,13,160,1,34,25,226,5,107,104,107,175,116,243,126,41,4,240,8,169,47,160]},{"1075946":[34,25,226,5,107,175,122,243,126,41,5,201,5,240,9,169,21,160,1,34,25,226,5,107,169,22,160,1,34,25,226,5,107,165,16,201,14,240,109,100,17,218,90,165]},{"1075991":[72,165,1,72,165,2,72,169,28,133,2,194,48,173,240,28,10,170,191,192,113,127,133]},{"1076015":[226,48,160]},{"1076019":[183]},{"1076021":[201,254,208,39,200,183]},{"1076028":[201,110,208,32,200,183]},{"1076035":[208,27,200,183]},{"1076040":[201,254,208,20,200,183]},{"1076047":[201,107,208,13,200,183]},{"1076054":[201,4,208,6,156,232,28,130,19]},{"1076064":[156,35,2,156,216,28,169,2,133,17,165,16,141,12,1,169,14,133,16,104,133,2,104,133,1,104,133]},{"1076092":[122,250,107,165,138,10,168,173,18,7,240,42,165,33,41,2]},{"1076109":[10,10,69,138,41,8]},{"1076116":[240,6,152,24,105,16]},{"1076123":[168,165,35,41,2]},{"1076129":[74,69,138,41,1]},{"1076135":[240,4,152,26,26,168,152,41,255]},{"1076145":[168,107,165,17,201,3,208,5,169,6,133,20,107,34,17,148,164,34,7,145,164,107,34,43,246,160,34,159,170,164,34]},{"1076177":[128,191,92,21,253,13,72,34,3,130,160,34,201,131,160,34,211,130,160,104,107,72,8,226,32,34,74,129,160,40,104,141,12,4,156,172,4,72,8,34,120,250,13,34,89,132,160,34,201,131,160,40,104,107,34,74,129,160,169,16,133,28,107,34,157,153,7,175,77,128,48,137,4,240,4,143,202,80,127,137,2,240,4,143,201,80,127,137,1,240,4,143,200,80,127,175,78,128,48,137,4,240,6,169,128,143,115,243,126,175,78,128,48,137,2,240,6,169,50,143,117,243,126,175,78,128,48,137,1,240,39,169,70,143,118,243,126,175,117,129,48,240,27,175,142,243,126,9,128,143,142,243,126,194,32,175,96,243,126,24,111,131,129,48,143,96,243,126,226,32,107,34,190,160,2,34,112,219,160,107,194,16,34,61,137]},{"1076363":[169,7,141,12,33,175,240,244,126,208,10,34,236,236,160,169,255,143,240,244,126,173,10,1,208,10,175,17,192,126,208,4,34,207,129,160,34,184,130,160,34,157,130,164,169,255,143,144,80,127,169]},{"1076415":[143,1,80,127,175,114,129,48,240,8,175,139,243,126,143,111,243,126,34,201,131,160,34,211,130,160,34,120,131,160,175,135,128,48,201,1,208,4,34,42,147,164,226,16,107,218,8,194,32,175,70,128,48,143,98,243,126,143,96,243,126,175,12,130,48,143,84,244,126,175,14,130,48,143,86,244,126,162,78]},{"1076495":[191]},{"1076497":[176,48,159,64,243,126,202,202,16,244,226,32,175,64,128,48,240,12,169,128,143,97,240,126,169,128,143,147,240,126,175,139,128,48,240,6,169,32,143,219,242,126,175,140,128,48,240,6,169,32,143,195,242,126,175,67,128,48,143,89,243,126,40,250,107,169,81,141,162,10,34,61,137]},{"1076571":[107,34,83,150,160,34,48,247,160,107,34,198,150,160,34,207,150,160,162,4,107,34,48,247,160,169,20,133,17,107,34,48,247,160,107,34,43,132,160,34,171,150,160,34,227,218,160,8,226,32,169,255,143,144,80,127,40,107,175,156,80,127,208,13,26,143,156,80,127,34,79,186,10,206]},{"1076646":[2,107,169]},{"1076650":[143,156,80,127,34,153,186,10,107,169,1,143,145,80,127,107,34,221,150,160,107,169]},{"1076673":[143,145,80,127,173,216,2,201,50,208,24,165,27,240,20,173,12,4,201,26,208,13,175,167,80,127,41,4,240,5,169,59,141,44,1,175,159,80,127,240,16,156,240,28,156,241,28,34,11,235,160,169]},{"1076726":[143,159,80,127,156,233,2,189,94,12,107,175,105,129,48,41,255]},{"1076744":[208,4,169]},{"1076749":[107,201,1]},{"1076753":[208,16,175,197,243,126,41,15]},{"1076762":[201,2]},{"1076765":[176,84,32,119,238,107,201,2]},{"1076774":[208,75,32,119,238,240,70,218,90,226,48,34,126,130,164,194,48,122,250,176,4,169,1]},{"1076798":[107,175,74,128,48,41,255]},{"1076806":[240,43,175,195,242,126,41,32]},{"1076815":[208,34,173,8,3,41,128]},{"1076823":[240,4,169,1]},{"1076828":[107,226,48,34,111,155,9,175,195,242,126,9,32,143,195,242,126,194,48,169,1]},{"1076850":[107,169]},{"1076854":[107,165,34,201,200,7,144,16,201,40,8,176,11,165,32,201,184,6,176,4,169,1]},{"1076877":[96,169]},{"1076881":[96,175,76,128,48,41,255]},{"1076889":[240,4,92,90,189,27,224,118]},{"1076898":[176,4,92,240,188,27,92,90,189,27,175,200,243,126,41,255]},{"1076915":[72,170,191,64,130,48,208,3,130,175]},{"1076926":[58,133]},{"1076929":[10,10,24,101]},{"1076934":[10,10,170,169,22]},{"1076940":[143,66,193,126,191,85,130,48,143,68,193,126,191,87,130,48,143,70,193,126,191,89,130,48,24,105,16]},{"1076968":[143,72,193,126,191,91,130,48,143,74,193,126,191,93,130,48,143,80,193,126,191,95,130,48,143,82,193,126,191,83,130,48,143,78,193,126,191,97,130,48,41,255]},{"1077011":[137,128]},{"1077014":[240,3,9]},{"1077018":[255,143,106,193,126,191,98,130,48,41,255]},{"1077030":[137,128]},{"1077033":[240,3,9]},{"1077037":[255,143,110,193,126,169]},{"1077045":[56,239,106,193,126,143,108,193,126,169]},{"1077057":[56,239,110,193,126,143,112,193,126,191,82,130,48,41,255]},{"1077073":[143,76,193,126,143,64,193,126,156,152,6,156,153,6,226,32,166]},{"1077091":[191,71,130,48,143,153,80,127,194,32,104,107,174,232,28,191,80,131,48,208,8,175,200,243,126,92,154,132,2,191,129,132,2,10,170,191,210,216,2,133,160,191,211,216,2,133,161,169,8,133,16,100,17,100,176,156,10,1,156,170,4,34,149,227,13,34,136,250,13,34,50,221,13,107,162,36]},{"1077168":[165]},{"1077170":[223]},{"1077172":[184,27,208,9,173,10,4,223,38,184,27,240,32,202,202,16,235,162,30]},{"1077192":[165]},{"1077194":[223]},{"1077196":[131,48,208,9,173,10,4,223,32,131,48,240,12,202,202,16,235,92,164,184,27,92,175,184,27,226,48,138,74,170,191,64,131,48,141,14,1,156,15,1,92,189,184,27,133]},{"1077242":[175,74,128,48,41,255]},{"1077249":[240,25,175,93]},{"1077255":[41,255]},{"1077258":[201,20]},{"1077261":[208,13,165,138,41,64]},{"1077268":[197,123,240,4,92,119,189,27,162,2,1,92,10,189,27,175,137,128,48,240,16,165,138,201,71,208,10,175,199,242,126,9,32,143,199,242,126,107,72,175,74,128,48,240,13,165,138,41,64,208,7,104,156,198,4,169]},{"1077325":[107,104,141,228,2,141,193,15,141,16,7,107,34,98,240,160,34,207,240,160,107,169,14,143,1,40]},{"1077352":[169,4,143,1,40]},{"1077358":[169,13,143,1,40]},{"1077364":[169,14,143,1,40]},{"1077370":[169]},{"1077372":[143,1,40]},{"1077376":[169]},{"1077378":[143,1,40]},{"1077382":[169]},{"1077384":[143,1,40]},{"1077388":[169]},{"1077390":[143,1,40]},{"1077394":[169]},{"1077396":[143,1,40]},{"1077400":[169]},{"1077402":[143,1,40]},{"1077406":[169]},{"1077408":[143,1,40]},{"1077412":[169,1,143,1,40]},{"1077418":[169]},{"1077420":[143,1,40]},{"1077424":[169,1,143,1,40]},{"1077430":[169]},{"1077432":[143,1,40]},{"1077436":[169]},{"1077438":[143,1,40]},{"1077442":[169,10,143,1,40]},{"1077448":[169,13,143,1,40]},{"1077454":[107,72,218,162]},{"1077459":[175]},{"1077461":[40]},{"1077463":[41,15,201,15,240,10,224,14,144,3,24,128,4,232,128,236,56,250,104,107,72,218,8,226,48,162]},{"1077490":[175]},{"1077492":[40]},{"1077494":[41,15,201,15,240,12,224,14,144,4,24,130,250]},{"1077508":[232,128,235,56,175]},{"1077514":[40]},{"1077516":[72,175]},{"1077519":[40]},{"1077521":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133]},{"1077539":[175]},{"1077541":[40]},{"1077543":[72,175]},{"1077546":[40]},{"1077548":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,1,175]},{"1077568":[40]},{"1077570":[72,175]},{"1077573":[40]},{"1077575":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,2,175]},{"1077595":[40]},{"1077597":[72,175]},{"1077600":[40]},{"1077602":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,3,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,41,255]},{"1077687":[10,10,72,10,10,10,10,56,227,1,131,1,104,100,1,24,101]},{"1077705":[133]},{"1077707":[165,3,41,255]},{"1077712":[10,10,10,72,10,24,99,1,131,1,104,100,3,24,101,2,10,10,72,10,10,10,10,56,227,1,131,1,104,160,96,34,2,242,160,132,2,100,3,24,101]},{"1077754":[144,2,230,2,40,250,104,107,226,32,140,2,66,141,3,66,234,234,234,234,173,22,66,172,23,66,235,141,3,66,234,234,152,24,109,22,66,172,23,66,144,1,200,235,194,32,107,72,218,90,8,226,48,162]},{"1077809":[175]},{"1077811":[40]},{"1077813":[41,15,201,15,240,12,224,14,144,4,24,130,249]},{"1077827":[232,128,235,56,175]},{"1077833":[40]},{"1077835":[72,175]},{"1077838":[40]},{"1077840":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133]},{"1077858":[175]},{"1077860":[40]},{"1077862":[72,175]},{"1077865":[40]},{"1077867":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,1,175]},{"1077887":[40]},{"1077889":[72,175]},{"1077892":[40]},{"1077894":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,2,175]},{"1077914":[40]},{"1077916":[72,175]},{"1077919":[40]},{"1077921":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,3,175]},{"1077941":[40]},{"1077943":[133,4,175]},{"1077947":[40]},{"1077949":[72,175]},{"1077952":[40]},{"1077954":[10,72,10,10,24,99,1,131,1,104,24,99,1,131,1,104,133,5,175]},{"1077974":[40]},{"1077976":[133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,133,6,41,255]},{"1078045":[10,72,10,10,24,99,1,131,1,104,10,72,10,10,24,99,1,131,1,104,24,105,232,3,100,6,24,101,5,133,5,40,122,250,104,107,165,12,201,56,208,4,9,64,133,12,165,13,157,2,8,165,12,157,3,8,107,175,127,129,48,208,6,173,29,3,201,11,107,175,65,80,127,26,143,65,80,127,175,127,129,48,207,65,80,127,208,8,169]},{"1078135":[143,65,80,127,128,10,74,207,65,80,127,144,3,226,2,107,194,2,107,175,127,129,48,208,7,34,182,233,29,165,95,107,169]},{"1078169":[107,175,51,128,48,240,9,141,202,4,169,43,141,46,1,107,169,255,141,202,4,107,175,112,243,126,24,111,52,128,48,58,207,67,243,126,144,13,175,67,243,126,201,99,176,5,26,143,67,243,126,107,175,113,243,126,24,111,53,128,48,58,207,119,243,126,144,13,175,119,243,126,201,99,176,5,26,143,119,243,126,107,175,112,243,126,24,111,52,128,48,207,67,243,126,107,169]},{"1078268":[143,128,80,127,143,130,80,127,143,132,80,127,143,134,80,127,143,136,80,127,143,138,80,127,175,144,129,48,41,255]},{"1078299":[201,2]},{"1078302":[208,27,175,62,244,126,56,239,84,244,126,143,140,80,127,175,64,244,126,239,86,244,126,143,142,80,127,128,30,201,1]},{"1078334":[208,25,175,84,244,126,56,239,62,244,126,143,140,80,127,175,86,244,126,239,64,244,126,143,142,80,127,175,142,80,127,207,41,246,160,144,10,208,8,175,140,80,127,207,39,246,160,144,114,175,145,129,48,41,255]},{"1078390":[208,24,169,2]},{"1078395":[143,126,80,127,175,62,244,126,143,84,244,126,175,64,244,126,143,86,244,126,96,201,1]},{"1078419":[208,38,175,140,80,127,73,255,255,24,105,1]},{"1078432":[143,140,80,127,175,142,80,127,73,255,255,105]},{"1078446":[143,142,80,127,169,1]},{"1078453":[143,126,80,127,128,54,201,2]},{"1078462":[208,24,169,2]},{"1078467":[143,126,80,127,175,62,244,126,143,84,244,126,175,64,244,126,143,86,244,126,96,226,48,34,153,215,160,194,48,96,175,146,129,48,41,255]},{"1078504":[240,7,169]},{"1078509":[143,126,80,127,175,142,80,127,207,29,246,160,144,10,208,8,175,140,80,127,207,27,246,160,144,53,175,128,80,127,26,201,10]},{"1078543":[144,12,175,130,80,127,26,143,130,80,127,169]},{"1078557":[143,128,80,127,175,140,80,127,56,239,27,246,160,143,140,80,127,175,142,80,127,239,29,246,160,143,142,80,127,128,181,175,142,80,127,207,33,246,160,144,10,208,8,175,140,80,127,207,31,246,160,144,53,175,132,80,127,26,201,10]},{"1078618":[144,12,175,134,80,127,26,143,134,80,127,169]},{"1078632":[143,132,80,127,175,140,80,127,56,239,31,246,160,143,140,80,127,175,142,80,127,239,33,246,160,143,142,80,127,128,181,175,142,80,127,207,37,246,160,144,10,208,8,175,140,80,127,207,35,246,160,144,53,175,136,80,127,26,201,10]},{"1078693":[144,12,175,138,80,127,26,143,138,80,127,169]},{"1078707":[143,136,80,127,175,140,80,127,56,239,35,246,160,143,140,80,127,175,142,80,127,239,37,246,160,143,142,80,127,128,181,175,128,80,127,24,105,144,36,143,128,80,127,175,130,80,127,24,105,144,36,143,130,80,127,175,132,80,127,24,105,144,36,143,132,80,127,175,134,80,127,24,105,144,36,143,134,80,127,175,136,80,127,24,105,144,36,143,136,80,127,175,138,80,127,24,105,144,36,143,138,80,127,96,192,75,3]},{"1078815":[16,14]},{"1078819":[60]},{"1078823":[255,255,255,127,175,204,80,127,41,255]},{"1078834":[240,29,169,7,40,143,144,199,126,169,10,40,143,146,199,126,169,11,40,143,148,199,126,169,12,40,143,150,199,126,107,169,127,36,143,144,199,126,143,146,199,126,143,148,199,126,143,150,199,126,175,144,129,48,208,1,107,169,7,40,143,146,199,126,175,126,80,127,41,2]},{"1078905":[240,93,175,145,129,48,41,255]},{"1078914":[208,27,169,8,40,143,148,199,126,169,9,40,143,150,199,126,169,127,36,143,152,199,126,143,154,199,126,128,28,169,10,40,143,148,199,126,169,11,40,143,150,199,126,169,12,40,143,152,199,126,169,127,36,143,154,199,126,143,156,199,126,143,158,199,126,143,160,199,126,143,162,199,126,143,164,199,126,175,146,129,48,208,1,107,128,77,175,126,80,127,41,1]},{"1079007":[24,105,4,40,143,148,199,126,175,130,80,127,143,150,199,126,175,128,80,127,143,152,199,126,169,6,40,143,154,199,126,175,134,80,127,143,156,199,126,175,132,80,127,143,158,199,126,169,6,40,143,160,199,126,175,138,80,127,143,162,199,126,175,136,80,127,143,164,199,126,165,26,41,31]},{"1079082":[208,3,32,249,243,107,175,204,80,127,208,16,175,145,129,48,201,2,208,14,175,126,80,127,41,2,240,6,169]},{"1079112":[143,109,243,126,175,109,243,126,107,138,26,143,153,80,127,191,115,187,27,141,14,1,107,175,153,80,127,240,19,58,10,170,191]},{"1079146":[161,48,141,150,6,191,2,162,48,141,152,6,128,9,189,36,215,141,150,6,156,152,6,107,175,153,80,127,201,67,107,32,33,129,160,88,162,2,165,138,9,64,201,67,240,62,201,69,240,58,201,71,240,54,160,90,165,138,201,64,176,34,162,7,175,197,243,126,201,3,144,2,162,2,165,138,201,24,240,28,162,5,175]},{"1079230":[243,126,41,64,240,2,162,2,165,138,240,12,162,2,175,197,243,126,201,2,176,2,162,3,175,202,243,126,240,28,162,15,165,138,201,64,240,16,162,13,201,67,240,10,201,69,240,6,201,71,240,2,162,9,175,202,243,126,24,42,42,42,207,74,128,48,240,8,175,87,243,126,208,2,162,4,173,50,1,201,242,208,7,236,48,1,208,2,162,243,92,137,131,2,194,32,169,65,38,141,112,67,162,62,169]},{"1079336":[255,157]},{"1079339":[27,157,64,27,157,128,27,157,192,27,157]},{"1079351":[28,157,64,28,157,128,28,202,202,16,231,169]},{"1079365":[143,7,192,126,143,9,192,126,226,32,34,200,215]},{"1079379":[169,128,133,155,162,4,175,202,243,126,24,42,42,42,207,74,128,48,240,6,175,87,243,126,240,24,162,9,165,138,201,64,176,16,162,2,201,24,208,10,175,197,243,126,201,3,176,2,162,7,142,44,1,165,138,201,64,208,4,162,15,128,19,201,67,240,8,201,69,240,4,201,71,208,22,169,9,141,45,1,162,13,175,87,243,126,15,74,128,48,208,2,162,4,142,44,1,165,17,141,12,1,100,17,100,176,156]},{"1079487":[2,156,16,7,107,165,138,201,64,176,34,162,7,175,197,243,126,201,3,144,2,162,2,165,138,201,24,240,28,162,5,175]},{"1079520":[243,126,41,64,240,2,162,2,165,138,240,12,162,2,175,197,243,126,201,2,176,2,162,3,175,202,243,126,240,28,162,15,165,138,201,64,240,16,162,13,201,67,240,10,201,69,240,6,201,71,240,2,162,9,175,202,243,126,24,42,42,42,207,74,128,48,240,8,175,87,243,126,208,2,162,4,107,173,10,4,201,24,208,2,165,27,107,34,116,220,160,34,58,135,1,194,16,166,160,191,219,251,160,226,16,34,156,135]},{"1079629":[95,249,160,96,249,160,237,249,160,122,250,160,7,251,160,113,251,160,107,175,65,128,48,208,1,107,194,48,162,92,25,169,208,8,159]},{"1079665":[32,126,232,232,159]},{"1079671":[32,126,232,232,159]},{"1079677":[32,126,232,232,159]},{"1079683":[32,126,232,232,162,220,25,159]},{"1079692":[32,126,232,232,169,202,12,159]},{"1079701":[32,126,232,232,169,203,12,159]},{"1079710":[32,126,232,232,169,208,8,159]},{"1079719":[32,126,232,232,162,92,26,159]},{"1079728":[32,126,232,232,169,218,12,159]},{"1079737":[32,126,232,232,169,219,12,159]},{"1079746":[32,126,232,232,169,208,8,159]},{"1079755":[32,126,232,232,162,220,26,159]},{"1079764":[32,126,232,232,159]},{"1079770":[32,126,232,232,159]},{"1079776":[32,126,232,232,159]},{"1079782":[32,126,232,232,226,48,107,175,65,128,48,208,1,107,194,48,162,28,25,169,208,8,159]},{"1079806":[32,126,232,232,159]},{"1079812":[32,126,232,232,159]},{"1079818":[32,126,232,232,159]},{"1079824":[32,126,232,232,162,156,25,159]},{"1079833":[32,126,232,232,169,202,12,159]},{"1079842":[32,126,232,232,169,203,12,159]},{"1079851":[32,126,232,232,169,208,8,159]},{"1079860":[32,126,232,232,162,28,26,159]},{"1079869":[32,126,232,232,169,218,12,159]},{"1079878":[32,126,232,232,169,219,12,159]},{"1079887":[32,126,232,232,169,208,8,159]},{"1079896":[32,126,232,232,162,156,26,159]},{"1079905":[32,126,232,232,159]},{"1079911":[32,126,232,232,159]},{"1079917":[32,126,232,232,159]},{"1079923":[32,126,232,232,226,48,107,175,65,128,48,208,1,107,194,48,162,92,9,169,208,8,159]},{"1079947":[32,126,232,232,159]},{"1079953":[32,126,232,232,159]},{"1079959":[32,126,232,232,159]},{"1079965":[32,126,232,232,162,220,9,159]},{"1079974":[32,126,232,232,169,202,12,159]},{"1079983":[32,126,232,232,169,203,12,159]},{"1079992":[32,126,232,232,169,208,8,159]},{"1080001":[32,126,232,232,162,92,10,159]},{"1080010":[32,126,232,232,169,218,12,159]},{"1080019":[32,126,232,232,169,219,12,159]},{"1080028":[32,126,232,232,169,208,8,159]},{"1080037":[32,126,232,232,162,220,10,159]},{"1080046":[32,126,232,232,159]},{"1080052":[32,126,232,232,159]},{"1080058":[32,126,232,232,159]},{"1080064":[32,126,232,232,226,48,107,175,197,243,126,201,2,144,1,107,175,138,128,48,208,1,107,194,32,169,225,8,143,150,58,126,143,22,61,126,143,168,58,126,143,40,61,126,26,143,152,58,126,143,154,58,126,143,156,58,126,143,158,58,126,143,160,58,126,143,162,58,126,143,164,58,126,143,166,58,126,26,143,22,59,126,143,150,59,126,143,22,60,126,143,150,60,126,143,40,59,126,143,168,59,126,143,40,60,126,143,168,60,126,226,32,107,175,197,243,126,201,2,144,1,107,175,138,128,48,208,1,107,194,32,169,225,8,143,214,58,126,143,86,61,126,143,232,58,126,143,104,61,126,26,143,216,58,126,143,218,58,126,143,220,58,126,143,222,58,126,143,224,58,126,143,226,58,126,143,228,58,126,143,230,58,126,26,143,86,59,126,143,214,59,126,143,86,60,126,143,214,60,126,143,104,59,126,143,232,59,126,143,104,60,126,143,232,60,126,226,32,107]},{"1080297":[1]},{"1080379":[5]},{"1080381":[4]},{"1080409":[2]},{"1080505":[3]},{"1080603":[192,10,208,7,173,12,4,201,18,240,2,24,96,56,96,100]},{"1080620":[134,1,133,2,32,27,253,176,4,92,83,230]},{"1080633":[169,49,133,2,194,32,169]},{"1080641":[192,133]},{"1080644":[162,128,167]},{"1080648":[141,24,33,230]},{"1080653":[230]},{"1080655":[167]},{"1080657":[141,24,33,230]},{"1080662":[230]},{"1080664":[167]},{"1080666":[141,24,33,230]},{"1080671":[230]},{"1080673":[167]},{"1080675":[141,24,33,230]},{"1080680":[230]},{"1080682":[167]},{"1080684":[141,24,33,230]},{"1080689":[230]},{"1080691":[167]},{"1080693":[141,24,33,230]},{"1080698":[230]},{"1080700":[167]},{"1080702":[141,24,33,230]},{"1080707":[230]},{"1080709":[167]},{"1080711":[141,24,33,230]},{"1080716":[230]},{"1080718":[202,208,181,226,32,92,81,230]},{"1080727":[226,48,175,248,194,126,168,32,27,253,194,48,176,10,162]},{"1080744":[160,64]},{"1080747":[92,104,223]},{"1080751":[162]},{"1080753":[192,160]},{"1080757":[169]},{"1080759":[8,139,84,127,177,171,162]},{"1080767":[8,169]},{"1080770":[102,133,3,92,110,223]},{"1081344":[34,181,128]},{"1081348":[34,58,221,160,72,8,175,67,244,126,208,51,194,32,175,46,244,126,26,143,46,244,126,208,9,175,48,244,126,26,143,48,244,126,165,16,201,14,1,208,20,175,68,244,126,26,143,68,244,126,208,9,175,70,244,126,26,143,70,244,126,226,32,40,104,107,72,218,90,11,175,67,244,126,41,255]},{"1081425":[208,20,175,62,244,126,26,143,62,244,126,208,9,175,64,244,126,26,143,64,244,126,92,208,128]},{"1083056":[127,32,127,32,80,40,86,168,82,40,91,40,91,40,92,40,127,32,2,60,3,60,127,32,127,32,136,44,137,44,127,32,167,32,169,32,127,32,113,40,127,32,127,32,139,40,143,40,171,36,172,36,143,104,139,104,127,32,127,32,127,32,127,32,127,32,127,32,84,40,113,40,88,40,127,32,127,32,93,40,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,78,48,88,40,127,32,127,32,93,40,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,94,48,89,40,91,168,91,168,92,168,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,84,40,94,48,84,104,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,127,32,80,168,86,40,80,232]},{"1083392":[226,40,169,255,24,105,255,201,100,216,240,10,194,32,169,255,1,27,92,39,128]},{"1083414":[226,48,169,128,141]},{"1083420":[33,169,3,141,5,33,156,6,33,169,1,141,11,33,156,13,33,156,13,33,169,1,141,44,33,169,255,141,14,33,141,14,33,156,46,33,156,47,33,169,48,141,48,33,156,49,33,169,224,141,50,33,156,51,33,156]},{"1083477":[66,194,16,156,22,33,169,12,141,7,33,141,23,33,169,128,141,21,33,162,1,24,142]},{"1083501":[67,162,64,224,142,2,67,169,56,141,4,67,162]},{"1083515":[8,142,5,67,169,1,141,11,66,162]},{"1083526":[128,142,2,67,169,55,141,4,67,162]},{"1083537":[128,142,5,67,169,1,141,11,66,162]},{"1083548":[128,142,2,67,169,56,141,4,67,162,64,96,142,5,67,169,1,141,11,66,156,33,33,162]},{"1083573":[34,142]},{"1083576":[67,162,64,232,142,2,67,169,56,141,4,67,162]},{"1083590":[2,142,5,67,169,1,141,11,66,169,15,141]},{"1083603":[33,219]},{"1089536":[226,32,165,138,201,71,240,8,191,148,253,15,92,114,136]},{"1089552":[191,85,151,164,92,114,136]},{"1113856":[169]},{"1113858":[162]},{"1113860":[159,37,192,126,159]},{"1113866":[80,127,232,224,16,144,243,162,16,159]},{"1113877":[80,127,232,224,255,144,247,162]},{"1113886":[191]},{"1113888":[32,112,223,192,255]},{"1113894":[208,7,232,224,21,144,241,128,32,194,48,169]},{"1113908":[159]},{"1113911":[112,232,224]},{"1113915":[32,144,246,226,48,162]},{"1113922":[191,192,255]},{"1113926":[159]},{"1113928":[32,112,232,224,21,144,243,169,1,141,13,66,169,16,133,188,169,129,141]},{"1113948":[66,107,34,233,222,160,92,99,212]},{"1114112":[141,240,28,140,241,28,34,47,241,6,144,107,34,170,244,7,176,101,165,246,16,97,189,16,15,208,92,165,77,201,2,240,86,34,166,234,6,218,187,191,163,225,5,250,197,47,208,71,90,173,240,28,172,241,28,165,160,201,5,240,6,201,28,240,24,128,42,194,32,175,122,129,48,15,20,244,126,143,20,244,126,226,32,34,222,234,160,128,20,194,32,175,124,129,48,15,20,244,126,143,20,244,126,226,32,34,239,234,160,169,64,157,16,15,104,73,3,56,107,189,224,13,24,107,90,72,34,47,241,6,144,56,34,170,244,7,176,50,165,246,16,46,189,16,15,208,41,165,77,201,2,240,35,34,166,234,6,218,187,191,163,225,5,250,197,47,208,20,104,235,104,90,168,235,34,25,226,5,169,64,157,16,15,104,73,3,56,107,122,104,189,224,13,24,107]},{"1146881":[1,159,6,37,40,43,34,32,34,39,26,37,159,32,26,38,30,159,44,45,26,31,31,7,35,60,79,60,58,76,75,64,77,60,159,71,73,70,59,76,58,60,73,8,31,100,101,110,107,111,100,101,159,117,93,105,93,113,95,100,101,8,31,138,139,148,145,149,138,139,159,155,131,143,131,151,133,138,139,12,15,41,43,40,29,46,28,30,43,8,31,111,100,101,99,97,110,113,159,105,101,117,93,105,107,112,107,8,31,149,138,139,137,135,148,151,159,143,139,155,131,143,145,150,145,12,15,3,8,17,4,2,19,14,17,9,27,112,93,103,93,111,100,101,159,112,97,118,113,103,93,9,27,150,131,141,131,149,138,139,159,150,135,156,151,141,131,9,25,74,58,73,64,71,75,159,78,73,64,75,60,73,9,27,103,97,106,111,113,103,97,159,112,93,106,93,94,97,9,27,141,135,144,149,151,141,135,159,150,131,144,131,132,135,6,37,26,44,44,34,44,45,26,39,45,159,29,34,43,30,28,45,40,43,44,7,33,117,93,111,113,100,101,111,93,159,117,93,105,93,105,113,110,93,7,33,155,131,149,151,138,139,149,131,159,155,131,143,131,143,151,148,131,9,25,117,107,101,95,100,101,159,117,93,105,93,96,93,9,25,155,145,139,133,138,139,159,155,131,143,131,134,131,3,49,74,58,73,60,60,69,159,62,73,56,71,63,64,58,74,159,59,60,74,64,62,69,60,73,74,8,31,40,27,35,30,28,45,159,29,30,44,34,32,39,30,43,44,8,29,111,107,101,95,100,101,110,107,159,112,107,105,101,112,93,8,29,149,145,139,133,138,139,148,145,159,150,145,143,139,150,131,9,27,112,93,103,93,117,93,159,101,105,93,105,113,110,93,9,27,150,131,141,131,155,131,159,139,143,131,143,151,148,131,5,41,27,26,28,36,159,32,43,40,46,39,29,159,29,30,44,34,32,39,30,43,44,8,29,105,93,111,93,106,93,107,159,93,110,101,105,107,112,107,8,29,143,131,149,131,144,131,145,159,131,148,139,143,145,150,145,7,33,112,111,113,117,107,111,100,101,159,115,93,112,93,106,93,94,97,7,33,150,149,151,155,145,149,138,139,159,153,131,150,131,144,131,132,135,8,31,15,17,14,6,17]},{"1147398":[12,159,3,8,17,4,2,19,14,17,8,31,112,107,111,100,101,100,101,103,107,159,106,93,103,93,99,107,8,31,150,145,149,138,139,138,139,141,145,159,144,131,141,131,137,145,8,29,68,56,64,69,159,71,73,70,62,73,56,68,68,60,73,8,31,117,93,111,113,106,93,110,101,159,111,107,97,102,101,105,93,8,31,155,131,149,151,144,131,148,139,159,149,145,135,140,139,143,131,7,33,70,57,65,60,58,75,159,71,73,70,62,73,56,68,68,60,73,9,27,103,93,118,113,93,103,101,159,105,107,110,101,112,93,9,27,141,131,156,151,131,141,139,159,143,145,148,139,150,131,10,21,41,43,40,32,43,26,38,38,30,43,44,8,31,112,93,112,111,113,107,159,106,101,111,100,101,117,93,105,93,8,31,150,131,150,149,151,145,159,144,139,149,138,139,155,131,143,131,8,29,117,113,101,95,100,101,159,117,93,105,93,105,107,112,107,8,29,155,151,139,133,138,139,159,155,131,143,131,143,145,150,145,8,31,117,107,111,100,101,100,101,110,107,159,106,107,105,107,112,107,8,31,155,145,149,138,139,138,139,148,145,159,144,145,143,145,150,145,11,17,97,101,102,101,159,106,107,112,107,11,17,135,139,140,139,159,144,145,150,145,8,29,111,93,112,107,110,113,159,112,93,103,93,100,93,112,93,8,29,149,131,150,145,148,151,159,150,131,141,131,138,131,150,131,9,27,112,107,111,100,101,107,159,101,115,93,115,93,103,101,9,27,150,145,149,138,139,145,159,139,153,131,153,131,141,139,6,37,111,100,101,99,97,100,101,110,107,159,103,93,111,93,105,93,112,111,113,6,37,149,138,139,137,135,138,139,148,145,159,141,131,149,131,143,131,150,149,151,8,31,117,93,111,113,106,93,110,101,159,106,101,111,100,101,96,93,8,31,155,131,149,151,144,131,148,139,159,144,139,149,138,139,134,131,9,27,18,14,20,13,3,159,2,14,12,15,14,18,4,17,11,19,103,107,102,101,159,103,107,106,96,107,11,19,141,145,140,139,159,141,145,144,134,145,10,23,58,70,70,73,59,64,69,56,75,70,73,74,11,19,103,97,101,118,107,159,103,93,112,107,11,19,141,135,139,156,145,159,141,131,150,145,9,25,112,93,103,93,107,159,111,100,101,105,101,118,113,9,25,150,131,141,131,145,159,149,138,139,143,139,156,151,8,31,41,43,34,39,45,30,29,159,26,43,45,159,48,40,43,36,9,25,117,107,101,95,100,101,159,103,107,112,93,94,97,9,25,155,145,139,133,138,139,159,141,145,150,131,132,135,10,23,100,101,96,97,103,101,159,98,113,102,101,101,10,23,138,139,134,135,141,139,159,136,151,140,139,139,8,31,117,107,111,100,101,93,103,101,159,103,107,101,118,113,105,101,8,31,155,145,149,138,139,131,141,139,159,141,145,139,156,151,143,139,9,27,117,93,111,113,100,101,110,107,159,111,93,103,93,101,9,27,155,131,149,151,138,139,148,145,159,149,131,141,131,139,8,29,112,107,105,107,93,103,101,159,103,113,110,107,113,105,97,8,29,150,145,143,145,131,141,139,159,141,151,148,145,151,143,135,7,33,18,15,4,2,8]},{"1148127":[11,159,19,7]},{"1148132":[13,10,18,159,19,14,9,25,106,107,94,113,107,159,107,103,93,102,101,105,93,9,25,144,145,132,151,145,159,145,141,131,140,139,143,131,7,33,117,93,111,113,106,107,110,101,159,112,93,103,97,112,93,106,101,7,33,155,131,149,151,144,145,148,139,159,150,131,141,135,150,131,144,139,10,23,103,101,117,107,111,100,101,159,103,107,96,93,10,23,141,139,155,145,149,138,139,159,141,145,134,131,7,35,112,93,103,93,105,101,112,111,113,159,103,113,118,113,100,93,110,93,7,35,150,131,141,131,143,139,150,149,151,159,141,151,156,151,138,131,148,131,9,27,100,101,110,107,106,107,94,113,159,103,93,103,113,101,9,27,138,139,148,145,144,145,132,151,159,141,131,141,151,139,7,33,111,100,101,99,97,103,101,159,117,93,105,93,111,100,101,110,107,7,33,149,138,139,137,135,141,139,159,155,131,143,131,149,138,139,148,145,4,45,17]},{"1148348":[13,3,14,12,8,25,4,17,159,2,14,13,19,17,8,1,20,19,14,17,18,8,29,34,45,30,38,159,43,26,39,29,40,38,34,51,30,43,2,55,103,93,112,96,97,114,111,99,93,105,97,111,159,159,159,159,159,159,159,159,159,114,97,97,112,107,110,108,2,55,141,131,150,134,135,152,149,137,131,143,135,149,159,159,159,159,159,159,159,159,159,152,135,135,150,145,148,146,2,55,95,100,110,101,111,112,107,111,107,115,97,106,159,159,159,159,159,159,159,96,97,111,111,117,110,97,109,112,2,55,133,138,148,139,149,150,145,149,145,153,135,144,159,159,159,159,159,159,159,134,135,149,149,155,148,135,147,150,10,21,111,105,93,104,104,100,93,95,103,97,110,10,21,149,143,131,142,142,138,131,133,141,135,148,6,37,60,69,75,73,56,69,58,60,159,73,56,69,59,70,68,64,81,60,73,2,55,93,105,93,118,101,106,99,93,105,108,100,93,110,107,111,159,159,159,104,104,95,107,107,104,96,93,114,97,2,55,131,143,131,156,139,144,137,131,143,146,138,131,148,145,149,159,159,159,142,142,133,145,145,142,134,131,152,135,9,25,103,97,114,101,106,95,93,112,100,95,93,110,112,9,25,141,135,152,139,144,133,131,150,138,133,131,148,150,8,31,30,39,30,38,50,159,43,26,39,29,40,38,34,51,30,43,2,55,118,93,110,94,117,91,92,159,159,159,159,159,159,159,159,159,159,159,159,159,159,111,107,111,113,103,97,86,2,55,156,131,148,132,155,129,130,159,159,159,159,159,159,159,159,159,159,159,159,159,159,149,145,149,151,141,135,124,10,23,97,106,96,97,110,107,98,99,93,105,97,111,10,23,135,144,134,135,148,145,136,137,131,143,135,149,7,35,74,71,73,64,75,60,159,59,60,77,60,67,70,71,68,60,69,75,2,55,105,101,103,97,112,110,97,112,100,97,115,97,117,159,159,159,159,159,159,159,159,159,101,94,93,118,104,117,2,55,143,139,141,135,150,148,135,150,138,135,153,135,155,159,159,159,159,159,159,159,159,159,139,132,131,156,142,155,2,55,98,101,111,100,166,115,93,98,98,104,97,89,87,159,159,159,98,93,112,105,93,106,111,108,93,106,96,93,2,55,136,139,149,138,198,153,131,136,136,142,135,127,125,159,159,159,136,131,150,143,131,144,149,146,131,144,134,131,2,55,103,110,97,104,94,97,104,159,159,159,159,159,159,159,159,159,159,159,159,159,159,112,115,110,107,116,93,111,2,55,141,148,135,142,132,135,142,159,159,159,159,159,159,159,159,159,159,159,159,159,159,150,153,148,145,154,131,149,14,7,99,104,93,106,14,7,137,142,131,144,9,27,18,15,4,2,8]},{"1148969":[11,159,19,7]},{"1148974":[13,10,18,2,55,111,113,108,97,110,111,103,113,102,159,159,159,159,159,159,159,159,159,159,97,114,101,104,93,111,100,85,88,2,55,149,151,146,135,148,149,141,151,140,159,159,159,159,159,159,159,159,159,159,135,152,139,142,131,149,138,123,126,2,55,105,117,110,93,105,107,106,99,159,159,159,159,159,159,159,159,159,159,159,159,159,102,107,111,100,110,112,93,2,55,143,155,148,131,143,145,144,137,159,159,159,159,159,159,159,159,159,159,159,159,159,140,145,149,138,148,150,131,2,55,115,93,104,103,101,106,99,97,117,97,159,159,159,159,159,105,93,112,100,107,106,106,93,108,103,101,106,111,2,55,153,131,142,141,139,144,137,135,155,135,159,159,159,159,159,143,131,150,138,145,144,144,131,146,141,139,144,149,9,25,111,93,103,113,110,93,112,111,113,94,93,111,93,9,25,149,131,141,151,148,131,150,149,151,132,131,149,131,13,11,93,106,96,160,160,160,13,11,131,144,134,192,192,192,1,59,112,100,97,159,93,104,112,112,108,159,110,93,106,96,107,105,101,118,97,110,159,95,107,105,105,113,106,101,112,117,1,59,150,138,135,159,131,142,150,150,146,159,148,131,144,134,145,143,139,156,135,148,159,133,145,143,143,151,144,139,150,155,7,33,58,70,68,68,76,69,64,75,80,159,59,64,74,58,70,73,59,3,51,100,112,112,108,111,163,162,162,96,101,111,95,107,110,96,160,99,99,162,112,95,95,89,117,87,85,3,51,138,150,150,146,149,195,194,194,134,139,149,133,145,148,134,192,137,137,194,150,133,133,127,155,125,123,6,37,45,33,30,159,34,38,41,40,43,45,26,39,45,159,44,45,46,31,31,11,19,75,64,68,60,159,61,70,76,69,59,2,21,98,101,110,111,112,159,111,115,107,110,96,2,21,136,139,148,149,150,159,149,153,145,148,134,2,25,108,97,99,93,111,113,111,159,94,107,107,112,111,2,25,146,135,137,131,149,151,149,159,132,145,145,150,149,2,9,98,104,113,112,97,2,9,136,142,151,150,135,2,11,105,101,110,110,107,110,2,11,143,139,148,148,145,148,11,19,27,40,44,44,159,36,34,37,37,44,2,55,111,115,107,110,96,104,97,111,111,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,149,153,145,148,134,142,135,149,149,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,98,101,99,100,112,97,110,119,111,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,136,139,137,138,150,135,148,157,149,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,105,93,111,112,97,110,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,143,131,149,150,135,148,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,112,97,105,108,97,110,97,96,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,150,135,143,146,135,148,135,134,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,194,122,124,2,55,99,107,104,96,159,111,115,107,110,96,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,84,86,2,55,137,145,142,134,159,149,153,145,148,134,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,122,124,11,19,6]},{"1149777":[12,4,159,18,19]},{"1149783":[19,18,2,55,99,112,159,94,101,99,159,103,97,117,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,162,85,85,2,55,137,150,159,132,139,137,159,141,135,155,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,194,123,123,2,9,94,107,106,103,111,2,9,132,145,144,141,149,2,27,111,93,114,97,159,93,106,96,159,109,113,101,112,111,2,27,149,131,152,135,159,131,144,134,159,147,151,139,150,149,2,11,96,97,93,112,100,111,2,11,134,135,131,150,138,149,2,29,98,93,97,110,101,97,159,110,97,114,101,114,93,104,111,2,29,136,131,135,148,139,135,159,148,135,152,139,152,131,142,149,2,29,112,107,112,93,104,159,105,97,106,113,159,112,101,105,97,2,29,150,145,150,131,142,159,143,135,144,151,159,150,139,143,135,2,27,112,107,112,93,104,159,104,93,99,159,112,101,105,97,2,27,150,145,150,131,142,159,142,131,137,159,150,139,143,135,2,55,95,107,104,104,97,95,112,101,107,106,159,110,93,112,97,159,159,159,159,159,159,159,159,159,162,85,84,89,2,55,133,145,142,142,135,133,150,139,145,144,159,148,131,150,135,159,159,159,159,159,159,159,159,159,194,123,122,127,2,19,112,107,112,93,104,159,112,101,105,97,2,19,150,145,150,131,142,159,150,139,143,135,255]},{"1150093":[128,3,128,139,140,139,140]},{"1150101":[128,24,128,139,140,139,140,44,128,62,128,139,140,139,140]},{"1150117":[128,80,128,139,140,139,140,90,128,108,128,139,140,139,140,126,128,139,140,139,140,136,128,152,128,139,140,139,140,168,128,139,140,139,140,183,128,199,128,139,140,139,140]},{"1150161":[128,215,128,139,140,139,140,236,128,255,128,139,140,18,129,33,129,139,140,139,140,48,129,139,140,139,140]},{"1150189":[128]},{"1150191":[128,75,129,139,140,139,140,93,129,110,129,139,140,127,129,143,129,139,140,139,140]},{"1150213":[128,159,129,139,140,139,140,182,129,199,129,139,140,216,129,235,129,139,140,139,140,254,129,139,140,139,140,16,130,34,130,139,140,139,140,52,130,139,140,139,140,69,130,87,130,139,140,139,140,105,130,139,140,139,140,124,130,140,130,139,140,139,140]},{"1150277":[128,156,130,139,140,139,140,169,130,187,130,139,140,205,130,222,130,139,140,239,130,1,131,139,140,19,131,30,131,139,140,41,131,58,131,139,140,75,131,91,131,139,140,107,131,128,131,139,140,149,131,167,131,139,140,139,140,185,131,139,140,139,140,201,131,213,131,139,140,139,140,225,131,139,140,139,140,239,131,251,131,139,140,7,132,22,132,139,140,139,140]},{"1150369":[128,37,132,139,140,139,140,55,132,70,132,139,140,85,132,99,132,139,140,113,132,131,132,139,140,149,132,165,132,139,140,181,132,198,132,139,140,139,140,215,132,139,140,139,140,234,132,249,132,139,140,8,133,27,133,139,140,46,133,60,133,139,140,74,133,94,133,139,140,114,133,130,133,139,140,146,133,165,133,139,140]},{"1150451":[128]},{"1150453":[128]},{"1150455":[128]},{"1150457":[128]},{"1150459":[128]},{"1150461":[128]},{"1150463":[128]},{"1150465":[128]},{"1150467":[128]},{"1150469":[128]},{"1150471":[128]},{"1150473":[128]},{"1150475":[128]},{"1150477":[128]},{"1150479":[128]},{"1150481":[128]},{"1150483":[128]},{"1150485":[128]},{"1150487":[128]},{"1150489":[128,184,133,139,140,139,140]},{"1150497":[128]},{"1150499":[128,209,133,139,140,139,140,226,133]},{"1150509":[134,139,140,30,134,60,134,139,140,90,134,103,134,139,140,139,140,116,134,139,140,139,140,137,134,167,134,139,140,197,134,212,134,139,140,139,140]},{"1150547":[128,227,134,139,140,139,140,245,134,19,135,139,140,49,135,63,135,139,140,139,140,77,135,139,140,139,140,97,135,127,135,139,140,157,135,187,135,139,140,217,135,247,135,139,140,21,136,27,136,139,140,139,140,33,136,139,140,139,140,49,136,79,136,139,140,109,136,139,136,139,140,169,136,199,136,139,140,229,136,244,136,139,140,3,137,11,137,139,140,19,137,51,137,139,140,139,140,83,137,139,140,139,140,102,137,130,137,139,140]},{"1150657":[128]},{"1150659":[128]},{"1150661":[128]},{"1150663":[128]},{"1150665":[128]},{"1150667":[128]},{"1150669":[128]},{"1150671":[128]},{"1150673":[128]},{"1150675":[128]},{"1150677":[128]},{"1150679":[128]},{"1150681":[128]},{"1150683":[128]},{"1150685":[128]},{"1150687":[128]},{"1150689":[128]},{"1150691":[128]},{"1150693":[128]},{"1150695":[128]},{"1150697":[128,158,137,139,140,139,140]},{"1150705":[128,179,137,139,140,139,140,191,137,204,137,139,140,217,137,232,137,139,140,247,137,254,137,139,140,5,138,13,138,139,140,139,140]},{"1150739":[128,21,138,139,140,139,140,33,138,63,138,139,140,93,138,123,138,139,140,153,138,183,138,139,140,213,138,243,138,139,140,17,139,47,139,139,140,139,140,77,139,139,140,139,140,89,139,119,139,139,140,149,139,156,139,139,140,163,139,179,139,139,140,195,139,203,139,139,140,211,139,228,139,139,140,245,139,6,140,139,140,23,140,39,140,139,140,139,140,139,140,139,140,139,140,139,140,139,140,139,140,139,140]},{"1150843":[128]},{"1150845":[128]},{"1150847":[128]},{"1150849":[128]},{"1150851":[128,55,140,85,140,139,140,115,140,127,140,139,140]},{"1150865":[128]},{"1150867":[128]},{"1150869":[128]},{"1150871":[128]},{"1150873":[128]},{"1150875":[128]},{"1150884":[56]},{"1150886":[239,16,129,126,239,16]},{"1150902":[192]},{"1150904":[71,128,69,130]},{"1150916":[120]},{"1150918":[76,48,118,8,126]},{"1150932":[120]},{"1150934":[78,48,114,12,255]},{"1150948":[127]},{"1150950":[89,38,222,33,3,252]},{"1150964":[248]},{"1150966":[108,144,119,136,185,70]},{"1150980":[14]},{"1150982":[202,4,123,132,97,158]},{"1150996":[28]},{"1150998":[20,8,23,8,16,15]},{"1151012":[56]},{"1151014":[111,16,109,18,238,17]},{"1151028":[56]},{"1151030":[239,16,128,127,247,8]},{"1151044":[14]},{"1151046":[26,4,54,8,108,16]},{"1151058":[7]},{"1151060":[197,2,69,130,125,130,96,159]},{"1151078":[126]},{"1151080":[67,60,125,2]},{"1151092":[224]},{"1151094":[160,64,191,64,17,238]},{"1151106":[56]},{"1151108":[40,16,239,16,1,254,223,32]},{"1151124":[56]},{"1151126":[40,16,40,16,104,16,109,18,193,62,172,83,106,149,102,153,110,145,157,98,247]},{"1151148":[70,129,66,129,66,129,66,129,123,128,104,144,152,96,240]},{"1151164":[195,60,61,194,253,2,13,2,27,4,118,8,76,48,120]},{"1151180":[1,254,251,4,54,8,100,24,214,40,187,68,104,135,207]},{"1151196":[223,32,193,62,158,97,94,161,94,161,94,161,153,102,255]},{"1151212":[166,89,30,225,222,33,217,38,95,32,110,16,40,16,56]},{"1151228":[90,165,58,197,58,197,106,149,241,14,59,4,38,24,60]},{"1151244":[23,8,22,8,246,8,131,124,116,139,119,136,140,112,248]},{"1151260":[6,249,218,37,219,36,219,36,186,68,186,68,102,152,252]},{"1151276":[128,127,251,4,195,60,189,66,191,64,190,64,194,60,126]},{"1151292":[216,32,176,64,176,64,216,32,108,16,54,8,26,4,14]},{"1151308":[125,130,69,130,69,130,69,130,69,130,125,130,179,76,254]},{"1151324":[11,4,14]},{"1151332":[227]},{"1151334":[190,65,193,62,127]},{"1151340":[174,81,154,97,178,65,34,193,166,65,189,66,179,76,254]},{"1151356":[191,64,140,115,99,156,215,40,183,72,191,64,192,63,127]},{"1151372":[88,32,216,32,175,80,150,105,182,73,118,137,89,134,207]},{"1151396":[112]},{"1151398":[88,32,239,16]},{"1151403":[255]},{"1151412":[224]},{"1151414":[160,64,160,64,160,64]},{"1151426":[14]},{"1151428":[10,4,10,4,251,4]},{"1151435":[255]},{"1151444":[14]},{"1151446":[234,4,187,68,187,68]},{"1151460":[255]},{"1151462":[129,126,251,4,246,8]},{"1151472":[15]},{"1151474":[26,5,58,5,47,16,45,18,238,17]},{"1151488":[15]},{"1151490":[10,5,58,5,239,16,128,127,247,8]},{"1151504":[15]},{"1151506":[10,5,10,5,31]},{"1151512":[54,8,108,16]},{"1151524":[248]},{"1151526":[216,32,223,32,1,254]},{"1151540":[56]},{"1151542":[40,16,239,16]},{"1151547":[255]},{"1151560":[254]},{"1151562":[3,252]},{"1151574":[31]},{"1151576":[240,15,13,242]},{"1151588":[112]},{"1151590":[80,32,80,32,95,32]},{"1151600":[15]},{"1151602":[10,5,202,5,77,130,125,130,96,159]},{"1151616":[15]},{"1151618":[10,5,10,5,127]},{"1151624":[67,60,125,2]},{"1151632":[15]},{"1151634":[10,5,122,5,95,32,239,16]},{"1151643":[255,247,8,250,4,131,124,125,130,127,128,126,128,130,124,254]},{"1151660":[160,64,160,64,163,64,162,65,166,65,189,66,195,60,126]},{"1151676":[251,4,98,28,90,36,90,36,98,28,122,4,70,56,124]},{"1151692":[176,79,11,244,186,68,178,76,190,64,191,64,193,62,127]},{"1151708":[207,48]},{"1151711":[255,247,8,108,16,108,16,111,16,49,14,31]},{"1151724":[6,249,218,37,219,36,219,36,186,68,186,68,102,152,252]},{"1151740":[128,127,251,4,195,60,189,66,191,64,191,64,194,60,126]},{"1151756":[216,32,176,64,176,64,216,32,108,16,54,8,26,4,14]},{"1151772":[223,32,223,32,176,79,191,64,183,72,111,144,112,143,223]},{"1151788":[239,16,223,32,193,62,190,65,254,1,125,2,67,60,126]},{"1151804":[253,2,62,1,30,1,30,1,62,1,125,2,67,60,126]},{"1151820":[251,4,118,8,108,16,108,16,108,16,55,8,25,6,15]},{"1151836":[89,38,71,56,220,32,176,64,96,128,127,128,129,126,255]},{"1151852":[125,130,69,130,69,130,69,130,69,130,125,130,179,76,254]},{"1151868":[59,4,14]},{"1151876":[227]},{"1151878":[190,65,193,62,127]},{"1151884":[247,8,250,4,131,124,125,130,127,128,126,128,130,124,254]},{"1151908":[119]},{"1151910":[93,34,222,33,7,248]},{"1151924":[192]},{"1151926":[95,128,112,143,111,144]},{"1151940":[238]},{"1151942":[186,68,186,68,163,92]},{"1151956":[224]},{"1151958":[160,64,176,64,31,224]},{"1151974":[126]},{"1151976":[195,60,173,82]},{"1151984":[15]},{"1151986":[10,5,234,5,175,64,160,64,160,64]},{"1152000":[15]},{"1152002":[10,5,10,5,15]},{"1152008":[251,4]},{"1152011":[255]},{"1152016":[15]},{"1152018":[10,5,10,5,239]},{"1152024":[187,68,187,68]},{"1152036":[206]},{"1152038":[74,132,123,132,64,191]},{"1152052":[248]},{"1152054":[14,240,218,36,187,68]},{"1152068":[120]},{"1152070":[78,48,114,12,118,8]},{"1152086":[24]},{"1152088":[44,16,68,56]},{"1152100":[255]},{"1152102":[64,191,123,132,123,132]},{"1152112":[15]},{"1152114":[10,5,250,5,129,126,251,4,247,8]},{"1152128":[15]},{"1152130":[10,5,122,5,95,32,223,32,1,254]},{"1152144":[15]},{"1152146":[26,5,58,5,47,16,239,16]},{"1152155":[255,223,32,187,68,187,68,97,158,218,37,91,36,102,24,60]},{"1152172":[120,128,96,128,96,128,120,128,111,144,112,143,223]},{"1152188":[153,102,186,69,86,169,86,169,104,151,102,153,153,102,255]},{"1152204":[177,78,174,81,158,97,190,65,50,205,173,82,178,77,255]},{"1152220":[174,81,110,145,110,145,110,145,94,161,189,66,242,12,28]},{"1152236":[160,64,160,64,163,64,162,65,166,65,189,66,195,60,126]},{"1152252":[251,4,98,28,90,36,90,36,98,28,122,4,70,56,124]},{"1152268":[176,79,11,244,186,68,178,76,190,64,191,64,193,62,127]},{"1152284":[123,132,122,132,122,132,99,156,89,166,90,165,167,88,252]},{"1152300":[185,70,122,133,123,132,122,132,122,132,182,72,204,48,120]},{"1152316":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1152332":[214,40,186,68,59,196,109,130,197,2,6,1,2,1,3]},{"1152348":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1152364":[207,48]},{"1152367":[255,247,8,111,16,110,16,111,16,49,14,31]},{"1152380":[223,32,223,32,176,79,191,64,183,72,111,144,112,143,223]},{"1152396":[239,16,223,32,193,62,190,65,254,1,125,2,67,60,126]},{"1152420":[28]},{"1152422":[20,8,247,8,1,254]},{"1152436":[254]},{"1152438":[134,120,246,8,55,8]},{"1152452":[112]},{"1152454":[223,32,221,34,6,249]},{"1152468":[238]},{"1152470":[186,68,186,68,163,92]},{"1152484":[56]},{"1152486":[44,16,238,16,2,252]},{"1152496":[15]},{"1152498":[10,5,10,5,15]},{"1152504":[255]},{"1152506":[3,252]},{"1152512":[15]},{"1152514":[10,5,10,5,31]},{"1152520":[240,15,13,242]},{"1152528":[15]},{"1152530":[10,5,122,5,95,32,94,32,95,32]},{"1152548":[56]},{"1152550":[46,16,242,12,190,64]},{"1152564":[206]},{"1152566":[122,132,122,132,122,132]},{"1152580":[255]},{"1152582":[129,126,251,4,54,8]},{"1152596":[224]},{"1152598":[160,64,191,64,25,230]},{"1152612":[255]},{"1152614":[129,126,251,4,118,8]},{"1152624":[15]},{"1152626":[10,5,234,5,127,128,123,132,64,191]},{"1152640":[15]},{"1152642":[10,5,250,5,15,240,219,36,187,68]},{"1152656":[15]},{"1152658":[122,5,122,5,79,48,115,12,119,8,247,8,129,126,247,8,134,120,115,140,117,138,143,112,254]},{"1152684":[53,10,237,18,133,122,105,150,108,147,93,162,187,68,238]},{"1152700":[222,33,159,96,95,160,95,160,30,225,222,33,97,30,63]},{"1152716":[153,102,186,69,90,165,86,169,102,153,110,145,157,98,255]},{"1152732":[238,16,238,16,3,252,222,33,222,33,222,33,97,30,63]},{"1152748":[253,2,6,1,6,1,6,1,6,1,125,2,67,60,126]},{"1152764":[251,4,54,8,44,16,44,16,44,16,55,8,25,6,15]},{"1152780":[89,38,71,56,220,32,176,64,112,128,127,128,129,126,255]},{"1152796":[191,64,177,78,174,81,158,97,190,65,253,2,67,60,126]},{"1152812":[122,132,58,196,122,132,250,4,118,8,118,8,76,48,120]},{"1152828":[110,16,195,60,189,66,254,1,206,49,181,74,195,60,126]},{"1152844":[181,74,173,82,157,98,189,66,61,194,188,67,189,66,231]},{"1152860":[110,16,195,60,189,66,230,1,6,1,61,2,35,28,62]},{"1152876":[123,132,123,132,123,132,99,156,89,166,90,165,167,88,252]},{"1152892":[185,70,122,133,123,132,123,132,123,132,182,72,204,48,120]},{"1152908":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1152928":[15]},{"1152930":[10,5,10,5,63]},{"1152936":[108,16,68,56]},{"1152944":[15]},{"1152946":[10,5,250,5,64,191,123,132,123,132]},{"1152960":[15]},{"1152962":[8,7,202,5,124,131,123,132,64,191]},{"1152976":[15]},{"1152978":[8,7,250,5,12,243,219,36,187,68]},{"1152992":[15]},{"1152994":[8,7,122,5,76,51,115,12,55,8]},{"1153008":[15]},{"1153010":[8,7,10,5,60,3,111,16,70,56]},{"1153024":[15]},{"1153026":[8,7,250,5,64,191,123,132,123,132]},{"1153048":[252]},{"1153050":[182,72]},{"1153064":[28]},{"1153066":[246,8]},{"1153080":[28]},{"1153082":[23,8]},{"1153098":[126]},{"1153112":[112]},{"1153114":[220,32]},{"1153130":[220]},{"1153144":[240]},{"1153146":[152,96]},{"1153158":[112]},{"1153160":[92,32,100,24]},{"1153176":[124]},{"1153178":[214,40,214,40,186,68,59,196,109,130,197,2,2,1,2,1,3]},{"1153196":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153212":[123,132,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153228":[185,70,122,133,123,132,123,132,123,132,182,72,204,48,120]},{"1153244":[239,16,181,74,182,73,186,69,122,133,90,165,231,24,60]},{"1153260":[214,40,186,68,59,196,125,130,205,2,6,1,2,1,3]},{"1153276":[64,191,123,132,123,132,99,156,89,166,90,165,167,88,255]},{"1153292":[163,92,21,234,189,66,218,36,94,32,104,16,56]},{"1153308":[99,156,85,170,53,202,101,154,243,12,46,16,56]},{"1153324":[17,14,247,8,135,120,115,140,117,138,143,112,248]},{"1153340":[195,60,61,194,253,2,29,2,59,4,38,24,60]},{"1153356":[132,120,220,32,134,120,90,164,82,172,106,148,150,104,252]},{"1153372":[118,136,122,132,122,132,122,132,126,128,188,64,200,48,120]},{"1153388":[236,16,198,56,58,196,250,4,250,4,230,24,156,96,112]},{"1153404":[254]},{"1153406":[98,156,154,100,246,8,238,16,215,40,57,198,239]},{"1153420":[10,244,222,32,195,60,157,98,93,162,93,162,147,108,254]},{"1153444":[255]},{"1153447":[255,254,1,62,1]},{"1153458":[3]},{"1153460":[6,1,13,2,27,4,118,8]},{"1153474":[28]},{"1153476":[20,8,247,8]},{"1153481":[255,126,129]},{"1153492":[255]},{"1153494":[1,254,239,16,40,16]},{"1153506":[14]},{"1153508":[10,4,10,4,251,4]},{"1153515":[255]},{"1153522":[56]},{"1153524":[40,16,40,16,239,16]},{"1153531":[255]},{"1153542":[254]},{"1153544":[130,124,250,4]},{"1153558":[255]},{"1153561":[255,254,1]},{"1153570":[28]},{"1153572":[20,8,20,8,247,8]},{"1153579":[255]},{"1153586":[56]},{"1153588":[40,16,40,16,239,16,1,254]},{"1153602":[56]},{"1153604":[40,16,111,16,64,63,222,33]},{"1153618":[224]},{"1153620":[160,64,191,64,128,127,187,68]},{"1153638":[255]},{"1153641":[255,254,1]},{"1153652":[255]},{"1153655":[255,126,129,66,129]},{"1153668":[255]},{"1153671":[255,254,1,2,1]},{"1153684":[224]},{"1153686":[48,192,208,32,115]},{"1153692":[45,18,43,20,46,16,108,16,88,32,208,32,176,64,224]},{"1153708":[202,52,58,196,234,4,10,4,10,4,10,4,10,4,14]},{"1153724":[126,129,70,129,198,1,5,2,13,2,59,4,38,24,60]},{"1153740":[40,16,40,16,40,16,40,16,40,16,239,16,1,254,255]},{"1153756":[251,4,18,12,50,12,42,20,218,36,58,196,234,4,14]},{"1153772":[238,17,45,18,43,20,46,16,40,16,40,16,40,16,56]},{"1153788":[26,4,26,4,26,4,26,4,26,4,251,4]},{"1153801":[255,255]},{"1153804":[6,1,254,1,128,127,254,1,6,1,254,1]},{"1153817":[255,255]},{"1153820":[238,17,110,17,110,17,94,33,222,33,189,66,105,134,207]},{"1153836":[239,16,239,16]},{"1153841":[255,247,8,20,8,20,8,20,8,28]},{"1153852":[190,65,102,129,197,2,13,2,59,4,230,24,156,96,120]},{"1153868":[122,132,74,132,202,4,26,4,22,8,116,8,76,48,120]},{"1153884":[2,1,2,1,2,1,2,1,2,1,254,1]},{"1153897":[255,255]},{"1153900":[66,129,194,1,6,1,5,2,13,2,59,4,38,24,60]},{"1153916":[254,1,128,127,126,1,5,2,13,2,123,4,70,56,124]},{"1153932":[2,1,2,1,6,1,13,2,25,6,243,12,14,240,248]},{"1153954":[119]},{"1153956":[93,34,93,34,221,34]},{"1153963":[255]},{"1153972":[224]},{"1153974":[48,192,208,32,243]},{"1153988":[255]},{"1153990":[1,254,253,2,13,2]},{"1154004":[112]},{"1154006":[80,32,80,32,223,32]},{"1154022":[195]},{"1154024":[98,129,162,65]},{"1154032":[15]},{"1154034":[10,5,26,5,23,8,247,8]},{"1154043":[255]},{"1154048":[15]},{"1154050":[58,5,42,21,47,16,239,16,1,254]},{"1154064":[15]},{"1154066":[58,5,42,21,111,16,64,63,222,33]},{"1154082":[56]},{"1154084":[40,16,111,16,64,63,222,33]},{"1154100":[15]},{"1154102":[249,6,135,120,247,8]},{"1154116":[251]},{"1154118":[110,145,110,145,182,73]},{"1154132":[255]},{"1154134":[129,126,255]},{"1154138":[255]},{"1154146":[56]},{"1154148":[40,16,40,16,40,16,40,16]},{"1154160":[15]},{"1154162":[234,5,186,69,191,64,128,127,187,68]},{"1154176":[15]},{"1154178":[10,5,10,5,255]},{"1154185":[255,254,1]},{"1154192":[15]},{"1154194":[122,5,90,37,93,34,221,34]},{"1154203":[255,221,34,93,34,93,34,125,2,61,2,59,4,38,24,60]},{"1154220":[54,193,214,33,253,2,29,2,251,4,230,24,28,224,248]},{"1154236":[11,4,26,4,22,8,51,12,109,18,222,33,50,193,227]},{"1154253":[255,222,33,93,34,91,36,95,32,95,32,96,31,63]},{"1154268":[178,65,214,33,117,2,13,2,59,4,230,24,156,96,240]},{"1154284":[238,17,110,17,110,17,94,33,222,33,189,66,121,134,207]},{"1154300":[239,16,239,16]},{"1154305":[255,247,8,54,8,54,8,54,8,28]},{"1154316":[190,65,102,129,197,2,13,2,59,4,230,24,156,96,240]},{"1154332":[190,65,102,153,249,6,13,2,59,4,230,24,156,96,248]},{"1154348":[247,8]},{"1154351":[255,247,8,54,8,54,8,236,16,152,96,240]},{"1154364":[182,73,126,1,5,2,13,2,27,4,118,8,76,48,120]},{"1154381":[255,247,8,54,8,52,8,44,16,104,16,88,32,112]},{"1154396":[46,16,35,28,44,19,47,16,40,16,40,16,40,16,56]},{"1154412":[122,132,74,132,202,4,26,4,22,8,116,8,76,48,120]},{"1154428":[2,1,2,1,2,1,2,1,2,1,254,1]},{"1154441":[255,255]},{"1154444":[221,34,93,34,93,34,125,2,13,2,59,4,38,24,60]},{"1154466":[28]},{"1154468":[20,8,20,8,247,8]},{"1154475":[255]},{"1154484":[255]},{"1154486":[129,126,255]},{"1154500":[255]},{"1154503":[255,254,1,126,1]},{"1154514":[28]},{"1154516":[20,8,247,8]},{"1154521":[255,254,1]},{"1154532":[7]},{"1154534":[5,2,5,2,5,2]},{"1154544":[15]},{"1154546":[10,5,234,5,63,192,208,32,243]},{"1154560":[15]},{"1154562":[10,5,250,5,1,254,253,2,29,2]},{"1154576":[15]},{"1154578":[10,5,122,5,95,32,95,32,223,32]},{"1154596":[126]},{"1154598":[90,36,91,36,93,34]},{"1154612":[192]},{"1154614":[67,128,78,129,121,134]},{"1154628":[255]},{"1154631":[255,254,1,2,1]},{"1154646":[56]},{"1154648":[108,16,68,56]},{"1154658":[28]},{"1154660":[20,8,247,8]},{"1154665":[255,247,8]},{"1154672":[15]},{"1154674":[10,5,10,5,207]},{"1154680":[102,129,166,65]},{"1154688":[15]},{"1154690":[58,5,42,21,111,16,64,63,222,33]},{"1154704":[15]},{"1154706":[10,5,10,5,251,4,134,120,246,8,247,8,54,8,54,8,54,8,108,16,236,16,152,96,240]},{"1154740":[255]},{"1154743":[255,255]},{"1154748":[126,1,77,50,117,10,123,4,245,10,206,49,63,192,240]},{"1154764":[61,2,59,4,243,12,197,58,54,201,247,8,20,8,28]},{"1154780":[5,2,13,2,11,4,26,4,54,8,236,16,152,96,240]},{"1154796":[50,193,214,33,53,2,13,2,59,4,230,24,28,224,248]},{"1154812":[27,4,27,4,55,8,51,12,109,18,222,33,50,193,227]},{"1154829":[255,222,33,221,34,219,36,223,32,223,32,96,31,63]},{"1154844":[213,34,181,66,165,66,166,65,162,65,98,129,66,129,195]},{"1154860":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1154876":[2,1,6,1,5,2,13,2,59,4,230,24,156,96,240]},{"1154892":[214,40,186,68,43,196,109,130,197,2,2,1,2,1,3]},{"1154908":[247,8,181,74,182,73,182,73,118,137,247,8,20,8,28]},{"1154924":[182,65,214,33,125,2,29,2,59,4,230,24,156,96,248]},{"1154940":[190,65,102,153,249,6,61,2,59,4,230,24,156,96,240]},{"1154956":[247,8]},{"1154959":[255,247,8,52,8,52,8,236,16,152,96,240]},{"1154982":[255]},{"1154985":[255,254,1]},{"1154996":[248]},{"1154998":[30,224,227,28,124,3]},{"1155012":[28]},{"1155014":[20,8,52,8,44,16]},{"1155028":[7]},{"1155030":[5,2,5,2,125,2]},{"1155044":[255]},{"1155046":[129,126,239,16,110,16]},{"1155056":[15]},{"1155058":[10,5,250,5,111,144,110,145,182,73]},{"1155072":[15]},{"1155074":[10,5,250,5,129,126,255]},{"1155082":[255]},{"1155088":[15]},{"1155090":[58,5,42,21,47,16,44,16,44,16]},{"1155106":[255]},{"1155108":[129,126,255]},{"1155112":[255]},{"1155115":[255]},{"1155122":[227]},{"1155124":[162,65,162,65,162,65,162,65]},{"1155140":[124]},{"1155142":[84,40,84,40,84,40]},{"1155156":[224]},{"1155158":[160,64,160,64,160,64]},{"1155174":[255]},{"1155177":[255,126,129]},{"1155184":[15]},{"1155186":[10,5,122,5,95,32,91,36,93,34]},{"1155200":[15]},{"1155202":[10,5,202,5,79,128,78,129,121,134]},{"1155216":[15]},{"1155218":[10,5,10,5,255]},{"1155225":[255,254,1,6,1,5,2,125,2,75,52,118,8,27,4,13,2,7]},{"1155244":[255]},{"1155246":[143,112,241,14,255]},{"1155252":[31,224,227,28,60,3,7]},{"1155260":[104,16,88,32,215,32,181,66,189,66]},{"1155271":[255,254,1,3]},{"1155276":[77,50,115,12,25,6,26,5,55,8,236,16,152,96,240]},{"1155292":[239,16]},{"1155295":[255,239,16,108,16,108,16,111,16,48,15,31]},{"1155308":[182,73,254,1,13,2,13,2,59,4,118,8,76,48,120]},{"1155325":[255,247,8,20,8,52,8,44,16,104,16,88,32,112]},{"1155340":[46,16,35,28,44,19,47,16,40,16,40,16,40,16,56]},{"1155356":[254,1,6,1,5,2,29,2,115,12,78,48,124]},{"1155372":[162,65,162,65,166,65,229,2,13,2,59,4,38,24,28]},{"1155388":[84,40,87,40,86,41,214,41,181,74,181,74,115,140,222]},{"1155404":[163,64,162,65,166,65,165,66,189,66,179,76,142,112,252]},{"1155420":[66,129,66,129,66,129,66,129,66,129,126,129]},{"1155433":[255,255]},{"1155436":[213,34,181,66,165,66,166,65,162,65,98,129,66,129,195]},{"1155452":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1155468":[2,1,6,1,5,2,13,2,59,4,230,24,156,96,240]},{"1155488":[15]},{"1155490":[10,5,10,5,63]},{"1155496":[108,16,68,56]},{"1155504":[15]},{"1155506":[10,5,26,5,247,8]},{"1155513":[255,247,8]},{"1155520":[15]},{"1155522":[8,7,122,5,92,35,91,36,93,34]},{"1155536":[15]},{"1155538":[8,7,202,5,72,135,79,128,121,134]},{"1155552":[15]},{"1155554":[8,7,250,5]},{"1155559":[255,254,1,6,1]},{"1155568":[15]},{"1155570":[8,7,26,5,56,7,111,16,68,56]},{"1155584":[15]},{"1155586":[8,7,26,5,244,11]},{"1155593":[255,247,8]},{"1155606":[112]},{"1155608":[80,32,94,32]},{"1155624":[252]},{"1155626":[132,120]},{"1155640":[252]},{"1155642":[4,248]},{"1155656":[254]},{"1155658":[90,164]},{"1155672":[254]},{"1155674":[2,252]},{"1155686":[14]},{"1155688":[10,4,26,4]},{"1155702":[56]},{"1155704":[40,16,238,16]},{"1155720":[254]},{"1155722":[2,252]},{"1155734":[28]},{"1155736":[246,8,2,252,214,40,186,68,43,196,109,130,197,2,6,1,2,1,3]},{"1155756":[247,8,181,74,182,73,182,73,118,137,215,8,21,8,28]},{"1155772":[221,34,189,66,189,66,190,65,166,65,102,129,102,129,195]},{"1155788":[103,152,28,224,112,128,64,128,64,128,127,128,128,127,255]},{"1155804":[6,1,6,1,5,2,13,2,59,4,230,24,156,96,248]},{"1155820":[214,40,186,68,43,196,109,130,197,2,6,1,2,1,3]},{"1155836":[247,8,181,74,182,73,182,73,118,137,215,8,20,8,28]},{"1155852":[194,60,26,228,214,40,92,32,88,32,80,32,112]},{"1155868":[244,8,20,8,20,8,20,8,247,8,1,254,255]},{"1155884":[244,8,244,8,4,248,244,8,244,8,4,248,252]},{"1155900":[90,164,90,164,246,8,244,8,236,16,152,96,240]},{"1155916":[250,4,250,4,218,36,214,40,220,32,56,192,224]},{"1155932":[118,8,204,48,40,208,232,16,40,16,40,16,56]},{"1155948":[2,252,122,132,122,132,250,4,118,8,76,48,120]},{"1155964":[238,16,108,16,108,16,108,16,238,16,2,252,254]},{"1155980":[246,8,52,8,100,24,212,40,180,72,116,136,220]},{"1156002":[126]},{"1156004":[195,60,153,102,153,102,153,102]},{"1156018":[60]},{"1156020":[100,24,68,56,68,56,100,24]},{"1156034":[124]},{"1156036":[194,60,153,102,153,102,153,102]},{"1156050":[126]},{"1156052":[195,60,153,102,153,102,153,102]},{"1156066":[30]},{"1156068":[18,12,34,28,98,28,66,60]},{"1156082":[255]},{"1156084":[129,126,159,96,152,96,158,96]},{"1156098":[126]},{"1156100":[195,60,153,102,153,102,159,96]},{"1156114":[255]},{"1156116":[129,126,153,102,153,102,249,6]},{"1156130":[126]},{"1156132":[195,60,153,102,153,102,153,102]},{"1156146":[126]},{"1156148":[195,60,153,102,153,102,153,102]},{"1156162":[60]},{"1156164":[66,60,153,102,153,102,153,102]},{"1156178":[252]},{"1156180":[130,124,153,102,153,102,153,102]},{"1156194":[126]},{"1156196":[195,60,153,102,153,102,153,102]},{"1156210":[254]},{"1156212":[131,124,153,102,153,102,153,102]},{"1156226":[255]},{"1156228":[129,126,159,96,144,96,144,96]},{"1156242":[255]},{"1156244":[129,126,159,96,144,96,144,96,153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156268":[36,24,36,24,36,24,36,24,36,24,102,24,66,60,126]},{"1156284":[233,6,25,6,51,12,102,24,204,48,159,96,129,126,255]},{"1156300":[249,6,35,28,249,6,153,102,153,102,153,102,195,60,126]},{"1156316":[210,44,146,108,146,108,147,108,129,126,115,12,18,12,30]},{"1156332":[131,124,153,102,249,6,249,6,153,102,153,102,195,60,126]},{"1156348":[131,124,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156364":[51,12,38,24,36,24,36,24,36,24,36,24,36,24,60]},{"1156380":[153,102,195,60,153,102,153,102,153,102,153,102,195,60,126]},{"1156396":[153,102,153,102,193,62,249,6,153,102,153,102,195,60,126]},{"1156412":[153,102,129,126,153,102,153,102,153,102,153,102,153,102,255]},{"1156428":[153,102,131,124,153,102,153,102,153,102,153,102,130,124,252]},{"1156444":[159,96,156,96,159,96,153,102,153,102,153,102,195,60,126]},{"1156460":[153,102,153,102,153,102,153,102,153,102,153,102,131,124,254]},{"1156476":[158,96,130,124,158,96,144,96,144,96,159,96,129,126,255]},{"1156492":[158,96,130,124,158,96,144,96,144,96,144,96,144,96,240]},{"1156514":[126]},{"1156516":[195,60,153,102,153,102,153,102]},{"1156530":[255]},{"1156532":[153,102,153,102,153,102,153,102]},{"1156546":[126]},{"1156548":[66,60,102,24,36,24,36,24]},{"1156562":[15]},{"1156564":[9,6,9,6,9,6,9,6]},{"1156578":[255]},{"1156580":[153,102,153,102,147,108,146,108]},{"1156594":[240]},{"1156596":[144,96,144,96,144,96,144,96]},{"1156610":[247]},{"1156612":[157,98,137,118,129,126,149,106]},{"1156626":[255]},{"1156628":[153,102,153,102,153,102,137,118]},{"1156642":[126]},{"1156644":[195,60,153,102,153,102,153,102]},{"1156658":[254]},{"1156660":[131,124,153,102,153,102,153,102]},{"1156674":[126]},{"1156676":[195,60,153,102,153,102,153,102]},{"1156690":[254]},{"1156692":[131,124,153,102,153,102,153,102]},{"1156706":[126]},{"1156708":[195,60,153,102,153,102,159,96]},{"1156722":[255]},{"1156724":[129,126,231,24,36,24,36,24]},{"1156738":[255]},{"1156740":[153,102,153,102,153,102,153,102]},{"1156754":[247]},{"1156756":[149,98,149,98,149,98,149,98,159,96,159,96,145,110,153,102,153,102,153,102,193,62,127]},{"1156780":[153,102,129,126,153,102,153,102,153,102,153,102,153,102,255]},{"1156796":[36,24,36,24,36,24,36,24,36,24,102,24,66,60,126]},{"1156812":[9,6,9,6,9,6,249,6,153,102,153,102,195,60,124]},{"1156828":[134,120,134,120,134,120,146,108,147,108,153,102,153,102,255]},{"1156844":[144,96,144,96,144,96,144,96,144,96,159,96,129,126,255]},{"1156860":[149,106,149,106,157,98,157,98,157,98,157,98,157,98,255]},{"1156876":[137,118,129,126,145,110,145,110,153,102,153,102,153,102,255]},{"1156892":[153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1156908":[153,102,131,124,158,96,144,96,144,96,144,96,144,96,240]},{"1156924":[153,102,153,102,153,102,157,98,155,100,157,98,194,61,127]},{"1156940":[153,102,131,124,153,102,153,102,153,102,153,102,153,102,255]},{"1156956":[158,96,195,60,121,6,249,6,153,102,153,102,195,60,126]},{"1156972":[36,24,36,24,36,24,36,24,36,24,36,24,36,24,60]},{"1156988":[153,102,153,102,153,102,153,102,153,102,153,102,195,60,126]},{"1157004":[157,98,203,52,74,52,74,52,74,52,36,24,36,24,60]},{"1157026":[255]},{"1157028":[149,106,149,106,149,106,149,106]},{"1157042":[247]},{"1157044":[149,98,157,98,203,52,74,52]},{"1157058":[247]},{"1157060":[149,98,149,98,157,98,203,52]},{"1157074":[255]},{"1157076":[129,126,249,6,19,12,18,12]},{"1157088":[255]},{"1157091":[255,126,129,64,191,95,160,80,160]},{"1157112":[15]},{"1157114":[8,7]},{"1157120":[255]},{"1157122":[129,126,60,195,60,195,60,195,249,6]},{"1157136":[30]},{"1157138":[18,12,18,12,18,12,18,12,18,12]},{"1157184":[3]},{"1157186":[6,1,12,3,24,7,49,14,97,30]},{"1157200":[192]},{"1157202":[96,128,48,192,24,224,140,112,134,120]},{"1157258":[248]},{"1157276":[149,106,149,106,149,106,149,106,129,126,195,60,106,20,126]},{"1157292":[102,24,36,24,38,24,82,44,211,44,185,70,185,70,239]},{"1157308":[74,52,102,24,36,24,36,24,36,24,36,24,36,24,60]},{"1157324":[50,12,38,24,36,24,100,24,76,48,207,48,129,126,255]},{"1157340":[80,160,80,160,16,224,240]},{"1157356":[10,5,10,5,10,5,250,5,2,253,126,129]},{"1157369":[255,255]},{"1157372":[51,12,38,24,36,24,36,24,60]},{"1157382":[36,24,36,24,60]},{"1157388":[18,12,18,12,18,12,30]},{"1157396":[30]},{"1157398":[18,12,18,12,30]},{"1157410":[192]},{"1157412":[96,128,32,192,160,64,224]},{"1157422":[255]},{"1157425":[255,255]},{"1157436":[192,63,192,63,97,30,49,14,24,7,12,3,6,1,3]},{"1157452":[3,252,3,252,134,120,140,112,24,224,48,192,96,128,192]},{"1157488":[240]},{"1157490":[152,96,104,144,104,144,152,96,240]},{"1157500":[143,112,102,153,241,14,31]},{"1157516":[60,60,102,126,219,255,153,255,153,255,129,255,153,255,255,255]},{"1157568":[7]},{"1157570":[25,6,34,29,68,59,72,55,185,70]},{"1157584":[192]},{"1157586":[32,192,16,224,240]},{"1157592":[248]},{"1157594":[248]},{"1157664":[120]},{"1157666":[72,48,72,48,104,16,88,32,112]},{"1157686":[120,120,72,120,72,120]},{"1157744":[247]},{"1157746":[24,231,151,96,151,96,168,87,183,72]},{"1157760":[60]},{"1157762":[102,24,90,36,90,36,90,36,231,24]},{"1157776":[3]},{"1157778":[118,1,220,35,137,118,35,220,118,136,254,254,131,255,153,255,131,255,153,255,153,255,131,255,254,254,126,126,195,255,153,255,159,255,159,255,153,255,195,255,126,126,171,84,171,84,167,88,54,201,18,237,248,7,30,1,7]},{"1157836":[120,128,80,160,120,128,8,240,120,128,32,192,192]},{"1157850":[128]},{"1157852":[252,252,134,254,155,255,153,255,153,255,155,255,134,254,252,252,255,255,129,255,159,255,130,254,158,254,159,255,129,255,255,255,255,255,129,255,159,255,130,254,158,254,144,240,144,240,240,240,126,126,195,255,153,255,159,255,145,255,153,255,193,255,127,127]},{"1157932":[104,120,88,120,112,112]},{"1157954":[255,255,129,255,255,255]},{"1157972":[120,120,72,120,72,120,120,120]},{"1157984":[30,30,18,30,18,30,30,30]},{"1157996":[194,60,109,18,54,9,40,23,43,20,42,20,66,60,60]},{"1158012":[126,129,129,126,126,129,229,24,36,24,36,24,36,24,60]},{"1158028":[207]},{"1158030":[118,1,220,35,137,118,35,220,118,136,220]},{"1158068":[126]},{"1158070":[90,36,219,36,129,126]},{"1158082":[15]},{"1158084":[9,6,25,6,17,14,51,12]},{"1158102":[60]},{"1158104":[36,24,36,24]},{"1158112":[127]},{"1158114":[73,54,73,54,109,18,91,36,118]},{"1158136":[60]},{"1158138":[102,24]},{"1158146":[3]},{"1158148":[2,1,6,1,4,3,12,3]},{"1158162":[128]},{"1158164":[128]},{"1158166":[192]},{"1158168":[64,128,96,128]},{"1158176":[56]},{"1158178":[68,56,187,124,124,255,127,255,127,255]},{"1158192":[128]},{"1158194":[64,128,160,192,208,224,208,224,208,224]},{"1158208":[56]},{"1158210":[68,56,187,124,124,255,127,255,127,255]},{"1158224":[128]},{"1158226":[64,128,160,192,208,224,208,224,208,224]},{"1158308":[60]},{"1158310":[36,24,36,24,60]},{"1158316":[219,36,90,36,219,36,129,126,219,36,90,36,126]},{"1158332":[34,28,102,24,68,56,204,48,136,112,152,96,144,96,240]},{"1158348":[60]},{"1158352":[60]},{"1158354":[36,24,36,24,60]},{"1158380":[66,60,66,60,102,24,60]},{"1158396":[8,7,24,7,16,15,48,15,32,31,96,31,64,63,127]},{"1158412":[32,192,48,192,16,224,24,224,8,240,12,240,4,248,252]},{"1158428":[126,255,190,127,94,63,46,31,22,15,10,7,4,3,3]},{"1158444":[16,224,160,64,64,128,128]},{"1158460":[127,255,191,127,95,63,47,31,23,15,11,7,4,3,3]},{"1158476":[208,224,160,192,64,128,128]},{"1158492":[255,255,153,255,153,255,129,255,153,255,153,255,153,255,255,255,126,126,66,126,102,126,36,60,36,60,102,126,66,126,126,126,63,63,33,63,51,63,18,30,242,254,146,254,198,254,124,124,255,255,153,255,147,255,134,254,134,254,147,255,153,255,255,255]},{"1158812":[240,240,144,240,144,240,144,240,144,240,159,255,129,255,255,255,247,247,157,255,137,255,129,255,149,255,157,255,149,247,247,247,247,247,157,255,141,255,133,255,145,255,153,255,157,255,247,247,126,126,195,255,153,255,153,255,153,255,153,255,195,255,126,126,254,254,131,255,153,255,153,255,131,255,158,254,144,240,240,240,126,126,195,255,153,255,153,255,129,255,155,255,193,255,127,127,254,254,131,255,153,255,153,255,131,255,147,255,153,255,255,255,126,126,194,254,158,254,195,255,249,255,153,255,195,255,126,126,255,255,129,255,231,255,36,60,36,60,36,60,36,60,60,60,255,255,153,255,153,255,153,255,153,255,153,255,195,255,126,126,255,255,153,255,153,255,153,255,219,255,66,126,102,126,60,60,255,255,149,255,149,255,149,255,149,255,129,255,235,255,60,60,247,247,157,255,139,255,198,254,99,127,209,255,185,255,239,239,255,255,153,255,153,255,195,255,102,126,36,60,36,60,60,60,255,255,129,255,241,255,99,127,198,254,143,255,129,255,255,255]},{"1159068":[169]},{"1159070":[35,133,125,169,140,140,133,124,183,124,133,124,160]},{"1159085":[107]},{"1159088":[9]},{"1159090":[99]},{"1159092":[231,3,15,39,255,255,1]},{"1159100":[3]},{"1159102":[7]},{"1159104":[15]},{"1159106":[31]},{"1159108":[63]},{"1159110":[127]},{"1159112":[255]},{"1159114":[255,1,255,3,255,7,255,15,255,31,255,63,255,127,72,72,169]},{"1159133":[143,3,80,127,143,5,80,127,143,6,80,127,104,201,16,39,144,21,72,226,32,175,3,80,127,26,143,3,80,127,194,32,104,56,233,16,39,128,230,201,232,3,144,21,72,226,32,175,4,80,127,26,143,4,80,127,194,32,104,56,233,232,3,128,230,201,100]},{"1159201":[144,21,72,226,32,175,5,80,127,26,143,5,80,127,194,32,104,56,233,100]},{"1159222":[128,230,201,10]},{"1159227":[144,21,72,226,32,175,6,80,127,26,143,6,80,127,194,32,104,56,233,10]},{"1159248":[128,230,201,1]},{"1159253":[144,21,72,226,32,175,7,80,127,26,143,7,80,127,194,32,104,56,233,1]},{"1159274":[128,230,104,107,152,41,15]},{"1159282":[72,152,74,74,74,74,168,24,165,181,208,5,104,105,64,61,96,104,105,80,61,96,160]},{"1159307":[185,217,181,100,181,201,255,255,240,27,235,41,255,1,197,202,240,17,26,230,181,197,202,240,10,200,200,200,200,200,200,200,200,128,221,56,96,24,96,139,75,171,32,136,176,176,3,130,233]},{"1159357":[185,217,181,74,41,3]},{"1159364":[201]},{"1159367":[240,3,130,220]},{"1159372":[185,217,181,74,74,74,41,31]},{"1159381":[24,101,200,235,157,2,16,169,7]},{"1159391":[235,157,4,16,218,165,181,208,5,169,64,61,128,3,169,80,61,133,179,185,222,181,133,183,185,223,181,133,184,167,183,133,186,185,219,181,41,15]},{"1159430":[240,9,170,165,186,74,202,208,252,133,186,185,219,181,74,74,74,41,30]},{"1159450":[170,191,184,175,35,37,186,133,186,185,220,181,74,74,74,74,74,41,7]},{"1159470":[240,12,10,170,191,174,175,35,197,186,176,2,133,186,165,186,34,216,175,35,250,100,120,175,4,80,127,41,255]},{"1159500":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,5,80,127,41,255]},{"1159526":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,6,80,127,41,255]},{"1159552":[197,120,208,5,173,61,136,128,5,198,120,24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159578":[24,101,179,157,6,16,232,232,232,232,232,232,171,107,185,217,181,74,74,74,41,31]},{"1159601":[24,101,200,235,157,2,16,169,21]},{"1159611":[235,157,4,16,218,185,222,181,133,183,185,223,181,133,184,167,183,133,186,230,183,230,183,167,183,133,188,201,198]},{"1159641":[176,88,100,114,165,186,56,233,192,75,133,179,165,188,233,3]},{"1159658":[144,10,133,188,165,179,133,186,230,114,128,231,100,116,165,186,56,233,16,14,133,179,165,188,233]},{"1159685":[144,10,133,188,165,179,133,186,230,116,128,231,100,118,165,186,56,233,60]},{"1159705":[133,179,165,188,233]},{"1159712":[144,10,133,188,165,179,133,186,230,118,128,231,165,114,201,100]},{"1159729":[144,14,169,99]},{"1159734":[133,114,169,59]},{"1159739":[133,116,133,118,133,186,165,181,208,5,169,64,61,128,3,169,80,61,133,179,250,165,114,34,216,175,35,175,6,80,127,41,255]},{"1159773":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159788":[24,101,179,157,6,16,232,232,169,131]},{"1159799":[24,101,179,157,6,16,232,232,165,116,34,216,175,35,175,6,80,127,41,255]},{"1159820":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159835":[24,101,179,157,6,16,232,232,169,131]},{"1159846":[24,101,179,157,6,16,232,232,165,118,34,216,175,35,175,6,80,127,41,255]},{"1159867":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159882":[24,101,179,157,6,16,232,232,169,128]},{"1159893":[24,101,179,157,6,16,232,232,165,186,34,216,175,35,175,6,80,127,41,255]},{"1159914":[24,101,179,157,6,16,232,232,175,7,80,127,41,255]},{"1159929":[24,101,179,157,6,16,232,232,232,232,232,232,130,158,254,165,200,24,105]},{"1159950":[235,157,2,16,169,5]},{"1159957":[235,169]},{"1159960":[5,157,4,16,100,181,165,202,168,41,1]},{"1159972":[240,3,136,230,181,32,110,176,72,32,110,176,72,32,110,176,157,6,16,232,232,104,157,6,16,232,232,104,157,6,16,232,232,232,232,232,232,96,169,2,141,1,33,169,128,141,21,33,169,35,133,2,194,48,169]},{"1160028":[112,141,22,33,169,156,143,133]},{"1160037":[162,255,15,167]},{"1160042":[141,24,33,230]},{"1160047":[230]},{"1160049":[202,16,244,226,48,34,123,179,35,107,169,128,141,21,33,169,49,133,2,194,48,169]},{"1160072":[128,141,22,33,169]},{"1160078":[208,133]},{"1160081":[162,255,7,167]},{"1160086":[141,24,33,230]},{"1160091":[230]},{"1160093":[202,16,244,226,48,107,168,139,75,171,185,217,179,171,107,156,42,1,34,159,145,164,194,16,34,187,143,164,32,202,179,92,3,236]},{"1160128":[194,16,32,202,179,194,32,162,14,107,34,184,145,164,34,36,144,164,226,48,169,1,133,20,96,159,57,176,57,177,57,180,57,181,57,182,57,183,57,220,57,221,57,222,57,223,57,240,57,241,57,242,57,243,57,244,57,245,57,246,57,247,57,248,57,249,57,250,57,251,57,252,57,253,57,254,57,159,45,176,45,177,45,180,45,181,45,182,45,183,45,220,45,221,45,222,45,223,45,240,45,241,45,242,45,243,45,244,45,245,45,246,45,247,45,248,45,249,45,250,45,251,45,252,45,253,45,254,45,169,45,185,45,186,45,187,45,159,41,176,41,177,41,180,41,181,41,182,41,183,41,220,41,221,41,222,41,223,41,240,41,241,41,242,41,243,41,244,41,245,41,246,41,247,41,248,41,249,41,250,41,251,41,252,41,253,41,254,41,188,41,64,61,65,61,66,61,67,61,68,61,69,61,70,61,71,61,72,61,73,61,74,61,75,61,76,61,77,61,78,61,79,61,96,61,97,61,98,61,99,61,100,61,101,61,102,61,103,61,104,61,105,61,106,61,107,61,108,61,109,61,110,61,111,61,128,61,129,61,130,61,131,61,168,61,135,61,80,61,81,61,82,61,83,61,84,61,85,61,86,61,87,61,88,61,89,61,90,61,91,61,92,61,93,61,94,61,95,61,112,61,113,61,114,61,115,61,116,61,117,61,118,61,119,61,120,61,121,61,122,61,123,61,124,61,125,61,126,61,127,61,144,61,145,61,146,61,147,61,184,61,151,61,136,61,192,61,193,61,194,61,195,61,136,61,134,61,137,61,196,61,137,61,197,61,198,61,199,61,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,61,209,61,210,61,211,61,152,61,150,61,153,189,212,61,153,61,213,61,214,61,215,61,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,155,54]},{"1160668":[128]},{"1160670":[88,244,126,155,57]},{"1160676":[128]},{"1160678":[92,244,126,155,60]},{"1160684":[128]},{"1160686":[96,244,126,155,63]},{"1160692":[128]},{"1160694":[100,244,126,185,71,68,64]},{"1160702":[82,244,126,185,74,68,64]},{"1160710":[37,244,126,185,77,64,64]},{"1160718":[37,244,126,185,80,68,64]},{"1160726":[38,244,126,185,83,64,64]},{"1160734":[38,244,126,185,90,80,64]},{"1160742":[42,244,126,209,93,128,96]},{"1160750":[32,244,126,209,96,128,64]},{"1160758":[45,244,126,209,99,128,64]},{"1160766":[73,244,126,209,102,128,96]},{"1160774":[83,244,126,155,105,8,128]},{"1160782":[68,244,126,155,108]},{"1160788":[128]},{"1160790":[56,80,127,177,124,128,96]},{"1160798":[35,244,126,155,127]},{"1160804":[128]},{"1160806":[62,244,126,255,255]},{"1179648":[165,160,201,13,208,3,169,7,107,169,11,107,157,160,11,165,160,201,13,208,29,175,163,128,48,240,20,175,74,128,48,240,8,169]},{"1179683":[143,202,243,126,128,6,169,64,143,202,243,126,169,1,107,175,163,128,48,240,20,175,74,128,48,240,8,169,64,143,202,243,126,128,6,169]},{"1179720":[143,202,243,126,169]},{"1179726":[107,165,160,201,13,208,4,169,6,128,2,169,1,107,218,165,160,201,13,208,6,169,1,92,123,213,30,169]},{"1179755":[92,123,213,30,254,48,14,165,160,201,13,208,3,169,1,107,169]},{"1179773":[107,175,66,128,48,240,14,173,3,4,41,128,240,7,173,18,1,13,228,2,107,173,18,1,13,228,2,13,252,15,107,194,32,165,160,201,23,1,226,32,208,8,175,104,129,48,141,115,3,107,185,85,208,141,115,3,107,165,27,240,44,194,32,165,160,201,95]},{"1179841":[240,24,201,172]},{"1179846":[240,19,201,179]},{"1179851":[240,14,201,213]},{"1179856":[240,9,201,23,1,240,4,226,32,128,11,226,32,218,187,191,107,129,48,133]},{"1179877":[250,175,110,243,126,107,165,27,240,39,194,32,165,160,201,95]},{"1179894":[240,19,201,179]},{"1179899":[240,14,201,213]},{"1179904":[240,9,201,23,1,240,4,226,32,128,11,226,32,218,187,191,110,129,48,133,76,250,175,110,243,126,107,165,27,240,36,194,32,165,160,201,95]},{"1179942":[240,19,201,179]},{"1179947":[240,14,201,213]},{"1179952":[240,9,201,23,1,240,4,226,32,128,8,226,32,169,1,141,123,3,107,175,79,128,48,141,123,3,107,224,3,240,29,224,4,240,25,224,5,240,21,224,57,240,27,224,59,240,23,224,60,240,19,224,61,240,15,191,241,184,13,107,175,128,129,48,41,1,208,243,128,8,175,128,129,48,41,2,208,233,169]},{"1180032":[107,133,5,218,162]},{"1180038":[189,74,12,232,224,10,240,8,197,5,208,244,169,1,128,2,169]},{"1180056":[250,96,189,32,14,201,214,208,16,34,182,129,164,176,10,189,128,13,201,17,144,3,169]},{"1180080":[107,165,68,201,128,107,175,62,128,48,240,98,201,1,240,92,201,2,208,40,175,116,243,126,41,7,201,7,208,78,175,122,243,126,41,127,201,127,208,68,175,197,243,126,201,3,144,60,175,219,242,126,41,32,201,32,208,50,128,50,201,4,208,8,34,109,130,164,144,38,128,38,201,3,208,18,34,109,130,164,144,26,175,219,242,126,41,32,201,32,208,16,128,16,201,5,208,10,175,24,244,126,201,100,144,2,128,2,24,107,56,107,240,4,34,89,207,8,175,94,128,48,201]},{"1180204":[208,4,92,195,206,8,175,94,128,48,201,1,208,4,92,147,206,8,175,94,128,48,58,58,170,92,19,206,8,175,94,128,48,201]},{"1180239":[208,2,170,107,138,207,94,128,48,144,7,56,239,94,128,48,128,243,26,207,94,128,48,208,2,169,8,58,170,107,218,90,175,122,243,126,34,196,149,160,122,250,207,95,128,48,107,218,90,175,122,243,126,34,196,149,160,122,250,207,94,128,48,107,175,50,128,48,240,1,107,169,1,143,197,243,126,107,175,50,128,48,240,49,175,197,243,126,201,2,176,41,169,2,143,197,243,126,175,198,243,126,9,20,143,198,243,126,175,200,243,126,201,5,240,2,169,1,143,200,243,126,175,155,242,126,9,32,143,155,242,126,107,107,165,246,41,48,240,103,235,175,75,128,48,240,96,173,2,2,240,91,175,19,130,48,240,10,175,17,130,48,41,2,208,2,128,75,218,235,201,48,208,5,174,2,2,128,26,137,16,240,11,32,71,131,165,242,137,32,208,13,128,36,32,129,131,165,242,137,16,208,2,128,25,224,2,240,14,224,1,240,10,224,5,240,6,224,13,240,2,128,7,142,2,2,34,171,180,160,169,32,141,47,1,142,2,2,34,127,219,13,250,165,246,41,64,107,173,2,2,170,224,15,208,4,162]},{"1180497":[128,9,224,16,208,28,175,79,243,126,170,224,4,240,15,232,191,91,243,126,240,245,138,143,79,243,126,162,16,96,162,17,128,7,224,20,208,2,162]},{"1180537":[232,34,180,132,164,240,203,96,173,2,2,170,224,17,208,4,162,5,128,9,224,16,208,28,175,79,243,126,170,224,1,240,15,202,191,91,243,126,240,245,138,143,79,243,126,162,16,96,162,15,128,7,224,1,208,2,162,21,202,34,180,132,164,240,203,96,90,218,187,191]},{"1180608":[149,48,250,157,8,16,122,107,90,218,187,191]},{"1180621":[149,48,41,255]},{"1180626":[250,122,107,72,218,90,8,226,48,165,27,208,24,160,10,169,11,34,95,246,29,48,14,34,100,174,9,169,36,153,160,13,169,1,153,176,13,40,122,250,104,107,138,69,26,41,15,5,27,208,119,169,11,160,10,34,95,246,29,48,109,218,187,169,30,34,138,187,13,250,169,1,153,176,13,218,34,113,186,13,133,15,41,2,240,36,165,15,101,226,153,16,13,165,227,105]},{"1180723":[153,48,13,165,15,41,1,170,189,60,159,101,232,153]},{"1180738":[13,165,233,105]},{"1180743":[153,32,13,128,34,165,15,101,232,153]},{"1180754":[13,165,233,105]},{"1180759":[153,32,13,165,15,41,1,170,189,60,159,101,226,153,16,13,165,227,105]},{"1180779":[153,48,13,187,169,32,34,24,234,6,250,169,48,34,124,187,13,107,165,27,240,37,166,160,224,255]},{"1180806":[208,30,166,162,224,239]},{"1180813":[208,23,174,24,1,224]},{"1180820":[24,240,21,224]},{"1180825":[26,240,16,224]},{"1180830":[28,240,5,224]},{"1180835":[30,240]},{"1180838":[169,1,141,11,66,107,162,192]},{"1180847":[142,5,67,128,242,175,201,80,127,240,7,224,4,208,3,169,1,107,191,63,243,126,107,175,201,80,127,208,4,175,67,243,126,107,175,201,80,127,41,255]},{"1180888":[208,4,175,67,243,126,107,72,175,201,80,127,240,4,104,169,1,107,104,143,67,243,126,107,175,200,80,127,208,8,175,117,129,48,208,19,128,3,169,1,107,175,119,243,126,240,82,58,143,119,243,126,26,128,74,194,32,165,160,201,17,1,226,32,208,13,165,27,240,9,173,154,11,240,12,169]},{"1180965":[128,50,175,119,243,126,208,2,128,42,218,194,32,175,96,243,126,240,30,72,175,64,243,126,58,41,2]},{"1180993":[170,104,56,255,118,129,48,48,9,143,96,243,126,169,1]},{"1181009":[128,3,169]},{"1181014":[226,32,250,201]},{"1181019":[107,173,153,11,240,48,206,153,11,175,117,129,48,208,11,175,119,243,126,26,26,143,119,243,126,107,218,194,32,175,64,243,126,58,41,2]},{"1181056":[170,175,96,243,126,24,127,118,129,48,143,96,243,126,226,32,250,107,175,203,80,127,208,3,130,154]},{"1181083":[58,240,125,58,240,93,58,240,45,194,32,173,24,66,137,64,8,240,3,73,64,8,137,128,1,240,3,73,128,1,137]},{"1181115":[66,240,3,73]},{"1181120":[66,137]},{"1181123":[132,240,3,73]},{"1181128":[132,133]},{"1181131":[226,32,92,222,131]},{"1181137":[194,32,173,24,66,137,64,128,240,3,73,64,128,137,128,64,240,3,73,128,64,137]},{"1181160":[12,240,3,73]},{"1181165":[12,137]},{"1181168":[3,240,3,73]},{"1181173":[3,133]},{"1181176":[226,32,92,222,131]},{"1181182":[194,32,173,24,66,137,64,128,240,3,73,64,128,137,128,64,240,3,73,128,64,133]},{"1181205":[226,32,92,222,131]},{"1181211":[173,24,66,133]},{"1181216":[173,25,66,137,12,240,2,73,12,137,3,240,2,73,3,133,1,92,222,131]},{"1181237":[173,24,66,133]},{"1181242":[173,25,66,133,1,92,222,131]},{"1181251":[72,175,206,80,127,201,1,208,8,104,47,121,243,126,9,4,107,201,2,208,8,104,47,121,243,126,41,251,107,104,47,121,243,126,107,189]},{"1181289":[153]},{"1181292":[189,2]},{"1181295":[153,2]},{"1181298":[189,4]},{"1181301":[153,64]},{"1181304":[189,6]},{"1181307":[153,66]},{"1181310":[96,189]},{"1181314":[41,255,227,9]},{"1181319":[16,153]},{"1181323":[189,2]},{"1181326":[41,255,227,9]},{"1181331":[16,153,2]},{"1181335":[189,4]},{"1181338":[41,255,227,9]},{"1181343":[16,153,64]},{"1181347":[189,6]},{"1181350":[41,255,227,9]},{"1181355":[16,153,66]},{"1181359":[96,41,255]},{"1181363":[240,3,76,102,134,76,127,134,41,255]},{"1181374":[208,6,162,156,141,76,127,134,58,58,208,6,162,156,141,76,102,134,58,208,6,162,164,141,76,102,134,58,208,6,162,172,141,76,102,134,58,208,6,162,180,141,76,102,134,58,208,6,162,188,141,76,102,134,58,208,6,162,196,141,76,102,134,162,204,141,76,102,134,165,26,41,1]},{"1181448":[240,2,128,14,32,41,135,238,16,7,169,97,1,141,2,16,128,9,156,16,7,169,255,255,141,2,16,169,4]},{"1181478":[133,2,107,218,90,139,226,32,169,164,72,171,194,32,175]},{"1181494":[5,112,9]},{"1181498":[28,141,142,17,24,105,16]},{"1181506":[141,206,17,175,2,5,112,9]},{"1181515":[28,141,144,17,24,105,16]},{"1181523":[141,208,17,175,4,5,112,9]},{"1181532":[28,141,146,17,24,105,16]},{"1181540":[141,210,17,175,6,5,112,9]},{"1181549":[28,141,148,17,24,105,16]},{"1181557":[141,212,17,175,8,5,112,9]},{"1181566":[28,141,78,18,24,105,16]},{"1181574":[141,142,18,175,10,5,112,9]},{"1181583":[28,141,80,18,24,105,16]},{"1181591":[141,144,18,175,12,5,112,9]},{"1181600":[28,141,82,18,24,105,16]},{"1181608":[141,146,18,175,14,5,112,9]},{"1181617":[28,141,84,18,24,105,16]},{"1181625":[141,148,18,32,212,141,175,142,3,112,41,64]},{"1181638":[240,31,175,64,3,112,41,255]},{"1181647":[240,11,162,28,140,160,220,16,32,102,134,128,40,162,44,140,160,220,16,32,102,134,128,29,175,64,3,112,41,255]},{"1181678":[240,11,162,20,140,160,220,16,32,102,134,128,9,162,20,140,160,220,16,32,127,134,175,140,3,112,41,192]},{"1181707":[201,192]},{"1181710":[208,11,162,68,140,160,224,16,32,102,134,128,49,175,140,3,112,41,64]},{"1181730":[240,11,162,60,140,160,224,16,32,102,134,128,29,175,140,3,112,41,128]},{"1181750":[240,11,162,52,140,160,224,16,32,102,134,128,9,162,52,140,160,224,16,32,127,134,162,76,140,160,228,16,175,66,3,112,32,176,134,175,140,3,112,41,16]},{"1181792":[240,11,162,36,141,160,236,16,32,102,134,128,9,162,36,141,160,236,16,32,127,134,175,140,3,112,41,8]},{"1181821":[240,11,162,28,141,160,232,16,32,102,134,128,9,162,28,141,160,232,16,32,127,134,175,140,3,112,41,3]},{"1181850":[240,11,162,164,140,160,228,17,32,102,134,128,9,162,164,140,160,228,17,32,127,134,175,140,3,112,41,4]},{"1181879":[240,11,162,156,140,160,92,18,32,102,134,128,9,162,156,140,160,92,18,32,127,134,162,92,140,160,92,17,175,69,3,112,32,176,134,162,100,140,160,96,17,175,70,3,112,32,176,134,162,108,140,160,100,17,175,71,3,112,32,176,134,162,116,140,160,104,17,175,72,3,112,32,176,134,162,124,140,160,108,17,175,73,3,112,32,176,134,162,132,140,160,220,17,175,74,3,112,32,176,134,162,140,140,160,224,17,175,75,3,112,32,176,134,162,148,140,160,232,17,175,77,3,112,32,176,134,162,172,140,160,236,17,175,78,3,112,32,176,134,162,180,140,160,96,18,175,80,3,112,32,176,134,162,188,140,160,100,18,175,81,3,112,32,176,134,162,196,140,160,104,18,175,82,3,112,32,176,134,162,204,140,160,108,18,175,83,3,112,32,176,134,160,242,16,175,92,3,112,32,187,134,160,114,17,175,93,3,112,32,187,134,160,242,17,175,94,3,112,32,187,134,160,114,18,175,95,3,112,32,187,134,175,89,3,112,41,255]},{"1182117":[208,11,162,44,141,160,248,16,32,127,134,128,65,58,208,11,162,44,141,160,248,16,32,102,134,128,51,58,208,11,162,52,141,160,248,16,32,102,134,128,37,58,208,11,162,60,141,160,248,16,32,102,134,128,23,58,208,11,162,68,141,160,248,16,32,102,134,128,9,162,44,141,160,248,16,32,127,134,175,90,3,112,41,255]},{"1182202":[208,11,162,76,141,160,120,17,32,127,134,128,37,58,208,11,162,76,141,160,120,17,32,102,134,128,23,58,208,11,162,84,141,160,120,17,32,102,134,128,9,162,92,141,160,120,17,32,102,134,175,91,3,112,41,255]},{"1182259":[208,11,162,100,141,160,248,17,32,102,134,128,23,58,208,11,162,108,141,160,248,17,32,102,134,128,9,162,116,141,160,248,17,32,102,134,175,107,3,112,41,255]},{"1182302":[208,11,162,124,141,160,120,18,32,102,134,128,37,58,208,11,162,132,141,160,120,18,32,102,134,128,23,58,208,11,162,140,141,160,120,18,32,102,134,128,9,162,148,141,160,120,18,32,102,134,175,72,4,112,41,255]},{"1182359":[34,120,149,160,175,6,80,127,41,255]},{"1182370":[24,105,16,30,141,248,18,175,7,80,127,41,255]},{"1182384":[24,105,16,30,141,250,18,162,220,140,160,252,16,175,85,3,112,32,176,134,175,84,3,112,41,255]},{"1182411":[208,11,162,12,141,160,124,17,32,127,134,128,23,58,208,11,162,12,141,160,124,17,32,102,134,128,9,162,20,141,160,124,17,32,102,134,162,212,140,160,252,17,175,86,3,112,32,176,134,162,228,140,160,124,18,175,87,3,112,32,176,134,175,116,3,112,41,4]},{"1182480":[240,11,162,244,140,160,28,19,32,102,134,128,9,162,236,140,160,28,19,32,102,134,175,116,3,112,41,2]},{"1182509":[240,11,162,252,140,160,32,19,32,102,134,128,9,162,236,140,160,32,19,32,102,134,175,116,3,112,41,1]},{"1182538":[240,11,162,4,141,160,36,19,32,102,134,128,9,162,236,140,160,36,19,32,102,134,175,122,3,112,41,2]},{"1182567":[240,5,169,151,14,128,3,169,135,18,141,104,19,26,141,106,19,175,122,3,112,41,16]},{"1182591":[240,5,169,151,14,128,3,169,135,18,141,42,19,26,141,44,19,175,122,3,112,41,64]},{"1182615":[240,5,169,151,14,128,3,169,135,18,141,108,19,26,141,110,19,175,122,3,112,41,32]},{"1182639":[240,5,169,151,14,128,3,169,135,18,141,46,19,26,141,48,19,175,122,3,112,41,4]},{"1182663":[240,5,169,151,6,128,3,169,135,18,141,112,19,26,141,114,19,175,122,3,112,41,1]},{"1182687":[240,5,169,151,6,128,3,169,135,18,141,50,19,26,141,52,19,175,122,3,112,41,8]},{"1182711":[240,5,169,151,14,128,3,169,135,18,141,116,19,26,141,118,19,171,122,250,96,1,10,184,10,183,10,18,10,1,10,2,10,17,10,18,10,1,10,4,10,3,6,18,10]},{"1182757":[10,186,10,185,6]},{"1182763":[10]},{"1182765":[10,20,10,19,6]},{"1182771":[10,5,14,6,14]},{"1182777":[30,22,14,5,6,6,6]},{"1182785":[30,22,6,182,14,182,6,182,142,182,134]},{"1182797":[6,21,6,48,6]},{"1182803":[30,12,14,13,14,28,14,28,78,32,6,16,6,48,6,49,6,32,14,33,14,48,14,49,14,7,10,23,202,23,10,7,202,8,10,24,202,24,10,8,202,9,10,25,202,25,10,9,202,44,6,44,70,60,6,61,6,34,2,35,2,50,2,51,2,40,10,41,10,56,10,57,10,36,2,37,2,52,2,53,2,38,14,39,14,54,14,55,14,42,26,43,26,58,26,59,26,29,6,30,6,45,6,46,6,29,14,30,14,45,14,46,14,72,6,73,6,88,6,89,6,74,14,75,14,90,14,91,14,14,14,15,14,31,78,31,14,76,22,77,22,92,22,93,22,100,6,101,6,116,6,117,6,133,18,134,18,178,18,150,18,133,26,134,26,149,26,150,26,133,14,134,14,149,14,150,14,133,6,134,6,149,6,150,6,78,2,79,2,94,2,95,2,96,10,97,10,112,10,113,10,98,6,99,6,114,6,115,6,10,2,11,2,26,2,27,2,102,14,103,14,118,14,119,14,104,14,105,14,120,6,121,14,104,6,105,6,120,26,106,6,104,10,105,10,120,14,122,10,107,14,107,78,123,14,123,78,108,22,108,86,124,22,124,86,109,10,110,10,125,10,126,10,111,26,111,90,127,26,179,26,111,14,111,78,127,14,180,14,111,6,111,70,127,6,181,6,128,6,128,70,144,6,144,70,129,6,128,70,144,6,144,70,129,6,128,70,145,6,144,70,129,6,129,70,145,6,144,70,64,30,65,30,80,30,81,30,66,6,66,70,82,6,67,6,66,26,66,90,82,26,68,26,66,14,66,78,82,14,69,14,71,74,71,10,86,14,87,14,64,30,65,30,84,10,85,10,64,30,65,30,84,10,70,10,169,155,26,141,24,16,26,141,26,16,175,98,3,112,34,120,149,160,175,4,80,127,41,255]},{"1183213":[24,105,16,30,141,86,16,175,5,80,127,41,255]},{"1183227":[24,105,16,30,141,88,16,175,6,80,127,41,255]},{"1183241":[24,105,16,30,141,90,16,175,7,80,127,41,255]},{"1183255":[24,105,16,30,141,92,16,169,139,14,141,32,16,26,141,34,16,175,67,3,112,41,255]},{"1183279":[34,120,149,160,175,6,80,127,41,255]},{"1183290":[24,105,16,30,141,96,16,175,7,80,127,41,255]},{"1183304":[24,105,16,30,141,98,16,175,142,3,112,41,64]},{"1183318":[240,12,169,153,6,141,38,16,26,141,40,16,128,10,169,137,2,141,38,16,26,141,40,16,175,119,3,112,41,255]},{"1183349":[34,120,149,160,175,6,80,127,41,255]},{"1183360":[24,105,16,30,141,102,16,175,7,80,127,41,255]},{"1183374":[24,105,16,30,141,104,16,96,169,2,141,12,33,194,32,162]},{"1183391":[4,169,136,1,157]},{"1183397":[16,202,202,208,249,169,97,1,141,2,16,169,97,33,141,66,16,169,97,65,141,130,16,169,97,97,141,194,16,169,97,129,141,2,17,169,97,161,141,66,17,169,97,193,141,130,17,169,97,225,141,194,17,169,98,1,141,2,18,169,98,33,141,66,18,169,98,65,141,130,18,169,98,97,141,194,18,169,98,129,141,2,19,169,98,161,141,66,19,169,98,193,141,130,19,169,98,225,141,194,19,169]},{"1183500":[59,141,4,16,141,68,16,141,132,16,141,196,16,141,4,17,141,68,17,141,132,17,141,196,17,141,4,18,141,68,18,141,132,18,141,196,18,141,4,19,141,68,19,141,132,19,141,196,19,169,255]},{"1183552":[141,2,20,165,16,41,255]},{"1183560":[201,1]},{"1183563":[208,107,175,135,128,48,41,255]},{"1183572":[201,2]},{"1183575":[208,95,8,226,48,218,90,34,54,178,164,122,250,40,41,255]},{"1183592":[208,78,169,110,29,141,142,19,24,105,16]},{"1183604":[141,206,19,169,103,29,141,144,19,24,105,16]},{"1183617":[141,208,19,169,101,29,141,146,19,24,105,16]},{"1183630":[141,210,19,169,104,29,141,148,19,24,105,16]},{"1183643":[141,212,19,169,76,29,141,150,19,24,105,16]},{"1183656":[141,214,19,169,100,29,141,152,19,24,105,16]},{"1183669":[141,216,19,226,32,107,34,155,142,164,194,32,169,104,97,141,2,16,169,104,129,141,66,16,169,104,161,141,130,16,169,104,193,141,194,16,169,104,225,141,2,17,169,105,1,141,66,17,169,105,33,141,130,17,169,105,65,141,194,17,169,105,97,141,2,18,169,105,129,141,66,18,169,105,161,141,130,18,169,105,193,141,194,18,169,105,225,141,2,19,169,106,1,141,66,19,169,106,33,141,130,19,169,106,65,141,194,19,226,32,107,194,48,162,60]},{"1183785":[189,4,16,9]},{"1183790":[32,157,4,16,202,202,208,243,162,60]},{"1183801":[189,68,16,9]},{"1183806":[32,157,68,16,202,202,208,243,162,60]},{"1183817":[189,132,16,9]},{"1183822":[32,157,132,16,202,202,208,243,162,60]},{"1183833":[189,196,16,9]},{"1183838":[32,157,196,16,202,202,208,243,162,60]},{"1183849":[189,4,17,9]},{"1183854":[32,157,4,17,202,202,208,243,162,60]},{"1183865":[189,68,17,9]},{"1183870":[32,157,68,17,202,202,208,243,162,60]},{"1183881":[189,132,17,9]},{"1183886":[32,157,132,17,202,202,208,243,162,60]},{"1183897":[189,196,17,9]},{"1183902":[32,157,196,17,202,202,208,243,162,60]},{"1183913":[189,4,18,9]},{"1183918":[32,157,4,18,202,202,208,243,162,60]},{"1183929":[189,68,18,9]},{"1183934":[32,157,68,18,202,202,208,243,162,60]},{"1183945":[189,132,18,9]},{"1183950":[32,157,132,18,202,202,208,243,162,60]},{"1183961":[189,196,18,9]},{"1183966":[32,157,196,18,202,202,208,243,162,60]},{"1183977":[189,4,19,9]},{"1183982":[32,157,4,19,202,202,208,243,162,60]},{"1183993":[189,68,19,9]},{"1183998":[32,157,68,19,202,202,208,243,107,72,218,173]},{"1184011":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,128,141,21,33,169,1,141]},{"1184046":[67,169,24,141,1,67,169]},{"1184054":[141,22,33,169,48,141,23,33,169,49,141,4,67,169]},{"1184069":[141,2,67,169,208,141,3,67,173]},{"1184079":[33,72,169,128,141]},{"1184085":[33,156,5,67,169,16,141,6,67,169,1,141,11,66,104,141]},{"1184102":[33,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1184130":[67,250,104,107,165,16,201,4,208,11,169,1,141,178,10,34,82,238,27,128,4,34,159,145,164,92,150,239,27,72,218,194,32,162,64,191]},{"1184167":[128,51,159]},{"1184171":[197,126,202,202,16,244,226,32,230,21,250,104,107,194,32,175,217,3,112,9]},{"1184192":[28,141,206,16,24,105,16]},{"1184200":[141,14,17,175,219,3,112,9]},{"1184209":[28,141,208,16,24,105,16]},{"1184217":[141,16,17,175,221,3,112,9]},{"1184226":[28,141,210,16,24,105,16]},{"1184234":[141,18,17,175,223,3,112,9]},{"1184243":[28,141,212,16,24,105,16]},{"1184251":[141,20,17,175,108,3,112,41,255]},{"1184261":[74,74,74,133,2,160,44,16,169,143,6,162,10]},{"1184275":[153]},{"1184278":[200,200,202,208,8,72,152,24,105,44]},{"1184289":[168,104,198,2,208,236,32,41,135,107,165,200,208,4,169,4,128,28,201,3,208,4,169]},{"1184313":[128,20,175,135,128,48,201,2,208,10,175,158,80,127,208,4,169,3,128,2,169]},{"1184335":[133,200,107,165,200,208,22,175,135,128,48,201,2,208,10,175,158,80,127,208,4,169,3,128,14,169,4,128,10,201,3,208,4,169,4,128,2,169]},{"1184374":[133,200,107,175,135,128,48,201,2,208,18,156,46,1,218,90,34,54,178,164,240,16,122,250,169,44,141,46,1,169,241,141,44,1,92,118,206,12,122,250,169,3,133,200,169,60,141,46,1,92,177,206,12,143]},{"1184429":[5,112,143,2,5,112,143,4,5,112,143,6,5,112,143,8,5,112,143,10,5,112,143,12,5,112,143,14,5,112,159,217,3,112,107,224,8]},{"1184467":[144,4,159,248,4,112,159,217,3,112,107,224,8]},{"1184481":[144,4,191,248,4,112,191,217,3,112,107,139,75,171,25,6,147,235,171,107,173,18,11,16,2,169,11,201,12,144,2,169]},{"1184514":[141,18,11,107,110]},{"1184520":[111]},{"1184522":[112]},{"1184524":[113]},{"1184526":[115]},{"1184528":[116]},{"1184530":[117]},{"1184532":[118]},{"1184534":[120]},{"1184536":[121]},{"1184538":[122]},{"1184540":[123]},{"1184542":[112,120,128,136,152,160,168,176,192,200,208,216,139,72,218,90,8,194,48,162,176,128,160,208,80,169,15]},{"1184570":[84,127,48,40,122,250,104,171,107,218,90,72,164,4,90,164,6,90,164,8,90,164,10,90,164,12,90,164,14,90,41,248,255,168,183]},{"1184606":[143]},{"1184608":[81,127,200,200,183]},{"1184614":[143,2,81,127,200,200,183]},{"1184622":[143,4,81,127,200,200,183]},{"1184630":[143,6,81,127,169,2]},{"1184637":[133,4,34,160,175,160,104,133,14,104,133,12,104,133,10,104,133,8,104,133,6,104,133,4,104,41,7]},{"1184665":[170,191]},{"1184668":[81,127,72,169]},{"1184674":[143]},{"1184676":[81,127,143,2,81,127,143,4,81,127,143,6,81,127,104,122,250,107,175,135,128,48,208,9,230,14,162,253,255,92,240,235,1,230,14,162,254,255,232,232,224,80,1,240,60,191,108,233,1,41,255,127,197,160,208,238,198,14,208,234,165]},{"1184738":[72,165,2,72,169,188,234,133]},{"1184747":[169,1]},{"1184750":[133,2,138,74,34,67,147,164,133,12,104,133,2,104,133]},{"1184766":[191,108,233,1,10,144,4,92,20,236,1,92,56,236,1,92,222,235,1,139,72,218,90,8,75,171,226,16,194,32,162]},{"1184798":[189,246,149,159]},{"1184803":[201,126,232,232,224,128,144,243,160]},{"1184813":[162]},{"1184815":[218,187,191,21,130,48,250,41,31]},{"1184825":[10,10,10,90,168,185,246,148,159,24,201,126,185,248,148,159,26,201,126,185,250,148,159,88,201,126,185,252,148,159,90,201,126,122,232,232,232,232,232,232,200,224,25,144,201,226,32,32,113,148,40,122,250,104,171,107,72,218,173]},{"1184885":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,1,141]},{"1184915":[67,169,128,141,21,33,169,24,141,1,67,169,96,141,22,33,141,23,33,169]},{"1184936":[141,2,67,169,201,141,3,67,169,126,141,4,67,169,128,141,5,67,156,6,67,173]},{"1184959":[33,72,169,128,141]},{"1184965":[33,169,1,141,11,66,104,141]},{"1184974":[33,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1185002":[67,250,104,96,134,29,134,29,150,29,150,29,1,10,2,10,17,10,18,10,5,14,6,14]},{"1185027":[30,22,14]},{"1185031":[6,21,6,48,6]},{"1185037":[30,12,14,13,14,28,14,28,78,98,6,99,6,114,6,115,6,10,2,11,2,26,2,27,2,32,14,33,14,48,14,49,14,133,26,134,26,149,26,150,26,7,10,23,202,23,10,7,202,8,10,24,202,24,10,8,202,9,10,25,202,25,10,9,202,44,6,44,70,60,6,61,6,34,2,35,2,50,2,51,2,36,2,37,2,52,2,53,2,38,14,39,14,54,14,55,14,40,10,41,10,56,10,57,10,42,26,43,26,58,26,59,26,64,30,65,30,80,30,81,30,66,26,66,90,82,26,83,26,29,6,30,6,45,6,46,6,72,6,73,6,88,6,89,6,74,14,75,14,90,14,91,14,76,22,77,22,92,22,93,22,78,2,79,2,94,2,95,2,14,14,15,14,31,78,31,14,100,6,101,6,116,6,117,6,109,10,110,10,125,10,126,10,111,26,111,90,127,26,127,90,129,6,129,70,145,6,145,70,130,10,131,10,146,10,147,10,132,6,132,70,148,6,148,70,47,74,47,10,62,10,63,10,136,1,136,1,136,1,136,1,138,29,136,1,76,29,104,29,77,29,78,29,136,1,136,1,160,5,161,5,136,1,164,5,165,5,136,1,168,5,169,5,136,1,172,5,173,5,136,1,176,5,177,5,136,1,139,29,136,1,136,1,136,1,136,1,136,1,136,1,136,1,136,1,154,29,136,1,92,29,120,29,93,29,94,29,136,1,136,1,162,5,163,5,136,1,166,5,167,5,136,1,170,5,171,5,136,1,174,5,175,5,136,1,178,5,179,5,136,1,155,29,136,1,136,1,136,1,136,1,175,74,128,48,208,3,130,76]},{"1185407":[194,48,162,64,4,169,57,14,34,124,201,27,162,188,4,169,58,14,34,172,194,27,34,172,194,27,34,172,194,27,34,172,194,27,162,60,5,34,172,194,27,34,172,194,27,34,172,194,27,34,172,194,27,162,190,5,169,144,4,34,172,194,27,34,172,194,27,169,255,255,153,18,16,130,62]},{"1185483":[194,48,162,188,3,169,57,14,34,124,201,27,162,190,3,169,58,14,34,172,194,27,34,172,194,27,162,60,4,34,172,194,27,34,172,194,27,34,172,194,27,162,188,4,34,172,194,27,34,172,194,27,34,172,194,27,169,255,255,153,18,16,169,21,53,141,45,1,226,48,175,219,242,126,9,32,143,219,242,126,169,3,141,47,1,169,1,133,20,107,175,74,128,48,41,255]},{"1185580":[208,38,169,57,14,141,188,35,26,141,190,35,26,141,192,35,26,141,60,36,26,141,62,36,26,141,64,36,26,141,188,36,26,141,190,36,26,141,192,36,107,39,39,39,39,39,39,2,2,1,1,1]},{"1185637":[39,1,1,1,1,1,2,2,39,39,39]},{"1185653":[39,1,1,1,32,1,2,2,39,39,39]},{"1185669":[39,1,1,1,1,32,2,2,2,2,2]},{"1185685":[1,1,1,1,26,1,18,1,1,2,1,1,40,46,42,43,1,1,24,24,26,1,18,1,1,44,2,45,41,47,2,2,1,1,1,1,1,1,2,1,2,46]},{"1185729":[44]},{"1185731":[78,79,1,1,1,1,1,1,2,1,2]},{"1185743":[46]},{"1185747":[2,34,1,1,2]},{"1185755":[24,18,2,2]},{"1185760":[72]},{"1185765":[1,1,2]},{"1185769":[1,1,16,26,2]},{"1185776":[72]},{"1185781":[16,16,2]},{"1185785":[1,1,1,1]},{"1185791":[72]},{"1185794":[9]},{"1185797":[2,2,2]},{"1185801":[1,1,43]},{"1185806":[9]},{"1185813":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1185829":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1185845":[1,1,1,70,1,1,2,2,2,2,2,2,2]},{"1185861":[1,1,1,1,1,1,2,2,2,2,2,2,2]},{"1185877":[2,2,66,2,2,2,2,2,2,2,41,34]},{"1185893":[2,2,2,2,2,2,2,2,2,2,41,34]},{"1185910":[2,2,2]},{"1185915":[2,2,2,2]},{"1185926":[2,2,2,2,41,2,2,2,2]},{"1185941":[1,1,1,1,1,1,1,1,1,1,1]},{"1185955":[2,68,1,1,1,1,1,1,1,1,2,2,2]},{"1185971":[2,68,1,1,1,1,1,1,1,1,2,2,2]},{"1185989":[1,1,67,1,1,1,1,1,2,2,2]},{"1186005":[80,2,84,81,87,87,86,86,39,39,39]},{"1186017":[64,64,72,72,80,2,84,81,87,42,86,86,39,39,39]},{"1186033":[64,64,87,72,39,2,82,83,2,1,18,24,85,85]},{"1186049":[72,2,2]},{"1186053":[39,2,82,83,9,1,26,16,85,85]},{"1186065":[72,2,2]},{"1186069":[2,2,24,8,8,8,9,9,8,8,41,2,2,2,26,2,8,8,16,8,18]},{"1186091":[9,9,9,9,9,72,9,41]},{"1186100":[75,2,2,2]},{"1186105":[8,2,2]},{"1186112":[1]},{"1186115":[32]},{"1186117":[2,2,2,2,2,2,2]},{"1186126":[1,1,1,2]},{"1186131":[8]},{"1186133":[175,74,128,48,240,10,191,128,242,126,9,64,159,128,242,126,191,128,242,126,107,175,74,128,48,240,42,169,27,141,47,1,156,198,4,100,176,156,16,7,156,228,2,156,193,15,156,26,1,156,27,1,156,28,1,156,29,1,169,2,141,44,1,169,9,141,45,1,107,169,5,141,198,4,100,176,100,200,107,175,74,128,48,240,3,169,1,107,165,138,201,67,107,175,74,128,48,41,255]},{"1186233":[240,2,128,23,169,15,2,166,138,224,51]},{"1186245":[208,4,143,168,34,126,224,47]},{"1186254":[208,4,143,178,43,126,107,175,74,128,48,41,255]},{"1186268":[208,5,175,135,242,126,107,169,32]},{"1186278":[107,175,74,128,48,240,69,218,8,139,75,171,165,138,41,64,240,55,194,48,162]},{"1186301":[191,62,154,164,197,34,176,29,191,64,154,164,197,34,144,21,191,66,154,164,197,32,176,13,191,68,154,164,197,32,144,5,171,40,250,128,24,138,24,105,8]},{"1186343":[201,184]},{"1186346":[240,3,170,128,206,171,40,250,165,12,5,14,92,176,169,7,92,209,169,7,144,2,200,2,168,12,248,12,248,5]},{"1186377":[10]},{"1186379":[6,96,6,176,5,160,6,96,6,48,8,160,6,112,7,96,6,128,6,128,8,80,9,96,6,136,6,80,9]},{"1186409":[10,96,6,48,8,184,7,72,8,224,8,112,9,239,2,33,3,22,12,162,12,72]},{"1186432":[143]},{"1186434":[16,11,72,11,88,3,64,4,8,14,208,14,184,3,32,4,208,14,232,15,96,3,200,3,192,14,32,15,104,12]},{"1186465":[13,120,13,200,13,64,15,112,15,24,6,64,6,40,14,120,14,152,2,232,2,16,15,128,15,248,1,56,2,168,10,144,11,200,2,32,3,24,13,128,13,64]},{"1186508":[112]},{"1186510":[240,14,48,15,32,1,96,1,208,10]},{"1186521":[11,80,11,112,11,48,11,96,11,80,11,112,11,120,6,240,6,16]},{"1186540":[64]},{"1186542":[168,2,232,2,144,12,192,12,173,10,4,41,255]},{"1186556":[201,5]},{"1186559":[208,7,169,1,1,143,152,45,126,175,74,128,48,41,255]},{"1186575":[208,18,173,10,4,41,255]},{"1186583":[201,67]},{"1186586":[208,7,169,1,1,143,80,37,126,175,74,128,48,41,255]},{"1186602":[208,18,173,10,4,41,255]},{"1186610":[201,91]},{"1186613":[208,7,169,1,1,143,46,39,126,226,48,175,74,128,48,240,20,139,169,126,72,171,194,48,165,138,201,128]},{"1186642":[176,5,10,170,252,99,155,171,194,48,162,30]},{"1186655":[169,190,13,107,99,156,99,156,99,156,100,156,99,156,143,156,99,156,137,157,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,216,157,99,156,99,156,99,156,223,157,99,156,99,156,99,156,99,156,99,156,99,156,254,157,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,152,160,99,156,99,156,99,156,99,156,99,156,99,156,180,160,99,156,118,164,249,166,99,156]},{"1186766":[167,99,156,99,156,99,156,99,156,55,167,99,156,12,164,99,156,99,156,99,156,99,156,99,156,99,156,173,167,99,156,36,168,99,156,2,168,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,43,168,99,156,99,156,99,156,50,168,99,156,99,156,99,156,99,156,99,156,99,156,78,168,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,32,170,46,170,99,156,99,156,39,170,99,156,53,170,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,99,156,96,169,26,2,141,182,41,169,243,1,141,184,41,169,160]},{"1186931":[141,186,41,169,4,1,141,188,41,169,198]},{"1186943":[141,52,42,141,56,42,141,58,42,169,52]},{"1186955":[141,224,43,96,169,17,1,141,110,32,141,236,32,169,19,1,141,112,32,141,114,32,169,18,1,141,116,32,141,238,32,141,108,33,169,22,1,141,240,32,141,110,33,169,23,1,141,242,32,169,24,1,141,244,32,169,28,1,141,112,33,169,29,1,141,114,33,169,30,1,141,116,33,169,48,1,141,226,33,141,240,33,141,226,34,141,240,34,169,35,1,141,236,33,169,36,1,141,238,33,169,52]},{"1187058":[141,242,33,169,38,1,141,244,33,169,53,1,141,98,34,141,112,34,141,98,35,141,112,35,169,54,1,141,100,34,141,102,34,141,108,34,141,110,34,169,55,1,141,104,34,141,106,34,169,60,1,141,228,34,141,230,34,141,236,34,141,238,34,169,61,1,141,232,34,141,234,34,169,68,1,141,100,35,169,69,1,141,102,35,169,70,1,141,104,35,169,71,1,141,106,35,169,179,1,141,108,35,169,180,1,141,110,35,169,57,1,141,112,41,141,108,44,169,75,1,141,114,41,141,110,44,169,107,1,141,240,41,141,236,44,169,130,1,141,242,41,141,238,44,169,52]},{"1187205":[141,74,61,96,169,27,2,141,158,37,141,162,37,141,164,37,141,28,38,141,38,38,141,154,38,141,168,38,141,26,39,141,40,39,141,154,39,141,168,39,141,30,40,141,32,40,141,34,40,141,36,40,141,40,40,141,156,40,141,166,40,141,30,41,141,36,41,169,52,1,141,158,38,141,164,38,169,52]},{"1187284":[141,38,40,96,169,52]},{"1187291":[141,46,43,96,169,241,2,141,34,36,169,242,2,141,36,36,169,132,1,141,162,36,141,34,37,169,133,1,141,164,36,141,36,37,96,169,133,4,141,36,36,141,38,36,169,84,4,141,164,36,141,166,36,169,118,4,141,34,37,169,96,4,141,36,37,141,38,37,169,215,4,141,40,37,169,221,4,141,36,38,169,222,4,141,38,38,169,224,4,141,164,38,169,225,4,141,166,38,169,228,4,141,36,39,169,229,4,141,38,39,169,52]},{"1187404":[141,164,39,141,166,39,169,109,4,141,62,36,141,188,36,141,190,36,141,62,37,141,64,36,141,192,36,141,194,36,141,64,37,169,53]},{"1187440":[141,40,44,141,174,47,169,52]},{"1187449":[141,44,44,141,46,44,141,182,44,141,54,45,141,182,45,141,182,46,141,48,47,141,54,47,141,170,47,141,176,47,141,180,47,141,182,47,169,226]},{"1187488":[141,54,44,141,168,47,169,174]},{"1187497":[141,172,44,169,175]},{"1187503":[141,174,44,169,126]},{"1187509":[141,176,44,169,127]},{"1187515":[141,178,44,169,186,4,141,180,44,141,180,45,141,180,46,169,176]},{"1187533":[141,44,45,169,20]},{"1187539":[141,46,45,169,21]},{"1187545":[141,48,45,169,168]},{"1187551":[141,50,45,169,187,4,141,52,45,141,52,46,141,52,47,169,137]},{"1187569":[141,172,45,169,28]},{"1187575":[141,174,45,169,29]},{"1187581":[141,176,45,169,118]},{"1187587":[141,178,45,169,241]},{"1187593":[141,44,46,169,78]},{"1187599":[141,46,46,169,79]},{"1187605":[141,48,46,169,217]},{"1187611":[141,50,46,169,154]},{"1187617":[141,172,46,169,155]},{"1187623":[141,174,46,169,156]},{"1187629":[141,176,46,169,149]},{"1187635":[141,178,46,169,52]},{"1187641":[141,40,48,141,44,48,169,53]},{"1187650":[141,42,48,141,50,48,169,218]},{"1187659":[141,46,48,169,226]},{"1187665":[141,48,48,169,133,4,141,36,36,141,38,36,169,84,4,141,164,36,141,166,36,169,118,4,141,34,37,169,96,4,141,36,37,141,38,37,169,215,4,141,40,37,169,221,4,141,36,38,169,222,4,141,38,38,169,224,4,141,164,38,169,225,4,141,166,38,169,228,4,141,36,39,169,229,4,141,38,39,169,52]},{"1187746":[141,164,39,141,166,39,169,134,4,141,176,38,169,135,4,141,178,38,169,84,4,141,44,39,141,46,39,169,142,4,141,48,39,169,143,4,141,50,39,169,202,4,141,172,39,169,94,4,141,174,39,169,148,4,141,176,39,169,149,4,141,178,39,169,158,4,141,180,39,169,153,4,141,44,40,169,81,4,141,48,40,169,52]},{"1187830":[141,172,40,141,174,40,141,176,40,169,84,4,141,78,39,141,80,39,169,8,6,141,82,39,169,89,4,141,206,39,141,208,39,169,94,4,141,210,39,169,81,4,141,78,40,141,80,40,141,82,40,141,46,40,169,52]},{"1187887":[141,206,40,141,208,40,141,210,40,175,219,242,126,41,32]},{"1187903":[240,72,169,109,4,141,62,36,169,58,14,141,188,36,169,59,14,141,190,36,169,62,14,141,60,37,169,63,14,141,62,37,169,144,4,141,190,37,169,57,14,141,64,36,169,60,14,141,192,36,169,61,14,141,194,36,169,64,14,141,64,37,169,65,14,141,66,37,169,145,4,141,192,37,169,1,1,143,44,34,126,169,1,1,143,82,34,126,96,169,52]},{"1187995":[141,136,34,141,8,35,141,136,35,141,8,36,141,136,36,141,138,36,169,54]},{"1188016":[141,134,35,96,169,126,1,141,80,32,141,206,32,169,209]},{"1188032":[141,82,32,141,84,32,141,86,32,141,88,32,141,90,32,141,92,32,141,94,32,141,230,33,141,232,33,141,234,33,141,236,33,141,238,33,141,240,33,169,210]},{"1188074":[141,96,32,141,226,32,141,100,33,169,131,1,141,208,32,141,78,33,169,201]},{"1188095":[141,210,32,141,212,32,141,214,32,141,216,32,141,218,32,141,220,32,141,222,32,141,82,33,141,84,33,141,86,33,141,88,33,141,90,33,141,92,33,141,94,33,141,102,34,141,104,34,141,106,34,141,108,34,141,110,34,141,112,34,141,204,34,169,208]},{"1188161":[141,224,32,141,98,33,141,228,33,169,83,1,141,80,33,141,206,33,141,208,33,141,80,34,141,206,34,169,200]},{"1188191":[141,96,33,141,226,33,141,100,34,141,218,40,141,92,41,169,220]},{"1188209":[141,210,33,141,212,33,141,214,33,141,216,33,141,218,33,141,220,33,141,222,33,141,76,34,169,202]},{"1188236":[141,224,33,141,98,34,141,90,40,141,220,40,169,120,1,141,78,34,169,227]},{"1188257":[141,82,34,141,84,34,169,134,1,141,208,34,141,78,35,169,52]},{"1188275":[141,210,34,141,212,34,141,214,34,141,80,35,141,82,35,141,84,35,141,86,35,141,208,35,141,210,35,141,212,35,141,214,35,141,82,36,141,84,36,141,86,36,141,88,36,141,212,36,141,214,36,141,84,37,141,86,37,141,212,37,141,214,37,141,86,38,169,211]},{"1188344":[141,226,34,169,2,3,141,228,34,169,204]},{"1188356":[141,230,34,141,232,34,141,234,34,141,236,34,141,238,34,141,240,34,141,76,35,169,206]},{"1188380":[141,98,35,141,226,35,141,216,37,141,88,38,141,216,38,141,88,39,169,197]},{"1188401":[141,100,35,141,228,35,141,220,37,141,92,38,141,220,38,141,92,39,169,171,6,141,102,35,141,230,35,141,102,36,141,228,36,141,230,36,141,96,39,169,170]},{"1188443":[141,104,35,169,132,3,141,106,35,141,110,35,141,236,35,141,106,36,141,232,36,141,234,36,141,236,36,141,238,36,169,171]},{"1188476":[141,108,35,169,89,7,141,200,35,141,74,36,141,204,36,141,78,37,141,208,38,141,82,39,141,212,39,169,87,7,141,202,35,141,76,36,141,206,36,141,80,37,141,210,38,141,84,39,169,255,1,141,204,35,141,78,36,141,208,36,141,82,38,141,212,38,141,86,39,169,124,1,141,206,35,141,80,36,141,210,36,141,84,38,141,214,38,169,92,1,141,224,35,169]},{"1188571":[1,141,90,36,141,216,36,169,194,1,141,92,36,169,24,2,141,94,36,169,98,1,141,96,36,169,6,1,141,98,36,141,224,36,141,92,37,169,7,1,141,100,36,141,226,36,169,4,1,141,218,36,141,88,37,169,212,1,141,220,36,169,25,2,141,222,36,169,121,1,141,82,37,141,210,37,169,5,1,141,90,37,169,102,1,141,94,37,169,102,7,141,96,37,169,180,6,141,98,37,141,100,37,141,102,37,141,104,37,141,106,37,141,108,37,141,110,37,141,112,37,169,229,6,141,208,37,141,80,38,169,196]},{"1188704":[141,218,37,141,90,38,141,218,38,141,90,39,169,113,1,141,222,37,169,101,1,141,228,37,141,230,37,141,232,37,141,234,37,141,236,37,141,238,37,141,240,37,169,228,6,141,210,39,141,82,40,141,84,40,141,86,40,141,212,40,141,214,40,141,86,41,141,88,41,141,216,41,141,218,41,169,225,6,141,214,39,169,253,2,141,216,39,141,88,40,169,207]},{"1188797":[141,218,39,169,231,6,141,216,40,141,90,41,141,220,41,169,105,7,141,248,56,169,225,6,141,250,56,141,252,56,141,254,56,169,227,6,141,120,57,169,229,2,141,122,57,141,126,57,169,236,2,141,124,57,169,240,2,141,248,57,169,243,2,141,250,57,141,252,57,141,254,57,169,52]},{"1188872":[141,148,61,96,169,229,2,141,174,39,141,44,40,141,46,40,141,50,40,141,172,40,141,174,40,141,40,41,141,44,41,141,168,41,141,176,41,141,40,42,141,48,42,141,172,42,141,178,42,169,138,7,141,170,40,141,176,40,141,170,42,141,42,43,141,48,43,141,174,43,169,235,2,141,180,40,141,48,41,141,174,41,141,44,42,141,50,42,141,174,42,169,236,2,141,52,41,141,40,43,141,44,43,141,46,43,141,50,43,96,169,213,1,141,134,36,169,101,1,141,6,37,169,102,1,141,8,37,141,138,37,169,198]},{"1189006":[141,134,37,141,8,38,141,136,38,141,8,39,141,136,39,141,6,40,141,8,40,169,113,1,141,136,37,169,28,2,141,10,38,141,138,38,141,10,39,141,138,39,169,52]},{"1189051":[141,14,39,141,142,39,141,144,39,141,14,40,141,16,40,141,18,40,141,20,40,141,22,40,141,24,40,141,26,40,141,28,40,141,142,40,141,146,40,141,148,40,141,150,40,141,152,40,141,154,40,141,156,40,141,158,40,141,14,41,141,16,41,141,18,41,141,24,41,141,26,41,141,28,41,141,30,41,141,32,41,141,140,41,141,142,41,141,144,41,141,146,41,141,152,41,141,154,41,141,158,41,141,160,41,141,6,42,141,8,42,141,10,42,141,12,42,141,16,42,141,18,42,141,20,42,141,22,42,141,24,42,141,28,42,141,30,42,141,132,42,141,134,42,141,136,42,141,140,42,141,142,42,141,144,42,141,146,42,141,148,42,141,150,42,141,152,42,141,154,42,141,156,42,141,6,43,141,10,43,141,14,43,141,18,43,141,26,43,141,132,43,141,134,43,141,136,43,141,138,43,141,142,43,141,146,43,141,148,43,141,152,43,141,154,43,141,4,44,141,8,44,141,10,44,141,14,44,141,18,44,141,20,44,141,24,44,141,134,44,141,136,44,141,138,44,141,144,44,141,146,44,141,148,44,141,152,44,141,10,45,141,12,45,141,16,45,141,20,45,141,22,45,141,138,45,141,140,45,141,142,45,141,148,45,169,106,1,141,140,39,141,12,40,141,130,42,141,2,43,141,130,43,141,2,44,141,130,44,169,250,1,141,140,40,169,218]},{"1189369":[141,144,40,141,156,41,141,20,43,141,22,43,141,24,43,141,150,43,141,22,44,141,150,44,141,8,45,141,146,45,169,134,1,141,12,41,141,138,41,141,4,42,169,54]},{"1189414":[141,20,41,141,22,41,141,148,41,141,150,41,141,18,45,169,228]},{"1189432":[141,134,41,169,229]},{"1189438":[141,136,41,169]},{"1189443":[1,141,162,41,169,113]},{"1189450":[141,14,42,141,26,42,141,140,44,169,92,1,141,32,42,141,158,42,141,28,43,141,154,44,141,24,45,141,150,45,169,4,1,141,34,42,169,212,1,141,36,42,169,53]},{"1189495":[141,138,42,141,8,43,141,6,44,141,14,45,141,144,45,169,98,1,141,160,42,141,30,43,141,156,43,141,26,45,141,152,45,169,226]},{"1189531":[141,4,43,141,12,43,141,16,43,141,140,43,141,144,43,141,12,44,141,16,44,141,142,44,169,248]},{"1189558":[141,26,44,169,206]},{"1189564":[141,28,44,141,156,44,169,96,1,141,132,44,141,6,45,141,136,45,169,103,1,141,4,45,141,134,45,169,114,1,141,8,46,169,94,1,141,10,46,141,12,46,141,14,46,141,16,46,141,18,46,141,20,46,169,116,1,141,22,46,96,169,52]},{"1189628":[141,168,34,96,169,241,2,141,176,43,169,242,2,141,178,43,169,132,1,141,48,44,169,133,1,141,50,44,169,146,3,141,176,44,169,147,3,141,178,44,169,148,3,141,48,45,169,149,3,141,50,45,169,52]},{"1189683":[141,86,47,96,169,116,7,141]},{"1189692":[40,169,225,6,141,2,40,169,87,7,141,4,40,141,134,40,169,121,7,141,128,40,169,236,2,141,130,40,169,89,7,141,132,40,141,6,41,169,229,2,141]},{"1189734":[41,141,2,41,141,4,41,169,106,7,141,8,41,169,243,2,141,128,41,141,130,41,169,241,2,141,132,41,169,242,2,141,134,41,169,138,3,141,136,41,169,132,1,141,4,42,141,132,42,141,4,43,141,132,43,169,133,1,141,6,42,141,134,42,141,6,43,141,134,43,96,169,150,14,141,94,35,141,222,35,141,94,36,141,222,36,141,94,37,169,151,14,141,96,35,141,224,35,141,96,36,141,224,36,141,96,37,169,148,14,141,222,37,169,149,14,141,224,37,169,128,1,141,94,39,169,129,1,141,96,39,169,132,1,141,222,39,141,94,40,169,133,1,141,224,39,141,96,40,169,18,2,141,224,43,96,169,152,3,141,160,37,169,34,5,141,162,37,169,37,1,141,32,38,169,38,1,141,34,38,169,57,2,141,158,38,141,164,38,96,169,57,2,141,74,61,96,169,15,2,141,46,43,96,169,243,2,141,34,36,141,36,36,169,201]},{"1189950":[141,162,36,141,164,36,169,227]},{"1189959":[141,34,37,141,36,37,96,169,35,3,141,182,57,169,36,3,141,184,57,141,186,57,141,188,57,141,190,57,169,254,2,141,52,58,169,255,2,141,54,58,169,38,3,141,56,58,141,58,58,141,60,58,141,62,58,169,157,3,141,178,58,169,3,3,141,180,58,169,50,2,141,182,58,141,52,59,169,51,2,141,184,58,141,186,58,141,188,58,141,190,58,169,162,3,141,50,59,169,53,2,141,54,59,141,180,59,169,106,4,141,56,59,169,51,3,141,58,59,141,60,59,141,62,59,169,52]},{"1190086":[141,182,59,141,186,59,141,188,59,141,58,60,141,60,60,141,62,60,141,28,50,141,156,50,141,160,50,169,113]},{"1190116":[141,30,50,169,218]},{"1190122":[141,32,50,141,154,50,169,225]},{"1190131":[141,158,50,169,130,3,141,24,51,169,124,3,141,34,51,169,27,2,141,24,50,141,34,50,141,152,50,141,162,50,141,26,51,141,28,51,141,30,51,141,32,51,169,226]},{"1190176":[141,26,50,169,242]},{"1190182":[141,184,59,169,8,1,141,56,60,169,52]},{"1190194":[141,190,59,175,197,243,126,41,255]},{"1190204":[201,3]},{"1190207":[208,6,169,18,2,141,190,59,169,36,3,141,192,57,141,194,57,141,196,57,169,37,3,141,198,57,169,213,2,141,200,57,141,210,57,169,204,2,141,204,57,141,212,57,169,38,3,141,64,58,141,66,58,141,68,58,169,39,3,141,70,58,169,247,2,141,72,58,169,227,2,141,76,58,141,78,58,169,51,2,141,192,58,141,194,58,141,196,58,169,52,2,141,198,58,141,72,59,169,246,2,141,200,58,169,150,3,141,202,58,169,51,3,141,64,59,141,66,59,169,170,3,141,68,59,169,163,3,141,70,59,141,200,59,169,151,3,141,74,59,169,52]},{"1190350":[141,192,59,141,194,59,141,198,59,141,64,60,141,66,60,169,156,2,141,196,59,169,10,1,141,68,60,169,11,1,141,70,60,141,72,60,141,74,60,141,76,60,141,78,60,141,80,60,141,82,60,141,84,60,141,86,60,141,88,60,141,90,60,141,92,60,141,94,60,141,96,60,141,98,60,141,100,60,141,102,60,96,169,15,2,141,178,43,96,169,15,2,141,168,34,96,169,57,2,141,148,61,96,169,57,2,141,80,47,169,163,11,141,82,47,141,206,47,141,208,47,169,163,11,141,84,48,141,86,48,141,88,48,141,90,48,141,84,50,141,86,50,141,88,50,141,90,50,169,172,11,141,212,48,169,173,11,141,214,48,141,86,49,141,214,49,169,169,11,141,216,48,141,88,49,141,216,49,169,170,11,141,218,48,169,197,11,141,84,49,169,200,11,141,90,49,169,202,11,141,212,49,169,205,11,141,218,49,96,226,48,175,201,80,127,208,31,175,67,243,126,32,132,173,194,32,166,6,138,9]},{"1190581":[36,143,90,199,126,166,7,138,9]},{"1190591":[36,143,92,199,126,128,14,194,32,169,49,36,143,90,199,126,26,143,92,199,126,175,98,243,126,32,34,173,166,4,138,9]},{"1190624":[36,143,80,199,126,166,5,138,9]},{"1190634":[36,143,82,199,126,166,6,138,9]},{"1190644":[36,143,84,199,126,166,7,138,9]},{"1190654":[36,143,86,199,126,226,32,175,117,129,48,208,51,175,200,80,127,208,31,175,119,243,126,32,132,173,194,32,166,6,138,9]},{"1190687":[36,143,96,199,126,166,7,138,9]},{"1190697":[36,143,98,199,126,128,14,194,32,169,49,36,143,96,199,126,26,143,98,199,126,226,32,175,103,129,48,208,3,130,122]},{"1190729":[175,24,244,126,32,93,173,194,32,175,101,129,48,143,42,199,126,166,5,138,9]},{"1190751":[36,143,44,199,126,166,6,138,9]},{"1190761":[36,143,46,199,126,166,7,138,9]},{"1190771":[36,143,48,199,126,226,32,175,103,129,48,201,255,240,48,175,103,129,48,32,93,173,194,32,169,48,40,143,50,199,126,166,5,138,9]},{"1190807":[36,143,52,199,126,166,6,138,9]},{"1190817":[36,143,54,199,126,166,7,138,9]},{"1190827":[36,143,56,199,126,128,17,194,32,169,127,32,143,50,199,126,143,52,199,126,143,54,199,126,194,32,175,60,128,48,41,255]},{"1190860":[240,4,34,158,173,164,226,32,175,111,243,126,201,255,240,34,32,132,173,194,32,166,6,138,224,144,208,3,169,127]},{"1190891":[9]},{"1190893":[36,143,100,199,126,166,7,138,9]},{"1190903":[36,143,102,199,126,128,17,194,32,169,127,36,143,100,199,126,143,102,199,126,143,38,199,126,175,110,243,126,41,255]},{"1190934":[24,105,7]},{"1190938":[41,248,255,170,175,202,80,127,41,255]},{"1190949":[208,3,130,215]},{"1190954":[226,32,169,128,143,110,243,126,194,48,162,128]},{"1190967":[165,26,41,12]},{"1190972":[74,74,240,58,201,1]},{"1190979":[240,98,201,2]},{"1190984":[208,3,130,180]},{"1190989":[191,15,254,13,41,255,239,143,70,199,126,191,17,254,13,41,255,239,143,134,199,126,191,19,254,13,41,255,239,143,198,199,126,191,21,254,13,41,255,239,143,6,200,126,107,191,15,254,13,41,255,231,143,70,199,126,191,17,254,13,41,255,231,143,134,199,126,191,19,254,13,41,255,231,143,198,199,126,191,21,254,13,41,255,231,143,6,200,126,107,191,15,254,13,41,255,235,143,70,199,126,191,17,254,13,41,255,235,143,134,199,126,191,19,254,13,41,255,235,143,198,199,126,191,21,254,13,41,255,235,143,6,200,126,107,191,15,254,13,41,255,227,143,70,199,126,191,17,254,13,41,255,227,143,134,199,126,191,19,254,13,41,255,227,143,198,199,126,191,21,254,13,41,255,227,143,6,200,126,107,191,15,254,13,143,70,199,126,191,17,254,13,143,134,199,126,191,19,254,13,143,198,199,126,191,21,254,13,143,6,200,126,107,160,144,201,232,3,144,6,200,233,232,3,128,245,132,4,160,144,201,100]},{"1191222":[144,6,200,233,100]},{"1191228":[128,245,132,5,160,144,201,10]},{"1191237":[144,6,200,233,10]},{"1191243":[128,245,132,6,160,144,201,1]},{"1191252":[144,4,200,58,208,252,132,7,96,160,144,201,100,144,5,200,233,100,128,247,132,5,160,144,201,10,144,5,200,233,10,128,247,132,6,160,144,201,1,144,4,200,58,208,252,132,7,96,160,144,201,10,144,5,200,233,10,128,247,132,6,160,144,201,1,144,4,200,58,208,252,132,7,96,166,27,208,1,107,174,12,4,224,255,208,1,107,201,2]},{"1191342":[240,11,175,100,243,126,63,223,173,164,208,1,107,124,251,173,32,132,173,194,32,166,6,138,9]},{"1191368":[36,143,148,199,126,166,7,138,9]},{"1191378":[36,143,150,199,126,169,48,40,143,152,199,126,107]},{"1191392":[128]},{"1191394":[64]},{"1191396":[32]},{"1191398":[16]},{"1191400":[8]},{"1191402":[4]},{"1191404":[2]},{"1191406":[1,128]},{"1191409":[64]},{"1191411":[32]},{"1191413":[16]},{"1191415":[8]},{"1191417":[4]},{"1191419":[23,174,23,174,50,174,75,174,103,174,128,174,153,174,178,174,203,174,230,174,1,175,28,175,53,175,80,175,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,52,244,126,74,74,74,74,76,190,173,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,54,244,126,41,7,76,190,173,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,53,244,126,74,74,74,74,74,76,190,173,169,144,36,143,154,199,126,169,146,36,143,156,199,126,226,32,175,53,244,126,41,2,76,190,173,169,145,36,143,154,199,126,169,144,36,143,156,199,126,226,32,175,57,244,126,41,15,76,190,173,169,145,36,143,154,199,126,169,148,36,143,156,199,126,226,32,175,52,244,126,41,15,76,190,173,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,56,244,126,41,15,76,190,173,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,55,244,126,74,74,74,74,76,190,173,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,56,244,126,74,74,74,74,76,190,173,169,144,36,143,154,199,126,169,150,36,143,156,199,126,226,32,175,53,244,126,41,28,74,74,76,190,173,169,144,36,143,154,199,126,169,152,36,143,156,199,126,226,32,175,55,244,126,41,15,76,190,173,169,145,36,143,154,199,126,169,146,36,143,156,199,126,226,32,175,57,244,126,74,74,74,74,76,190,173,169,146,36,143,154,199,126,169,151,36,143,156,199,126,226,32,175,54,244,126,74,74,74,76,190,173,107,159]},{"1191789":[4,112,159]},{"1191793":[5,112,159]},{"1191797":[6,112,159]},{"1191801":[7,112,159]},{"1191805":[8,112,159]},{"1191809":[9,112,159]},{"1191813":[10,112,159]},{"1191817":[11,112,159]},{"1191821":[12,112,159]},{"1191825":[13,112,159]},{"1191829":[14,112,159]},{"1191833":[15,112,107,159]},{"1191838":[244,126,159]},{"1191842":[101,127,159]},{"1191846":[102,127,159]},{"1191850":[103,127,159]},{"1191854":[104,127,159]},{"1191858":[105,127,159]},{"1191862":[106,127,159]},{"1191866":[107,127,159]},{"1191870":[108,127,159]},{"1191874":[109,127,159]},{"1191878":[110,127,159]},{"1191882":[111,127,107,72,226,48,173]},{"1191890":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169]},{"1191918":[141]},{"1191920":[67,169,128,141,1,67,169]},{"1191928":[141,129,33,169,101,141,130,33,169,127,141,131,33,156,2,67,169,5,141,3,67,169,112,141,4,67,169]},{"1191956":[141,5,67,169,11,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1191996":[67,194,48,104,143,13,192,126,107,72,139,226,48,169]},{"1192011":[72,171,173]},{"1192015":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169,128,141]},{"1192045":[67,141,1,67,169]},{"1192051":[141,129,33,169,101,141,130,33,169,127,141,131,33,156,2,67,169,5,141,3,67,169,112,141,4,67,169]},{"1192079":[141,5,67,169,11,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1192119":[67,194,48,171,104,162]},{"1192127":[138,107,165,17,34,156,135]},{"1192135":[214,176,164,238,176,164,13,177,164,14,178,164,36,178,164,169,128,141,16,7,34,61,137]},{"1192159":[34,51,131]},{"1192163":[34,159,145,164,169,7,133,20,230,17,107,32,45,179,100,200,100,201,34,54,178,164,208,11,162,15,169]},{"1192191":[159]},{"1192193":[16,112,202,16,249,169,15,133,19,230,17,107,139,75,171,32,157,179,165,246,41,16,240,3,32,233,180,165,246,41,32,240,3,32,246,180,165,244,41,1,240,17,165,201,26,201,36,144,3,56,233,36,133,201,169,32,141,47,1,165,244,41,2,240,15,165,201,58,16,3,24,105,36,133,201,169,32,141,47,1,165,244,41,4,240,19,165,201,24,105,9,201,36,144,3,56,233,36,133,201,169,32,141,47,1,165,244,41,8,240,17,165,201,56,233,9,16,3,24,105,36,133,201,169,32,141,47,1,165,244,5,246,41,192,240,77,166,201,191,234,177,164,16,43,201,240,208,4,230,17,128,69,201,241,208,5,32,246,180,128,52,201,242,208,5,32,233,180,128,43,201,243,208,11,230,17,230,17,169,44,141,46,1,128,36,128,26,166,200,159]},{"1192384":[16,112,138,26,41,15,133,200,208,7,156,46,1,230,17,128,13,169,43,141,46,1,165,244,41,16,240,2,230,17,32,155,180,32,80,180,169,1,133,20,171,107,1,2,3,4,5,6,7,8,240,9,10,11,12,13,14,15,16,241,17,18,19,20,21,22,23,24,242,25,26,27,28,29,30,31,32,243,34,54,178,164,208,8,169,60,141,46,1,198,17,107,169,27,141,47,1,230,17,107,169,1,133,16,169,1,133,17,100,176,156,157,11,100,200,100,201,107,218,90,162,15,191]},{"1192508":[16,112,208,3,130,161]},{"1192515":[202,16,244,194,32,162,14,169]},{"1192525":[159,208,80,127,202,202,16,248,32,233,178,175,186,128,48,143,218,80,127,175,188,128,48,143,220,80,127,175,190,128,48,143,222,80,127,175,192,128,48,143]},{"1192566":[81,127,175,194,128,48,143,2,81,127,175,196,128,48,143,4,81,127,175,198,128,48,143,6,81,127,169,2]},{"1192595":[133,4,34,160,175,160,226,32,175]},{"1192605":[81,127,201,49,208,65,175,1,81,127,201,65,208,57,175,2,81,127,201,89,208,49,175,3,81,127,201,38,208,41,175,4,81,127,201,83,208,33,175,5,81,127,201,88,208,25,175,6,81,127,201,151,208,17,175,7,81,127,201,147,208,9,122,250,169,1,143,158,80,127,107,122,250,169]},{"1192680":[107,169]},{"1192684":[133]},{"1192686":[133,2,169,11]},{"1192691":[133,4,166]},{"1192695":[191]},{"1192697":[16,112,58,41,31]},{"1192703":[164,4,240,4,10,136,128,250,235,166,2,31,208,80,127,159,208,80,127,165,4,56,233,5]},{"1192728":[16,6,24,105,8]},{"1192734":[230,2,133,4,165]},{"1192740":[26,133]},{"1192743":[201,16]},{"1192746":[144,201,96,173]},{"1192751":[67,72,173,1,67,72,173,2,67,72,173,3,67,72,173,4,67,72,173,5,67,72,173,6,67,72,169]},{"1192779":[141]},{"1192781":[67,169,128,141,1,67,169,2,141,129,33,169,16,141,130,33,169,126,141,131,33,169,197,141,2,67,169,182,141,3,67,169,164,141,4,67,169,98,141,5,67,169,1,141,6,67,169,1,141,11,66,104,141,6,67,104,141,5,67,104,141,4,67,104,141,3,67,104,141,2,67,104,141,1,67,104,141]},{"1192859":[67,96,194,32,165,200,41,255]},{"1192868":[10,170,191,232,179,164,24,105,132,96,235,143,2,17]},{"1192883":[165,201,41,255]},{"1192888":[10,170,191,8,180,164,24,105,163,97,235,143,18,17]},{"1192903":[235,24,105,32]},{"1192908":[235,143,30,17]},{"1192913":[235,24,105,3]},{"1192918":[235,143,38,17]},{"1192923":[235,24,105,61]},{"1192928":[235,143,46,17]},{"1192933":[226,32,96,64]},{"1192938":[67]},{"1192940":[70]},{"1192942":[73]},{"1192944":[76]},{"1192946":[79]},{"1192948":[82]},{"1192950":[85]},{"1192952":[160]},{"1192954":[163]},{"1192956":[166]},{"1192958":[169]},{"1192960":[172]},{"1192962":[175]},{"1192964":[178]},{"1192966":[181]},{"1192968":[223,255,226,255,229,255,232,255,235,255,238,255,241,255,244,255,247,255,63]},{"1192988":[66]},{"1192990":[69]},{"1192992":[72]},{"1192994":[75]},{"1192996":[78]},{"1192998":[81]},{"1193000":[84]},{"1193002":[87]},{"1193004":[159]},{"1193006":[162]},{"1193008":[165]},{"1193010":[168]},{"1193012":[171]},{"1193014":[174]},{"1193016":[177]},{"1193018":[180]},{"1193020":[183]},{"1193022":[255]},{"1193024":[2,1,5,1,8,1,11,1,14,1,17,1,20,1,23,1,194,32,165,200,41,255]},{"1193047":[10,170,191,232,179,164,24,105,132,96,235,143,10,17]},{"1193062":[165,201,41,255]},{"1193067":[10,170,191,8,180,164,24,105,163,97,235,143,58,17]},{"1193082":[235,24,105,32]},{"1193087":[235,143,70,17]},{"1193092":[235,24,105,3]},{"1193097":[235,143,78,17]},{"1193102":[235,24,105,61]},{"1193107":[235,143,86,17]},{"1193112":[226,32,96,194,48,162,15]},{"1193120":[191]},{"1193122":[16,112,41,255]},{"1193127":[155,10,10,10,133]},{"1193133":[152,10,10,10,10,133,3,166]},{"1193142":[191,238,148,164,166,3,157,6,16,166]},{"1193153":[191,240,148,164,166,3,157,8,16,166]},{"1193164":[191,242,148,164,166,3,157,14,16,166]},{"1193175":[191,244,148,164,166,3,157,16,16,187,202,48,2,128,186,226,48,96,169,43,141,46,1,165,200,26,41,15,133,200,96,169,43,141,46,1,165,200,58,41,15,133,200,96,97,163]},{"1193222":[51,1,10,2,10]},{"1193228":[2,5,14,6,14]},{"1193234":[2]},{"1193236":[6,21,6]},{"1193240":[2,12,14,13,14]},{"1193246":[2,98,6,99,6]},{"1193252":[2,10,2,11,2]},{"1193258":[2,32,14,33,14]},{"1193264":[2,133,26,134,26]},{"1193270":[2,171,30,171,30,97,195]},{"1193278":[51,17,10,18,10]},{"1193284":[2]},{"1193286":[30,22,14]},{"1193290":[2,48,6]},{"1193294":[30]},{"1193296":[2,28,14,28,78]},{"1193302":[2,114,6,115,6]},{"1193308":[2,26,2,27,2]},{"1193314":[2,48,14,49,14]},{"1193320":[2,149,26,150,26]},{"1193326":[2,171,30,171,30,98,3]},{"1193334":[51,7,10,23,202]},{"1193340":[2,8,10,24,202]},{"1193346":[2,9,10,25,202]},{"1193352":[2,44,6,44,70]},{"1193358":[2,34,2,35,2]},{"1193364":[2,36,2,37,2]},{"1193370":[2,38,14,39,14]},{"1193376":[2,40,10,41,10]},{"1193382":[2,138,29]},{"1193386":[2,98,35]},{"1193390":[51,23,10,7,202]},{"1193396":[2,24,10,8,202]},{"1193402":[2,25,10,9,202]},{"1193408":[2,60,6,61,6]},{"1193414":[2,50,2,51,2]},{"1193420":[2,52,2,53,2]},{"1193426":[2,54,14,55,14]},{"1193432":[2,56,10,57,10]},{"1193438":[2,154,29]},{"1193442":[2,98,99]},{"1193446":[51,42,26,43,26]},{"1193452":[2,64,30,65,30]},{"1193458":[2,66,26,66,90]},{"1193464":[2,29,6,30,6]},{"1193470":[2,72,6,73,6]},{"1193476":[2,74,14,75,14]},{"1193482":[2,76,22,77,22]},{"1193488":[2,78,2,79,2]},{"1193494":[2]},{"1193496":[2,139,29,98,131]},{"1193502":[51,58,26,59,26]},{"1193508":[2,80,30,81,30]},{"1193514":[2,82,26,83,26]},{"1193520":[2,45,6,46,6]},{"1193526":[2,88,6,89,6]},{"1193532":[2,90,14,91,14]},{"1193538":[2,92,22,93,22]},{"1193544":[2,94,2,95,2]},{"1193550":[2]},{"1193552":[2,155,29,98,195]},{"1193558":[51,14,14,15,14]},{"1193564":[2,100,6,101,6]},{"1193570":[2,109,10,110,10]},{"1193576":[2,111,26,111,90]},{"1193582":[2,129,6,129,70]},{"1193588":[2,130,10,131,10]},{"1193594":[2,132,6,132,70]},{"1193600":[2,47,74,47,10]},{"1193606":[2,103,94,103,30,98,227]},{"1193614":[51,31,78,31,14]},{"1193620":[2,116,6,117,6]},{"1193626":[2,125,10,126,10]},{"1193632":[2,127,26,127,90]},{"1193638":[2,145,6,145,70]},{"1193644":[2,146,10,147,10]},{"1193650":[2,148,6,148,70]},{"1193656":[2,62,10,63,10]},{"1193662":[2,103,222,103,158,255,255,96,132]},{"1193672":[3,134,29,134,29,96,164]},{"1193680":[3,150,29,150,29,96,135]},{"1193688":[3,134,29,134,29,96,167]},{"1193696":[3,150,29,150,29,96,138]},{"1193704":[3,134,29,134,29,96,170]},{"1193712":[3,150,29,150,29,96,141]},{"1193720":[3,134,29,134,29,96,173]},{"1193728":[3,150,29,150,29,96,144]},{"1193736":[3,134,29,134,29,96,176]},{"1193744":[3,150,29,150,29,96,147]},{"1193752":[3,134,29,134,29,96,179]},{"1193760":[3,150,29,150,29,96,150]},{"1193768":[3,134,29,134,29,96,182]},{"1193776":[3,150,29,150,29,96,153]},{"1193784":[3,134,29,134,29,96,185]},{"1193792":[3,150,29,150,29,96,228]},{"1193800":[3,134,29,134,29,97,4]},{"1193808":[3,150,29,150,29,96,231]},{"1193816":[3,134,29,134,29,97,7]},{"1193824":[3,150,29,150,29,96,234]},{"1193832":[3,134,29,134,29,97,10]},{"1193840":[3,150,29,150,29,96,237]},{"1193848":[3,134,29,134,29,97,13]},{"1193856":[3,150,29,150,29,96,240]},{"1193864":[3,134,29,134,29,97,16]},{"1193872":[3,150,29,150,29,96,243]},{"1193880":[3,134,29,134,29,97,19]},{"1193888":[3,150,29,150,29,96,246]},{"1193896":[3,134,29,134,29,97,22]},{"1193904":[3,150,29,150,29,96,249]},{"1193912":[3,134,29,134,29,97,25]},{"1193920":[3,150,29,150,29,96,196]},{"1193928":[3]},{"1193930":[2]},{"1193932":[2,96,196]},{"1193936":[3,103,222,103,158,97,130]},{"1193944":[7]},{"1193946":[2]},{"1193948":[2]},{"1193950":[2]},{"1193952":[2,97,162,128,3]},{"1193958":[2]},{"1193960":[2,97,165,128,3]},{"1193966":[2]},{"1193968":[2,97,226]},{"1193972":[7]},{"1193974":[2]},{"1193976":[2]},{"1193978":[2]},{"1193980":[2,97,130]},{"1193984":[7,187,26,188,26,188,90,187,90,97,162,128,3,189,26,189,154,97,165,128,3,189,90,189,218,97,226]},{"1194012":[7,187,154,188,154,188,218,187,218,255,255,165,160,201,240,208,2,128,33,201,241,208,2,128,27,201,176,208,2,128,21,201,208,208,2,128,15,192]},{"1194051":[240,11,169,133,157,210,12,169,4,157,80,14,107,169,128,157,210,12,169,1,157,80,14,107,127]},{"1194077":[127]},{"1194079":[127]},{"1194081":[127]},{"1194083":[127]},{"1194085":[127]},{"1194087":[127]},{"1194089":[127]},{"1194091":[127]},{"1194093":[127]},{"1194095":[127]},{"1194097":[127]},{"1194099":[127]},{"1194101":[127]},{"1194103":[127]},{"1194105":[127]},{"1194107":[127]},{"1194109":[127]},{"1194111":[127]},{"1194113":[127]},{"1194115":[127]},{"1194117":[127]},{"1194119":[127]},{"1194121":[127]},{"1194123":[127]},{"1194125":[127]},{"1194127":[127]},{"1194129":[127]},{"1194131":[127]},{"1194133":[127]},{"1194135":[127]},{"1194137":[127]},{"1194139":[8,162,128,142]},{"1194144":[33,194,32,169,64,99,141,22,33,169,39,192,141,66,67,162,126,142,68,67,169,64]},{"1194167":[141,69,67,169,1,24,141,64,67,162,16,142,11,66,162,15,142]},{"1194185":[33,40,107,8,162,128,142]},{"1194193":[33,194,32,169,64,99,141,22,33,169,91,184,141,66,67,162,164,142,68,67,169,64]},{"1194216":[141,69,67,169,1,24,141,64,67,162,16,142,11,66,162,15,142]},{"1194234":[33,40,107,175,127,83,127,240,2,56,107,169,1,143,127,83,127,175,1,83,127,143,160,244,126,175,2,83,127,143,161,244,126,175]},{"1194269":[83,127,201,3,208,30,175,8,83,127,170,175,9,83,127,159,46,1,126,194,48,175,10,83,127,170,175,12,83,127,34,80,186,164,226,48,169]},{"1194307":[143,127,83,127,24,107,175,255,83,127,240,2,56,107,169,1,143,255,83,127,165,123,143,129,83,127,165,27,143,130,83,127,165,160,143,131,83,127,165,161,143,132,83,127,165,118,143,133,83,127,169,1,143,128,83,127,169]},{"1194365":[143,255,83,127,24,107,175,255,83,127,240,2,56,107,169,1,143,255,83,127,165,123,143,129,83,127,165,27,143,130,83,127,165,160,143,131,83,127,165,161,143,132,83,127,165,118,143,133,83,127,169,2,143,128,83,127,169]},{"1194423":[143,255,83,127,24,107,165,138,201,27,240,4,92,205,240,5,139,75,171,169,7,157,80,15,32,219,185,34,231,244,30,32,27,186,171,107,169,2,133,6,100,7,189,192,13,10,10,10,10,105,251,133,8,169,185,105]},{"1194480":[133,9,34,117,223,5,34,92,220,6,96]},{"1194493":[247,255,198]},{"1194498":[2]},{"1194503":[200]},{"1194506":[2]},{"1194509":[248,255,198]},{"1194514":[2]},{"1194519":[202,64]},{"1194522":[2,175,103,129,48,240,6,175,148,129,48,208,4,158,208,13,96,169,150,160,1,34,124,128,162,144,14,175,24,244,126,207,103,129,48,144,4,34,153,215,160,165,26,74,74,74,74,74,41,1,157,192,13,96,90,8,172]},{"1194580":[84,34,26,150,160,40,122,107]},{"1343488":[107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107]},{"1540096":[144,43,128,183,162,225,201,79,28,185,230,32,88,103,101,166,17,207,121,76,199,97,209,212,211,155,120,59,251,170,163,21,124,54,215,139,11,173,38,181,59,105,227,131,127,17,226,146,128,103,225,156,207,213,69,245,107,54,182,122,26,57,132,19,71,236,216,174,87,158,244,11,97,187,141,10,77,98,142,34,227,114,197,113,247,153,11,16,177,19,82,94,120,67,116,143,55,105,7,154,37,14,48,106,3,158,142,15,119,146,56,51,137,93,51,179,1,161,191,105,141,151,39,108,76,155,168,24,153,126,178,219,167,68,39,168,165,188,245,170,238,46,202,161,254,193,254,73,173,59,202,66,243,108,217,113,25,3,123,227,169,134,108,208,162,43,251,25,217,219,71,136,122,32,31,213,62,199,63,127,135,212,144,156,209,235,249,120,17,47,185,155,119,1,128,223,57,23,35,155,98,227,166,83,60,220,249,201,52,204,61,71,47,158,28,37,238,132,158,69,184,36,1,170,227,178,181,147,5,161,8,9,56,25,214,247,166,44,245,29,77,231,59,45,27,188,134,64,216,235,117,242,139,234,140,212,183,241,166,179,99,107,130,146,218,145,93,51,253,102,50,146,200,42,194,16,131,73,27,185,48,120,170,214,2,170,146,33,230,4]},{"1540387":[240,238,64,63,94,110,23,136,169,167,112,206,202,226,65,161,34,7,36,247,200,224,86,80,224,133,246,98,129,67,225,183,107,126,158,14,34,45,243,86,73,115,204,178,67,27,89,64,94,118,169,213,246,134,48,242,46,64,225,119,216,41,243,184,63,195,132,25,229,141,113,140,32,169,116,43,59,48,58,131,225,184,61,251,72,239,125,69,219,119,182,106,224,187,88,85,180,197,106,162,54,174,194,173,175,102,130,171,249,15,217,88,149,101,152,220,153,71,226,113,205,111,162,249,93,43,191,103,106,232,147,56,23,192,122,216,116,19,45,148,123,101,81,109,254,5,250,30,179,60,202,4,222,231]},{"1540542":[151,126,164,77,47,114,162,79,143,169,63,102,56,32,61,212,170,165,119,171,243,200,190,54,240,175,20,87,3,57,31,219,169,240,40,5,31,230,40,181,210,118,26,164,186,124,191,127,176,40,39,145,211,52,67,71,170,93,3,119,244,131,207,55,85,8,79,141,109,163,10,107,53,226,201,118,208,65,196,73,75,171,63,214,126,4,219,253,24,129,140,23,92,62,52,23,116,19,242,252,14,58,239,226,214,118,8,99,3,39,200,9,69,193,134,107,50,247,243,56,57,128,255,131,226,117,111,137,136,166,115,119,243,36,233,30,225,178,224,24,243,143,216,34,203,234,142,242,30,194,133,68,40,54,200,154,180,122,160,154,18,217,151,55,29,167,87,161,247,39,171,141,171,84,78,52,148,153,130,157,249,29,40,228,114,206,213,115,217,170,241,235,124,138,10,85,228,189,132,54,4,78,231,157,64,105,15,219,226,227,6,8,126,19,91,118,166,68,214,121,132,42,16,112,55,207,8,254,225,117,248,26,74,100,151,213,127,226,252,202,239,186,255,43,179,20,204,112,62,154,51,219,53,105,53,155,224,182,146,65,147,192,93,180,131,212,15,12,215,246,101,237,47,18,118,194,218,212,67,187,128,231,17,169,70,124,193,102,32,23,117,197,9,112,69,23,156,67,102,233,78,76,2,223,78,61,3,236,73,210,146,24,223,246,83,103,156,177,75,148,120,46,248,249,74,16,233,192,184,141,168,226,68,179,62,78,99,198,74,242,95,50,53,212,28,71,56,155,219,168,241,75,17,156,99,158,114,32,173,29,68,69,234,179,160,176,138,148,184,9,53,59,139,96,47,197,70,237,208,51,141,151,37,205,192,222,116,178,241,8,236,90,104,234,60,98,70,233,126,132,255,115,54,124,133,62,154,181,206,188,87,120,83,82,10,60,136,160,228,66,172,232,62,93,236,130,250,111,168,211,201,102,154,221,245,93,234,115,57,6,53,12,115,243,220,108,224,156,234,15,168,216,93,240,139,106,228,37,186,12,12,229,119,2,153,178,105,167,236,217,75,255,238,236,226,10,22,48,211,149,171,247,26,61,247,215,6,121,176,110,87,62,185,199,182,102,5,149,153,207,1,108,98,244,132,212,112,59,224,86,102,164,188,28,143,218,59,151,25,235,64,193,195,250,177,23,93,138,36,222,61,119,85,218,159,153,123,68,114,104,67,51,114,130,168,9,246,196,211,159]},{"1541093":[63,247,66,174,232,46,160,187,48,55,94,226,231,16,35,51,9,237,162]},{"1541113":[112,204,35,248,130,224,246]},{"1541122":[30]},{"1541124":[60]},{"1541126":[90]},{"1541128":[120]},{"1541130":[150]},{"1541132":[180]},{"1541134":[210]},{"1541136":[240]},{"1541138":[14,1,44,1,74,1,104,1,134,1,164,1,194,1,224,1,254,1,28,2,58,2,88,2,118,2,148,2,178,2,208,2,238,2,12,3,42,3,72,3,102,3,132,3,162,3,192,3,222,3,252,3,26,4,56,4,86,4,116,4,146,4,176,4,206,4,236,4,10,5,40,5,70,5,100,5,130,5,160,5,190,5,220,5,250,5,24,6,54,6,84,6,114,6,144,6,174,6,204,6,234,6,8,7,38,7,68,7,98,7,128,7,158,7,188,7,218,7,248,7,22,8,52,8,82,8,112,8,142,8,172,8,202,8,232,8,6,9,36,9,66,9,96,9,126,9,156,9,186,9,216,9,246,9,20,10,50,10,80,10,110,10,140,10,170,10,200,10,230,10,4,11,34,11,64,11,94,11,124,11,154,11,184,11,214,11,244,11,18,12,48,12,78,12,108,12,138,12,168,12,198,12,228,12,2,13,32,13,62,13,92,13,122,13,152,13,182,13,212,13,242,13,16,14,46,14,76,14,106,14,136,14,166,14,196,14,226,14]},{"1541377":[15,30,15,60,15,90,15,120,15,150,15,180,15,210,15,240,15,14,16,44,16,74,16,104,16,134,16,164,16,194,16,224,16,254,16,28,17,58,17,88,17,118,17,148,17,178,17,208,17,238,17,12,18,42,18,72,18,102,18,132,18,162,18,192,18,222,18,252,18,26,19,56,19,86,19,116,19,146,19,176,19,206,19,236,19,10,20,40,20,70,20,100,20,130,20,160,20,190,20,220,20,250,20,24,21,54,21,84,21,114,21,144,21,174,21,204,21,234,21,8,22,38,22,68,22,98,22,128,22,158,22,188,22,218,22,248,22,22,23,52,23,82,23,112,23,142,23,172,23,202,23,232,23,6,24,36,24,66,24,96,24,126,24,156,24,186,24,216,24,246,24,20,25,50,25,80,25,110,25,140,25,170,25,200,25,230,25,4,26,34,26,64,26,94,26,124,26,154,26,184,26,214,26,244,26,18,27,48,27,78,27,108,27,138,27,168,27,198,27,228,27,2,28,32,28,62,28,92,28,122,28,152,28,182,28,212,28,242,28,16,29,46,29,76,29,106,29,136,29,166,29,196,29,226,29]},{"1541633":[30,30,30,60,30,90,30,120,30,150,30,180,30,210,30,240,30,14,31,44,31,74,31,104,31,134,31,164,31,194,31,224,31,254,31,28,32,58,32,88,32,118,32,148,32,178,32,208,32,238,32,12,33,42,33,72,33,102,33,132,33,162,33,192,33,222,33,252,33,26,34,56,34,86,34,116,34,146,34,176,34,206,34,236,34,10,35,40,35,70,35,100,35,130,35,160,35,190,35,220,35,250,35,24,36,54,36,84,36,114,36,144,36,174,36,204,36,234,36,8,37,38,37,68,37,98,37,128,37,158,37,188,37,218,37,248,37,22,38,52,38,82,38,112,38,142,38,172,38,202,38,232,38,6,39,36,39,66,39,96,39,126,39,156,39,186,39,216,39,246,39,20,40,50,40,80,40,110,40,140,40,170,40,200,40,230,40,4,41,34,41,64,41,94,41,124,41,154,41,184,41,214,41,244,41,18,42,48,42,78,42,108,42,138,42,168,42,198,42,228,42,2,43,32,43,62,43,92,43,122,43,152,43,182,43,212,43,242,43,16,44,46,44,76,44,106,44,136,44,166,44,196,44,226,44]},{"1541889":[45,30,45,60,45,90,45,120,45,150,45,180,45,210,45,240,45,14,46,44,46,74,46,104,46,134,46,164,46,194,46,224,46,254,46,28,47,58,47,88,47,118,47,148,47,178,47,208,47,238,47,12,48,42,48,72,48,102,48,132,48,162,48,192,48,222,48,252,48,26,49,56,49,86,49,116,49,146,49,176,49,206,49,236,49,10,50,40,50,70,50,100,50,130,50,160,50,190,50,220,50,250,50,24,51,54,51,84,51,114,51,144,51,174,51,204,51,234,51,8,52,38,52,68,52,98,52,128,52,158,52,188,52,218,52,248,52,22,53,52,53,82,53,112,53,142,53,172,53,202,53,232,53,6,54,36,54,66,54,96,54,126,54,156,54,186,54,216,54,246,54,20,55,50,55,80,55,110,55,140,55,170,55,200,55,230,55,4,56,34,56,64,56,94,56,124,56,154,56,184,56,214,56,244,56,18,57,48,57,78,57,108,57,138,57,168,57,198,57,228,57,2,58,32,58,62,58,92,58,122,58,152,58,182,58,212,58,242,58,16,59,46,59,76,59,106,59,136,59,166,59,196,59,226,59,117]},{"1542146":[255]},{"1542148":[255]},{"1542150":[255]},{"1542152":[185]},{"1542154":[181]},{"1542156":[170]},{"1542158":[194]},{"1542160":[174]},{"1542162":[187]},{"1542164":[255]},{"1542166":[161]},{"1542168":[255]},{"1542170":[255]},{"1542172":[255,127,117]},{"1542176":[255]},{"1542178":[255]},{"1542180":[255]},{"1542182":[185]},{"1542184":[181]},{"1542186":[170]},{"1542188":[194]},{"1542190":[174]},{"1542192":[187]},{"1542194":[255]},{"1542196":[162]},{"1542198":[255]},{"1542200":[255]},{"1542202":[255,127,117]},{"1542206":[255]},{"1542208":[255]},{"1542210":[255]},{"1542212":[185]},{"1542214":[181]},{"1542216":[170]},{"1542218":[194]},{"1542220":[174]},{"1542222":[187]},{"1542224":[255]},{"1542226":[163]},{"1542228":[255]},{"1542230":[255]},{"1542232":[255,127,117]},{"1542236":[255]},{"1542238":[255]},{"1542240":[255]},{"1542242":[185]},{"1542244":[181]},{"1542246":[170]},{"1542248":[194]},{"1542250":[174]},{"1542252":[187]},{"1542254":[255]},{"1542256":[164]},{"1542258":[255]},{"1542260":[255]},{"1542262":[255,127,117]},{"1542266":[255]},{"1542268":[255]},{"1542270":[255]},{"1542272":[185]},{"1542274":[181]},{"1542276":[170]},{"1542278":[194]},{"1542280":[174]},{"1542282":[187]},{"1542284":[255]},{"1542286":[165]},{"1542288":[255]},{"1542290":[255]},{"1542292":[255,127,117]},{"1542296":[255]},{"1542298":[255]},{"1542300":[255]},{"1542302":[185]},{"1542304":[181]},{"1542306":[170]},{"1542308":[194]},{"1542310":[174]},{"1542312":[187]},{"1542314":[255]},{"1542316":[166]},{"1542318":[255]},{"1542320":[255]},{"1542322":[255,127,117]},{"1542326":[255]},{"1542328":[255]},{"1542330":[255]},{"1542332":[185]},{"1542334":[181]},{"1542336":[170]},{"1542338":[194]},{"1542340":[174]},{"1542342":[187]},{"1542344":[255]},{"1542346":[167]},{"1542348":[255]},{"1542350":[255]},{"1542352":[255,127,117]},{"1542356":[255]},{"1542358":[255]},{"1542360":[255]},{"1542362":[185]},{"1542364":[181]},{"1542366":[170]},{"1542368":[194]},{"1542370":[174]},{"1542372":[187]},{"1542374":[255]},{"1542376":[168]},{"1542378":[255]},{"1542380":[255]},{"1542382":[255,127,117]},{"1542386":[255]},{"1542388":[255]},{"1542390":[255]},{"1542392":[185]},{"1542394":[181]},{"1542396":[170]},{"1542398":[194]},{"1542400":[174]},{"1542402":[187]},{"1542404":[255]},{"1542406":[169]},{"1542408":[255]},{"1542410":[255]},{"1542412":[255,127,117]},{"1542416":[255]},{"1542418":[255]},{"1542420":[185]},{"1542422":[181]},{"1542424":[170]},{"1542426":[194]},{"1542428":[174]},{"1542430":[187]},{"1542432":[255]},{"1542434":[161]},{"1542436":[160]},{"1542438":[255]},{"1542440":[255]},{"1542442":[255,127,117]},{"1542446":[255]},{"1542448":[255]},{"1542450":[185]},{"1542452":[181]},{"1542454":[170]},{"1542456":[194]},{"1542458":[174]},{"1542460":[187]},{"1542462":[255]},{"1542464":[161]},{"1542466":[161]},{"1542468":[255]},{"1542470":[255]},{"1542472":[255,127,117]},{"1542476":[255]},{"1542478":[255]},{"1542480":[185]},{"1542482":[181]},{"1542484":[170]},{"1542486":[194]},{"1542488":[174]},{"1542490":[187]},{"1542492":[255]},{"1542494":[161]},{"1542496":[162]},{"1542498":[255]},{"1542500":[255]},{"1542502":[255,127,117]},{"1542506":[255]},{"1542508":[255]},{"1542510":[185]},{"1542512":[181]},{"1542514":[170]},{"1542516":[194]},{"1542518":[174]},{"1542520":[187]},{"1542522":[255]},{"1542524":[161]},{"1542526":[163]},{"1542528":[255]},{"1542530":[255]},{"1542532":[255,127,117]},{"1542536":[255]},{"1542538":[255]},{"1542540":[185]},{"1542542":[181]},{"1542544":[170]},{"1542546":[194]},{"1542548":[174]},{"1542550":[187]},{"1542552":[255]},{"1542554":[161]},{"1542556":[164]},{"1542558":[255]},{"1542560":[255]},{"1542562":[255,127,117]},{"1542566":[255]},{"1542568":[255]},{"1542570":[185]},{"1542572":[181]},{"1542574":[170]},{"1542576":[194]},{"1542578":[174]},{"1542580":[187]},{"1542582":[255]},{"1542584":[161]},{"1542586":[165]},{"1542588":[255]},{"1542590":[255]},{"1542592":[255,127,117]},{"1542596":[255]},{"1542598":[255]},{"1542600":[185]},{"1542602":[181]},{"1542604":[170]},{"1542606":[194]},{"1542608":[174]},{"1542610":[187]},{"1542612":[255]},{"1542614":[161]},{"1542616":[166]},{"1542618":[255]},{"1542620":[255]},{"1542622":[255,127,117]},{"1542626":[255]},{"1542628":[255]},{"1542630":[185]},{"1542632":[181]},{"1542634":[170]},{"1542636":[194]},{"1542638":[174]},{"1542640":[187]},{"1542642":[255]},{"1542644":[161]},{"1542646":[167]},{"1542648":[255]},{"1542650":[255]},{"1542652":[255,127,117]},{"1542656":[255]},{"1542658":[255]},{"1542660":[185]},{"1542662":[181]},{"1542664":[170]},{"1542666":[194]},{"1542668":[174]},{"1542670":[187]},{"1542672":[255]},{"1542674":[161]},{"1542676":[168]},{"1542678":[255]},{"1542680":[255]},{"1542682":[255,127,117]},{"1542686":[255]},{"1542688":[255]},{"1542690":[185]},{"1542692":[181]},{"1542694":[170]},{"1542696":[194]},{"1542698":[174]},{"1542700":[187]},{"1542702":[255]},{"1542704":[161]},{"1542706":[169]},{"1542708":[255]},{"1542710":[255]},{"1542712":[255,127,117]},{"1542716":[255]},{"1542718":[255]},{"1542720":[185]},{"1542722":[181]},{"1542724":[170]},{"1542726":[194]},{"1542728":[174]},{"1542730":[187]},{"1542732":[255]},{"1542734":[162]},{"1542736":[160]},{"1542738":[255]},{"1542740":[255]},{"1542742":[255,127,117]},{"1542746":[255]},{"1542748":[255]},{"1542750":[185]},{"1542752":[181]},{"1542754":[170]},{"1542756":[194]},{"1542758":[174]},{"1542760":[187]},{"1542762":[255]},{"1542764":[162]},{"1542766":[161]},{"1542768":[255]},{"1542770":[255]},{"1542772":[255,127,117]},{"1542776":[255]},{"1542778":[255]},{"1542780":[185]},{"1542782":[181]},{"1542784":[170]},{"1542786":[194]},{"1542788":[174]},{"1542790":[187]},{"1542792":[255]},{"1542794":[162]},{"1542796":[162]},{"1542798":[255]},{"1542800":[255]},{"1542802":[255,127,117]},{"1542806":[255]},{"1542808":[255]},{"1542810":[185]},{"1542812":[181]},{"1542814":[170]},{"1542816":[194]},{"1542818":[174]},{"1542820":[187]},{"1542822":[255]},{"1542824":[162]},{"1542826":[163]},{"1542828":[255]},{"1542830":[255]},{"1542832":[255,127,117]},{"1542836":[255]},{"1542838":[255]},{"1542840":[185]},{"1542842":[181]},{"1542844":[170]},{"1542846":[194]},{"1542848":[174]},{"1542850":[187]},{"1542852":[255]},{"1542854":[162]},{"1542856":[164]},{"1542858":[255]},{"1542860":[255]},{"1542862":[255,127,117]},{"1542866":[255]},{"1542868":[255]},{"1542870":[185]},{"1542872":[181]},{"1542874":[170]},{"1542876":[194]},{"1542878":[174]},{"1542880":[187]},{"1542882":[255]},{"1542884":[162]},{"1542886":[165]},{"1542888":[255]},{"1542890":[255]},{"1542892":[255,127,117]},{"1542896":[255]},{"1542898":[255]},{"1542900":[185]},{"1542902":[181]},{"1542904":[170]},{"1542906":[194]},{"1542908":[174]},{"1542910":[187]},{"1542912":[255]},{"1542914":[162]},{"1542916":[166]},{"1542918":[255]},{"1542920":[255]},{"1542922":[255,127,117]},{"1542926":[255]},{"1542928":[255]},{"1542930":[185]},{"1542932":[181]},{"1542934":[170]},{"1542936":[194]},{"1542938":[174]},{"1542940":[187]},{"1542942":[255]},{"1542944":[162]},{"1542946":[167]},{"1542948":[255]},{"1542950":[255]},{"1542952":[255,127,117]},{"1542956":[255]},{"1542958":[255]},{"1542960":[185]},{"1542962":[181]},{"1542964":[170]},{"1542966":[194]},{"1542968":[174]},{"1542970":[187]},{"1542972":[255]},{"1542974":[162]},{"1542976":[168]},{"1542978":[255]},{"1542980":[255]},{"1542982":[255,127,117]},{"1542986":[255]},{"1542988":[255]},{"1542990":[185]},{"1542992":[181]},{"1542994":[170]},{"1542996":[194]},{"1542998":[174]},{"1543000":[187]},{"1543002":[255]},{"1543004":[162]},{"1543006":[169]},{"1543008":[255]},{"1543010":[255]},{"1543012":[255,127,117]},{"1543016":[255]},{"1543018":[255]},{"1543020":[185]},{"1543022":[181]},{"1543024":[170]},{"1543026":[194]},{"1543028":[174]},{"1543030":[187]},{"1543032":[255]},{"1543034":[163]},{"1543036":[160]},{"1543038":[255]},{"1543040":[255]},{"1543042":[255,127,117]},{"1543046":[255]},{"1543048":[255]},{"1543050":[185]},{"1543052":[181]},{"1543054":[170]},{"1543056":[194]},{"1543058":[174]},{"1543060":[187]},{"1543062":[255]},{"1543064":[163]},{"1543066":[161]},{"1543068":[255]},{"1543070":[255]},{"1543072":[255,127,117]},{"1543076":[255]},{"1543078":[255]},{"1543080":[185]},{"1543082":[181]},{"1543084":[170]},{"1543086":[194]},{"1543088":[174]},{"1543090":[187]},{"1543092":[255]},{"1543094":[163]},{"1543096":[162]},{"1543098":[255]},{"1543100":[255]},{"1543102":[255,127,117]},{"1543106":[255]},{"1543108":[255]},{"1543110":[185]},{"1543112":[181]},{"1543114":[170]},{"1543116":[194]},{"1543118":[174]},{"1543120":[187]},{"1543122":[255]},{"1543124":[163]},{"1543126":[163]},{"1543128":[255]},{"1543130":[255]},{"1543132":[255,127,117]},{"1543136":[255]},{"1543138":[255]},{"1543140":[185]},{"1543142":[181]},{"1543144":[170]},{"1543146":[194]},{"1543148":[174]},{"1543150":[187]},{"1543152":[255]},{"1543154":[163]},{"1543156":[164]},{"1543158":[255]},{"1543160":[255]},{"1543162":[255,127,117]},{"1543166":[255]},{"1543168":[255]},{"1543170":[185]},{"1543172":[181]},{"1543174":[170]},{"1543176":[194]},{"1543178":[174]},{"1543180":[187]},{"1543182":[255]},{"1543184":[163]},{"1543186":[165]},{"1543188":[255]},{"1543190":[255]},{"1543192":[255,127,117]},{"1543196":[255]},{"1543198":[255]},{"1543200":[185]},{"1543202":[181]},{"1543204":[170]},{"1543206":[194]},{"1543208":[174]},{"1543210":[187]},{"1543212":[255]},{"1543214":[163]},{"1543216":[166]},{"1543218":[255]},{"1543220":[255]},{"1543222":[255,127,117]},{"1543226":[255]},{"1543228":[255]},{"1543230":[185]},{"1543232":[181]},{"1543234":[170]},{"1543236":[194]},{"1543238":[174]},{"1543240":[187]},{"1543242":[255]},{"1543244":[163]},{"1543246":[167]},{"1543248":[255]},{"1543250":[255]},{"1543252":[255,127,117]},{"1543256":[255]},{"1543258":[255]},{"1543260":[185]},{"1543262":[181]},{"1543264":[170]},{"1543266":[194]},{"1543268":[174]},{"1543270":[187]},{"1543272":[255]},{"1543274":[163]},{"1543276":[168]},{"1543278":[255]},{"1543280":[255]},{"1543282":[255,127,117]},{"1543286":[255]},{"1543288":[255]},{"1543290":[185]},{"1543292":[181]},{"1543294":[170]},{"1543296":[194]},{"1543298":[174]},{"1543300":[187]},{"1543302":[255]},{"1543304":[163]},{"1543306":[169]},{"1543308":[255]},{"1543310":[255]},{"1543312":[255,127,117]},{"1543316":[255]},{"1543318":[255]},{"1543320":[185]},{"1543322":[181]},{"1543324":[170]},{"1543326":[194]},{"1543328":[174]},{"1543330":[187]},{"1543332":[255]},{"1543334":[164]},{"1543336":[160]},{"1543338":[255]},{"1543340":[255]},{"1543342":[255,127,117]},{"1543346":[255]},{"1543348":[255]},{"1543350":[185]},{"1543352":[181]},{"1543354":[170]},{"1543356":[194]},{"1543358":[174]},{"1543360":[187]},{"1543362":[255]},{"1543364":[164]},{"1543366":[161]},{"1543368":[255]},{"1543370":[255]},{"1543372":[255,127,117]},{"1543376":[255]},{"1543378":[255]},{"1543380":[185]},{"1543382":[181]},{"1543384":[170]},{"1543386":[194]},{"1543388":[174]},{"1543390":[187]},{"1543392":[255]},{"1543394":[164]},{"1543396":[162]},{"1543398":[255]},{"1543400":[255]},{"1543402":[255,127,117]},{"1543406":[255]},{"1543408":[255]},{"1543410":[185]},{"1543412":[181]},{"1543414":[170]},{"1543416":[194]},{"1543418":[174]},{"1543420":[187]},{"1543422":[255]},{"1543424":[164]},{"1543426":[163]},{"1543428":[255]},{"1543430":[255]},{"1543432":[255,127,117]},{"1543436":[255]},{"1543438":[255]},{"1543440":[185]},{"1543442":[181]},{"1543444":[170]},{"1543446":[194]},{"1543448":[174]},{"1543450":[187]},{"1543452":[255]},{"1543454":[164]},{"1543456":[164]},{"1543458":[255]},{"1543460":[255]},{"1543462":[255,127,117]},{"1543466":[255]},{"1543468":[255]},{"1543470":[185]},{"1543472":[181]},{"1543474":[170]},{"1543476":[194]},{"1543478":[174]},{"1543480":[187]},{"1543482":[255]},{"1543484":[164]},{"1543486":[165]},{"1543488":[255]},{"1543490":[255]},{"1543492":[255,127,117]},{"1543496":[255]},{"1543498":[255]},{"1543500":[185]},{"1543502":[181]},{"1543504":[170]},{"1543506":[194]},{"1543508":[174]},{"1543510":[187]},{"1543512":[255]},{"1543514":[164]},{"1543516":[166]},{"1543518":[255]},{"1543520":[255]},{"1543522":[255,127,117]},{"1543526":[255]},{"1543528":[255]},{"1543530":[185]},{"1543532":[181]},{"1543534":[170]},{"1543536":[194]},{"1543538":[174]},{"1543540":[187]},{"1543542":[255]},{"1543544":[164]},{"1543546":[167]},{"1543548":[255]},{"1543550":[255]},{"1543552":[255,127,117]},{"1543556":[255]},{"1543558":[255]},{"1543560":[185]},{"1543562":[181]},{"1543564":[170]},{"1543566":[194]},{"1543568":[174]},{"1543570":[187]},{"1543572":[255]},{"1543574":[164]},{"1543576":[168]},{"1543578":[255]},{"1543580":[255]},{"1543582":[255,127,117]},{"1543586":[255]},{"1543588":[255]},{"1543590":[185]},{"1543592":[181]},{"1543594":[170]},{"1543596":[194]},{"1543598":[174]},{"1543600":[187]},{"1543602":[255]},{"1543604":[164]},{"1543606":[169]},{"1543608":[255]},{"1543610":[255]},{"1543612":[255,127,117]},{"1543616":[255]},{"1543618":[255]},{"1543620":[185]},{"1543622":[181]},{"1543624":[170]},{"1543626":[194]},{"1543628":[174]},{"1543630":[187]},{"1543632":[255]},{"1543634":[165]},{"1543636":[160]},{"1543638":[255]},{"1543640":[255]},{"1543642":[255,127,117]},{"1543646":[255]},{"1543648":[255]},{"1543650":[185]},{"1543652":[181]},{"1543654":[170]},{"1543656":[194]},{"1543658":[174]},{"1543660":[187]},{"1543662":[255]},{"1543664":[165]},{"1543666":[161]},{"1543668":[255]},{"1543670":[255]},{"1543672":[255,127,117]},{"1543676":[255]},{"1543678":[255]},{"1543680":[185]},{"1543682":[181]},{"1543684":[170]},{"1543686":[194]},{"1543688":[174]},{"1543690":[187]},{"1543692":[255]},{"1543694":[165]},{"1543696":[162]},{"1543698":[255]},{"1543700":[255]},{"1543702":[255,127,117]},{"1543706":[255]},{"1543708":[255]},{"1543710":[185]},{"1543712":[181]},{"1543714":[170]},{"1543716":[194]},{"1543718":[174]},{"1543720":[187]},{"1543722":[255]},{"1543724":[165]},{"1543726":[163]},{"1543728":[255]},{"1543730":[255]},{"1543732":[255,127,117]},{"1543736":[255]},{"1543738":[255]},{"1543740":[185]},{"1543742":[181]},{"1543744":[170]},{"1543746":[194]},{"1543748":[174]},{"1543750":[187]},{"1543752":[255]},{"1543754":[165]},{"1543756":[164]},{"1543758":[255]},{"1543760":[255]},{"1543762":[255,127,117]},{"1543766":[255]},{"1543768":[255]},{"1543770":[185]},{"1543772":[181]},{"1543774":[170]},{"1543776":[194]},{"1543778":[174]},{"1543780":[187]},{"1543782":[255]},{"1543784":[165]},{"1543786":[165]},{"1543788":[255]},{"1543790":[255]},{"1543792":[255,127,117]},{"1543796":[255]},{"1543798":[255]},{"1543800":[185]},{"1543802":[181]},{"1543804":[170]},{"1543806":[194]},{"1543808":[174]},{"1543810":[187]},{"1543812":[255]},{"1543814":[165]},{"1543816":[166]},{"1543818":[255]},{"1543820":[255]},{"1543822":[255,127,117]},{"1543826":[255]},{"1543828":[255]},{"1543830":[185]},{"1543832":[181]},{"1543834":[170]},{"1543836":[194]},{"1543838":[174]},{"1543840":[187]},{"1543842":[255]},{"1543844":[165]},{"1543846":[167]},{"1543848":[255]},{"1543850":[255]},{"1543852":[255,127,117]},{"1543856":[255]},{"1543858":[255]},{"1543860":[185]},{"1543862":[181]},{"1543864":[170]},{"1543866":[194]},{"1543868":[174]},{"1543870":[187]},{"1543872":[255]},{"1543874":[165]},{"1543876":[168]},{"1543878":[255]},{"1543880":[255]},{"1543882":[255,127,117]},{"1543886":[255]},{"1543888":[255]},{"1543890":[185]},{"1543892":[181]},{"1543894":[170]},{"1543896":[194]},{"1543898":[174]},{"1543900":[187]},{"1543902":[255]},{"1543904":[165]},{"1543906":[169]},{"1543908":[255]},{"1543910":[255]},{"1543912":[255,127,117]},{"1543916":[255]},{"1543918":[255]},{"1543920":[185]},{"1543922":[181]},{"1543924":[170]},{"1543926":[194]},{"1543928":[174]},{"1543930":[187]},{"1543932":[255]},{"1543934":[166]},{"1543936":[160]},{"1543938":[255]},{"1543940":[255]},{"1543942":[255,127,117]},{"1543946":[255]},{"1543948":[255]},{"1543950":[185]},{"1543952":[181]},{"1543954":[170]},{"1543956":[194]},{"1543958":[174]},{"1543960":[187]},{"1543962":[255]},{"1543964":[166]},{"1543966":[161]},{"1543968":[255]},{"1543970":[255]},{"1543972":[255,127,117]},{"1543976":[255]},{"1543978":[255]},{"1543980":[185]},{"1543982":[181]},{"1543984":[170]},{"1543986":[194]},{"1543988":[174]},{"1543990":[187]},{"1543992":[255]},{"1543994":[166]},{"1543996":[162]},{"1543998":[255]},{"1544000":[255]},{"1544002":[255,127,117]},{"1544006":[255]},{"1544008":[255]},{"1544010":[185]},{"1544012":[181]},{"1544014":[170]},{"1544016":[194]},{"1544018":[174]},{"1544020":[187]},{"1544022":[255]},{"1544024":[166]},{"1544026":[163]},{"1544028":[255]},{"1544030":[255]},{"1544032":[255,127,117]},{"1544036":[255]},{"1544038":[255]},{"1544040":[185]},{"1544042":[181]},{"1544044":[170]},{"1544046":[194]},{"1544048":[174]},{"1544050":[187]},{"1544052":[255]},{"1544054":[166]},{"1544056":[164]},{"1544058":[255]},{"1544060":[255]},{"1544062":[255,127,117]},{"1544066":[255]},{"1544068":[255]},{"1544070":[185]},{"1544072":[181]},{"1544074":[170]},{"1544076":[194]},{"1544078":[174]},{"1544080":[187]},{"1544082":[255]},{"1544084":[166]},{"1544086":[165]},{"1544088":[255]},{"1544090":[255]},{"1544092":[255,127,117]},{"1544096":[255]},{"1544098":[255]},{"1544100":[185]},{"1544102":[181]},{"1544104":[170]},{"1544106":[194]},{"1544108":[174]},{"1544110":[187]},{"1544112":[255]},{"1544114":[166]},{"1544116":[166]},{"1544118":[255]},{"1544120":[255]},{"1544122":[255,127,117]},{"1544126":[255]},{"1544128":[255]},{"1544130":[185]},{"1544132":[181]},{"1544134":[170]},{"1544136":[194]},{"1544138":[174]},{"1544140":[187]},{"1544142":[255]},{"1544144":[166]},{"1544146":[167]},{"1544148":[255]},{"1544150":[255]},{"1544152":[255,127,117]},{"1544156":[255]},{"1544158":[255]},{"1544160":[185]},{"1544162":[181]},{"1544164":[170]},{"1544166":[194]},{"1544168":[174]},{"1544170":[187]},{"1544172":[255]},{"1544174":[166]},{"1544176":[168]},{"1544178":[255]},{"1544180":[255]},{"1544182":[255,127,117]},{"1544186":[255]},{"1544188":[255]},{"1544190":[185]},{"1544192":[181]},{"1544194":[170]},{"1544196":[194]},{"1544198":[174]},{"1544200":[187]},{"1544202":[255]},{"1544204":[166]},{"1544206":[169]},{"1544208":[255]},{"1544210":[255]},{"1544212":[255,127,117]},{"1544216":[255]},{"1544218":[255]},{"1544220":[185]},{"1544222":[181]},{"1544224":[170]},{"1544226":[194]},{"1544228":[174]},{"1544230":[187]},{"1544232":[255]},{"1544234":[167]},{"1544236":[160]},{"1544238":[255]},{"1544240":[255]},{"1544242":[255,127,117]},{"1544246":[255]},{"1544248":[255]},{"1544250":[185]},{"1544252":[181]},{"1544254":[170]},{"1544256":[194]},{"1544258":[174]},{"1544260":[187]},{"1544262":[255]},{"1544264":[167]},{"1544266":[161]},{"1544268":[255]},{"1544270":[255]},{"1544272":[255,127,117]},{"1544276":[255]},{"1544278":[255]},{"1544280":[185]},{"1544282":[181]},{"1544284":[170]},{"1544286":[194]},{"1544288":[174]},{"1544290":[187]},{"1544292":[255]},{"1544294":[167]},{"1544296":[162]},{"1544298":[255]},{"1544300":[255]},{"1544302":[255,127,117]},{"1544306":[255]},{"1544308":[255]},{"1544310":[185]},{"1544312":[181]},{"1544314":[170]},{"1544316":[194]},{"1544318":[174]},{"1544320":[187]},{"1544322":[255]},{"1544324":[167]},{"1544326":[163]},{"1544328":[255]},{"1544330":[255]},{"1544332":[255,127,117]},{"1544336":[255]},{"1544338":[255]},{"1544340":[185]},{"1544342":[181]},{"1544344":[170]},{"1544346":[194]},{"1544348":[174]},{"1544350":[187]},{"1544352":[255]},{"1544354":[167]},{"1544356":[164]},{"1544358":[255]},{"1544360":[255]},{"1544362":[255,127,117]},{"1544366":[255]},{"1544368":[255]},{"1544370":[185]},{"1544372":[181]},{"1544374":[170]},{"1544376":[194]},{"1544378":[174]},{"1544380":[187]},{"1544382":[255]},{"1544384":[167]},{"1544386":[165]},{"1544388":[255]},{"1544390":[255]},{"1544392":[255,127,117]},{"1544396":[255]},{"1544398":[255]},{"1544400":[185]},{"1544402":[181]},{"1544404":[170]},{"1544406":[194]},{"1544408":[174]},{"1544410":[187]},{"1544412":[255]},{"1544414":[167]},{"1544416":[166]},{"1544418":[255]},{"1544420":[255]},{"1544422":[255,127,117]},{"1544426":[255]},{"1544428":[255]},{"1544430":[185]},{"1544432":[181]},{"1544434":[170]},{"1544436":[194]},{"1544438":[174]},{"1544440":[187]},{"1544442":[255]},{"1544444":[167]},{"1544446":[167]},{"1544448":[255]},{"1544450":[255]},{"1544452":[255,127,117]},{"1544456":[255]},{"1544458":[255]},{"1544460":[185]},{"1544462":[181]},{"1544464":[170]},{"1544466":[194]},{"1544468":[174]},{"1544470":[187]},{"1544472":[255]},{"1544474":[167]},{"1544476":[168]},{"1544478":[255]},{"1544480":[255]},{"1544482":[255,127,117]},{"1544486":[255]},{"1544488":[255]},{"1544490":[185]},{"1544492":[181]},{"1544494":[170]},{"1544496":[194]},{"1544498":[174]},{"1544500":[187]},{"1544502":[255]},{"1544504":[167]},{"1544506":[169]},{"1544508":[255]},{"1544510":[255]},{"1544512":[255,127,117]},{"1544516":[255]},{"1544518":[255]},{"1544520":[185]},{"1544522":[181]},{"1544524":[170]},{"1544526":[194]},{"1544528":[174]},{"1544530":[187]},{"1544532":[255]},{"1544534":[168]},{"1544536":[160]},{"1544538":[255]},{"1544540":[255]},{"1544542":[255,127,117]},{"1544546":[255]},{"1544548":[255]},{"1544550":[185]},{"1544552":[181]},{"1544554":[170]},{"1544556":[194]},{"1544558":[174]},{"1544560":[187]},{"1544562":[255]},{"1544564":[168]},{"1544566":[161]},{"1544568":[255]},{"1544570":[255]},{"1544572":[255,127,117]},{"1544576":[255]},{"1544578":[255]},{"1544580":[185]},{"1544582":[181]},{"1544584":[170]},{"1544586":[194]},{"1544588":[174]},{"1544590":[187]},{"1544592":[255]},{"1544594":[168]},{"1544596":[162]},{"1544598":[255]},{"1544600":[255]},{"1544602":[255,127,117]},{"1544606":[255]},{"1544608":[255]},{"1544610":[185]},{"1544612":[181]},{"1544614":[170]},{"1544616":[194]},{"1544618":[174]},{"1544620":[187]},{"1544622":[255]},{"1544624":[168]},{"1544626":[163]},{"1544628":[255]},{"1544630":[255]},{"1544632":[255,127,117]},{"1544636":[255]},{"1544638":[255]},{"1544640":[185]},{"1544642":[181]},{"1544644":[170]},{"1544646":[194]},{"1544648":[174]},{"1544650":[187]},{"1544652":[255]},{"1544654":[168]},{"1544656":[164]},{"1544658":[255]},{"1544660":[255]},{"1544662":[255,127,117]},{"1544666":[255]},{"1544668":[255]},{"1544670":[185]},{"1544672":[181]},{"1544674":[170]},{"1544676":[194]},{"1544678":[174]},{"1544680":[187]},{"1544682":[255]},{"1544684":[168]},{"1544686":[165]},{"1544688":[255]},{"1544690":[255]},{"1544692":[255,127,117]},{"1544696":[255]},{"1544698":[255]},{"1544700":[185]},{"1544702":[181]},{"1544704":[170]},{"1544706":[194]},{"1544708":[174]},{"1544710":[187]},{"1544712":[255]},{"1544714":[168]},{"1544716":[166]},{"1544718":[255]},{"1544720":[255]},{"1544722":[255,127,117]},{"1544726":[255]},{"1544728":[255]},{"1544730":[185]},{"1544732":[181]},{"1544734":[170]},{"1544736":[194]},{"1544738":[174]},{"1544740":[187]},{"1544742":[255]},{"1544744":[168]},{"1544746":[167]},{"1544748":[255]},{"1544750":[255]},{"1544752":[255,127,117]},{"1544756":[255]},{"1544758":[255]},{"1544760":[185]},{"1544762":[181]},{"1544764":[170]},{"1544766":[194]},{"1544768":[174]},{"1544770":[187]},{"1544772":[255]},{"1544774":[168]},{"1544776":[168]},{"1544778":[255]},{"1544780":[255]},{"1544782":[255,127,117]},{"1544786":[255]},{"1544788":[255]},{"1544790":[185]},{"1544792":[181]},{"1544794":[170]},{"1544796":[194]},{"1544798":[174]},{"1544800":[187]},{"1544802":[255]},{"1544804":[168]},{"1544806":[169]},{"1544808":[255]},{"1544810":[255]},{"1544812":[255,127,117]},{"1544816":[255]},{"1544818":[255]},{"1544820":[185]},{"1544822":[181]},{"1544824":[170]},{"1544826":[194]},{"1544828":[174]},{"1544830":[187]},{"1544832":[255]},{"1544834":[169]},{"1544836":[160]},{"1544838":[255]},{"1544840":[255]},{"1544842":[255,127,117]},{"1544846":[255]},{"1544848":[255]},{"1544850":[185]},{"1544852":[181]},{"1544854":[170]},{"1544856":[194]},{"1544858":[174]},{"1544860":[187]},{"1544862":[255]},{"1544864":[169]},{"1544866":[161]},{"1544868":[255]},{"1544870":[255]},{"1544872":[255,127,117]},{"1544876":[255]},{"1544878":[255]},{"1544880":[185]},{"1544882":[181]},{"1544884":[170]},{"1544886":[194]},{"1544888":[174]},{"1544890":[187]},{"1544892":[255]},{"1544894":[169]},{"1544896":[162]},{"1544898":[255]},{"1544900":[255]},{"1544902":[255,127,117]},{"1544906":[255]},{"1544908":[255]},{"1544910":[185]},{"1544912":[181]},{"1544914":[170]},{"1544916":[194]},{"1544918":[174]},{"1544920":[187]},{"1544922":[255]},{"1544924":[169]},{"1544926":[163]},{"1544928":[255]},{"1544930":[255]},{"1544932":[255,127,117]},{"1544936":[255]},{"1544938":[255]},{"1544940":[185]},{"1544942":[181]},{"1544944":[170]},{"1544946":[194]},{"1544948":[174]},{"1544950":[187]},{"1544952":[255]},{"1544954":[169]},{"1544956":[164]},{"1544958":[255]},{"1544960":[255]},{"1544962":[255,127,117]},{"1544966":[255]},{"1544968":[255]},{"1544970":[185]},{"1544972":[181]},{"1544974":[170]},{"1544976":[194]},{"1544978":[174]},{"1544980":[187]},{"1544982":[255]},{"1544984":[169]},{"1544986":[165]},{"1544988":[255]},{"1544990":[255]},{"1544992":[255,127,117]},{"1544996":[255]},{"1544998":[255]},{"1545000":[185]},{"1545002":[181]},{"1545004":[170]},{"1545006":[194]},{"1545008":[174]},{"1545010":[187]},{"1545012":[255]},{"1545014":[169]},{"1545016":[166]},{"1545018":[255]},{"1545020":[255]},{"1545022":[255,127,117]},{"1545026":[255]},{"1545028":[255]},{"1545030":[185]},{"1545032":[181]},{"1545034":[170]},{"1545036":[194]},{"1545038":[174]},{"1545040":[187]},{"1545042":[255]},{"1545044":[169]},{"1545046":[167]},{"1545048":[255]},{"1545050":[255]},{"1545052":[255,127,117]},{"1545056":[255]},{"1545058":[255]},{"1545060":[185]},{"1545062":[181]},{"1545064":[170]},{"1545066":[194]},{"1545068":[174]},{"1545070":[187]},{"1545072":[255]},{"1545074":[169]},{"1545076":[168]},{"1545078":[255]},{"1545080":[255]},{"1545082":[255,127,117]},{"1545086":[255]},{"1545088":[255]},{"1545090":[185]},{"1545092":[181]},{"1545094":[170]},{"1545096":[194]},{"1545098":[174]},{"1545100":[187]},{"1545102":[255]},{"1545104":[169]},{"1545106":[169]},{"1545108":[255]},{"1545110":[255]},{"1545112":[255,127,117]},{"1545116":[255]},{"1545118":[255]},{"1545120":[185]},{"1545122":[181]},{"1545124":[170]},{"1545126":[194]},{"1545128":[174]},{"1545130":[187]},{"1545132":[255]},{"1545134":[161]},{"1545136":[160]},{"1545138":[160]},{"1545140":[255]},{"1545142":[255,127,117]},{"1545146":[255]},{"1545148":[255]},{"1545150":[185]},{"1545152":[181]},{"1545154":[170]},{"1545156":[194]},{"1545158":[174]},{"1545160":[187]},{"1545162":[255]},{"1545164":[161]},{"1545166":[160]},{"1545168":[161]},{"1545170":[255]},{"1545172":[255,127,117]},{"1545176":[255]},{"1545178":[255]},{"1545180":[185]},{"1545182":[181]},{"1545184":[170]},{"1545186":[194]},{"1545188":[174]},{"1545190":[187]},{"1545192":[255]},{"1545194":[161]},{"1545196":[160]},{"1545198":[162]},{"1545200":[255]},{"1545202":[255,127,117]},{"1545206":[255]},{"1545208":[255]},{"1545210":[185]},{"1545212":[181]},{"1545214":[170]},{"1545216":[194]},{"1545218":[174]},{"1545220":[187]},{"1545222":[255]},{"1545224":[161]},{"1545226":[160]},{"1545228":[163]},{"1545230":[255]},{"1545232":[255,127,117]},{"1545236":[255]},{"1545238":[255]},{"1545240":[185]},{"1545242":[181]},{"1545244":[170]},{"1545246":[194]},{"1545248":[174]},{"1545250":[187]},{"1545252":[255]},{"1545254":[161]},{"1545256":[160]},{"1545258":[164]},{"1545260":[255]},{"1545262":[255,127,117]},{"1545266":[255]},{"1545268":[255]},{"1545270":[185]},{"1545272":[181]},{"1545274":[170]},{"1545276":[194]},{"1545278":[174]},{"1545280":[187]},{"1545282":[255]},{"1545284":[161]},{"1545286":[160]},{"1545288":[165]},{"1545290":[255]},{"1545292":[255,127,117]},{"1545296":[255]},{"1545298":[255]},{"1545300":[185]},{"1545302":[181]},{"1545304":[170]},{"1545306":[194]},{"1545308":[174]},{"1545310":[187]},{"1545312":[255]},{"1545314":[161]},{"1545316":[160]},{"1545318":[166]},{"1545320":[255]},{"1545322":[255,127,117]},{"1545326":[255]},{"1545328":[255]},{"1545330":[185]},{"1545332":[181]},{"1545334":[170]},{"1545336":[194]},{"1545338":[174]},{"1545340":[187]},{"1545342":[255]},{"1545344":[161]},{"1545346":[160]},{"1545348":[167]},{"1545350":[255]},{"1545352":[255,127,117]},{"1545356":[255]},{"1545358":[255]},{"1545360":[185]},{"1545362":[181]},{"1545364":[170]},{"1545366":[194]},{"1545368":[174]},{"1545370":[187]},{"1545372":[255]},{"1545374":[161]},{"1545376":[160]},{"1545378":[168]},{"1545380":[255]},{"1545382":[255,127,117]},{"1545386":[255]},{"1545388":[255]},{"1545390":[185]},{"1545392":[181]},{"1545394":[170]},{"1545396":[194]},{"1545398":[174]},{"1545400":[187]},{"1545402":[255]},{"1545404":[161]},{"1545406":[160]},{"1545408":[169]},{"1545410":[255]},{"1545412":[255,127,117]},{"1545416":[255]},{"1545418":[255]},{"1545420":[185]},{"1545422":[181]},{"1545424":[170]},{"1545426":[194]},{"1545428":[174]},{"1545430":[187]},{"1545432":[255]},{"1545434":[161]},{"1545436":[161]},{"1545438":[160]},{"1545440":[255]},{"1545442":[255,127,117]},{"1545446":[255]},{"1545448":[255]},{"1545450":[185]},{"1545452":[181]},{"1545454":[170]},{"1545456":[194]},{"1545458":[174]},{"1545460":[187]},{"1545462":[255]},{"1545464":[161]},{"1545466":[161]},{"1545468":[161]},{"1545470":[255]},{"1545472":[255,127,117]},{"1545476":[255]},{"1545478":[255]},{"1545480":[185]},{"1545482":[181]},{"1545484":[170]},{"1545486":[194]},{"1545488":[174]},{"1545490":[187]},{"1545492":[255]},{"1545494":[161]},{"1545496":[161]},{"1545498":[162]},{"1545500":[255]},{"1545502":[255,127,117]},{"1545506":[255]},{"1545508":[255]},{"1545510":[185]},{"1545512":[181]},{"1545514":[170]},{"1545516":[194]},{"1545518":[174]},{"1545520":[187]},{"1545522":[255]},{"1545524":[161]},{"1545526":[161]},{"1545528":[163]},{"1545530":[255]},{"1545532":[255,127,117]},{"1545536":[255]},{"1545538":[255]},{"1545540":[185]},{"1545542":[181]},{"1545544":[170]},{"1545546":[194]},{"1545548":[174]},{"1545550":[187]},{"1545552":[255]},{"1545554":[161]},{"1545556":[161]},{"1545558":[164]},{"1545560":[255]},{"1545562":[255,127,117]},{"1545566":[255]},{"1545568":[255]},{"1545570":[185]},{"1545572":[181]},{"1545574":[170]},{"1545576":[194]},{"1545578":[174]},{"1545580":[187]},{"1545582":[255]},{"1545584":[161]},{"1545586":[161]},{"1545588":[165]},{"1545590":[255]},{"1545592":[255,127,117]},{"1545596":[255]},{"1545598":[255]},{"1545600":[185]},{"1545602":[181]},{"1545604":[170]},{"1545606":[194]},{"1545608":[174]},{"1545610":[187]},{"1545612":[255]},{"1545614":[161]},{"1545616":[161]},{"1545618":[166]},{"1545620":[255]},{"1545622":[255,127,117]},{"1545626":[255]},{"1545628":[255]},{"1545630":[185]},{"1545632":[181]},{"1545634":[170]},{"1545636":[194]},{"1545638":[174]},{"1545640":[187]},{"1545642":[255]},{"1545644":[161]},{"1545646":[161]},{"1545648":[167]},{"1545650":[255]},{"1545652":[255,127,117]},{"1545656":[255]},{"1545658":[255]},{"1545660":[185]},{"1545662":[181]},{"1545664":[170]},{"1545666":[194]},{"1545668":[174]},{"1545670":[187]},{"1545672":[255]},{"1545674":[161]},{"1545676":[161]},{"1545678":[168]},{"1545680":[255]},{"1545682":[255,127,117]},{"1545686":[255]},{"1545688":[255]},{"1545690":[185]},{"1545692":[181]},{"1545694":[170]},{"1545696":[194]},{"1545698":[174]},{"1545700":[187]},{"1545702":[255]},{"1545704":[161]},{"1545706":[161]},{"1545708":[169]},{"1545710":[255]},{"1545712":[255,127,117]},{"1545716":[255]},{"1545718":[255]},{"1545720":[185]},{"1545722":[181]},{"1545724":[170]},{"1545726":[194]},{"1545728":[174]},{"1545730":[187]},{"1545732":[255]},{"1545734":[161]},{"1545736":[162]},{"1545738":[160]},{"1545740":[255]},{"1545742":[255,127,117]},{"1545746":[255]},{"1545748":[255]},{"1545750":[185]},{"1545752":[181]},{"1545754":[170]},{"1545756":[194]},{"1545758":[174]},{"1545760":[187]},{"1545762":[255]},{"1545764":[161]},{"1545766":[162]},{"1545768":[161]},{"1545770":[255]},{"1545772":[255,127,117]},{"1545776":[255]},{"1545778":[255]},{"1545780":[185]},{"1545782":[181]},{"1545784":[170]},{"1545786":[194]},{"1545788":[174]},{"1545790":[187]},{"1545792":[255]},{"1545794":[161]},{"1545796":[162]},{"1545798":[162]},{"1545800":[255]},{"1545802":[255,127,117]},{"1545806":[255]},{"1545808":[255]},{"1545810":[185]},{"1545812":[181]},{"1545814":[170]},{"1545816":[194]},{"1545818":[174]},{"1545820":[187]},{"1545822":[255]},{"1545824":[161]},{"1545826":[162]},{"1545828":[163]},{"1545830":[255]},{"1545832":[255,127,117]},{"1545836":[255]},{"1545838":[255]},{"1545840":[185]},{"1545842":[181]},{"1545844":[170]},{"1545846":[194]},{"1545848":[174]},{"1545850":[187]},{"1545852":[255]},{"1545854":[161]},{"1545856":[162]},{"1545858":[164]},{"1545860":[255]},{"1545862":[255,127,117]},{"1545866":[255]},{"1545868":[255]},{"1545870":[185]},{"1545872":[181]},{"1545874":[170]},{"1545876":[194]},{"1545878":[174]},{"1545880":[187]},{"1545882":[255]},{"1545884":[161]},{"1545886":[162]},{"1545888":[165]},{"1545890":[255]},{"1545892":[255,127,117]},{"1545896":[255]},{"1545898":[255]},{"1545900":[185]},{"1545902":[181]},{"1545904":[170]},{"1545906":[194]},{"1545908":[174]},{"1545910":[187]},{"1545912":[255]},{"1545914":[161]},{"1545916":[162]},{"1545918":[166]},{"1545920":[255]},{"1545922":[255,127,117]},{"1545926":[255]},{"1545928":[255]},{"1545930":[185]},{"1545932":[181]},{"1545934":[170]},{"1545936":[194]},{"1545938":[174]},{"1545940":[187]},{"1545942":[255]},{"1545944":[161]},{"1545946":[162]},{"1545948":[167]},{"1545950":[255]},{"1545952":[255,127,117]},{"1545956":[255]},{"1545958":[255]},{"1545960":[185]},{"1545962":[181]},{"1545964":[170]},{"1545966":[194]},{"1545968":[174]},{"1545970":[187]},{"1545972":[255]},{"1545974":[161]},{"1545976":[162]},{"1545978":[168]},{"1545980":[255]},{"1545982":[255,127,117]},{"1545986":[255]},{"1545988":[255]},{"1545990":[185]},{"1545992":[181]},{"1545994":[170]},{"1545996":[194]},{"1545998":[174]},{"1546000":[187]},{"1546002":[255]},{"1546004":[161]},{"1546006":[162]},{"1546008":[169]},{"1546010":[255]},{"1546012":[255,127,117]},{"1546016":[255]},{"1546018":[255]},{"1546020":[185]},{"1546022":[181]},{"1546024":[170]},{"1546026":[194]},{"1546028":[174]},{"1546030":[187]},{"1546032":[255]},{"1546034":[161]},{"1546036":[163]},{"1546038":[160]},{"1546040":[255]},{"1546042":[255,127,117]},{"1546046":[255]},{"1546048":[255]},{"1546050":[185]},{"1546052":[181]},{"1546054":[170]},{"1546056":[194]},{"1546058":[174]},{"1546060":[187]},{"1546062":[255]},{"1546064":[161]},{"1546066":[163]},{"1546068":[161]},{"1546070":[255]},{"1546072":[255,127,117]},{"1546076":[255]},{"1546078":[255]},{"1546080":[185]},{"1546082":[181]},{"1546084":[170]},{"1546086":[194]},{"1546088":[174]},{"1546090":[187]},{"1546092":[255]},{"1546094":[161]},{"1546096":[163]},{"1546098":[162]},{"1546100":[255]},{"1546102":[255,127,117]},{"1546106":[255]},{"1546108":[255]},{"1546110":[185]},{"1546112":[181]},{"1546114":[170]},{"1546116":[194]},{"1546118":[174]},{"1546120":[187]},{"1546122":[255]},{"1546124":[161]},{"1546126":[163]},{"1546128":[163]},{"1546130":[255]},{"1546132":[255,127,117]},{"1546136":[255]},{"1546138":[255]},{"1546140":[185]},{"1546142":[181]},{"1546144":[170]},{"1546146":[194]},{"1546148":[174]},{"1546150":[187]},{"1546152":[255]},{"1546154":[161]},{"1546156":[163]},{"1546158":[164]},{"1546160":[255]},{"1546162":[255,127,117]},{"1546166":[255]},{"1546168":[255]},{"1546170":[185]},{"1546172":[181]},{"1546174":[170]},{"1546176":[194]},{"1546178":[174]},{"1546180":[187]},{"1546182":[255]},{"1546184":[161]},{"1546186":[163]},{"1546188":[165]},{"1546190":[255]},{"1546192":[255,127,117]},{"1546196":[255]},{"1546198":[255]},{"1546200":[185]},{"1546202":[181]},{"1546204":[170]},{"1546206":[194]},{"1546208":[174]},{"1546210":[187]},{"1546212":[255]},{"1546214":[161]},{"1546216":[163]},{"1546218":[166]},{"1546220":[255]},{"1546222":[255,127,117]},{"1546226":[255]},{"1546228":[255]},{"1546230":[185]},{"1546232":[181]},{"1546234":[170]},{"1546236":[194]},{"1546238":[174]},{"1546240":[187]},{"1546242":[255]},{"1546244":[161]},{"1546246":[163]},{"1546248":[167]},{"1546250":[255]},{"1546252":[255,127,117]},{"1546256":[255]},{"1546258":[255]},{"1546260":[185]},{"1546262":[181]},{"1546264":[170]},{"1546266":[194]},{"1546268":[174]},{"1546270":[187]},{"1546272":[255]},{"1546274":[161]},{"1546276":[163]},{"1546278":[168]},{"1546280":[255]},{"1546282":[255,127,117]},{"1546286":[255]},{"1546288":[255]},{"1546290":[185]},{"1546292":[181]},{"1546294":[170]},{"1546296":[194]},{"1546298":[174]},{"1546300":[187]},{"1546302":[255]},{"1546304":[161]},{"1546306":[163]},{"1546308":[169]},{"1546310":[255]},{"1546312":[255,127,117]},{"1546316":[255]},{"1546318":[255]},{"1546320":[185]},{"1546322":[181]},{"1546324":[170]},{"1546326":[194]},{"1546328":[174]},{"1546330":[187]},{"1546332":[255]},{"1546334":[161]},{"1546336":[164]},{"1546338":[160]},{"1546340":[255]},{"1546342":[255,127,117]},{"1546346":[255]},{"1546348":[255]},{"1546350":[185]},{"1546352":[181]},{"1546354":[170]},{"1546356":[194]},{"1546358":[174]},{"1546360":[187]},{"1546362":[255]},{"1546364":[161]},{"1546366":[164]},{"1546368":[161]},{"1546370":[255]},{"1546372":[255,127,117]},{"1546376":[255]},{"1546378":[255]},{"1546380":[185]},{"1546382":[181]},{"1546384":[170]},{"1546386":[194]},{"1546388":[174]},{"1546390":[187]},{"1546392":[255]},{"1546394":[161]},{"1546396":[164]},{"1546398":[162]},{"1546400":[255]},{"1546402":[255,127,117]},{"1546406":[255]},{"1546408":[255]},{"1546410":[185]},{"1546412":[181]},{"1546414":[170]},{"1546416":[194]},{"1546418":[174]},{"1546420":[187]},{"1546422":[255]},{"1546424":[161]},{"1546426":[164]},{"1546428":[163]},{"1546430":[255]},{"1546432":[255,127,117]},{"1546436":[255]},{"1546438":[255]},{"1546440":[185]},{"1546442":[181]},{"1546444":[170]},{"1546446":[194]},{"1546448":[174]},{"1546450":[187]},{"1546452":[255]},{"1546454":[161]},{"1546456":[164]},{"1546458":[164]},{"1546460":[255]},{"1546462":[255,127,117]},{"1546466":[255]},{"1546468":[255]},{"1546470":[185]},{"1546472":[181]},{"1546474":[170]},{"1546476":[194]},{"1546478":[174]},{"1546480":[187]},{"1546482":[255]},{"1546484":[161]},{"1546486":[164]},{"1546488":[165]},{"1546490":[255]},{"1546492":[255,127,117]},{"1546496":[255]},{"1546498":[255]},{"1546500":[185]},{"1546502":[181]},{"1546504":[170]},{"1546506":[194]},{"1546508":[174]},{"1546510":[187]},{"1546512":[255]},{"1546514":[161]},{"1546516":[164]},{"1546518":[166]},{"1546520":[255]},{"1546522":[255,127,117]},{"1546526":[255]},{"1546528":[255]},{"1546530":[185]},{"1546532":[181]},{"1546534":[170]},{"1546536":[194]},{"1546538":[174]},{"1546540":[187]},{"1546542":[255]},{"1546544":[161]},{"1546546":[164]},{"1546548":[167]},{"1546550":[255]},{"1546552":[255,127,117]},{"1546556":[255]},{"1546558":[255]},{"1546560":[185]},{"1546562":[181]},{"1546564":[170]},{"1546566":[194]},{"1546568":[174]},{"1546570":[187]},{"1546572":[255]},{"1546574":[161]},{"1546576":[164]},{"1546578":[168]},{"1546580":[255]},{"1546582":[255,127,117]},{"1546586":[255]},{"1546588":[255]},{"1546590":[185]},{"1546592":[181]},{"1546594":[170]},{"1546596":[194]},{"1546598":[174]},{"1546600":[187]},{"1546602":[255]},{"1546604":[161]},{"1546606":[164]},{"1546608":[169]},{"1546610":[255]},{"1546612":[255,127,117]},{"1546616":[255]},{"1546618":[255]},{"1546620":[185]},{"1546622":[181]},{"1546624":[170]},{"1546626":[194]},{"1546628":[174]},{"1546630":[187]},{"1546632":[255]},{"1546634":[161]},{"1546636":[165]},{"1546638":[160]},{"1546640":[255]},{"1546642":[255,127,117]},{"1546646":[255]},{"1546648":[255]},{"1546650":[185]},{"1546652":[181]},{"1546654":[170]},{"1546656":[194]},{"1546658":[174]},{"1546660":[187]},{"1546662":[255]},{"1546664":[161]},{"1546666":[165]},{"1546668":[161]},{"1546670":[255]},{"1546672":[255,127,117]},{"1546676":[255]},{"1546678":[255]},{"1546680":[185]},{"1546682":[181]},{"1546684":[170]},{"1546686":[194]},{"1546688":[174]},{"1546690":[187]},{"1546692":[255]},{"1546694":[161]},{"1546696":[165]},{"1546698":[162]},{"1546700":[255]},{"1546702":[255,127,117]},{"1546706":[255]},{"1546708":[255]},{"1546710":[185]},{"1546712":[181]},{"1546714":[170]},{"1546716":[194]},{"1546718":[174]},{"1546720":[187]},{"1546722":[255]},{"1546724":[161]},{"1546726":[165]},{"1546728":[163]},{"1546730":[255]},{"1546732":[255,127,117]},{"1546736":[255]},{"1546738":[255]},{"1546740":[185]},{"1546742":[181]},{"1546744":[170]},{"1546746":[194]},{"1546748":[174]},{"1546750":[187]},{"1546752":[255]},{"1546754":[161]},{"1546756":[165]},{"1546758":[164]},{"1546760":[255]},{"1546762":[255,127,117]},{"1546766":[255]},{"1546768":[255]},{"1546770":[185]},{"1546772":[181]},{"1546774":[170]},{"1546776":[194]},{"1546778":[174]},{"1546780":[187]},{"1546782":[255]},{"1546784":[161]},{"1546786":[165]},{"1546788":[165]},{"1546790":[255]},{"1546792":[255,127,117]},{"1546796":[255]},{"1546798":[255]},{"1546800":[185]},{"1546802":[181]},{"1546804":[170]},{"1546806":[194]},{"1546808":[174]},{"1546810":[187]},{"1546812":[255]},{"1546814":[161]},{"1546816":[165]},{"1546818":[166]},{"1546820":[255]},{"1546822":[255,127,117]},{"1546826":[255]},{"1546828":[255]},{"1546830":[185]},{"1546832":[181]},{"1546834":[170]},{"1546836":[194]},{"1546838":[174]},{"1546840":[187]},{"1546842":[255]},{"1546844":[161]},{"1546846":[165]},{"1546848":[167]},{"1546850":[255]},{"1546852":[255,127,117]},{"1546856":[255]},{"1546858":[255]},{"1546860":[185]},{"1546862":[181]},{"1546864":[170]},{"1546866":[194]},{"1546868":[174]},{"1546870":[187]},{"1546872":[255]},{"1546874":[161]},{"1546876":[165]},{"1546878":[168]},{"1546880":[255]},{"1546882":[255,127,117]},{"1546886":[255]},{"1546888":[255]},{"1546890":[185]},{"1546892":[181]},{"1546894":[170]},{"1546896":[194]},{"1546898":[174]},{"1546900":[187]},{"1546902":[255]},{"1546904":[161]},{"1546906":[165]},{"1546908":[169]},{"1546910":[255]},{"1546912":[255,127,117]},{"1546916":[255]},{"1546918":[255]},{"1546920":[185]},{"1546922":[181]},{"1546924":[170]},{"1546926":[194]},{"1546928":[174]},{"1546930":[187]},{"1546932":[255]},{"1546934":[161]},{"1546936":[166]},{"1546938":[160]},{"1546940":[255]},{"1546942":[255,127,117]},{"1546946":[255]},{"1546948":[255]},{"1546950":[185]},{"1546952":[181]},{"1546954":[170]},{"1546956":[194]},{"1546958":[174]},{"1546960":[187]},{"1546962":[255]},{"1546964":[161]},{"1546966":[166]},{"1546968":[161]},{"1546970":[255]},{"1546972":[255,127,117]},{"1546976":[255]},{"1546978":[255]},{"1546980":[185]},{"1546982":[181]},{"1546984":[170]},{"1546986":[194]},{"1546988":[174]},{"1546990":[187]},{"1546992":[255]},{"1546994":[161]},{"1546996":[166]},{"1546998":[162]},{"1547000":[255]},{"1547002":[255,127,117]},{"1547006":[255]},{"1547008":[255]},{"1547010":[185]},{"1547012":[181]},{"1547014":[170]},{"1547016":[194]},{"1547018":[174]},{"1547020":[187]},{"1547022":[255]},{"1547024":[161]},{"1547026":[166]},{"1547028":[163]},{"1547030":[255]},{"1547032":[255,127,117]},{"1547036":[255]},{"1547038":[255]},{"1547040":[185]},{"1547042":[181]},{"1547044":[170]},{"1547046":[194]},{"1547048":[174]},{"1547050":[187]},{"1547052":[255]},{"1547054":[161]},{"1547056":[166]},{"1547058":[164]},{"1547060":[255]},{"1547062":[255,127,117]},{"1547066":[255]},{"1547068":[255]},{"1547070":[185]},{"1547072":[181]},{"1547074":[170]},{"1547076":[194]},{"1547078":[174]},{"1547080":[187]},{"1547082":[255]},{"1547084":[161]},{"1547086":[166]},{"1547088":[165]},{"1547090":[255]},{"1547092":[255,127,117]},{"1547096":[255]},{"1547098":[255]},{"1547100":[185]},{"1547102":[181]},{"1547104":[170]},{"1547106":[194]},{"1547108":[174]},{"1547110":[187]},{"1547112":[255]},{"1547114":[161]},{"1547116":[166]},{"1547118":[166]},{"1547120":[255]},{"1547122":[255,127,117]},{"1547126":[255]},{"1547128":[255]},{"1547130":[185]},{"1547132":[181]},{"1547134":[170]},{"1547136":[194]},{"1547138":[174]},{"1547140":[187]},{"1547142":[255]},{"1547144":[161]},{"1547146":[166]},{"1547148":[167]},{"1547150":[255]},{"1547152":[255,127,117]},{"1547156":[255]},{"1547158":[255]},{"1547160":[185]},{"1547162":[181]},{"1547164":[170]},{"1547166":[194]},{"1547168":[174]},{"1547170":[187]},{"1547172":[255]},{"1547174":[161]},{"1547176":[166]},{"1547178":[168]},{"1547180":[255]},{"1547182":[255,127,117]},{"1547186":[255]},{"1547188":[255]},{"1547190":[185]},{"1547192":[181]},{"1547194":[170]},{"1547196":[194]},{"1547198":[174]},{"1547200":[187]},{"1547202":[255]},{"1547204":[161]},{"1547206":[166]},{"1547208":[169]},{"1547210":[255]},{"1547212":[255,127,117]},{"1547216":[255]},{"1547218":[255]},{"1547220":[185]},{"1547222":[181]},{"1547224":[170]},{"1547226":[194]},{"1547228":[174]},{"1547230":[187]},{"1547232":[255]},{"1547234":[161]},{"1547236":[167]},{"1547238":[160]},{"1547240":[255]},{"1547242":[255,127,117]},{"1547246":[255]},{"1547248":[255]},{"1547250":[185]},{"1547252":[181]},{"1547254":[170]},{"1547256":[194]},{"1547258":[174]},{"1547260":[187]},{"1547262":[255]},{"1547264":[161]},{"1547266":[167]},{"1547268":[161]},{"1547270":[255]},{"1547272":[255,127,117]},{"1547276":[255]},{"1547278":[255]},{"1547280":[185]},{"1547282":[181]},{"1547284":[170]},{"1547286":[194]},{"1547288":[174]},{"1547290":[187]},{"1547292":[255]},{"1547294":[161]},{"1547296":[167]},{"1547298":[162]},{"1547300":[255]},{"1547302":[255,127,117]},{"1547306":[255]},{"1547308":[255]},{"1547310":[185]},{"1547312":[181]},{"1547314":[170]},{"1547316":[194]},{"1547318":[174]},{"1547320":[187]},{"1547322":[255]},{"1547324":[161]},{"1547326":[167]},{"1547328":[163]},{"1547330":[255]},{"1547332":[255,127,117]},{"1547336":[255]},{"1547338":[255]},{"1547340":[185]},{"1547342":[181]},{"1547344":[170]},{"1547346":[194]},{"1547348":[174]},{"1547350":[187]},{"1547352":[255]},{"1547354":[161]},{"1547356":[167]},{"1547358":[164]},{"1547360":[255]},{"1547362":[255,127,117]},{"1547366":[255]},{"1547368":[255]},{"1547370":[185]},{"1547372":[181]},{"1547374":[170]},{"1547376":[194]},{"1547378":[174]},{"1547380":[187]},{"1547382":[255]},{"1547384":[161]},{"1547386":[167]},{"1547388":[165]},{"1547390":[255]},{"1547392":[255,127,117]},{"1547396":[255]},{"1547398":[255]},{"1547400":[185]},{"1547402":[181]},{"1547404":[170]},{"1547406":[194]},{"1547408":[174]},{"1547410":[187]},{"1547412":[255]},{"1547414":[161]},{"1547416":[167]},{"1547418":[166]},{"1547420":[255]},{"1547422":[255,127,117]},{"1547426":[255]},{"1547428":[255]},{"1547430":[185]},{"1547432":[181]},{"1547434":[170]},{"1547436":[194]},{"1547438":[174]},{"1547440":[187]},{"1547442":[255]},{"1547444":[161]},{"1547446":[167]},{"1547448":[167]},{"1547450":[255]},{"1547452":[255,127,117]},{"1547456":[255]},{"1547458":[255]},{"1547460":[185]},{"1547462":[181]},{"1547464":[170]},{"1547466":[194]},{"1547468":[174]},{"1547470":[187]},{"1547472":[255]},{"1547474":[161]},{"1547476":[167]},{"1547478":[168]},{"1547480":[255]},{"1547482":[255,127,117]},{"1547486":[255]},{"1547488":[255]},{"1547490":[185]},{"1547492":[181]},{"1547494":[170]},{"1547496":[194]},{"1547498":[174]},{"1547500":[187]},{"1547502":[255]},{"1547504":[161]},{"1547506":[167]},{"1547508":[169]},{"1547510":[255]},{"1547512":[255,127,117]},{"1547516":[255]},{"1547518":[255]},{"1547520":[185]},{"1547522":[181]},{"1547524":[170]},{"1547526":[194]},{"1547528":[174]},{"1547530":[187]},{"1547532":[255]},{"1547534":[161]},{"1547536":[168]},{"1547538":[160]},{"1547540":[255]},{"1547542":[255,127,117]},{"1547546":[255]},{"1547548":[255]},{"1547550":[185]},{"1547552":[181]},{"1547554":[170]},{"1547556":[194]},{"1547558":[174]},{"1547560":[187]},{"1547562":[255]},{"1547564":[161]},{"1547566":[168]},{"1547568":[161]},{"1547570":[255]},{"1547572":[255,127,117]},{"1547576":[255]},{"1547578":[255]},{"1547580":[185]},{"1547582":[181]},{"1547584":[170]},{"1547586":[194]},{"1547588":[174]},{"1547590":[187]},{"1547592":[255]},{"1547594":[161]},{"1547596":[168]},{"1547598":[162]},{"1547600":[255]},{"1547602":[255,127,117]},{"1547606":[255]},{"1547608":[255]},{"1547610":[185]},{"1547612":[181]},{"1547614":[170]},{"1547616":[194]},{"1547618":[174]},{"1547620":[187]},{"1547622":[255]},{"1547624":[161]},{"1547626":[168]},{"1547628":[163]},{"1547630":[255]},{"1547632":[255,127,117]},{"1547636":[255]},{"1547638":[255]},{"1547640":[185]},{"1547642":[181]},{"1547644":[170]},{"1547646":[194]},{"1547648":[174]},{"1547650":[187]},{"1547652":[255]},{"1547654":[161]},{"1547656":[168]},{"1547658":[164]},{"1547660":[255]},{"1547662":[255,127,117]},{"1547666":[255]},{"1547668":[255]},{"1547670":[185]},{"1547672":[181]},{"1547674":[170]},{"1547676":[194]},{"1547678":[174]},{"1547680":[187]},{"1547682":[255]},{"1547684":[161]},{"1547686":[168]},{"1547688":[165]},{"1547690":[255]},{"1547692":[255,127,117]},{"1547696":[255]},{"1547698":[255]},{"1547700":[185]},{"1547702":[181]},{"1547704":[170]},{"1547706":[194]},{"1547708":[174]},{"1547710":[187]},{"1547712":[255]},{"1547714":[161]},{"1547716":[168]},{"1547718":[166]},{"1547720":[255]},{"1547722":[255,127,117]},{"1547726":[255]},{"1547728":[255]},{"1547730":[185]},{"1547732":[181]},{"1547734":[170]},{"1547736":[194]},{"1547738":[174]},{"1547740":[187]},{"1547742":[255]},{"1547744":[161]},{"1547746":[168]},{"1547748":[167]},{"1547750":[255]},{"1547752":[255,127,117]},{"1547756":[255]},{"1547758":[255]},{"1547760":[185]},{"1547762":[181]},{"1547764":[170]},{"1547766":[194]},{"1547768":[174]},{"1547770":[187]},{"1547772":[255]},{"1547774":[161]},{"1547776":[168]},{"1547778":[168]},{"1547780":[255]},{"1547782":[255,127,117]},{"1547786":[255]},{"1547788":[255]},{"1547790":[185]},{"1547792":[181]},{"1547794":[170]},{"1547796":[194]},{"1547798":[174]},{"1547800":[187]},{"1547802":[255]},{"1547804":[161]},{"1547806":[168]},{"1547808":[169]},{"1547810":[255]},{"1547812":[255,127,117]},{"1547816":[255]},{"1547818":[255]},{"1547820":[185]},{"1547822":[181]},{"1547824":[170]},{"1547826":[194]},{"1547828":[174]},{"1547830":[187]},{"1547832":[255]},{"1547834":[161]},{"1547836":[169]},{"1547838":[160]},{"1547840":[255]},{"1547842":[255,127,117]},{"1547846":[255]},{"1547848":[255]},{"1547850":[185]},{"1547852":[181]},{"1547854":[170]},{"1547856":[194]},{"1547858":[174]},{"1547860":[187]},{"1547862":[255]},{"1547864":[161]},{"1547866":[169]},{"1547868":[161]},{"1547870":[255]},{"1547872":[255,127,117]},{"1547876":[255]},{"1547878":[255]},{"1547880":[185]},{"1547882":[181]},{"1547884":[170]},{"1547886":[194]},{"1547888":[174]},{"1547890":[187]},{"1547892":[255]},{"1547894":[161]},{"1547896":[169]},{"1547898":[162]},{"1547900":[255]},{"1547902":[255,127,117]},{"1547906":[255]},{"1547908":[255]},{"1547910":[185]},{"1547912":[181]},{"1547914":[170]},{"1547916":[194]},{"1547918":[174]},{"1547920":[187]},{"1547922":[255]},{"1547924":[161]},{"1547926":[169]},{"1547928":[163]},{"1547930":[255]},{"1547932":[255,127,117]},{"1547936":[255]},{"1547938":[255]},{"1547940":[185]},{"1547942":[181]},{"1547944":[170]},{"1547946":[194]},{"1547948":[174]},{"1547950":[187]},{"1547952":[255]},{"1547954":[161]},{"1547956":[169]},{"1547958":[164]},{"1547960":[255]},{"1547962":[255,127,117]},{"1547966":[255]},{"1547968":[255]},{"1547970":[185]},{"1547972":[181]},{"1547974":[170]},{"1547976":[194]},{"1547978":[174]},{"1547980":[187]},{"1547982":[255]},{"1547984":[161]},{"1547986":[169]},{"1547988":[165]},{"1547990":[255]},{"1547992":[255,127,117]},{"1547996":[255]},{"1547998":[255]},{"1548000":[185]},{"1548002":[181]},{"1548004":[170]},{"1548006":[194]},{"1548008":[174]},{"1548010":[187]},{"1548012":[255]},{"1548014":[161]},{"1548016":[169]},{"1548018":[166]},{"1548020":[255]},{"1548022":[255,127,117]},{"1548026":[255]},{"1548028":[255]},{"1548030":[185]},{"1548032":[181]},{"1548034":[170]},{"1548036":[194]},{"1548038":[174]},{"1548040":[187]},{"1548042":[255]},{"1548044":[161]},{"1548046":[169]},{"1548048":[167]},{"1548050":[255]},{"1548052":[255,127,117]},{"1548056":[255]},{"1548058":[255]},{"1548060":[185]},{"1548062":[181]},{"1548064":[170]},{"1548066":[194]},{"1548068":[174]},{"1548070":[187]},{"1548072":[255]},{"1548074":[161]},{"1548076":[169]},{"1548078":[168]},{"1548080":[255]},{"1548082":[255,127,117]},{"1548086":[255]},{"1548088":[255]},{"1548090":[185]},{"1548092":[181]},{"1548094":[170]},{"1548096":[194]},{"1548098":[174]},{"1548100":[187]},{"1548102":[255]},{"1548104":[161]},{"1548106":[169]},{"1548108":[169]},{"1548110":[255]},{"1548112":[255,127,117]},{"1548116":[255]},{"1548118":[255]},{"1548120":[185]},{"1548122":[181]},{"1548124":[170]},{"1548126":[194]},{"1548128":[174]},{"1548130":[187]},{"1548132":[255]},{"1548134":[162]},{"1548136":[160]},{"1548138":[160]},{"1548140":[255]},{"1548142":[255,127,117]},{"1548146":[255]},{"1548148":[255]},{"1548150":[185]},{"1548152":[181]},{"1548154":[170]},{"1548156":[194]},{"1548158":[174]},{"1548160":[187]},{"1548162":[255]},{"1548164":[162]},{"1548166":[160]},{"1548168":[161]},{"1548170":[255]},{"1548172":[255,127,117]},{"1548176":[255]},{"1548178":[255]},{"1548180":[185]},{"1548182":[181]},{"1548184":[170]},{"1548186":[194]},{"1548188":[174]},{"1548190":[187]},{"1548192":[255]},{"1548194":[162]},{"1548196":[160]},{"1548198":[162]},{"1548200":[255]},{"1548202":[255,127,117]},{"1548206":[255]},{"1548208":[255]},{"1548210":[185]},{"1548212":[181]},{"1548214":[170]},{"1548216":[194]},{"1548218":[174]},{"1548220":[187]},{"1548222":[255]},{"1548224":[162]},{"1548226":[160]},{"1548228":[163]},{"1548230":[255]},{"1548232":[255,127,117]},{"1548236":[255]},{"1548238":[255]},{"1548240":[185]},{"1548242":[181]},{"1548244":[170]},{"1548246":[194]},{"1548248":[174]},{"1548250":[187]},{"1548252":[255]},{"1548254":[162]},{"1548256":[160]},{"1548258":[164]},{"1548260":[255]},{"1548262":[255,127,117]},{"1548266":[255]},{"1548268":[255]},{"1548270":[185]},{"1548272":[181]},{"1548274":[170]},{"1548276":[194]},{"1548278":[174]},{"1548280":[187]},{"1548282":[255]},{"1548284":[162]},{"1548286":[160]},{"1548288":[165]},{"1548290":[255]},{"1548292":[255,127,117]},{"1548296":[255]},{"1548298":[255]},{"1548300":[185]},{"1548302":[181]},{"1548304":[170]},{"1548306":[194]},{"1548308":[174]},{"1548310":[187]},{"1548312":[255]},{"1548314":[162]},{"1548316":[160]},{"1548318":[166]},{"1548320":[255]},{"1548322":[255,127,117]},{"1548326":[255]},{"1548328":[255]},{"1548330":[185]},{"1548332":[181]},{"1548334":[170]},{"1548336":[194]},{"1548338":[174]},{"1548340":[187]},{"1548342":[255]},{"1548344":[162]},{"1548346":[160]},{"1548348":[167]},{"1548350":[255]},{"1548352":[255,127,117]},{"1548356":[255]},{"1548358":[255]},{"1548360":[185]},{"1548362":[181]},{"1548364":[170]},{"1548366":[194]},{"1548368":[174]},{"1548370":[187]},{"1548372":[255]},{"1548374":[162]},{"1548376":[160]},{"1548378":[168]},{"1548380":[255]},{"1548382":[255,127,117]},{"1548386":[255]},{"1548388":[255]},{"1548390":[185]},{"1548392":[181]},{"1548394":[170]},{"1548396":[194]},{"1548398":[174]},{"1548400":[187]},{"1548402":[255]},{"1548404":[162]},{"1548406":[160]},{"1548408":[169]},{"1548410":[255]},{"1548412":[255,127,117]},{"1548416":[255]},{"1548418":[255]},{"1548420":[185]},{"1548422":[181]},{"1548424":[170]},{"1548426":[194]},{"1548428":[174]},{"1548430":[187]},{"1548432":[255]},{"1548434":[162]},{"1548436":[161]},{"1548438":[160]},{"1548440":[255]},{"1548442":[255,127,117]},{"1548446":[255]},{"1548448":[255]},{"1548450":[185]},{"1548452":[181]},{"1548454":[170]},{"1548456":[194]},{"1548458":[174]},{"1548460":[187]},{"1548462":[255]},{"1548464":[162]},{"1548466":[161]},{"1548468":[161]},{"1548470":[255]},{"1548472":[255,127,117]},{"1548476":[255]},{"1548478":[255]},{"1548480":[185]},{"1548482":[181]},{"1548484":[170]},{"1548486":[194]},{"1548488":[174]},{"1548490":[187]},{"1548492":[255]},{"1548494":[162]},{"1548496":[161]},{"1548498":[162]},{"1548500":[255]},{"1548502":[255,127,117]},{"1548506":[255]},{"1548508":[255]},{"1548510":[185]},{"1548512":[181]},{"1548514":[170]},{"1548516":[194]},{"1548518":[174]},{"1548520":[187]},{"1548522":[255]},{"1548524":[162]},{"1548526":[161]},{"1548528":[163]},{"1548530":[255]},{"1548532":[255,127,117]},{"1548536":[255]},{"1548538":[255]},{"1548540":[185]},{"1548542":[181]},{"1548544":[170]},{"1548546":[194]},{"1548548":[174]},{"1548550":[187]},{"1548552":[255]},{"1548554":[162]},{"1548556":[161]},{"1548558":[164]},{"1548560":[255]},{"1548562":[255,127,117]},{"1548566":[255]},{"1548568":[255]},{"1548570":[185]},{"1548572":[181]},{"1548574":[170]},{"1548576":[194]},{"1548578":[174]},{"1548580":[187]},{"1548582":[255]},{"1548584":[162]},{"1548586":[161]},{"1548588":[165]},{"1548590":[255]},{"1548592":[255,127,117]},{"1548596":[255]},{"1548598":[255]},{"1548600":[185]},{"1548602":[181]},{"1548604":[170]},{"1548606":[194]},{"1548608":[174]},{"1548610":[187]},{"1548612":[255]},{"1548614":[162]},{"1548616":[161]},{"1548618":[166]},{"1548620":[255]},{"1548622":[255,127,117]},{"1548626":[255]},{"1548628":[255]},{"1548630":[185]},{"1548632":[181]},{"1548634":[170]},{"1548636":[194]},{"1548638":[174]},{"1548640":[187]},{"1548642":[255]},{"1548644":[162]},{"1548646":[161]},{"1548648":[167]},{"1548650":[255]},{"1548652":[255,127,117]},{"1548656":[255]},{"1548658":[255]},{"1548660":[185]},{"1548662":[181]},{"1548664":[170]},{"1548666":[194]},{"1548668":[174]},{"1548670":[187]},{"1548672":[255]},{"1548674":[162]},{"1548676":[161]},{"1548678":[168]},{"1548680":[255]},{"1548682":[255,127,117]},{"1548686":[255]},{"1548688":[255]},{"1548690":[185]},{"1548692":[181]},{"1548694":[170]},{"1548696":[194]},{"1548698":[174]},{"1548700":[187]},{"1548702":[255]},{"1548704":[162]},{"1548706":[161]},{"1548708":[169]},{"1548710":[255]},{"1548712":[255,127,117]},{"1548716":[255]},{"1548718":[255]},{"1548720":[185]},{"1548722":[181]},{"1548724":[170]},{"1548726":[194]},{"1548728":[174]},{"1548730":[187]},{"1548732":[255]},{"1548734":[162]},{"1548736":[162]},{"1548738":[160]},{"1548740":[255]},{"1548742":[255,127,117]},{"1548746":[255]},{"1548748":[255]},{"1548750":[185]},{"1548752":[181]},{"1548754":[170]},{"1548756":[194]},{"1548758":[174]},{"1548760":[187]},{"1548762":[255]},{"1548764":[162]},{"1548766":[162]},{"1548768":[161]},{"1548770":[255]},{"1548772":[255,127,117]},{"1548776":[255]},{"1548778":[255]},{"1548780":[185]},{"1548782":[181]},{"1548784":[170]},{"1548786":[194]},{"1548788":[174]},{"1548790":[187]},{"1548792":[255]},{"1548794":[162]},{"1548796":[162]},{"1548798":[162]},{"1548800":[255]},{"1548802":[255,127,117]},{"1548806":[255]},{"1548808":[255]},{"1548810":[185]},{"1548812":[181]},{"1548814":[170]},{"1548816":[194]},{"1548818":[174]},{"1548820":[187]},{"1548822":[255]},{"1548824":[162]},{"1548826":[162]},{"1548828":[163]},{"1548830":[255]},{"1548832":[255,127,117]},{"1548836":[255]},{"1548838":[255]},{"1548840":[185]},{"1548842":[181]},{"1548844":[170]},{"1548846":[194]},{"1548848":[174]},{"1548850":[187]},{"1548852":[255]},{"1548854":[162]},{"1548856":[162]},{"1548858":[164]},{"1548860":[255]},{"1548862":[255,127,117]},{"1548866":[255]},{"1548868":[255]},{"1548870":[185]},{"1548872":[181]},{"1548874":[170]},{"1548876":[194]},{"1548878":[174]},{"1548880":[187]},{"1548882":[255]},{"1548884":[162]},{"1548886":[162]},{"1548888":[165]},{"1548890":[255]},{"1548892":[255,127,117]},{"1548896":[255]},{"1548898":[255]},{"1548900":[185]},{"1548902":[181]},{"1548904":[170]},{"1548906":[194]},{"1548908":[174]},{"1548910":[187]},{"1548912":[255]},{"1548914":[162]},{"1548916":[162]},{"1548918":[166]},{"1548920":[255]},{"1548922":[255,127,117]},{"1548926":[255]},{"1548928":[255]},{"1548930":[185]},{"1548932":[181]},{"1548934":[170]},{"1548936":[194]},{"1548938":[174]},{"1548940":[187]},{"1548942":[255]},{"1548944":[162]},{"1548946":[162]},{"1548948":[167]},{"1548950":[255]},{"1548952":[255,127,117]},{"1548956":[255]},{"1548958":[255]},{"1548960":[185]},{"1548962":[181]},{"1548964":[170]},{"1548966":[194]},{"1548968":[174]},{"1548970":[187]},{"1548972":[255]},{"1548974":[162]},{"1548976":[162]},{"1548978":[168]},{"1548980":[255]},{"1548982":[255,127,117]},{"1548986":[255]},{"1548988":[255]},{"1548990":[185]},{"1548992":[181]},{"1548994":[170]},{"1548996":[194]},{"1548998":[174]},{"1549000":[187]},{"1549002":[255]},{"1549004":[162]},{"1549006":[162]},{"1549008":[169]},{"1549010":[255]},{"1549012":[255,127,117]},{"1549016":[255]},{"1549018":[255]},{"1549020":[185]},{"1549022":[181]},{"1549024":[170]},{"1549026":[194]},{"1549028":[174]},{"1549030":[187]},{"1549032":[255]},{"1549034":[162]},{"1549036":[163]},{"1549038":[160]},{"1549040":[255]},{"1549042":[255,127,117]},{"1549046":[255]},{"1549048":[255]},{"1549050":[185]},{"1549052":[181]},{"1549054":[170]},{"1549056":[194]},{"1549058":[174]},{"1549060":[187]},{"1549062":[255]},{"1549064":[162]},{"1549066":[163]},{"1549068":[161]},{"1549070":[255]},{"1549072":[255,127,117]},{"1549076":[255]},{"1549078":[255]},{"1549080":[185]},{"1549082":[181]},{"1549084":[170]},{"1549086":[194]},{"1549088":[174]},{"1549090":[187]},{"1549092":[255]},{"1549094":[162]},{"1549096":[163]},{"1549098":[162]},{"1549100":[255]},{"1549102":[255,127,117]},{"1549106":[255]},{"1549108":[255]},{"1549110":[185]},{"1549112":[181]},{"1549114":[170]},{"1549116":[194]},{"1549118":[174]},{"1549120":[187]},{"1549122":[255]},{"1549124":[162]},{"1549126":[163]},{"1549128":[163]},{"1549130":[255]},{"1549132":[255,127,117]},{"1549136":[255]},{"1549138":[255]},{"1549140":[185]},{"1549142":[181]},{"1549144":[170]},{"1549146":[194]},{"1549148":[174]},{"1549150":[187]},{"1549152":[255]},{"1549154":[162]},{"1549156":[163]},{"1549158":[164]},{"1549160":[255]},{"1549162":[255,127,117]},{"1549166":[255]},{"1549168":[255]},{"1549170":[185]},{"1549172":[181]},{"1549174":[170]},{"1549176":[194]},{"1549178":[174]},{"1549180":[187]},{"1549182":[255]},{"1549184":[162]},{"1549186":[163]},{"1549188":[165]},{"1549190":[255]},{"1549192":[255,127,117]},{"1549196":[255]},{"1549198":[255]},{"1549200":[185]},{"1549202":[181]},{"1549204":[170]},{"1549206":[194]},{"1549208":[174]},{"1549210":[187]},{"1549212":[255]},{"1549214":[162]},{"1549216":[163]},{"1549218":[166]},{"1549220":[255]},{"1549222":[255,127,117]},{"1549226":[255]},{"1549228":[255]},{"1549230":[185]},{"1549232":[181]},{"1549234":[170]},{"1549236":[194]},{"1549238":[174]},{"1549240":[187]},{"1549242":[255]},{"1549244":[162]},{"1549246":[163]},{"1549248":[167]},{"1549250":[255]},{"1549252":[255,127,117]},{"1549256":[255]},{"1549258":[255]},{"1549260":[185]},{"1549262":[181]},{"1549264":[170]},{"1549266":[194]},{"1549268":[174]},{"1549270":[187]},{"1549272":[255]},{"1549274":[162]},{"1549276":[163]},{"1549278":[168]},{"1549280":[255]},{"1549282":[255,127,117]},{"1549286":[255]},{"1549288":[255]},{"1549290":[185]},{"1549292":[181]},{"1549294":[170]},{"1549296":[194]},{"1549298":[174]},{"1549300":[187]},{"1549302":[255]},{"1549304":[162]},{"1549306":[163]},{"1549308":[169]},{"1549310":[255]},{"1549312":[255,127,117]},{"1549316":[255]},{"1549318":[255]},{"1549320":[185]},{"1549322":[181]},{"1549324":[170]},{"1549326":[194]},{"1549328":[174]},{"1549330":[187]},{"1549332":[255]},{"1549334":[162]},{"1549336":[164]},{"1549338":[160]},{"1549340":[255]},{"1549342":[255,127,117]},{"1549346":[255]},{"1549348":[255]},{"1549350":[185]},{"1549352":[181]},{"1549354":[170]},{"1549356":[194]},{"1549358":[174]},{"1549360":[187]},{"1549362":[255]},{"1549364":[162]},{"1549366":[164]},{"1549368":[161]},{"1549370":[255]},{"1549372":[255,127,117]},{"1549376":[255]},{"1549378":[255]},{"1549380":[185]},{"1549382":[181]},{"1549384":[170]},{"1549386":[194]},{"1549388":[174]},{"1549390":[187]},{"1549392":[255]},{"1549394":[162]},{"1549396":[164]},{"1549398":[162]},{"1549400":[255]},{"1549402":[255,127,117]},{"1549406":[255]},{"1549408":[255]},{"1549410":[185]},{"1549412":[181]},{"1549414":[170]},{"1549416":[194]},{"1549418":[174]},{"1549420":[187]},{"1549422":[255]},{"1549424":[162]},{"1549426":[164]},{"1549428":[163]},{"1549430":[255]},{"1549432":[255,127,117]},{"1549436":[255]},{"1549438":[255]},{"1549440":[185]},{"1549442":[181]},{"1549444":[170]},{"1549446":[194]},{"1549448":[174]},{"1549450":[187]},{"1549452":[255]},{"1549454":[162]},{"1549456":[164]},{"1549458":[164]},{"1549460":[255]},{"1549462":[255,127,117]},{"1549466":[255]},{"1549468":[255]},{"1549470":[185]},{"1549472":[181]},{"1549474":[170]},{"1549476":[194]},{"1549478":[174]},{"1549480":[187]},{"1549482":[255]},{"1549484":[162]},{"1549486":[164]},{"1549488":[165]},{"1549490":[255]},{"1549492":[255,127,117]},{"1549496":[255]},{"1549498":[255]},{"1549500":[185]},{"1549502":[181]},{"1549504":[170]},{"1549506":[194]},{"1549508":[174]},{"1549510":[187]},{"1549512":[255]},{"1549514":[162]},{"1549516":[164]},{"1549518":[166]},{"1549520":[255]},{"1549522":[255,127,117]},{"1549526":[255]},{"1549528":[255]},{"1549530":[185]},{"1549532":[181]},{"1549534":[170]},{"1549536":[194]},{"1549538":[174]},{"1549540":[187]},{"1549542":[255]},{"1549544":[162]},{"1549546":[164]},{"1549548":[167]},{"1549550":[255]},{"1549552":[255,127,117]},{"1549556":[255]},{"1549558":[255]},{"1549560":[185]},{"1549562":[181]},{"1549564":[170]},{"1549566":[194]},{"1549568":[174]},{"1549570":[187]},{"1549572":[255]},{"1549574":[162]},{"1549576":[164]},{"1549578":[168]},{"1549580":[255]},{"1549582":[255,127,117]},{"1549586":[255]},{"1549588":[255]},{"1549590":[185]},{"1549592":[181]},{"1549594":[170]},{"1549596":[194]},{"1549598":[174]},{"1549600":[187]},{"1549602":[255]},{"1549604":[162]},{"1549606":[164]},{"1549608":[169]},{"1549610":[255]},{"1549612":[255,127,117]},{"1549616":[255]},{"1549618":[255]},{"1549620":[185]},{"1549622":[181]},{"1549624":[170]},{"1549626":[194]},{"1549628":[174]},{"1549630":[187]},{"1549632":[255]},{"1549634":[162]},{"1549636":[165]},{"1549638":[160]},{"1549640":[255]},{"1549642":[255,127,117]},{"1549646":[255]},{"1549648":[255]},{"1549650":[185]},{"1549652":[181]},{"1549654":[170]},{"1549656":[194]},{"1549658":[174]},{"1549660":[187]},{"1549662":[255]},{"1549664":[162]},{"1549666":[165]},{"1549668":[161]},{"1549670":[255]},{"1549672":[255,127,117]},{"1549676":[255]},{"1549678":[255]},{"1549680":[185]},{"1549682":[181]},{"1549684":[170]},{"1549686":[194]},{"1549688":[174]},{"1549690":[187]},{"1549692":[255]},{"1549694":[162]},{"1549696":[165]},{"1549698":[162]},{"1549700":[255]},{"1549702":[255,127,117]},{"1549706":[255]},{"1549708":[255]},{"1549710":[185]},{"1549712":[181]},{"1549714":[170]},{"1549716":[194]},{"1549718":[174]},{"1549720":[187]},{"1549722":[255]},{"1549724":[162]},{"1549726":[165]},{"1549728":[163]},{"1549730":[255]},{"1549732":[255,127,117]},{"1549736":[255]},{"1549738":[255]},{"1549740":[185]},{"1549742":[181]},{"1549744":[170]},{"1549746":[194]},{"1549748":[174]},{"1549750":[187]},{"1549752":[255]},{"1549754":[162]},{"1549756":[165]},{"1549758":[164]},{"1549760":[255]},{"1549762":[255,127,117]},{"1549766":[255]},{"1549768":[255]},{"1549770":[185]},{"1549772":[181]},{"1549774":[170]},{"1549776":[194]},{"1549778":[174]},{"1549780":[187]},{"1549782":[255]},{"1549784":[162]},{"1549786":[165]},{"1549788":[165]},{"1549790":[255]},{"1549792":[255,127,117]},{"1549796":[255]},{"1549798":[255]},{"1549800":[185]},{"1549802":[181]},{"1549804":[170]},{"1549806":[194]},{"1549808":[174]},{"1549810":[187]},{"1549812":[255]},{"1549814":[162]},{"1549816":[165]},{"1549818":[166]},{"1549820":[255]},{"1549822":[255,127,117]},{"1549826":[255]},{"1549828":[255]},{"1549830":[185]},{"1549832":[181]},{"1549834":[170]},{"1549836":[194]},{"1549838":[174]},{"1549840":[187]},{"1549842":[255]},{"1549844":[162]},{"1549846":[165]},{"1549848":[167]},{"1549850":[255]},{"1549852":[255,127,117]},{"1549856":[255]},{"1549858":[255]},{"1549860":[185]},{"1549862":[181]},{"1549864":[170]},{"1549866":[194]},{"1549868":[174]},{"1549870":[187]},{"1549872":[255]},{"1549874":[162]},{"1549876":[165]},{"1549878":[168]},{"1549880":[255]},{"1549882":[255,127,117]},{"1549886":[255]},{"1549888":[255]},{"1549890":[185]},{"1549892":[181]},{"1549894":[170]},{"1549896":[194]},{"1549898":[174]},{"1549900":[187]},{"1549902":[255]},{"1549904":[162]},{"1549906":[165]},{"1549908":[169]},{"1549910":[255]},{"1549912":[255,127,117]},{"1549916":[255]},{"1549918":[255]},{"1549920":[185]},{"1549922":[181]},{"1549924":[170]},{"1549926":[194]},{"1549928":[174]},{"1549930":[187]},{"1549932":[255]},{"1549934":[162]},{"1549936":[166]},{"1549938":[160]},{"1549940":[255]},{"1549942":[255,127,117]},{"1549946":[255]},{"1549948":[255]},{"1549950":[185]},{"1549952":[181]},{"1549954":[170]},{"1549956":[194]},{"1549958":[174]},{"1549960":[187]},{"1549962":[255]},{"1549964":[162]},{"1549966":[166]},{"1549968":[161]},{"1549970":[255]},{"1549972":[255,127,117]},{"1549976":[255]},{"1549978":[255]},{"1549980":[185]},{"1549982":[181]},{"1549984":[170]},{"1549986":[194]},{"1549988":[174]},{"1549990":[187]},{"1549992":[255]},{"1549994":[162]},{"1549996":[166]},{"1549998":[162]},{"1550000":[255]},{"1550002":[255,127,117]},{"1550006":[255]},{"1550008":[255]},{"1550010":[185]},{"1550012":[181]},{"1550014":[170]},{"1550016":[194]},{"1550018":[174]},{"1550020":[187]},{"1550022":[255]},{"1550024":[162]},{"1550026":[166]},{"1550028":[163]},{"1550030":[255]},{"1550032":[255,127,117]},{"1550036":[255]},{"1550038":[255]},{"1550040":[185]},{"1550042":[181]},{"1550044":[170]},{"1550046":[194]},{"1550048":[174]},{"1550050":[187]},{"1550052":[255]},{"1550054":[162]},{"1550056":[166]},{"1550058":[164]},{"1550060":[255]},{"1550062":[255,127,117]},{"1550066":[255]},{"1550068":[255]},{"1550070":[185]},{"1550072":[181]},{"1550074":[170]},{"1550076":[194]},{"1550078":[174]},{"1550080":[187]},{"1550082":[255]},{"1550084":[162]},{"1550086":[166]},{"1550088":[165]},{"1550090":[255]},{"1550092":[255,127,117]},{"1550096":[255]},{"1550098":[255]},{"1550100":[185]},{"1550102":[181]},{"1550104":[170]},{"1550106":[194]},{"1550108":[174]},{"1550110":[187]},{"1550112":[255]},{"1550114":[162]},{"1550116":[166]},{"1550118":[166]},{"1550120":[255]},{"1550122":[255,127,117]},{"1550126":[255]},{"1550128":[255]},{"1550130":[185]},{"1550132":[181]},{"1550134":[170]},{"1550136":[194]},{"1550138":[174]},{"1550140":[187]},{"1550142":[255]},{"1550144":[162]},{"1550146":[166]},{"1550148":[167]},{"1550150":[255]},{"1550152":[255,127,117]},{"1550156":[255]},{"1550158":[255]},{"1550160":[185]},{"1550162":[181]},{"1550164":[170]},{"1550166":[194]},{"1550168":[174]},{"1550170":[187]},{"1550172":[255]},{"1550174":[162]},{"1550176":[166]},{"1550178":[168]},{"1550180":[255]},{"1550182":[255,127,117]},{"1550186":[255]},{"1550188":[255]},{"1550190":[185]},{"1550192":[181]},{"1550194":[170]},{"1550196":[194]},{"1550198":[174]},{"1550200":[187]},{"1550202":[255]},{"1550204":[162]},{"1550206":[166]},{"1550208":[169]},{"1550210":[255]},{"1550212":[255,127,117]},{"1550216":[255]},{"1550218":[255]},{"1550220":[185]},{"1550222":[181]},{"1550224":[170]},{"1550226":[194]},{"1550228":[174]},{"1550230":[187]},{"1550232":[255]},{"1550234":[162]},{"1550236":[167]},{"1550238":[160]},{"1550240":[255]},{"1550242":[255,127,117]},{"1550246":[255]},{"1550248":[255]},{"1550250":[185]},{"1550252":[181]},{"1550254":[170]},{"1550256":[194]},{"1550258":[174]},{"1550260":[187]},{"1550262":[255]},{"1550264":[162]},{"1550266":[167]},{"1550268":[161]},{"1550270":[255]},{"1550272":[255,127,117]},{"1550276":[255]},{"1550278":[255]},{"1550280":[185]},{"1550282":[181]},{"1550284":[170]},{"1550286":[194]},{"1550288":[174]},{"1550290":[187]},{"1550292":[255]},{"1550294":[162]},{"1550296":[167]},{"1550298":[162]},{"1550300":[255]},{"1550302":[255,127,117]},{"1550306":[255]},{"1550308":[255]},{"1550310":[185]},{"1550312":[181]},{"1550314":[170]},{"1550316":[194]},{"1550318":[174]},{"1550320":[187]},{"1550322":[255]},{"1550324":[162]},{"1550326":[167]},{"1550328":[163]},{"1550330":[255]},{"1550332":[255,127,117]},{"1550336":[255]},{"1550338":[255]},{"1550340":[185]},{"1550342":[181]},{"1550344":[170]},{"1550346":[194]},{"1550348":[174]},{"1550350":[187]},{"1550352":[255]},{"1550354":[162]},{"1550356":[167]},{"1550358":[164]},{"1550360":[255]},{"1550362":[255,127,117]},{"1550366":[255]},{"1550368":[255]},{"1550370":[185]},{"1550372":[181]},{"1550374":[170]},{"1550376":[194]},{"1550378":[174]},{"1550380":[187]},{"1550382":[255]},{"1550384":[162]},{"1550386":[167]},{"1550388":[165]},{"1550390":[255]},{"1550392":[255,127,117]},{"1550396":[255]},{"1550398":[255]},{"1550400":[185]},{"1550402":[181]},{"1550404":[170]},{"1550406":[194]},{"1550408":[174]},{"1550410":[187]},{"1550412":[255]},{"1550414":[162]},{"1550416":[167]},{"1550418":[166]},{"1550420":[255]},{"1550422":[255,127,117]},{"1550426":[255]},{"1550428":[255]},{"1550430":[185]},{"1550432":[181]},{"1550434":[170]},{"1550436":[194]},{"1550438":[174]},{"1550440":[187]},{"1550442":[255]},{"1550444":[162]},{"1550446":[167]},{"1550448":[167]},{"1550450":[255]},{"1550452":[255,127,117]},{"1550456":[255]},{"1550458":[255]},{"1550460":[185]},{"1550462":[181]},{"1550464":[170]},{"1550466":[194]},{"1550468":[174]},{"1550470":[187]},{"1550472":[255]},{"1550474":[162]},{"1550476":[167]},{"1550478":[168]},{"1550480":[255]},{"1550482":[255,127,117]},{"1550486":[255]},{"1550488":[255]},{"1550490":[185]},{"1550492":[181]},{"1550494":[170]},{"1550496":[194]},{"1550498":[174]},{"1550500":[187]},{"1550502":[255]},{"1550504":[162]},{"1550506":[167]},{"1550508":[169]},{"1550510":[255]},{"1550512":[255,127,117]},{"1550516":[255]},{"1550518":[255]},{"1550520":[185]},{"1550522":[181]},{"1550524":[170]},{"1550526":[194]},{"1550528":[174]},{"1550530":[187]},{"1550532":[255]},{"1550534":[162]},{"1550536":[168]},{"1550538":[160]},{"1550540":[255]},{"1550542":[255,127,117]},{"1550546":[255]},{"1550548":[255]},{"1550550":[185]},{"1550552":[181]},{"1550554":[170]},{"1550556":[194]},{"1550558":[174]},{"1550560":[187]},{"1550562":[255]},{"1550564":[162]},{"1550566":[168]},{"1550568":[161]},{"1550570":[255]},{"1550572":[255,127,117]},{"1550576":[255]},{"1550578":[255]},{"1550580":[185]},{"1550582":[181]},{"1550584":[170]},{"1550586":[194]},{"1550588":[174]},{"1550590":[187]},{"1550592":[255]},{"1550594":[162]},{"1550596":[168]},{"1550598":[162]},{"1550600":[255]},{"1550602":[255,127,117]},{"1550606":[255]},{"1550608":[255]},{"1550610":[185]},{"1550612":[181]},{"1550614":[170]},{"1550616":[194]},{"1550618":[174]},{"1550620":[187]},{"1550622":[255]},{"1550624":[162]},{"1550626":[168]},{"1550628":[163]},{"1550630":[255]},{"1550632":[255,127,117]},{"1550636":[255]},{"1550638":[255]},{"1550640":[185]},{"1550642":[181]},{"1550644":[170]},{"1550646":[194]},{"1550648":[174]},{"1550650":[187]},{"1550652":[255]},{"1550654":[162]},{"1550656":[168]},{"1550658":[164]},{"1550660":[255]},{"1550662":[255,127,117]},{"1550666":[255]},{"1550668":[255]},{"1550670":[185]},{"1550672":[181]},{"1550674":[170]},{"1550676":[194]},{"1550678":[174]},{"1550680":[187]},{"1550682":[255]},{"1550684":[162]},{"1550686":[168]},{"1550688":[165]},{"1550690":[255]},{"1550692":[255,127,117]},{"1550696":[255]},{"1550698":[255]},{"1550700":[185]},{"1550702":[181]},{"1550704":[170]},{"1550706":[194]},{"1550708":[174]},{"1550710":[187]},{"1550712":[255]},{"1550714":[162]},{"1550716":[168]},{"1550718":[166]},{"1550720":[255]},{"1550722":[255,127,117]},{"1550726":[255]},{"1550728":[255]},{"1550730":[185]},{"1550732":[181]},{"1550734":[170]},{"1550736":[194]},{"1550738":[174]},{"1550740":[187]},{"1550742":[255]},{"1550744":[162]},{"1550746":[168]},{"1550748":[167]},{"1550750":[255]},{"1550752":[255,127,117]},{"1550756":[255]},{"1550758":[255]},{"1550760":[185]},{"1550762":[181]},{"1550764":[170]},{"1550766":[194]},{"1550768":[174]},{"1550770":[187]},{"1550772":[255]},{"1550774":[162]},{"1550776":[168]},{"1550778":[168]},{"1550780":[255]},{"1550782":[255,127,117]},{"1550786":[255]},{"1550788":[255]},{"1550790":[185]},{"1550792":[181]},{"1550794":[170]},{"1550796":[194]},{"1550798":[174]},{"1550800":[187]},{"1550802":[255]},{"1550804":[162]},{"1550806":[168]},{"1550808":[169]},{"1550810":[255]},{"1550812":[255,127,117]},{"1550816":[255]},{"1550818":[255]},{"1550820":[185]},{"1550822":[181]},{"1550824":[170]},{"1550826":[194]},{"1550828":[174]},{"1550830":[187]},{"1550832":[255]},{"1550834":[162]},{"1550836":[169]},{"1550838":[160]},{"1550840":[255]},{"1550842":[255,127,117]},{"1550846":[255]},{"1550848":[255]},{"1550850":[185]},{"1550852":[181]},{"1550854":[170]},{"1550856":[194]},{"1550858":[174]},{"1550860":[187]},{"1550862":[255]},{"1550864":[162]},{"1550866":[169]},{"1550868":[161]},{"1550870":[255]},{"1550872":[255,127,117]},{"1550876":[255]},{"1550878":[255]},{"1550880":[185]},{"1550882":[181]},{"1550884":[170]},{"1550886":[194]},{"1550888":[174]},{"1550890":[187]},{"1550892":[255]},{"1550894":[162]},{"1550896":[169]},{"1550898":[162]},{"1550900":[255]},{"1550902":[255,127,117]},{"1550906":[255]},{"1550908":[255]},{"1550910":[185]},{"1550912":[181]},{"1550914":[170]},{"1550916":[194]},{"1550918":[174]},{"1550920":[187]},{"1550922":[255]},{"1550924":[162]},{"1550926":[169]},{"1550928":[163]},{"1550930":[255]},{"1550932":[255,127,117]},{"1550936":[255]},{"1550938":[255]},{"1550940":[185]},{"1550942":[181]},{"1550944":[170]},{"1550946":[194]},{"1550948":[174]},{"1550950":[187]},{"1550952":[255]},{"1550954":[162]},{"1550956":[169]},{"1550958":[164]},{"1550960":[255]},{"1550962":[255,127,117]},{"1550966":[255]},{"1550968":[255]},{"1550970":[185]},{"1550972":[181]},{"1550974":[170]},{"1550976":[194]},{"1550978":[174]},{"1550980":[187]},{"1550982":[255]},{"1550984":[162]},{"1550986":[169]},{"1550988":[165]},{"1550990":[255]},{"1550992":[255,127,117]},{"1550996":[255]},{"1550998":[255]},{"1551000":[185]},{"1551002":[181]},{"1551004":[170]},{"1551006":[194]},{"1551008":[174]},{"1551010":[187]},{"1551012":[255]},{"1551014":[162]},{"1551016":[169]},{"1551018":[166]},{"1551020":[255]},{"1551022":[255,127,117]},{"1551026":[255]},{"1551028":[255]},{"1551030":[185]},{"1551032":[181]},{"1551034":[170]},{"1551036":[194]},{"1551038":[174]},{"1551040":[187]},{"1551042":[255]},{"1551044":[162]},{"1551046":[169]},{"1551048":[167]},{"1551050":[255]},{"1551052":[255,127,117]},{"1551056":[255]},{"1551058":[255]},{"1551060":[185]},{"1551062":[181]},{"1551064":[170]},{"1551066":[194]},{"1551068":[174]},{"1551070":[187]},{"1551072":[255]},{"1551074":[162]},{"1551076":[169]},{"1551078":[168]},{"1551080":[255]},{"1551082":[255,127,117]},{"1551086":[255]},{"1551088":[255]},{"1551090":[185]},{"1551092":[181]},{"1551094":[170]},{"1551096":[194]},{"1551098":[174]},{"1551100":[187]},{"1551102":[255]},{"1551104":[162]},{"1551106":[169]},{"1551108":[169]},{"1551110":[255]},{"1551112":[255,127,117]},{"1551116":[255]},{"1551118":[255]},{"1551120":[185]},{"1551122":[181]},{"1551124":[170]},{"1551126":[194]},{"1551128":[174]},{"1551130":[187]},{"1551132":[255]},{"1551134":[163]},{"1551136":[160]},{"1551138":[160]},{"1551140":[255]},{"1551142":[255,127,117]},{"1551146":[255]},{"1551148":[255]},{"1551150":[185]},{"1551152":[181]},{"1551154":[170]},{"1551156":[194]},{"1551158":[174]},{"1551160":[187]},{"1551162":[255]},{"1551164":[163]},{"1551166":[160]},{"1551168":[161]},{"1551170":[255]},{"1551172":[255,127,117]},{"1551176":[255]},{"1551178":[255]},{"1551180":[185]},{"1551182":[181]},{"1551184":[170]},{"1551186":[194]},{"1551188":[174]},{"1551190":[187]},{"1551192":[255]},{"1551194":[163]},{"1551196":[160]},{"1551198":[162]},{"1551200":[255]},{"1551202":[255,127,117]},{"1551206":[255]},{"1551208":[255]},{"1551210":[185]},{"1551212":[181]},{"1551214":[170]},{"1551216":[194]},{"1551218":[174]},{"1551220":[187]},{"1551222":[255]},{"1551224":[163]},{"1551226":[160]},{"1551228":[163]},{"1551230":[255]},{"1551232":[255,127,117]},{"1551236":[255]},{"1551238":[255]},{"1551240":[185]},{"1551242":[181]},{"1551244":[170]},{"1551246":[194]},{"1551248":[174]},{"1551250":[187]},{"1551252":[255]},{"1551254":[163]},{"1551256":[160]},{"1551258":[164]},{"1551260":[255]},{"1551262":[255,127,117]},{"1551266":[255]},{"1551268":[255]},{"1551270":[185]},{"1551272":[181]},{"1551274":[170]},{"1551276":[194]},{"1551278":[174]},{"1551280":[187]},{"1551282":[255]},{"1551284":[163]},{"1551286":[160]},{"1551288":[165]},{"1551290":[255]},{"1551292":[255,127,117]},{"1551296":[255]},{"1551298":[255]},{"1551300":[185]},{"1551302":[181]},{"1551304":[170]},{"1551306":[194]},{"1551308":[174]},{"1551310":[187]},{"1551312":[255]},{"1551314":[163]},{"1551316":[160]},{"1551318":[166]},{"1551320":[255]},{"1551322":[255,127,117]},{"1551326":[255]},{"1551328":[255]},{"1551330":[185]},{"1551332":[181]},{"1551334":[170]},{"1551336":[194]},{"1551338":[174]},{"1551340":[187]},{"1551342":[255]},{"1551344":[163]},{"1551346":[160]},{"1551348":[167]},{"1551350":[255]},{"1551352":[255,127,117]},{"1551356":[255]},{"1551358":[255]},{"1551360":[185]},{"1551362":[181]},{"1551364":[170]},{"1551366":[194]},{"1551368":[174]},{"1551370":[187]},{"1551372":[255]},{"1551374":[163]},{"1551376":[160]},{"1551378":[168]},{"1551380":[255]},{"1551382":[255,127,117]},{"1551386":[255]},{"1551388":[255]},{"1551390":[185]},{"1551392":[181]},{"1551394":[170]},{"1551396":[194]},{"1551398":[174]},{"1551400":[187]},{"1551402":[255]},{"1551404":[163]},{"1551406":[160]},{"1551408":[169]},{"1551410":[255]},{"1551412":[255,127,117]},{"1551416":[255]},{"1551418":[255]},{"1551420":[185]},{"1551422":[181]},{"1551424":[170]},{"1551426":[194]},{"1551428":[174]},{"1551430":[187]},{"1551432":[255]},{"1551434":[163]},{"1551436":[161]},{"1551438":[160]},{"1551440":[255]},{"1551442":[255,127,117]},{"1551446":[255]},{"1551448":[255]},{"1551450":[185]},{"1551452":[181]},{"1551454":[170]},{"1551456":[194]},{"1551458":[174]},{"1551460":[187]},{"1551462":[255]},{"1551464":[163]},{"1551466":[161]},{"1551468":[161]},{"1551470":[255]},{"1551472":[255,127,117]},{"1551476":[255]},{"1551478":[255]},{"1551480":[185]},{"1551482":[181]},{"1551484":[170]},{"1551486":[194]},{"1551488":[174]},{"1551490":[187]},{"1551492":[255]},{"1551494":[163]},{"1551496":[161]},{"1551498":[162]},{"1551500":[255]},{"1551502":[255,127,117]},{"1551506":[255]},{"1551508":[255]},{"1551510":[185]},{"1551512":[181]},{"1551514":[170]},{"1551516":[194]},{"1551518":[174]},{"1551520":[187]},{"1551522":[255]},{"1551524":[163]},{"1551526":[161]},{"1551528":[163]},{"1551530":[255]},{"1551532":[255,127,117]},{"1551536":[255]},{"1551538":[255]},{"1551540":[185]},{"1551542":[181]},{"1551544":[170]},{"1551546":[194]},{"1551548":[174]},{"1551550":[187]},{"1551552":[255]},{"1551554":[163]},{"1551556":[161]},{"1551558":[164]},{"1551560":[255]},{"1551562":[255,127,117]},{"1551566":[255]},{"1551568":[255]},{"1551570":[185]},{"1551572":[181]},{"1551574":[170]},{"1551576":[194]},{"1551578":[174]},{"1551580":[187]},{"1551582":[255]},{"1551584":[163]},{"1551586":[161]},{"1551588":[165]},{"1551590":[255]},{"1551592":[255,127,117]},{"1551596":[255]},{"1551598":[255]},{"1551600":[185]},{"1551602":[181]},{"1551604":[170]},{"1551606":[194]},{"1551608":[174]},{"1551610":[187]},{"1551612":[255]},{"1551614":[163]},{"1551616":[161]},{"1551618":[166]},{"1551620":[255]},{"1551622":[255,127,117]},{"1551626":[255]},{"1551628":[255]},{"1551630":[185]},{"1551632":[181]},{"1551634":[170]},{"1551636":[194]},{"1551638":[174]},{"1551640":[187]},{"1551642":[255]},{"1551644":[163]},{"1551646":[161]},{"1551648":[167]},{"1551650":[255]},{"1551652":[255,127,117]},{"1551656":[255]},{"1551658":[255]},{"1551660":[185]},{"1551662":[181]},{"1551664":[170]},{"1551666":[194]},{"1551668":[174]},{"1551670":[187]},{"1551672":[255]},{"1551674":[163]},{"1551676":[161]},{"1551678":[168]},{"1551680":[255]},{"1551682":[255,127,117]},{"1551686":[255]},{"1551688":[255]},{"1551690":[185]},{"1551692":[181]},{"1551694":[170]},{"1551696":[194]},{"1551698":[174]},{"1551700":[187]},{"1551702":[255]},{"1551704":[163]},{"1551706":[161]},{"1551708":[169]},{"1551710":[255]},{"1551712":[255,127,117]},{"1551716":[255]},{"1551718":[255]},{"1551720":[185]},{"1551722":[181]},{"1551724":[170]},{"1551726":[194]},{"1551728":[174]},{"1551730":[187]},{"1551732":[255]},{"1551734":[163]},{"1551736":[162]},{"1551738":[160]},{"1551740":[255]},{"1551742":[255,127,117]},{"1551746":[255]},{"1551748":[255]},{"1551750":[185]},{"1551752":[181]},{"1551754":[170]},{"1551756":[194]},{"1551758":[174]},{"1551760":[187]},{"1551762":[255]},{"1551764":[163]},{"1551766":[162]},{"1551768":[161]},{"1551770":[255]},{"1551772":[255,127,117]},{"1551776":[255]},{"1551778":[255]},{"1551780":[185]},{"1551782":[181]},{"1551784":[170]},{"1551786":[194]},{"1551788":[174]},{"1551790":[187]},{"1551792":[255]},{"1551794":[163]},{"1551796":[162]},{"1551798":[162]},{"1551800":[255]},{"1551802":[255,127,117]},{"1551806":[255]},{"1551808":[255]},{"1551810":[185]},{"1551812":[181]},{"1551814":[170]},{"1551816":[194]},{"1551818":[174]},{"1551820":[187]},{"1551822":[255]},{"1551824":[163]},{"1551826":[162]},{"1551828":[163]},{"1551830":[255]},{"1551832":[255,127,117]},{"1551836":[255]},{"1551838":[255]},{"1551840":[185]},{"1551842":[181]},{"1551844":[170]},{"1551846":[194]},{"1551848":[174]},{"1551850":[187]},{"1551852":[255]},{"1551854":[163]},{"1551856":[162]},{"1551858":[164]},{"1551860":[255]},{"1551862":[255,127,117]},{"1551866":[255]},{"1551868":[255]},{"1551870":[185]},{"1551872":[181]},{"1551874":[170]},{"1551876":[194]},{"1551878":[174]},{"1551880":[187]},{"1551882":[255]},{"1551884":[163]},{"1551886":[162]},{"1551888":[165]},{"1551890":[255]},{"1551892":[255,127,117]},{"1551896":[255]},{"1551898":[255]},{"1551900":[185]},{"1551902":[181]},{"1551904":[170]},{"1551906":[194]},{"1551908":[174]},{"1551910":[187]},{"1551912":[255]},{"1551914":[163]},{"1551916":[162]},{"1551918":[166]},{"1551920":[255]},{"1551922":[255,127,117]},{"1551926":[255]},{"1551928":[255]},{"1551930":[185]},{"1551932":[181]},{"1551934":[170]},{"1551936":[194]},{"1551938":[174]},{"1551940":[187]},{"1551942":[255]},{"1551944":[163]},{"1551946":[162]},{"1551948":[167]},{"1551950":[255]},{"1551952":[255,127,117]},{"1551956":[255]},{"1551958":[255]},{"1551960":[185]},{"1551962":[181]},{"1551964":[170]},{"1551966":[194]},{"1551968":[174]},{"1551970":[187]},{"1551972":[255]},{"1551974":[163]},{"1551976":[162]},{"1551978":[168]},{"1551980":[255]},{"1551982":[255,127,117]},{"1551986":[255]},{"1551988":[255]},{"1551990":[185]},{"1551992":[181]},{"1551994":[170]},{"1551996":[194]},{"1551998":[174]},{"1552000":[187]},{"1552002":[255]},{"1552004":[163]},{"1552006":[162]},{"1552008":[169]},{"1552010":[255]},{"1552012":[255,127,117]},{"1552016":[255]},{"1552018":[255]},{"1552020":[185]},{"1552022":[181]},{"1552024":[170]},{"1552026":[194]},{"1552028":[174]},{"1552030":[187]},{"1552032":[255]},{"1552034":[163]},{"1552036":[163]},{"1552038":[160]},{"1552040":[255]},{"1552042":[255,127,117]},{"1552046":[255]},{"1552048":[255]},{"1552050":[185]},{"1552052":[181]},{"1552054":[170]},{"1552056":[194]},{"1552058":[174]},{"1552060":[187]},{"1552062":[255]},{"1552064":[163]},{"1552066":[163]},{"1552068":[161]},{"1552070":[255]},{"1552072":[255,127,117]},{"1552076":[255]},{"1552078":[255]},{"1552080":[185]},{"1552082":[181]},{"1552084":[170]},{"1552086":[194]},{"1552088":[174]},{"1552090":[187]},{"1552092":[255]},{"1552094":[163]},{"1552096":[163]},{"1552098":[162]},{"1552100":[255]},{"1552102":[255,127,117]},{"1552106":[255]},{"1552108":[255]},{"1552110":[185]},{"1552112":[181]},{"1552114":[170]},{"1552116":[194]},{"1552118":[174]},{"1552120":[187]},{"1552122":[255]},{"1552124":[163]},{"1552126":[163]},{"1552128":[163]},{"1552130":[255]},{"1552132":[255,127,117]},{"1552136":[255]},{"1552138":[255]},{"1552140":[185]},{"1552142":[181]},{"1552144":[170]},{"1552146":[194]},{"1552148":[174]},{"1552150":[187]},{"1552152":[255]},{"1552154":[163]},{"1552156":[163]},{"1552158":[164]},{"1552160":[255]},{"1552162":[255,127,117]},{"1552166":[255]},{"1552168":[255]},{"1552170":[185]},{"1552172":[181]},{"1552174":[170]},{"1552176":[194]},{"1552178":[174]},{"1552180":[187]},{"1552182":[255]},{"1552184":[163]},{"1552186":[163]},{"1552188":[165]},{"1552190":[255]},{"1552192":[255,127,117]},{"1552196":[255]},{"1552198":[255]},{"1552200":[185]},{"1552202":[181]},{"1552204":[170]},{"1552206":[194]},{"1552208":[174]},{"1552210":[187]},{"1552212":[255]},{"1552214":[163]},{"1552216":[163]},{"1552218":[166]},{"1552220":[255]},{"1552222":[255,127,117]},{"1552226":[255]},{"1552228":[255]},{"1552230":[185]},{"1552232":[181]},{"1552234":[170]},{"1552236":[194]},{"1552238":[174]},{"1552240":[187]},{"1552242":[255]},{"1552244":[163]},{"1552246":[163]},{"1552248":[167]},{"1552250":[255]},{"1552252":[255,127,117]},{"1552256":[255]},{"1552258":[255]},{"1552260":[185]},{"1552262":[181]},{"1552264":[170]},{"1552266":[194]},{"1552268":[174]},{"1552270":[187]},{"1552272":[255]},{"1552274":[163]},{"1552276":[163]},{"1552278":[168]},{"1552280":[255]},{"1552282":[255,127,117]},{"1552286":[255]},{"1552288":[255]},{"1552290":[185]},{"1552292":[181]},{"1552294":[170]},{"1552296":[194]},{"1552298":[174]},{"1552300":[187]},{"1552302":[255]},{"1552304":[163]},{"1552306":[163]},{"1552308":[169]},{"1552310":[255]},{"1552312":[255,127,117]},{"1552316":[255]},{"1552318":[255]},{"1552320":[185]},{"1552322":[181]},{"1552324":[170]},{"1552326":[194]},{"1552328":[174]},{"1552330":[187]},{"1552332":[255]},{"1552334":[163]},{"1552336":[164]},{"1552338":[160]},{"1552340":[255]},{"1552342":[255,127,117]},{"1552346":[255]},{"1552348":[255]},{"1552350":[185]},{"1552352":[181]},{"1552354":[170]},{"1552356":[194]},{"1552358":[174]},{"1552360":[187]},{"1552362":[255]},{"1552364":[163]},{"1552366":[164]},{"1552368":[161]},{"1552370":[255]},{"1552372":[255,127,117]},{"1552376":[255]},{"1552378":[255]},{"1552380":[185]},{"1552382":[181]},{"1552384":[170]},{"1552386":[194]},{"1552388":[174]},{"1552390":[187]},{"1552392":[255]},{"1552394":[163]},{"1552396":[164]},{"1552398":[162]},{"1552400":[255]},{"1552402":[255,127,117]},{"1552406":[255]},{"1552408":[255]},{"1552410":[185]},{"1552412":[181]},{"1552414":[170]},{"1552416":[194]},{"1552418":[174]},{"1552420":[187]},{"1552422":[255]},{"1552424":[163]},{"1552426":[164]},{"1552428":[163]},{"1552430":[255]},{"1552432":[255,127,117]},{"1552436":[255]},{"1552438":[255]},{"1552440":[185]},{"1552442":[181]},{"1552444":[170]},{"1552446":[194]},{"1552448":[174]},{"1552450":[187]},{"1552452":[255]},{"1552454":[163]},{"1552456":[164]},{"1552458":[164]},{"1552460":[255]},{"1552462":[255,127,117]},{"1552466":[255]},{"1552468":[255]},{"1552470":[185]},{"1552472":[181]},{"1552474":[170]},{"1552476":[194]},{"1552478":[174]},{"1552480":[187]},{"1552482":[255]},{"1552484":[163]},{"1552486":[164]},{"1552488":[165]},{"1552490":[255]},{"1552492":[255,127,117]},{"1552496":[255]},{"1552498":[255]},{"1552500":[185]},{"1552502":[181]},{"1552504":[170]},{"1552506":[194]},{"1552508":[174]},{"1552510":[187]},{"1552512":[255]},{"1552514":[163]},{"1552516":[164]},{"1552518":[166]},{"1552520":[255]},{"1552522":[255,127,117]},{"1552526":[255]},{"1552528":[255]},{"1552530":[185]},{"1552532":[181]},{"1552534":[170]},{"1552536":[194]},{"1552538":[174]},{"1552540":[187]},{"1552542":[255]},{"1552544":[163]},{"1552546":[164]},{"1552548":[167]},{"1552550":[255]},{"1552552":[255,127,117]},{"1552556":[255]},{"1552558":[255]},{"1552560":[185]},{"1552562":[181]},{"1552564":[170]},{"1552566":[194]},{"1552568":[174]},{"1552570":[187]},{"1552572":[255]},{"1552574":[163]},{"1552576":[164]},{"1552578":[168]},{"1552580":[255]},{"1552582":[255,127,117]},{"1552586":[255]},{"1552588":[255]},{"1552590":[185]},{"1552592":[181]},{"1552594":[170]},{"1552596":[194]},{"1552598":[174]},{"1552600":[187]},{"1552602":[255]},{"1552604":[163]},{"1552606":[164]},{"1552608":[169]},{"1552610":[255]},{"1552612":[255,127,117]},{"1552616":[255]},{"1552618":[255]},{"1552620":[185]},{"1552622":[181]},{"1552624":[170]},{"1552626":[194]},{"1552628":[174]},{"1552630":[187]},{"1552632":[255]},{"1552634":[163]},{"1552636":[165]},{"1552638":[160]},{"1552640":[255]},{"1552642":[255,127,117]},{"1552646":[255]},{"1552648":[255]},{"1552650":[185]},{"1552652":[181]},{"1552654":[170]},{"1552656":[194]},{"1552658":[174]},{"1552660":[187]},{"1552662":[255]},{"1552664":[163]},{"1552666":[165]},{"1552668":[161]},{"1552670":[255]},{"1552672":[255,127,117]},{"1552676":[255]},{"1552678":[255]},{"1552680":[185]},{"1552682":[181]},{"1552684":[170]},{"1552686":[194]},{"1552688":[174]},{"1552690":[187]},{"1552692":[255]},{"1552694":[163]},{"1552696":[165]},{"1552698":[162]},{"1552700":[255]},{"1552702":[255,127,117]},{"1552706":[255]},{"1552708":[255]},{"1552710":[185]},{"1552712":[181]},{"1552714":[170]},{"1552716":[194]},{"1552718":[174]},{"1552720":[187]},{"1552722":[255]},{"1552724":[163]},{"1552726":[165]},{"1552728":[163]},{"1552730":[255]},{"1552732":[255,127,117]},{"1552736":[255]},{"1552738":[255]},{"1552740":[185]},{"1552742":[181]},{"1552744":[170]},{"1552746":[194]},{"1552748":[174]},{"1552750":[187]},{"1552752":[255]},{"1552754":[163]},{"1552756":[165]},{"1552758":[164]},{"1552760":[255]},{"1552762":[255,127,117]},{"1552766":[255]},{"1552768":[255]},{"1552770":[185]},{"1552772":[181]},{"1552774":[170]},{"1552776":[194]},{"1552778":[174]},{"1552780":[187]},{"1552782":[255]},{"1552784":[163]},{"1552786":[165]},{"1552788":[165]},{"1552790":[255]},{"1552792":[255,127,117]},{"1552796":[255]},{"1552798":[255]},{"1552800":[185]},{"1552802":[181]},{"1552804":[170]},{"1552806":[194]},{"1552808":[174]},{"1552810":[187]},{"1552812":[255]},{"1552814":[163]},{"1552816":[165]},{"1552818":[166]},{"1552820":[255]},{"1552822":[255,127,117]},{"1552826":[255]},{"1552828":[255]},{"1552830":[185]},{"1552832":[181]},{"1552834":[170]},{"1552836":[194]},{"1552838":[174]},{"1552840":[187]},{"1552842":[255]},{"1552844":[163]},{"1552846":[165]},{"1552848":[167]},{"1552850":[255]},{"1552852":[255,127,117]},{"1552856":[255]},{"1552858":[255]},{"1552860":[185]},{"1552862":[181]},{"1552864":[170]},{"1552866":[194]},{"1552868":[174]},{"1552870":[187]},{"1552872":[255]},{"1552874":[163]},{"1552876":[165]},{"1552878":[168]},{"1552880":[255]},{"1552882":[255,127,117]},{"1552886":[255]},{"1552888":[255]},{"1552890":[185]},{"1552892":[181]},{"1552894":[170]},{"1552896":[194]},{"1552898":[174]},{"1552900":[187]},{"1552902":[255]},{"1552904":[163]},{"1552906":[165]},{"1552908":[169]},{"1552910":[255]},{"1552912":[255,127,117]},{"1552916":[255]},{"1552918":[255]},{"1552920":[185]},{"1552922":[181]},{"1552924":[170]},{"1552926":[194]},{"1552928":[174]},{"1552930":[187]},{"1552932":[255]},{"1552934":[163]},{"1552936":[166]},{"1552938":[160]},{"1552940":[255]},{"1552942":[255,127,117]},{"1552946":[255]},{"1552948":[255]},{"1552950":[185]},{"1552952":[181]},{"1552954":[170]},{"1552956":[194]},{"1552958":[174]},{"1552960":[187]},{"1552962":[255]},{"1552964":[163]},{"1552966":[166]},{"1552968":[161]},{"1552970":[255]},{"1552972":[255,127,117]},{"1552976":[255]},{"1552978":[255]},{"1552980":[185]},{"1552982":[181]},{"1552984":[170]},{"1552986":[194]},{"1552988":[174]},{"1552990":[187]},{"1552992":[255]},{"1552994":[163]},{"1552996":[166]},{"1552998":[162]},{"1553000":[255]},{"1553002":[255,127,117]},{"1553006":[255]},{"1553008":[255]},{"1553010":[185]},{"1553012":[181]},{"1553014":[170]},{"1553016":[194]},{"1553018":[174]},{"1553020":[187]},{"1553022":[255]},{"1553024":[163]},{"1553026":[166]},{"1553028":[163]},{"1553030":[255]},{"1553032":[255,127,117]},{"1553036":[255]},{"1553038":[255]},{"1553040":[185]},{"1553042":[181]},{"1553044":[170]},{"1553046":[194]},{"1553048":[174]},{"1553050":[187]},{"1553052":[255]},{"1553054":[163]},{"1553056":[166]},{"1553058":[164]},{"1553060":[255]},{"1553062":[255,127,117]},{"1553066":[255]},{"1553068":[255]},{"1553070":[185]},{"1553072":[181]},{"1553074":[170]},{"1553076":[194]},{"1553078":[174]},{"1553080":[187]},{"1553082":[255]},{"1553084":[163]},{"1553086":[166]},{"1553088":[165]},{"1553090":[255]},{"1553092":[255,127,117]},{"1553096":[255]},{"1553098":[255]},{"1553100":[185]},{"1553102":[181]},{"1553104":[170]},{"1553106":[194]},{"1553108":[174]},{"1553110":[187]},{"1553112":[255]},{"1553114":[163]},{"1553116":[166]},{"1553118":[166]},{"1553120":[255]},{"1553122":[255,127,117]},{"1553126":[255]},{"1553128":[255]},{"1553130":[185]},{"1553132":[181]},{"1553134":[170]},{"1553136":[194]},{"1553138":[174]},{"1553140":[187]},{"1553142":[255]},{"1553144":[163]},{"1553146":[166]},{"1553148":[167]},{"1553150":[255]},{"1553152":[255,127,117]},{"1553156":[255]},{"1553158":[255]},{"1553160":[185]},{"1553162":[181]},{"1553164":[170]},{"1553166":[194]},{"1553168":[174]},{"1553170":[187]},{"1553172":[255]},{"1553174":[163]},{"1553176":[166]},{"1553178":[168]},{"1553180":[255]},{"1553182":[255,127,117]},{"1553186":[255]},{"1553188":[255]},{"1553190":[185]},{"1553192":[181]},{"1553194":[170]},{"1553196":[194]},{"1553198":[174]},{"1553200":[187]},{"1553202":[255]},{"1553204":[163]},{"1553206":[166]},{"1553208":[169]},{"1553210":[255]},{"1553212":[255,127,117]},{"1553216":[255]},{"1553218":[255]},{"1553220":[185]},{"1553222":[181]},{"1553224":[170]},{"1553226":[194]},{"1553228":[174]},{"1553230":[187]},{"1553232":[255]},{"1553234":[163]},{"1553236":[167]},{"1553238":[160]},{"1553240":[255]},{"1553242":[255,127,117]},{"1553246":[255]},{"1553248":[255]},{"1553250":[185]},{"1553252":[181]},{"1553254":[170]},{"1553256":[194]},{"1553258":[174]},{"1553260":[187]},{"1553262":[255]},{"1553264":[163]},{"1553266":[167]},{"1553268":[161]},{"1553270":[255]},{"1553272":[255,127,117]},{"1553276":[255]},{"1553278":[255]},{"1553280":[185]},{"1553282":[181]},{"1553284":[170]},{"1553286":[194]},{"1553288":[174]},{"1553290":[187]},{"1553292":[255]},{"1553294":[163]},{"1553296":[167]},{"1553298":[162]},{"1553300":[255]},{"1553302":[255,127,117]},{"1553306":[255]},{"1553308":[255]},{"1553310":[185]},{"1553312":[181]},{"1553314":[170]},{"1553316":[194]},{"1553318":[174]},{"1553320":[187]},{"1553322":[255]},{"1553324":[163]},{"1553326":[167]},{"1553328":[163]},{"1553330":[255]},{"1553332":[255,127,117]},{"1553336":[255]},{"1553338":[255]},{"1553340":[185]},{"1553342":[181]},{"1553344":[170]},{"1553346":[194]},{"1553348":[174]},{"1553350":[187]},{"1553352":[255]},{"1553354":[163]},{"1553356":[167]},{"1553358":[164]},{"1553360":[255]},{"1553362":[255,127,117]},{"1553366":[255]},{"1553368":[255]},{"1553370":[185]},{"1553372":[181]},{"1553374":[170]},{"1553376":[194]},{"1553378":[174]},{"1553380":[187]},{"1553382":[255]},{"1553384":[163]},{"1553386":[167]},{"1553388":[165]},{"1553390":[255]},{"1553392":[255,127,117]},{"1553396":[255]},{"1553398":[255]},{"1553400":[185]},{"1553402":[181]},{"1553404":[170]},{"1553406":[194]},{"1553408":[174]},{"1553410":[187]},{"1553412":[255]},{"1553414":[163]},{"1553416":[167]},{"1553418":[166]},{"1553420":[255]},{"1553422":[255,127,117]},{"1553426":[255]},{"1553428":[255]},{"1553430":[185]},{"1553432":[181]},{"1553434":[170]},{"1553436":[194]},{"1553438":[174]},{"1553440":[187]},{"1553442":[255]},{"1553444":[163]},{"1553446":[167]},{"1553448":[167]},{"1553450":[255]},{"1553452":[255,127,117]},{"1553456":[255]},{"1553458":[255]},{"1553460":[185]},{"1553462":[181]},{"1553464":[170]},{"1553466":[194]},{"1553468":[174]},{"1553470":[187]},{"1553472":[255]},{"1553474":[163]},{"1553476":[167]},{"1553478":[168]},{"1553480":[255]},{"1553482":[255,127,117]},{"1553486":[255]},{"1553488":[255]},{"1553490":[185]},{"1553492":[181]},{"1553494":[170]},{"1553496":[194]},{"1553498":[174]},{"1553500":[187]},{"1553502":[255]},{"1553504":[163]},{"1553506":[167]},{"1553508":[169]},{"1553510":[255]},{"1553512":[255,127,117]},{"1553516":[255]},{"1553518":[255]},{"1553520":[185]},{"1553522":[181]},{"1553524":[170]},{"1553526":[194]},{"1553528":[174]},{"1553530":[187]},{"1553532":[255]},{"1553534":[163]},{"1553536":[168]},{"1553538":[160]},{"1553540":[255]},{"1553542":[255,127,117]},{"1553546":[255]},{"1553548":[255]},{"1553550":[185]},{"1553552":[181]},{"1553554":[170]},{"1553556":[194]},{"1553558":[174]},{"1553560":[187]},{"1553562":[255]},{"1553564":[163]},{"1553566":[168]},{"1553568":[161]},{"1553570":[255]},{"1553572":[255,127,117]},{"1553576":[255]},{"1553578":[255]},{"1553580":[185]},{"1553582":[181]},{"1553584":[170]},{"1553586":[194]},{"1553588":[174]},{"1553590":[187]},{"1553592":[255]},{"1553594":[163]},{"1553596":[168]},{"1553598":[162]},{"1553600":[255]},{"1553602":[255,127,117]},{"1553606":[255]},{"1553608":[255]},{"1553610":[185]},{"1553612":[181]},{"1553614":[170]},{"1553616":[194]},{"1553618":[174]},{"1553620":[187]},{"1553622":[255]},{"1553624":[163]},{"1553626":[168]},{"1553628":[163]},{"1553630":[255]},{"1553632":[255,127,117]},{"1553636":[255]},{"1553638":[255]},{"1553640":[185]},{"1553642":[181]},{"1553644":[170]},{"1553646":[194]},{"1553648":[174]},{"1553650":[187]},{"1553652":[255]},{"1553654":[163]},{"1553656":[168]},{"1553658":[164]},{"1553660":[255]},{"1553662":[255,127,117]},{"1553666":[255]},{"1553668":[255]},{"1553670":[185]},{"1553672":[181]},{"1553674":[170]},{"1553676":[194]},{"1553678":[174]},{"1553680":[187]},{"1553682":[255]},{"1553684":[163]},{"1553686":[168]},{"1553688":[165]},{"1553690":[255]},{"1553692":[255,127,117]},{"1553696":[255]},{"1553698":[255]},{"1553700":[185]},{"1553702":[181]},{"1553704":[170]},{"1553706":[194]},{"1553708":[174]},{"1553710":[187]},{"1553712":[255]},{"1553714":[163]},{"1553716":[168]},{"1553718":[166]},{"1553720":[255]},{"1553722":[255,127,117]},{"1553726":[255]},{"1553728":[255]},{"1553730":[185]},{"1553732":[181]},{"1553734":[170]},{"1553736":[194]},{"1553738":[174]},{"1553740":[187]},{"1553742":[255]},{"1553744":[163]},{"1553746":[168]},{"1553748":[167]},{"1553750":[255]},{"1553752":[255,127,117]},{"1553756":[255]},{"1553758":[255]},{"1553760":[185]},{"1553762":[181]},{"1553764":[170]},{"1553766":[194]},{"1553768":[174]},{"1553770":[187]},{"1553772":[255]},{"1553774":[163]},{"1553776":[168]},{"1553778":[168]},{"1553780":[255]},{"1553782":[255,127,117]},{"1553786":[255]},{"1553788":[255]},{"1553790":[185]},{"1553792":[181]},{"1553794":[170]},{"1553796":[194]},{"1553798":[174]},{"1553800":[187]},{"1553802":[255]},{"1553804":[163]},{"1553806":[168]},{"1553808":[169]},{"1553810":[255]},{"1553812":[255,127,117]},{"1553816":[255]},{"1553818":[255]},{"1553820":[185]},{"1553822":[181]},{"1553824":[170]},{"1553826":[194]},{"1553828":[174]},{"1553830":[187]},{"1553832":[255]},{"1553834":[163]},{"1553836":[169]},{"1553838":[160]},{"1553840":[255]},{"1553842":[255,127,117]},{"1553846":[255]},{"1553848":[255]},{"1553850":[185]},{"1553852":[181]},{"1553854":[170]},{"1553856":[194]},{"1553858":[174]},{"1553860":[187]},{"1553862":[255]},{"1553864":[163]},{"1553866":[169]},{"1553868":[161]},{"1553870":[255]},{"1553872":[255,127,117]},{"1553876":[255]},{"1553878":[255]},{"1553880":[185]},{"1553882":[181]},{"1553884":[170]},{"1553886":[194]},{"1553888":[174]},{"1553890":[187]},{"1553892":[255]},{"1553894":[163]},{"1553896":[169]},{"1553898":[162]},{"1553900":[255]},{"1553902":[255,127,117]},{"1553906":[255]},{"1553908":[255]},{"1553910":[185]},{"1553912":[181]},{"1553914":[170]},{"1553916":[194]},{"1553918":[174]},{"1553920":[187]},{"1553922":[255]},{"1553924":[163]},{"1553926":[169]},{"1553928":[163]},{"1553930":[255]},{"1553932":[255,127,117]},{"1553936":[255]},{"1553938":[255]},{"1553940":[185]},{"1553942":[181]},{"1553944":[170]},{"1553946":[194]},{"1553948":[174]},{"1553950":[187]},{"1553952":[255]},{"1553954":[163]},{"1553956":[169]},{"1553958":[164]},{"1553960":[255]},{"1553962":[255,127,117]},{"1553966":[255]},{"1553968":[255]},{"1553970":[185]},{"1553972":[181]},{"1553974":[170]},{"1553976":[194]},{"1553978":[174]},{"1553980":[187]},{"1553982":[255]},{"1553984":[163]},{"1553986":[169]},{"1553988":[165]},{"1553990":[255]},{"1553992":[255,127,117]},{"1553996":[255]},{"1553998":[255]},{"1554000":[185]},{"1554002":[181]},{"1554004":[170]},{"1554006":[194]},{"1554008":[174]},{"1554010":[187]},{"1554012":[255]},{"1554014":[163]},{"1554016":[169]},{"1554018":[166]},{"1554020":[255]},{"1554022":[255,127,117]},{"1554026":[255]},{"1554028":[255]},{"1554030":[185]},{"1554032":[181]},{"1554034":[170]},{"1554036":[194]},{"1554038":[174]},{"1554040":[187]},{"1554042":[255]},{"1554044":[163]},{"1554046":[169]},{"1554048":[167]},{"1554050":[255]},{"1554052":[255,127,117]},{"1554056":[255]},{"1554058":[255]},{"1554060":[185]},{"1554062":[181]},{"1554064":[170]},{"1554066":[194]},{"1554068":[174]},{"1554070":[187]},{"1554072":[255]},{"1554074":[163]},{"1554076":[169]},{"1554078":[168]},{"1554080":[255]},{"1554082":[255,127,117]},{"1554086":[255]},{"1554088":[255]},{"1554090":[185]},{"1554092":[181]},{"1554094":[170]},{"1554096":[194]},{"1554098":[174]},{"1554100":[187]},{"1554102":[255]},{"1554104":[163]},{"1554106":[169]},{"1554108":[169]},{"1554110":[255]},{"1554112":[255,127,117]},{"1554116":[255]},{"1554118":[255]},{"1554120":[185]},{"1554122":[181]},{"1554124":[170]},{"1554126":[194]},{"1554128":[174]},{"1554130":[187]},{"1554132":[255]},{"1554134":[164]},{"1554136":[160]},{"1554138":[160]},{"1554140":[255]},{"1554142":[255,127,117]},{"1554146":[255]},{"1554148":[255]},{"1554150":[185]},{"1554152":[181]},{"1554154":[170]},{"1554156":[194]},{"1554158":[174]},{"1554160":[187]},{"1554162":[255]},{"1554164":[164]},{"1554166":[160]},{"1554168":[161]},{"1554170":[255]},{"1554172":[255,127,117]},{"1554176":[255]},{"1554178":[255]},{"1554180":[185]},{"1554182":[181]},{"1554184":[170]},{"1554186":[194]},{"1554188":[174]},{"1554190":[187]},{"1554192":[255]},{"1554194":[164]},{"1554196":[160]},{"1554198":[162]},{"1554200":[255]},{"1554202":[255,127,117]},{"1554206":[255]},{"1554208":[255]},{"1554210":[185]},{"1554212":[181]},{"1554214":[170]},{"1554216":[194]},{"1554218":[174]},{"1554220":[187]},{"1554222":[255]},{"1554224":[164]},{"1554226":[160]},{"1554228":[163]},{"1554230":[255]},{"1554232":[255,127,117]},{"1554236":[255]},{"1554238":[255]},{"1554240":[185]},{"1554242":[181]},{"1554244":[170]},{"1554246":[194]},{"1554248":[174]},{"1554250":[187]},{"1554252":[255]},{"1554254":[164]},{"1554256":[160]},{"1554258":[164]},{"1554260":[255]},{"1554262":[255,127,117]},{"1554266":[255]},{"1554268":[255]},{"1554270":[185]},{"1554272":[181]},{"1554274":[170]},{"1554276":[194]},{"1554278":[174]},{"1554280":[187]},{"1554282":[255]},{"1554284":[164]},{"1554286":[160]},{"1554288":[165]},{"1554290":[255]},{"1554292":[255,127,117]},{"1554296":[255]},{"1554298":[255]},{"1554300":[185]},{"1554302":[181]},{"1554304":[170]},{"1554306":[194]},{"1554308":[174]},{"1554310":[187]},{"1554312":[255]},{"1554314":[164]},{"1554316":[160]},{"1554318":[166]},{"1554320":[255]},{"1554322":[255,127,117]},{"1554326":[255]},{"1554328":[255]},{"1554330":[185]},{"1554332":[181]},{"1554334":[170]},{"1554336":[194]},{"1554338":[174]},{"1554340":[187]},{"1554342":[255]},{"1554344":[164]},{"1554346":[160]},{"1554348":[167]},{"1554350":[255]},{"1554352":[255,127,117]},{"1554356":[255]},{"1554358":[255]},{"1554360":[185]},{"1554362":[181]},{"1554364":[170]},{"1554366":[194]},{"1554368":[174]},{"1554370":[187]},{"1554372":[255]},{"1554374":[164]},{"1554376":[160]},{"1554378":[168]},{"1554380":[255]},{"1554382":[255,127,117]},{"1554386":[255]},{"1554388":[255]},{"1554390":[185]},{"1554392":[181]},{"1554394":[170]},{"1554396":[194]},{"1554398":[174]},{"1554400":[187]},{"1554402":[255]},{"1554404":[164]},{"1554406":[160]},{"1554408":[169]},{"1554410":[255]},{"1554412":[255,127,117]},{"1554416":[255]},{"1554418":[255]},{"1554420":[185]},{"1554422":[181]},{"1554424":[170]},{"1554426":[194]},{"1554428":[174]},{"1554430":[187]},{"1554432":[255]},{"1554434":[164]},{"1554436":[161]},{"1554438":[160]},{"1554440":[255]},{"1554442":[255,127,117]},{"1554446":[255]},{"1554448":[255]},{"1554450":[185]},{"1554452":[181]},{"1554454":[170]},{"1554456":[194]},{"1554458":[174]},{"1554460":[187]},{"1554462":[255]},{"1554464":[164]},{"1554466":[161]},{"1554468":[161]},{"1554470":[255]},{"1554472":[255,127,117]},{"1554476":[255]},{"1554478":[255]},{"1554480":[185]},{"1554482":[181]},{"1554484":[170]},{"1554486":[194]},{"1554488":[174]},{"1554490":[187]},{"1554492":[255]},{"1554494":[164]},{"1554496":[161]},{"1554498":[162]},{"1554500":[255]},{"1554502":[255,127,117]},{"1554506":[255]},{"1554508":[255]},{"1554510":[185]},{"1554512":[181]},{"1554514":[170]},{"1554516":[194]},{"1554518":[174]},{"1554520":[187]},{"1554522":[255]},{"1554524":[164]},{"1554526":[161]},{"1554528":[163]},{"1554530":[255]},{"1554532":[255,127,117]},{"1554536":[255]},{"1554538":[255]},{"1554540":[185]},{"1554542":[181]},{"1554544":[170]},{"1554546":[194]},{"1554548":[174]},{"1554550":[187]},{"1554552":[255]},{"1554554":[164]},{"1554556":[161]},{"1554558":[164]},{"1554560":[255]},{"1554562":[255,127,117]},{"1554566":[255]},{"1554568":[255]},{"1554570":[185]},{"1554572":[181]},{"1554574":[170]},{"1554576":[194]},{"1554578":[174]},{"1554580":[187]},{"1554582":[255]},{"1554584":[164]},{"1554586":[161]},{"1554588":[165]},{"1554590":[255]},{"1554592":[255,127,117]},{"1554596":[255]},{"1554598":[255]},{"1554600":[185]},{"1554602":[181]},{"1554604":[170]},{"1554606":[194]},{"1554608":[174]},{"1554610":[187]},{"1554612":[255]},{"1554614":[164]},{"1554616":[161]},{"1554618":[166]},{"1554620":[255]},{"1554622":[255,127,117]},{"1554626":[255]},{"1554628":[255]},{"1554630":[185]},{"1554632":[181]},{"1554634":[170]},{"1554636":[194]},{"1554638":[174]},{"1554640":[187]},{"1554642":[255]},{"1554644":[164]},{"1554646":[161]},{"1554648":[167]},{"1554650":[255]},{"1554652":[255,127,117]},{"1554656":[255]},{"1554658":[255]},{"1554660":[185]},{"1554662":[181]},{"1554664":[170]},{"1554666":[194]},{"1554668":[174]},{"1554670":[187]},{"1554672":[255]},{"1554674":[164]},{"1554676":[161]},{"1554678":[168]},{"1554680":[255]},{"1554682":[255,127,117]},{"1554686":[255]},{"1554688":[255]},{"1554690":[185]},{"1554692":[181]},{"1554694":[170]},{"1554696":[194]},{"1554698":[174]},{"1554700":[187]},{"1554702":[255]},{"1554704":[164]},{"1554706":[161]},{"1554708":[169]},{"1554710":[255]},{"1554712":[255,127,117]},{"1554716":[255]},{"1554718":[255]},{"1554720":[185]},{"1554722":[181]},{"1554724":[170]},{"1554726":[194]},{"1554728":[174]},{"1554730":[187]},{"1554732":[255]},{"1554734":[164]},{"1554736":[162]},{"1554738":[160]},{"1554740":[255]},{"1554742":[255,127,117]},{"1554746":[255]},{"1554748":[255]},{"1554750":[185]},{"1554752":[181]},{"1554754":[170]},{"1554756":[194]},{"1554758":[174]},{"1554760":[187]},{"1554762":[255]},{"1554764":[164]},{"1554766":[162]},{"1554768":[161]},{"1554770":[255]},{"1554772":[255,127,117]},{"1554776":[255]},{"1554778":[255]},{"1554780":[185]},{"1554782":[181]},{"1554784":[170]},{"1554786":[194]},{"1554788":[174]},{"1554790":[187]},{"1554792":[255]},{"1554794":[164]},{"1554796":[162]},{"1554798":[162]},{"1554800":[255]},{"1554802":[255,127,117]},{"1554806":[255]},{"1554808":[255]},{"1554810":[185]},{"1554812":[181]},{"1554814":[170]},{"1554816":[194]},{"1554818":[174]},{"1554820":[187]},{"1554822":[255]},{"1554824":[164]},{"1554826":[162]},{"1554828":[163]},{"1554830":[255]},{"1554832":[255,127,117]},{"1554836":[255]},{"1554838":[255]},{"1554840":[185]},{"1554842":[181]},{"1554844":[170]},{"1554846":[194]},{"1554848":[174]},{"1554850":[187]},{"1554852":[255]},{"1554854":[164]},{"1554856":[162]},{"1554858":[164]},{"1554860":[255]},{"1554862":[255,127,117]},{"1554866":[255]},{"1554868":[255]},{"1554870":[185]},{"1554872":[181]},{"1554874":[170]},{"1554876":[194]},{"1554878":[174]},{"1554880":[187]},{"1554882":[255]},{"1554884":[164]},{"1554886":[162]},{"1554888":[165]},{"1554890":[255]},{"1554892":[255,127,117]},{"1554896":[255]},{"1554898":[255]},{"1554900":[185]},{"1554902":[181]},{"1554904":[170]},{"1554906":[194]},{"1554908":[174]},{"1554910":[187]},{"1554912":[255]},{"1554914":[164]},{"1554916":[162]},{"1554918":[166]},{"1554920":[255]},{"1554922":[255,127,117]},{"1554926":[255]},{"1554928":[255]},{"1554930":[185]},{"1554932":[181]},{"1554934":[170]},{"1554936":[194]},{"1554938":[174]},{"1554940":[187]},{"1554942":[255]},{"1554944":[164]},{"1554946":[162]},{"1554948":[167]},{"1554950":[255]},{"1554952":[255,127,117]},{"1554956":[255]},{"1554958":[255]},{"1554960":[185]},{"1554962":[181]},{"1554964":[170]},{"1554966":[194]},{"1554968":[174]},{"1554970":[187]},{"1554972":[255]},{"1554974":[164]},{"1554976":[162]},{"1554978":[168]},{"1554980":[255]},{"1554982":[255,127,117]},{"1554986":[255]},{"1554988":[255]},{"1554990":[185]},{"1554992":[181]},{"1554994":[170]},{"1554996":[194]},{"1554998":[174]},{"1555000":[187]},{"1555002":[255]},{"1555004":[164]},{"1555006":[162]},{"1555008":[169]},{"1555010":[255]},{"1555012":[255,127,117]},{"1555016":[255]},{"1555018":[255]},{"1555020":[185]},{"1555022":[181]},{"1555024":[170]},{"1555026":[194]},{"1555028":[174]},{"1555030":[187]},{"1555032":[255]},{"1555034":[164]},{"1555036":[163]},{"1555038":[160]},{"1555040":[255]},{"1555042":[255,127,117]},{"1555046":[255]},{"1555048":[255]},{"1555050":[185]},{"1555052":[181]},{"1555054":[170]},{"1555056":[194]},{"1555058":[174]},{"1555060":[187]},{"1555062":[255]},{"1555064":[164]},{"1555066":[163]},{"1555068":[161]},{"1555070":[255]},{"1555072":[255,127,117]},{"1555076":[255]},{"1555078":[255]},{"1555080":[185]},{"1555082":[181]},{"1555084":[170]},{"1555086":[194]},{"1555088":[174]},{"1555090":[187]},{"1555092":[255]},{"1555094":[164]},{"1555096":[163]},{"1555098":[162]},{"1555100":[255]},{"1555102":[255,127,117]},{"1555106":[255]},{"1555108":[255]},{"1555110":[185]},{"1555112":[181]},{"1555114":[170]},{"1555116":[194]},{"1555118":[174]},{"1555120":[187]},{"1555122":[255]},{"1555124":[164]},{"1555126":[163]},{"1555128":[163]},{"1555130":[255]},{"1555132":[255,127,117]},{"1555136":[255]},{"1555138":[255]},{"1555140":[185]},{"1555142":[181]},{"1555144":[170]},{"1555146":[194]},{"1555148":[174]},{"1555150":[187]},{"1555152":[255]},{"1555154":[164]},{"1555156":[163]},{"1555158":[164]},{"1555160":[255]},{"1555162":[255,127,117]},{"1555166":[255]},{"1555168":[255]},{"1555170":[185]},{"1555172":[181]},{"1555174":[170]},{"1555176":[194]},{"1555178":[174]},{"1555180":[187]},{"1555182":[255]},{"1555184":[164]},{"1555186":[163]},{"1555188":[165]},{"1555190":[255]},{"1555192":[255,127,117]},{"1555196":[255]},{"1555198":[255]},{"1555200":[185]},{"1555202":[181]},{"1555204":[170]},{"1555206":[194]},{"1555208":[174]},{"1555210":[187]},{"1555212":[255]},{"1555214":[164]},{"1555216":[163]},{"1555218":[166]},{"1555220":[255]},{"1555222":[255,127,117]},{"1555226":[255]},{"1555228":[255]},{"1555230":[185]},{"1555232":[181]},{"1555234":[170]},{"1555236":[194]},{"1555238":[174]},{"1555240":[187]},{"1555242":[255]},{"1555244":[164]},{"1555246":[163]},{"1555248":[167]},{"1555250":[255]},{"1555252":[255,127,117]},{"1555256":[255]},{"1555258":[255]},{"1555260":[185]},{"1555262":[181]},{"1555264":[170]},{"1555266":[194]},{"1555268":[174]},{"1555270":[187]},{"1555272":[255]},{"1555274":[164]},{"1555276":[163]},{"1555278":[168]},{"1555280":[255]},{"1555282":[255,127,117]},{"1555286":[255]},{"1555288":[255]},{"1555290":[185]},{"1555292":[181]},{"1555294":[170]},{"1555296":[194]},{"1555298":[174]},{"1555300":[187]},{"1555302":[255]},{"1555304":[164]},{"1555306":[163]},{"1555308":[169]},{"1555310":[255]},{"1555312":[255,127,117]},{"1555316":[255]},{"1555318":[255]},{"1555320":[185]},{"1555322":[181]},{"1555324":[170]},{"1555326":[194]},{"1555328":[174]},{"1555330":[187]},{"1555332":[255]},{"1555334":[164]},{"1555336":[164]},{"1555338":[160]},{"1555340":[255]},{"1555342":[255,127,117]},{"1555346":[255]},{"1555348":[255]},{"1555350":[185]},{"1555352":[181]},{"1555354":[170]},{"1555356":[194]},{"1555358":[174]},{"1555360":[187]},{"1555362":[255]},{"1555364":[164]},{"1555366":[164]},{"1555368":[161]},{"1555370":[255]},{"1555372":[255,127,117]},{"1555376":[255]},{"1555378":[255]},{"1555380":[185]},{"1555382":[181]},{"1555384":[170]},{"1555386":[194]},{"1555388":[174]},{"1555390":[187]},{"1555392":[255]},{"1555394":[164]},{"1555396":[164]},{"1555398":[162]},{"1555400":[255]},{"1555402":[255,127,117]},{"1555406":[255]},{"1555408":[255]},{"1555410":[185]},{"1555412":[181]},{"1555414":[170]},{"1555416":[194]},{"1555418":[174]},{"1555420":[187]},{"1555422":[255]},{"1555424":[164]},{"1555426":[164]},{"1555428":[163]},{"1555430":[255]},{"1555432":[255,127,117]},{"1555436":[255]},{"1555438":[255]},{"1555440":[185]},{"1555442":[181]},{"1555444":[170]},{"1555446":[194]},{"1555448":[174]},{"1555450":[187]},{"1555452":[255]},{"1555454":[164]},{"1555456":[164]},{"1555458":[164]},{"1555460":[255]},{"1555462":[255,127,117]},{"1555466":[255]},{"1555468":[255]},{"1555470":[185]},{"1555472":[181]},{"1555474":[170]},{"1555476":[194]},{"1555478":[174]},{"1555480":[187]},{"1555482":[255]},{"1555484":[164]},{"1555486":[164]},{"1555488":[165]},{"1555490":[255]},{"1555492":[255,127,117]},{"1555496":[255]},{"1555498":[255]},{"1555500":[185]},{"1555502":[181]},{"1555504":[170]},{"1555506":[194]},{"1555508":[174]},{"1555510":[187]},{"1555512":[255]},{"1555514":[164]},{"1555516":[164]},{"1555518":[166]},{"1555520":[255]},{"1555522":[255,127,117]},{"1555526":[255]},{"1555528":[255]},{"1555530":[185]},{"1555532":[181]},{"1555534":[170]},{"1555536":[194]},{"1555538":[174]},{"1555540":[187]},{"1555542":[255]},{"1555544":[164]},{"1555546":[164]},{"1555548":[167]},{"1555550":[255]},{"1555552":[255,127,117]},{"1555556":[255]},{"1555558":[255]},{"1555560":[185]},{"1555562":[181]},{"1555564":[170]},{"1555566":[194]},{"1555568":[174]},{"1555570":[187]},{"1555572":[255]},{"1555574":[164]},{"1555576":[164]},{"1555578":[168]},{"1555580":[255]},{"1555582":[255,127,117]},{"1555586":[255]},{"1555588":[255]},{"1555590":[185]},{"1555592":[181]},{"1555594":[170]},{"1555596":[194]},{"1555598":[174]},{"1555600":[187]},{"1555602":[255]},{"1555604":[164]},{"1555606":[164]},{"1555608":[169]},{"1555610":[255]},{"1555612":[255,127,117]},{"1555616":[255]},{"1555618":[255]},{"1555620":[185]},{"1555622":[181]},{"1555624":[170]},{"1555626":[194]},{"1555628":[174]},{"1555630":[187]},{"1555632":[255]},{"1555634":[164]},{"1555636":[165]},{"1555638":[160]},{"1555640":[255]},{"1555642":[255,127,117]},{"1555646":[255]},{"1555648":[255]},{"1555650":[185]},{"1555652":[181]},{"1555654":[170]},{"1555656":[194]},{"1555658":[174]},{"1555660":[187]},{"1555662":[255]},{"1555664":[164]},{"1555666":[165]},{"1555668":[161]},{"1555670":[255]},{"1555672":[255,127,117]},{"1555676":[255]},{"1555678":[255]},{"1555680":[185]},{"1555682":[181]},{"1555684":[170]},{"1555686":[194]},{"1555688":[174]},{"1555690":[187]},{"1555692":[255]},{"1555694":[164]},{"1555696":[165]},{"1555698":[162]},{"1555700":[255]},{"1555702":[255,127,117]},{"1555706":[255]},{"1555708":[255]},{"1555710":[185]},{"1555712":[181]},{"1555714":[170]},{"1555716":[194]},{"1555718":[174]},{"1555720":[187]},{"1555722":[255]},{"1555724":[164]},{"1555726":[165]},{"1555728":[163]},{"1555730":[255]},{"1555732":[255,127,117]},{"1555736":[255]},{"1555738":[255]},{"1555740":[185]},{"1555742":[181]},{"1555744":[170]},{"1555746":[194]},{"1555748":[174]},{"1555750":[187]},{"1555752":[255]},{"1555754":[164]},{"1555756":[165]},{"1555758":[164]},{"1555760":[255]},{"1555762":[255,127,117]},{"1555766":[255]},{"1555768":[255]},{"1555770":[185]},{"1555772":[181]},{"1555774":[170]},{"1555776":[194]},{"1555778":[174]},{"1555780":[187]},{"1555782":[255]},{"1555784":[164]},{"1555786":[165]},{"1555788":[165]},{"1555790":[255]},{"1555792":[255,127,117]},{"1555796":[255]},{"1555798":[255]},{"1555800":[185]},{"1555802":[181]},{"1555804":[170]},{"1555806":[194]},{"1555808":[174]},{"1555810":[187]},{"1555812":[255]},{"1555814":[164]},{"1555816":[165]},{"1555818":[166]},{"1555820":[255]},{"1555822":[255,127,117]},{"1555826":[255]},{"1555828":[255]},{"1555830":[185]},{"1555832":[181]},{"1555834":[170]},{"1555836":[194]},{"1555838":[174]},{"1555840":[187]},{"1555842":[255]},{"1555844":[164]},{"1555846":[165]},{"1555848":[167]},{"1555850":[255]},{"1555852":[255,127,117]},{"1555856":[255]},{"1555858":[255]},{"1555860":[185]},{"1555862":[181]},{"1555864":[170]},{"1555866":[194]},{"1555868":[174]},{"1555870":[187]},{"1555872":[255]},{"1555874":[164]},{"1555876":[165]},{"1555878":[168]},{"1555880":[255]},{"1555882":[255,127,117]},{"1555886":[255]},{"1555888":[255]},{"1555890":[185]},{"1555892":[181]},{"1555894":[170]},{"1555896":[194]},{"1555898":[174]},{"1555900":[187]},{"1555902":[255]},{"1555904":[164]},{"1555906":[165]},{"1555908":[169]},{"1555910":[255]},{"1555912":[255,127,117]},{"1555916":[255]},{"1555918":[255]},{"1555920":[185]},{"1555922":[181]},{"1555924":[170]},{"1555926":[194]},{"1555928":[174]},{"1555930":[187]},{"1555932":[255]},{"1555934":[164]},{"1555936":[166]},{"1555938":[160]},{"1555940":[255]},{"1555942":[255,127,117]},{"1555946":[255]},{"1555948":[255]},{"1555950":[185]},{"1555952":[181]},{"1555954":[170]},{"1555956":[194]},{"1555958":[174]},{"1555960":[187]},{"1555962":[255]},{"1555964":[164]},{"1555966":[166]},{"1555968":[161]},{"1555970":[255]},{"1555972":[255,127,117]},{"1555976":[255]},{"1555978":[255]},{"1555980":[185]},{"1555982":[181]},{"1555984":[170]},{"1555986":[194]},{"1555988":[174]},{"1555990":[187]},{"1555992":[255]},{"1555994":[164]},{"1555996":[166]},{"1555998":[162]},{"1556000":[255]},{"1556002":[255,127,117]},{"1556006":[255]},{"1556008":[255]},{"1556010":[185]},{"1556012":[181]},{"1556014":[170]},{"1556016":[194]},{"1556018":[174]},{"1556020":[187]},{"1556022":[255]},{"1556024":[164]},{"1556026":[166]},{"1556028":[163]},{"1556030":[255]},{"1556032":[255,127,117]},{"1556036":[255]},{"1556038":[255]},{"1556040":[185]},{"1556042":[181]},{"1556044":[170]},{"1556046":[194]},{"1556048":[174]},{"1556050":[187]},{"1556052":[255]},{"1556054":[164]},{"1556056":[166]},{"1556058":[164]},{"1556060":[255]},{"1556062":[255,127,117]},{"1556066":[255]},{"1556068":[255]},{"1556070":[185]},{"1556072":[181]},{"1556074":[170]},{"1556076":[194]},{"1556078":[174]},{"1556080":[187]},{"1556082":[255]},{"1556084":[164]},{"1556086":[166]},{"1556088":[165]},{"1556090":[255]},{"1556092":[255,127,117]},{"1556096":[255]},{"1556098":[255]},{"1556100":[185]},{"1556102":[181]},{"1556104":[170]},{"1556106":[194]},{"1556108":[174]},{"1556110":[187]},{"1556112":[255]},{"1556114":[164]},{"1556116":[166]},{"1556118":[166]},{"1556120":[255]},{"1556122":[255,127,117]},{"1556126":[255]},{"1556128":[255]},{"1556130":[185]},{"1556132":[181]},{"1556134":[170]},{"1556136":[194]},{"1556138":[174]},{"1556140":[187]},{"1556142":[255]},{"1556144":[164]},{"1556146":[166]},{"1556148":[167]},{"1556150":[255]},{"1556152":[255,127,117]},{"1556156":[255]},{"1556158":[255]},{"1556160":[185]},{"1556162":[181]},{"1556164":[170]},{"1556166":[194]},{"1556168":[174]},{"1556170":[187]},{"1556172":[255]},{"1556174":[164]},{"1556176":[166]},{"1556178":[168]},{"1556180":[255]},{"1556182":[255,127,117]},{"1556186":[255]},{"1556188":[255]},{"1556190":[185]},{"1556192":[181]},{"1556194":[170]},{"1556196":[194]},{"1556198":[174]},{"1556200":[187]},{"1556202":[255]},{"1556204":[164]},{"1556206":[166]},{"1556208":[169]},{"1556210":[255]},{"1556212":[255,127,117]},{"1556216":[255]},{"1556218":[255]},{"1556220":[185]},{"1556222":[181]},{"1556224":[170]},{"1556226":[194]},{"1556228":[174]},{"1556230":[187]},{"1556232":[255]},{"1556234":[164]},{"1556236":[167]},{"1556238":[160]},{"1556240":[255]},{"1556242":[255,127,117]},{"1556246":[255]},{"1556248":[255]},{"1556250":[185]},{"1556252":[181]},{"1556254":[170]},{"1556256":[194]},{"1556258":[174]},{"1556260":[187]},{"1556262":[255]},{"1556264":[164]},{"1556266":[167]},{"1556268":[161]},{"1556270":[255]},{"1556272":[255,127,117]},{"1556276":[255]},{"1556278":[255]},{"1556280":[185]},{"1556282":[181]},{"1556284":[170]},{"1556286":[194]},{"1556288":[174]},{"1556290":[187]},{"1556292":[255]},{"1556294":[164]},{"1556296":[167]},{"1556298":[162]},{"1556300":[255]},{"1556302":[255,127,117]},{"1556306":[255]},{"1556308":[255]},{"1556310":[185]},{"1556312":[181]},{"1556314":[170]},{"1556316":[194]},{"1556318":[174]},{"1556320":[187]},{"1556322":[255]},{"1556324":[164]},{"1556326":[167]},{"1556328":[163]},{"1556330":[255]},{"1556332":[255,127,117]},{"1556336":[255]},{"1556338":[255]},{"1556340":[185]},{"1556342":[181]},{"1556344":[170]},{"1556346":[194]},{"1556348":[174]},{"1556350":[187]},{"1556352":[255]},{"1556354":[164]},{"1556356":[167]},{"1556358":[164]},{"1556360":[255]},{"1556362":[255,127,117]},{"1556366":[255]},{"1556368":[255]},{"1556370":[185]},{"1556372":[181]},{"1556374":[170]},{"1556376":[194]},{"1556378":[174]},{"1556380":[187]},{"1556382":[255]},{"1556384":[164]},{"1556386":[167]},{"1556388":[165]},{"1556390":[255]},{"1556392":[255,127,117]},{"1556396":[255]},{"1556398":[255]},{"1556400":[185]},{"1556402":[181]},{"1556404":[170]},{"1556406":[194]},{"1556408":[174]},{"1556410":[187]},{"1556412":[255]},{"1556414":[164]},{"1556416":[167]},{"1556418":[166]},{"1556420":[255]},{"1556422":[255,127,117]},{"1556426":[255]},{"1556428":[255]},{"1556430":[185]},{"1556432":[181]},{"1556434":[170]},{"1556436":[194]},{"1556438":[174]},{"1556440":[187]},{"1556442":[255]},{"1556444":[164]},{"1556446":[167]},{"1556448":[167]},{"1556450":[255]},{"1556452":[255,127,117]},{"1556456":[255]},{"1556458":[255]},{"1556460":[185]},{"1556462":[181]},{"1556464":[170]},{"1556466":[194]},{"1556468":[174]},{"1556470":[187]},{"1556472":[255]},{"1556474":[164]},{"1556476":[167]},{"1556478":[168]},{"1556480":[255]},{"1556482":[255,127,117]},{"1556486":[255]},{"1556488":[255]},{"1556490":[185]},{"1556492":[181]},{"1556494":[170]},{"1556496":[194]},{"1556498":[174]},{"1556500":[187]},{"1556502":[255]},{"1556504":[164]},{"1556506":[167]},{"1556508":[169]},{"1556510":[255]},{"1556512":[255,127,117]},{"1556516":[255]},{"1556518":[255]},{"1556520":[185]},{"1556522":[181]},{"1556524":[170]},{"1556526":[194]},{"1556528":[174]},{"1556530":[187]},{"1556532":[255]},{"1556534":[164]},{"1556536":[168]},{"1556538":[160]},{"1556540":[255]},{"1556542":[255,127,117]},{"1556546":[255]},{"1556548":[255]},{"1556550":[185]},{"1556552":[181]},{"1556554":[170]},{"1556556":[194]},{"1556558":[174]},{"1556560":[187]},{"1556562":[255]},{"1556564":[164]},{"1556566":[168]},{"1556568":[161]},{"1556570":[255]},{"1556572":[255,127,117]},{"1556576":[255]},{"1556578":[255]},{"1556580":[185]},{"1556582":[181]},{"1556584":[170]},{"1556586":[194]},{"1556588":[174]},{"1556590":[187]},{"1556592":[255]},{"1556594":[164]},{"1556596":[168]},{"1556598":[162]},{"1556600":[255]},{"1556602":[255,127,117]},{"1556606":[255]},{"1556608":[255]},{"1556610":[185]},{"1556612":[181]},{"1556614":[170]},{"1556616":[194]},{"1556618":[174]},{"1556620":[187]},{"1556622":[255]},{"1556624":[164]},{"1556626":[168]},{"1556628":[163]},{"1556630":[255]},{"1556632":[255,127,117]},{"1556636":[255]},{"1556638":[255]},{"1556640":[185]},{"1556642":[181]},{"1556644":[170]},{"1556646":[194]},{"1556648":[174]},{"1556650":[187]},{"1556652":[255]},{"1556654":[164]},{"1556656":[168]},{"1556658":[164]},{"1556660":[255]},{"1556662":[255,127,117]},{"1556666":[255]},{"1556668":[255]},{"1556670":[185]},{"1556672":[181]},{"1556674":[170]},{"1556676":[194]},{"1556678":[174]},{"1556680":[187]},{"1556682":[255]},{"1556684":[164]},{"1556686":[168]},{"1556688":[165]},{"1556690":[255]},{"1556692":[255,127,117]},{"1556696":[255]},{"1556698":[255]},{"1556700":[185]},{"1556702":[181]},{"1556704":[170]},{"1556706":[194]},{"1556708":[174]},{"1556710":[187]},{"1556712":[255]},{"1556714":[164]},{"1556716":[168]},{"1556718":[166]},{"1556720":[255]},{"1556722":[255,127,117]},{"1556726":[255]},{"1556728":[255]},{"1556730":[185]},{"1556732":[181]},{"1556734":[170]},{"1556736":[194]},{"1556738":[174]},{"1556740":[187]},{"1556742":[255]},{"1556744":[164]},{"1556746":[168]},{"1556748":[167]},{"1556750":[255]},{"1556752":[255,127,117]},{"1556756":[255]},{"1556758":[255]},{"1556760":[185]},{"1556762":[181]},{"1556764":[170]},{"1556766":[194]},{"1556768":[174]},{"1556770":[187]},{"1556772":[255]},{"1556774":[164]},{"1556776":[168]},{"1556778":[168]},{"1556780":[255]},{"1556782":[255,127,117]},{"1556786":[255]},{"1556788":[255]},{"1556790":[185]},{"1556792":[181]},{"1556794":[170]},{"1556796":[194]},{"1556798":[174]},{"1556800":[187]},{"1556802":[255]},{"1556804":[164]},{"1556806":[168]},{"1556808":[169]},{"1556810":[255]},{"1556812":[255,127,117]},{"1556816":[255]},{"1556818":[255]},{"1556820":[185]},{"1556822":[181]},{"1556824":[170]},{"1556826":[194]},{"1556828":[174]},{"1556830":[187]},{"1556832":[255]},{"1556834":[164]},{"1556836":[169]},{"1556838":[160]},{"1556840":[255]},{"1556842":[255,127,117]},{"1556846":[255]},{"1556848":[255]},{"1556850":[185]},{"1556852":[181]},{"1556854":[170]},{"1556856":[194]},{"1556858":[174]},{"1556860":[187]},{"1556862":[255]},{"1556864":[164]},{"1556866":[169]},{"1556868":[161]},{"1556870":[255]},{"1556872":[255,127,117]},{"1556876":[255]},{"1556878":[255]},{"1556880":[185]},{"1556882":[181]},{"1556884":[170]},{"1556886":[194]},{"1556888":[174]},{"1556890":[187]},{"1556892":[255]},{"1556894":[164]},{"1556896":[169]},{"1556898":[162]},{"1556900":[255]},{"1556902":[255,127,117]},{"1556906":[255]},{"1556908":[255]},{"1556910":[185]},{"1556912":[181]},{"1556914":[170]},{"1556916":[194]},{"1556918":[174]},{"1556920":[187]},{"1556922":[255]},{"1556924":[164]},{"1556926":[169]},{"1556928":[163]},{"1556930":[255]},{"1556932":[255,127,117]},{"1556936":[255]},{"1556938":[255]},{"1556940":[185]},{"1556942":[181]},{"1556944":[170]},{"1556946":[194]},{"1556948":[174]},{"1556950":[187]},{"1556952":[255]},{"1556954":[164]},{"1556956":[169]},{"1556958":[164]},{"1556960":[255]},{"1556962":[255,127,117]},{"1556966":[255]},{"1556968":[255]},{"1556970":[185]},{"1556972":[181]},{"1556974":[170]},{"1556976":[194]},{"1556978":[174]},{"1556980":[187]},{"1556982":[255]},{"1556984":[164]},{"1556986":[169]},{"1556988":[165]},{"1556990":[255]},{"1556992":[255,127,117]},{"1556996":[255]},{"1556998":[255]},{"1557000":[185]},{"1557002":[181]},{"1557004":[170]},{"1557006":[194]},{"1557008":[174]},{"1557010":[187]},{"1557012":[255]},{"1557014":[164]},{"1557016":[169]},{"1557018":[166]},{"1557020":[255]},{"1557022":[255,127,117]},{"1557026":[255]},{"1557028":[255]},{"1557030":[185]},{"1557032":[181]},{"1557034":[170]},{"1557036":[194]},{"1557038":[174]},{"1557040":[187]},{"1557042":[255]},{"1557044":[164]},{"1557046":[169]},{"1557048":[167]},{"1557050":[255]},{"1557052":[255,127,117]},{"1557056":[255]},{"1557058":[255]},{"1557060":[185]},{"1557062":[181]},{"1557064":[170]},{"1557066":[194]},{"1557068":[174]},{"1557070":[187]},{"1557072":[255]},{"1557074":[164]},{"1557076":[169]},{"1557078":[168]},{"1557080":[255]},{"1557082":[255,127,117]},{"1557086":[255]},{"1557088":[255]},{"1557090":[185]},{"1557092":[181]},{"1557094":[170]},{"1557096":[194]},{"1557098":[174]},{"1557100":[187]},{"1557102":[255]},{"1557104":[164]},{"1557106":[169]},{"1557108":[169]},{"1557110":[255]},{"1557112":[255,127,117]},{"1557116":[255]},{"1557118":[255]},{"1557120":[185]},{"1557122":[181]},{"1557124":[170]},{"1557126":[194]},{"1557128":[174]},{"1557130":[187]},{"1557132":[255]},{"1557134":[165]},{"1557136":[160]},{"1557138":[160]},{"1557140":[255]},{"1557142":[255,127,117]},{"1557146":[255]},{"1557148":[255]},{"1557150":[185]},{"1557152":[181]},{"1557154":[170]},{"1557156":[194]},{"1557158":[174]},{"1557160":[187]},{"1557162":[255]},{"1557164":[165]},{"1557166":[160]},{"1557168":[161]},{"1557170":[255]},{"1557172":[255,127,117]},{"1557176":[255]},{"1557178":[255]},{"1557180":[185]},{"1557182":[181]},{"1557184":[170]},{"1557186":[194]},{"1557188":[174]},{"1557190":[187]},{"1557192":[255]},{"1557194":[165]},{"1557196":[160]},{"1557198":[162]},{"1557200":[255]},{"1557202":[255,127,117]},{"1557206":[255]},{"1557208":[255]},{"1557210":[185]},{"1557212":[181]},{"1557214":[170]},{"1557216":[194]},{"1557218":[174]},{"1557220":[187]},{"1557222":[255]},{"1557224":[165]},{"1557226":[160]},{"1557228":[163]},{"1557230":[255]},{"1557232":[255,127,117]},{"1557236":[255]},{"1557238":[255]},{"1557240":[185]},{"1557242":[181]},{"1557244":[170]},{"1557246":[194]},{"1557248":[174]},{"1557250":[187]},{"1557252":[255]},{"1557254":[165]},{"1557256":[160]},{"1557258":[164]},{"1557260":[255]},{"1557262":[255,127,117]},{"1557266":[255]},{"1557268":[255]},{"1557270":[185]},{"1557272":[181]},{"1557274":[170]},{"1557276":[194]},{"1557278":[174]},{"1557280":[187]},{"1557282":[255]},{"1557284":[165]},{"1557286":[160]},{"1557288":[165]},{"1557290":[255]},{"1557292":[255,127,117]},{"1557296":[255]},{"1557298":[255]},{"1557300":[185]},{"1557302":[181]},{"1557304":[170]},{"1557306":[194]},{"1557308":[174]},{"1557310":[187]},{"1557312":[255]},{"1557314":[165]},{"1557316":[160]},{"1557318":[166]},{"1557320":[255]},{"1557322":[255,127,117]},{"1557326":[255]},{"1557328":[255]},{"1557330":[185]},{"1557332":[181]},{"1557334":[170]},{"1557336":[194]},{"1557338":[174]},{"1557340":[187]},{"1557342":[255]},{"1557344":[165]},{"1557346":[160]},{"1557348":[167]},{"1557350":[255]},{"1557352":[255,127,117]},{"1557356":[255]},{"1557358":[255]},{"1557360":[185]},{"1557362":[181]},{"1557364":[170]},{"1557366":[194]},{"1557368":[174]},{"1557370":[187]},{"1557372":[255]},{"1557374":[165]},{"1557376":[160]},{"1557378":[168]},{"1557380":[255]},{"1557382":[255,127,117]},{"1557386":[255]},{"1557388":[255]},{"1557390":[185]},{"1557392":[181]},{"1557394":[170]},{"1557396":[194]},{"1557398":[174]},{"1557400":[187]},{"1557402":[255]},{"1557404":[165]},{"1557406":[160]},{"1557408":[169]},{"1557410":[255]},{"1557412":[255,127,117]},{"1557416":[255]},{"1557418":[255]},{"1557420":[185]},{"1557422":[181]},{"1557424":[170]},{"1557426":[194]},{"1557428":[174]},{"1557430":[187]},{"1557432":[255]},{"1557434":[165]},{"1557436":[161]},{"1557438":[160]},{"1557440":[255]},{"1557442":[255,127,117]},{"1557446":[255]},{"1557448":[255]},{"1557450":[185]},{"1557452":[181]},{"1557454":[170]},{"1557456":[194]},{"1557458":[174]},{"1557460":[187]},{"1557462":[255]},{"1557464":[165]},{"1557466":[161]},{"1557468":[161]},{"1557470":[255]},{"1557472":[255,127,117]},{"1557476":[255]},{"1557478":[255]},{"1557480":[185]},{"1557482":[181]},{"1557484":[170]},{"1557486":[194]},{"1557488":[174]},{"1557490":[187]},{"1557492":[255]},{"1557494":[165]},{"1557496":[161]},{"1557498":[162]},{"1557500":[255]},{"1557502":[255,127]},{"1572864":[23,23,23,23,23,23,23]},{"1572880":[70,70,29,41,13,78,16,15]},{"1572896":[15]},{"1572898":[1,2,160]},{"1572902":[160]},{"1572904":[3,1,2]},{"1572914":[1,32,10,30,10]},{"1572920":[1,1]},{"1572936":[8]},{"1572943":[1]},{"1572949":[64,64,64,64,64]},{"1572955":[64,64]},{"1572958":[7,7,34]},{"1572964":[107,34]},{"1572969":[107,34]},{"1572974":[107]},{"1572977":[121]},{"1572979":[110]},{"1572981":[111]},{"1572983":[109,105,124,105,108,105,127]},{"1572996":[160,128]},{"1573008":[4,71,3,71,2,71,4,71,2,71]},{"1573024":[1,1,1,1,1]},{"1573056":[49,65,89,38,83,88,151,147]},{"1573120":[178,216,216,216,216,216,216,216,216,217,217,217,217,217,218,218,218,218,218,219,219,219,219,219,220,220,220,220,220,221,221,221,221,221,222,222,222,222,222,223,223,223,223,223,224,224,224,224,224,225,225,225,225,225,226,226,226,226,226,227,227,227,227,227,23,23,23,23,23,23,23,23,23,23,20]},{"1573200":[62,62,62,62,62,62,62,62,62,62]},{"1573216":[36,36,36]},{"1573221":[14,40]},{"1573224":[8,2]},{"1573227":[4,2,1,4,8,16,1]},{"1573235":[1,1]},{"1573238":[10]},{"1573240":[50]},{"1573246":[1]},{"1573248":[3]},{"1573250":[1,44,1]},{"1573268":[1]},{"1573376":[80,70]},{"1573380":[176,185,255,255]},{"1573396":[1]},{"1573398":[1,2,3,4]},{"1573456":[18,1,83,30]},{"1573462":[4,226,6,70,4,88,7,109,4,95,7]},{"1573632":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1578240":[98,101]},{"1578243":[43,45,33,30,159,43,30,45,46,43,39,159,40,31,159,45,33,30,159,36,34,39,32,98,233]},{"1578269":[25,100,117,110,113,104,97,159,95,93,111,112,104,97,99,9]},{"1578286":[25,138,155,148,151,142,135,159,133,131,149,150,142,135,98,104]},{"1578303":[31,45,33,30,159,37,40,50,26,37,159,41,43,34,30,44,45,98,235]},{"1578323":[17,111,93,106,95,112,113,93,110,117,99,11]},{"1578336":[17,149,131,144,133,150,151,131,148,155,98,79]},{"1578349":[1,52,98,101]},{"1578354":[45,44,26,33,26,44,43,26,37,26,33,53,44,159,33,40,38,30,28,40,38,34,39,32,98,233]},{"1578381":[25,103,93,103,93,110,101,103,107,159,112,107,115,106,99,9]},{"1578398":[25,141,131,141,131,148,139,141,145,159,150,145,153,144,98,100]},{"1578415":[47,47,46,37,45,46,43,30,44,159,43,46,37,30,159,45,33,30,159,29,30,44,30,43,45,98,233]},{"1578443":[25,96,97,111,97,110,112,159,108,93,104,93,95,97,99,9]},{"1578460":[25,134,135,149,135,148,150,159,146,131,142,131,133,135,98,100]},{"1578477":[47,45,33,30,159,27,46,37,37,50,159,38,26,36,30,44,159,26,159,31,43,34,30,39,29,98,233]},{"1578505":[27,105,107,113,106,112,93,101,106,159,112,107,115,97,110,99,9]},{"1578523":[27,143,145,151,144,150,131,139,144,159,150,145,153,135,148,98,102]},{"1578541":[37,50,40,46,43,159,46,39,28,37,30,159,43,30,28,40,47,30,43,44,98,235]},{"1578564":[19,117,107,113,110,159,100,107,113,111,97,99,11]},{"1578578":[19,155,145,151,148,159,138,145,151,149,135,98,102]},{"1578592":[39,31,34,39,32,30,43,159,48,30,27,44,159,31,40,43,159,44,26,37,30,98,232]},{"1578616":[31,118,107,110,93,119,111,159,115,93,112,97,110,98,93,104,104,99,8]},{"1578636":[31,156,145,148,131,157,149,159,153,131,150,135,148,136,131,142,142,98,100]},{"1578656":[45,45,33,30,159,48,34,45,28,33,159,26,39,29,159,26,44,44,34,44,45,26,39,45,98,235]},{"1578683":[19,105,93,99,101,95,159,111,100,107,108,99,11]},{"1578697":[19,143,131,137,139,133,159,149,138,145,146,98,104]},{"1578711":[31,45,48,34,39,159,37,46,38,27,30,43,35,26,28,36,44,98,233]},{"1578731":[27,115,107,107,96,111,105,97,106,119,111,159,100,113,112,99,9]},{"1578749":[27,153,145,145,134,149,143,135,144,157,149,159,138,151,150,98,100]},{"1578767":[45,40,28,26,43,34,39,26,159,27,40,50,159,41,37,26,50,44,159,26,32,26,34,39,98,233]},{"1578794":[25,100,93,113,106,112,97,96,159,99,110,107,114,97,99,9]},{"1578811":[25,138,131,151,144,150,135,134,159,137,148,145,152,135,98,100]},{"1578828":[45,47,30,39,46,44,55,159,42,46,30,30,39,159,40,31,159,31,26,30,43,34,30,44,98,234]},{"1578855":[23,115,101,111,100,101,106,99,159,115,97,104,104,99,10]},{"1578871":[23,153,139,149,138,139,144,137,159,153,135,142,142,98,100]},{"1578887":[45,45,33,30,159,29,48,26,43,47,30,39,159,44,48,40,43,29,44,38,34,45,33,44,98,236]},{"1578914":[15,111,105,101,112,100,97,110,117,99,12]},{"1578926":[15,149,143,139,150,138,135,148,155,98,102]},{"1578938":[39,45,33,30,159,27,46,32,54,28,26,45,28,33,34,39,32,159,36,34,29,98,233]},{"1578962":[25,103,93,103,93,110,101,103,107,159,112,107,115,106,99,9]},{"1578979":[25,141,131,141,131,148,139,141,145,159,150,145,153,144,98,72]},{"1578996":[31,45,33,30,159,37,40,44,45,159,40,37,29,159,38,26,39,98,233]},{"1579016":[27,96,97,93,112,100,159,105,107,113,106,112,93,101,106,99,9]},{"1579034":[27,134,135,131,150,138,159,143,145,151,144,150,131,139,144,98,104]},{"1579052":[31,45,33,30,159,31,40,43,30,44,45,159,45,33,34,30,31,98,235]},{"1579072":[19,104,107,111,112,159,115,107,107,96,111,99,11]},{"1579086":[19,142,145,149,150,159,153,145,145,134,149,98,102]},{"1579100":[39,26,39,29,159,45,33,30,159,38,26,44,45,30,43,159,44,48,40,43,29,98,168]},{"1579124":[29,74,67,60,60,71,74,159,56,62,56,64,69,82,82,82,98,236]},{"1579143":[15,98,107,110,97,114,97,110,120,99,12]},{"1579155":[15,136,145,148,135,152,135,148,158]},{"1581056":[8,9,10,11,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,4,49,54,64,70,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,4,22,8]},{"1581336":[204,5,212,5,182,11,134,11]},{"1581434":[232,13,152,11,206,20]},{"1581442":[80,28,255,255,102,20]},{"1581450":[182,26,152,11,182,26,14,4,12,156,48,21,152,10]},{"1581476":[22,8,232,13]},{"1581488":[172,9]},{"1581510":[26,4]},{"1581514":[30,9,172,9]},{"1581544":[168,10,170,7]},{"1581572":[170,1,36,129,190,135,88,129]},{"1581640":[190,130]},{"1585196":[24,24]},{"1585199":[255]},{"1585209":[248]},{"1589248":[18,1,53,255,81,6,82,255,83,6,84,255,255,255,255,255]},{"1591296":[1,21,1,93]},{"1591301":[18,4]},{"1591304":[255,255,255,255,255,255,255,255]},{"1591552":[1,81,100]},{"1591556":[7,255]},{"1591560":[1,83,100]},{"1591564":[7,255]},{"1591568":[255,255,255,255,255,255,255,255]},{"1593345":[1,3,3,3,3,3,3,1,3,1,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,1,3,3,3,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]},{"1593408":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,13,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,17,17,16,22,22,22,22,22,17,22,22,22,21,21,21,21,21,21,21,21,21,21,21,21,22,2,9]},{"1593476":[154,213,155,213]},{"1593482":[183,213,184,213,185,213,186,213,191,213,197,213,198,213,199,213,201,213]},{"1593504":[1]},{"1593506":[74,10]},{"1593509":[1]},{"1593511":[243,10]},{"1593514":[2]},{"1593516":[50,12]},{"1593520":[1]},{"1593522":[25,13,52]},{"1593527":[255,255,255,255,255,255,255,255,255,1]},{"1593538":[74,10,112,1]},{"1593543":[243,10,192,2]},{"1593548":[50,12,218,88,1]},{"1593554":[25,13,52]},{"1593559":[255,255,255,255,255,255,255,255,255]},{"1593600":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]},{"1605632":[224,90,221,29,227,3,63,207,95,224,92,227,188,227,124,195,246,157,62,28,192,224,227,195,131,25,153,24,238,45,252,147,248,7,57,199,11,247,247,158,254,140,126,17,3,7,199,247,251,251,199,132,95,25,238,3,173,11,87,68,232,192,255,128,255,152,120,224,241,243,184,31,7]},{"1605706":[28]},{"1605708":[60,8,28,4,73]},{"1605714":[67]},{"1605716":[195,1,169]},{"1605720":[248]},{"1605722":[255,255,251,36,255,4,92,172,124,140,92,74,172,124,39,15,15,255,100,253,36,125,128,62,210,127,169,239,64,212,137,232,22,34,3,28,1,16,48,102,9,24,231,52,195,82,129,235,32,247,20,253,66,195,126,189,60]},{"1605780":[24,60,28,8,2,62,126,68]},{"1605789":[255,2,254]},{"1605793":[246,68]},{"1605796":[237,18,173]},{"1605800":[175]},{"1605803":[1,9,18,18,82,80]},{"1605810":[255]},{"1605812":[251]},{"1605814":[247]},{"1605816":[183,70]},{"1605819":[111,4,127]},{"1605823":[4,8,72,34,144,6,128,255]},{"1605832":[254,63,225,97,69,222,94,6,220,92,219,91]},{"1605846":[30,36,63,36,255,10,192,255,184,204,75,188,35,252,67,246,29,35]},{"1605865":[3,51,67,3,25,47,255,39]},{"1605874":[20,255,255,191,191,206,206,209,208,239,239,230,231,238,233,239,236]},{"1605892":[64,49,63,31,34,28,27,185,158,115,60,230,121,204,243,152,231,48,207,224,159,192,63,112,224,193,131,7,15,31,63,255]},{"1605925":[129,126,75,141,110,1]},{"1605933":[37,16,224,65,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,254,253,251,247,239,223,191,127,231,156,254,137,253,195,251,231,115,207,243,207,120,231,95,240,24,1,3,7,143,143,199,224,188,243,254,225,255]},{"1605991":[255,8,255,140,255,158,231,167,215,199,99,1,35]},{"1606005":[224,32,24,56,239,159,246,15,217,151,243,142,118,92,191,10,126,36,219,138,31,207,38,12,137,193,195,100,188,96,188,104,180,100,169,67,96,163,7,97,169,96,184,96,31,31,27,36,31,5,95,175,111,144,83,163,138,102]},{"1606064":[1]},{"1606066":[12,36,15,224,71,59,75,28,164,15,211,7,232,3,117,3,184,1,92,1,190,132,67,32,16,136,68,162,65,207,206,63,48,248,199,224,20,192,175,192,23,128,44,128,123,48,192]},{"1606114":[11,16,40,83,132,251,8,159,102,7,248]},{"1606126":[87]},{"1606128":[168]},{"1606130":[245]},{"1606132":[254]},{"1606134":[255,6]},{"1606138":[168,87,10,1]},{"1606143":[67,102,191,224,35,118,159,59,207,61,135,62,83,127,57,111,172,31,31,15,7,67,129,128,16,215,87,214,86,213,85,215,87,205,78,250,123,253,5,255,19,34,63,24,61,53,6,3,1,60,243,30,225,255,24,239,40,223,16,223,145,223,147,255,199,227,225]},{"1606211":[16,34,32,224,56]},{"1606217":[251,251,245,245,174,174,75,74,241,245]},{"1606228":[254,255,251,251,4,4,14,95,255,251,1]},{"1606240":[4,153,158,115,124,230,121,204,115,152,231,48,79,96,31,192,63,120,240,225,195,135,143,159,63,255]},{"1606267":[48,48,206,206,223,223,39,255,3]},{"1606277":[255,49,32,35]},{"1606282":[69,141,110,2,129,98,157,68,126,129]},{"1606293":[255,131,97,1]},{"1606298":[28,35]},{"1606301":[151,104,1,27,94,241,93,243,185,231,249,135,248,103,63,48,127,120,239,44,225,227,199,7,7,192,128,16,47,11,94,16,67,186,36,15,126,32,95,22,90,24,67,2,240,225,197,197,193,225,231,252,131,198,2,10,255]},{"1606359":[49,255,67]},{"1606363":[3,1,9]},{"1606367":[24,134,27,1,133,196,2,3,255]},{"1606377":[129,127,135,208,1,35]},{"1606384":[35,31,7,92,140,252,44,188,204,252,12,35,252,35]},{"1606400":[47,34,15,35,255,224,53,129,66,67,189,62,66]},{"1606414":[189]},{"1606416":[195]},{"1606418":[255]},{"1606420":[203,128,255,60]},{"1606425":[129,66,60]},{"1606429":[52]},{"1606431":[157,93,67,190,63,199,7,120,4,139,4,251,28,227,182,221,62]},{"1606450":[128,115,3,3,25,217,88,226,161,188,195,137,30]},{"1606464":[1,62,29,133,42]},{"1606470":[22,79,140,79,9,78,11,77,11,119,164,104]},{"1606483":[127,128,127,152,48,176,177,179,24,159,7,152,231,2,19,255,146,239,36,223,72,159,16,191,32,191,35,191,39,255,143,12,24,48,96,34,64,224,72]},{"1606523":[127,127,191,191,159,159,175,175,183,183,171,187,141,189,30,126,128,64,96,112,120,100,66,129,255]},{"1606549":[63]},{"1606551":[15,192,7,240,3,248,3,128,1,96,1,56,255,255,63,15,7,127,159,199,128,127,65,62,34,28,85,73,190,182,221,221,235,235,247,247,127,190,221,235,119,62,28,8,47,254,39,1,79,15,255,39]},{"1606604":[67,230,191,224,49,246,159,123,79,189,39,158,19,207,9,103,4,31,31,15,135,195,225,240,248,239,40,207,136,175,8,127,15,247,7,123,3,153,129,204,64,16,48,112,240,248,252,126,63]},{"1606654":[255,253,255,2,2,35,253,1,19,19,67,238,236,7]},{"1606670":[253,255,255,253,17,17,131,67,3,133,66,3,5,17,17,238,238,239,239,134,204,4,24,16,251,8,255,6,7,248]},{"1606701":[31]},{"1606703":[249]},{"1606705":[255]},{"1606707":[79]},{"1606709":[240,6]},{"1606713":[224,6]},{"1606716":[176,15,136,128,4,6,167,222,83,239,41,119,148,131,144,4,13,67,33,16,8,255]},{"1606739":[192,127,191,127,143,111,140,108,67,140,111,131,94,1,2]},{"1606755":[16,19,34,16,134,203,4,131,23,1,132,49,3,35]},{"1606770":[131,23,1,3,141,110,13,238,67,253,254,1,1,2,67,1,254,131,222,2,1]},{"1606793":[131,107,3,152,216,3,2]},{"1606801":[1,254,67,249,250,135,72,5,3]},{"1606812":[4,4,131,107,3,224,39,211,211,185,185,68,124,90,102,185,231,100,219,194,189,129,126,60,126,199,131,1,24,60,126,255]},{"1606845":[252]},{"1606847":[240]},{"1606849":[224,9,192,25,192,27,128,58,128,60,34,255,19,246,230,228,197,195]},{"1606868":[255,126,255,66,255,78,255,81,255,87,255,118,255,13,136,23,1,5,254,254,253,253,243,243,35,239,13,223,223,191,191,127,127,1,2,12,24,16,32,64,128,80]},{"1606911":[255,38]},{"1606914":[255]},{"1607680":[224,90,221,29,227,3,63,207,95,224,92,227,188,227,124,195,246,157,62,28,192,224,227,195,131,25,153,24,238,45,252,147,248,7,57,199,11,247,247,158,254,140,126,17,3,7,199,247,251,251,199,132,95,25,238,3,173,11,87,68,232,192,255,128,255,152,120,224,241,243,184,31,7]},{"1607754":[28]},{"1607756":[60,8,28,4,73]},{"1607762":[67]},{"1607764":[195,1,169]},{"1607768":[248]},{"1607770":[255,255,251,36,255,4,92,172,124,140,92,74,172,124,39,15,15,255,100,253,36,125,128,62,210,127,169,239,64,212,137,232,22,34,3,28,1,16,48,102,9,24,231,52,195,82,129,235,32,247,20,253,66,195,126,189,60]},{"1607828":[24,60,28,8,2,62,126,68]},{"1607837":[255,2,254]},{"1607841":[246,68]},{"1607844":[237,18,173]},{"1607848":[175]},{"1607851":[1,9,18,18,82,80]},{"1607858":[255]},{"1607860":[251]},{"1607862":[247]},{"1607864":[183,70]},{"1607867":[111,4,127]},{"1607871":[4,8,72,34,144,6,128,255]},{"1607880":[254,63,225,97,69,222,94,6,220,92,219,91]},{"1607894":[30,36,63,36,255,10,192,255,184,204,75,188,35,252,67,246,29,35]},{"1607913":[3,51,67,3,25,47,255,39]},{"1607922":[20,255,255,191,191,206,206,209,208,239,239,230,231,238,233,239,236]},{"1607940":[64,49,63,31,34,28,27,185,158,115,60,230,121,204,243,152,231,48,207,224,159,192,63,112,224,193,131,7,15,31,63,255]},{"1607973":[129,126,75,141,110,1]},{"1607981":[37,16,224,65,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,254,253,251,247,239,223,191,127,231,156,254,137,253,195,251,231,115,207,243,207,120,231,95,240,24,1,3,7,143,143,199,224,188,243,254,225,255]},{"1608039":[255,8,255,140,255,158,231,167,215,199,99,1,35]},{"1608053":[224,32,24,56,239,159,246,15,217,151,243,142,118,92,191,10,126,36,219,138,31,207,38,12,137,193,195,100,188,96,188,104,180,100,169,67,96,163,7,97,169,96,184,96,31,31,27,36,31,5,95,175,111,144,83,163,138,102]},{"1608112":[1]},{"1608114":[12,36,15,224,71,59,75,28,164,15,211,7,232,3,117,3,184,1,92,1,190,132,67,32,16,136,68,162,65,207,206,63,48,248,199,224,20,192,175,192,23,128,44,128,123,48,192]},{"1608162":[11,16,40,83,132,251,8,159,102,7,248]},{"1608174":[87]},{"1608176":[168]},{"1608178":[245]},{"1608180":[254]},{"1608182":[255,6]},{"1608186":[168,87,10,1]},{"1608191":[67,102,191,224,35,118,159,59,207,61,135,62,83,127,57,111,172,31,31,15,7,67,129,128,16,215,87,214,86,213,85,215,87,205,78,250,123,253,5,255,19,34,63,24,61,53,6,3,1,60,243,30,225,255,24,239,40,223,16,223,145,223,147,255,199,227,225]},{"1608259":[16,34,32,224,56]},{"1608265":[251,251,245,245,174,174,75,74,241,245]},{"1608276":[254,255,251,251,4,4,14,95,255,251,1]},{"1608288":[4,153,158,115,124,230,121,204,115,152,231,48,79,96,31,192,63,120,240,225,195,135,143,159,63,255]},{"1608315":[48,48,206,206,223,223,39,255,3]},{"1608325":[255,49,32,35]},{"1608330":[69,141,110,2,129,98,157,68,126,129]},{"1608341":[255,131,97,1]},{"1608346":[28,35]},{"1608349":[151,104,1,27,94,241,93,243,185,231,249,135,248,103,63,48,127,120,239,44,225,227,199,7,7,192,128,16,47,11,94,16,67,186,36,15,126,32,95,22,90,24,67,2,240,225,197,197,193,225,231,252,131,198,2,10,255]},{"1608407":[49,255,67]},{"1608411":[3,1,9]},{"1608415":[24,134,27,1,133,196,2,3,255]},{"1608425":[129,127,135,208,1,35]},{"1608432":[35,31,7,92,140,252,44,188,204,252,12,35,252,35]},{"1608448":[47,34,15,35,255,224,53,129,66,67,189,62,66]},{"1608462":[189]},{"1608464":[195]},{"1608466":[255]},{"1608468":[203,128,255,60]},{"1608473":[129,66,60]},{"1608477":[52]},{"1608479":[157,93,67,190,63,199,7,120,4,139,4,251,28,227,182,221,62]},{"1608498":[128,115,3,3,25,217,88,226,161,188,195,137,30]},{"1608512":[1,62,29,133,42]},{"1608518":[22,79,140,79,9,78,11,77,11,119,164,104]},{"1608531":[127,128,127,152,48,176,177,179,24,159,7,152,231,2,19,255,146,239,36,223,72,159,16,191,32,191,35,191,39,255,143,12,24,48,96,34,64,224,32]},{"1608571":[127,127,191,191,159,159,175,175,183,183,171,187,141,189,30,126,128,64,96,112,120,100,66,129,255]},{"1608597":[63]},{"1608599":[15,192,7,240,67,3,248,224,35,1,236,1,196,255,255,63,15,7,7,19,59,128,127,65,62,34,28,85,73,190,182,221,221,235,235,247,247,127,190,221,235,119,62,28,8,47,254,39,1,79,15,255,39]},{"1608653":[67,230,191,224,49,246,159,123,79,189,39,158,19,207,9,103,4,31,31,15,135,195,225,240,248,239,40,207,136,175,8,127,15,247,7,123,3,153,129,204,64,16,48,112,240,248,252,126,63]},{"1608703":[255,253,255,2,2,35,253,1,19,19,67,238,236,7]},{"1608719":[253,255,255,253,17,17,131,67,3,133,66,3,5,17,17,238,238,239,239,134,204,4,24,16,251,8,255,6,7,248]},{"1608750":[31]},{"1608752":[249]},{"1608754":[255]},{"1608756":[79]},{"1608758":[240,6]},{"1608762":[224,6]},{"1608765":[176,15,136,128,4,6,167,222,83,239,41,119,148,131,144,4,13,67,33,16,8,255]},{"1608788":[192,127,191,127,143,111,140,108,67,140,111,131,94,1,2]},{"1608804":[16,19,34,16,134,203,4,131,23,1,132,49,3,35]},{"1608819":[131,23,1,3,141,110,13,238,67,253,254,1,1,2,67,1,254,131,222,2,1]},{"1608842":[131,107,3,152,216,3,2]},{"1608850":[1,254,67,249,250,135,72,5,3]},{"1608861":[4,4,131,107,3,31,211,211,185,185,68,124,90,102,185,231,100,219,194,189,129,126,60,126,199,131,1,24,60,126,255]},{"1608893":[252]},{"1608895":[240,3,224,15,67,192,31,26,128,57,128,48,255,255,252,240,224,224,198,207]},{"1608916":[255,126,255,66,255,78,255,81,255,87,255,118,255,13,136,23,1,5,254,254,253,253,243,243,35,239,13,223,223,191,191,127,127,1,2,12,24,16,32,64,128,80]},{"1608959":[255,38]},{"1608962":[255]},{"1609728":[15,255]},{"1609731":[252,3,248,7,243,15,231,31,207,63,152,127,183,120,39]},{"1609747":[1,220,63,67,35,227,67,220,192,8,206,192,39,224,211,48]},{"1609764":[28,28,34,63,17,31,15,127,128,191,192,159,224,79,112,103,120,48,63,24,31,143,15,34]},{"1609789":[23,128,128,192,224,240,247,74,247,76,218,102,236,115,183,120,152,127,207,63,231,31]},{"1609813":[1,36]},{"1609816":[224,33,226,14,196,28,73,121,19,243,167,103,79,207,158,158,60,60,17,35,134,12,24,48,97,195,112,112,247,240,231,224,207,192,159,128,69,63]},{"1609855":[4,143,15,31,63,127,34,255,9,176,79,24,231,60,243,127,240,47,240,67,12,243,224,33,248,7,79,231,195,128,208,224,1,3,8,247,12,243,31,224,255]},{"1609897":[131,124,1,254,63,255,127,255,247,243,224]},{"1609909":[124,254,192,128,67,65,190,15,193,62,227,28,255]},{"1609923":[199,56,159,124,159,254,190,190,62,28,35]},{"1609935":[27,255]},{"1609938":[15,240,224,255,31,31,128,128,6,6,249]},{"1609950":[255,255]},{"1609953":[240,31,224,127,249,255]},{"1609960":[160,96,199,64,71,199,66,5,191,2,189,60,31,63,35,60,2,124,66,192,67,127,255,5,63,255]},{"1609987":[192,127,254,67,127,255,224,48]},{"1609996":[64,64,63]},{"1610000":[64,65,127]},{"1610004":[24,230,29,231,24,229,14,242,7,249,3,252,1,254]},{"1610019":[255,225,224,226,241,248,252,254,255,253,195,134,249,51,252,113,126,228,251,14,241,255]},{"1610042":[3,252,34]},{"1610047":[128,34]},{"1610050":[224,58,252,195,195,224,224,112,240,184,120,220,60,102,158,51,207,255]},{"1610069":[60,31,15,7,3,1]},{"1610077":[3,252,7,248,8,242,10,243,13,245,10,246,5,251,14,242,252,249,245,244,242,241,240,241,175,112,155,103,183,72,175,80,191,67,69,191,68,39]},{"1610116":[224,40,233,24,148,172,202,86,247,59,127,27,127,11,255,131,127,11,7,67,33]},{"1610138":[128,192,64,128,199,7,224]},{"1610146":[112]},{"1610148":[63]},{"1610150":[31]},{"1610152":[95,64,111,96,112,112,248,35,255,4,191,159,143,227,31,67,155,103,67,248,7,69,31,224,36]},{"1610178":[34,1,224,81,248,248,136,248,40,216,72,152,172,60,14,62,119,79,123,71,7,7,39,103,195,193,128,128,63]},{"1610208":[1]},{"1610210":[60,36,126,66,126,82,46,42,6,6,135,135,255,255,195,129,129,209,249,120,240,15,97,159,79,191,211,51,201,57,196,60,226,30,99,159,7,158,176,44,54,59,29,28,252,252,248,248,240,240,224,224,192,192,131,73,1,6,64]},{"1610270":[3,7,15,31,63,34,255,7,247,102,246,103,247,103,244,100,67,240,96,7,241,96,254,96,24,25,24,27,35,31,23,224,31,224,159,240,207,184,167,28,19,140,139,206,201,238,233,31,31,15,71,227,115,49,21,55]},{"1610327":[6,223,127,160,96,192,127,255,136,135,2,2,64,31,64,132,151,2,9,223,14,239,38,119,147,59,201,29,228,133,38,1,224,97,48,24,140,198,227,241,248,252,111,206,79,206,239,110,247,182,251,218,253,108,255,240,248,7,48,48,16,8,4,130]},{"1610392":[7,255]},{"1610395":[255,112,255,96,246,73,230,25,228,27,197,58,195,60]},{"1610410":[3,15,22,38,36,69,67,255]},{"1610419":[255,14,63,198,15,242,7,248,127,128,159,96,199,56]},{"1610434":[192,48,8,4,124,158,198,52,220,52,212,49,208,57,200,29,228,30,230,26,234,40,216,195,203,131,98,1,23,5,7,5,5,255]},{"1610469":[255,127,247,255,136,136,247,128,247,127,255,192,250,255,127,128,119,127,131,75,1,45]},{"1610492":[39,255,69,170,91]},{"1610498":[174,70,95,160,1,191,64,34,4,36]},{"1610509":[224,41,22,234,26,238,26,234,8,240,9,244,27,230,42,214,46,214,225,225,229,231,227,225,193,193,206,60,141,124,201,120,203,120,235,120,223,92,141,76,165,100,3,3,34,7,2,35,51,27,67,99,159,16,223,63,191,127,176,112,224,96,239,96,224,96,28,28,32,64,79,34,31,69,64]},{"1610585":[9,124]},{"1610588":[127]},{"1610590":[131]},{"1610592":[120,120,252,252,37,255,1,135,3,35,243]},{"1610604":[247,72,243,118,1,246,115,34,12]},{"1610614":[140,35,12,10,255,254,193,254,129,254,31,252,51,240,243,68,112,251,3]},{"1610634":[28,28]},{"1610637":[35,12,15,251,124,247,120,247,122,177,114,93,190,237,30,173,30,205,78,34]},{"1610658":[24,12]},{"1610662":[64,48,5,255,28,255,62,255,127,255,253,255,250,254,249,255,252,255,248,224,192,128,131,89]},{"1610687":[224,33,1,255,48,255,38,239,15,127,60,254,186,254,89,127,92,127]},{"1610707":[16,128,1,1,128,128,1,255,20,223,54,255,15,255,125,255,134,42,4]},{"1610727":[32,34]},{"1610730":[26,1,128,128,3,252,7,249,14,242,29,228,59,201,119,147,239,38,223,14]},{"1610752":[1,3,6,12,24,48,79]},{"1610760":[255,39,255,15,72,184,75,184,107,184,123,184,105,168,68,164,218,50,204,56,35,7,24,23,27,13,7,176,195,171,192,173,192,189,210,154,232,255,243,255,124,255]},{"1610803":[28,23,18]},{"1610807":[5,132,213]},{"1610811":[68,255]},{"1610814":[8,14,255,31,251,31,241,31,245,31,34]},{"1610826":[4,14,31,27,17,17,79,170,91,39,4,77,245,31,1,187,91,38,17,6,21,137,96,151,112,187,120,67,189,124,5,158,126,198,62,240,15,131,97,1,2,3,1,1,68]},{"1610872":[2,11,4]},{"1610876":[11,3,20,7,44,15,92,31,185,190,34,255,14,252,251,243,227,70,255]},{"1610896":[191,63,223,95,255,96,240,96,67,247,103,17,246,102]},{"1610911":[64,32,31,31,24,24,25,224,31,247,8,255]},{"1610924":[207,48,67,231,24,5,238,17,255]},{"1610934":[31,8,37]},{"1610938":[11,115,252,135,120,255]},{"1610945":[243,12,241,14,113,142,67,63,192]},{"1610955":[140,134,15]},{"1610959":[5,253,126,253,70,253,86,69,253,70,2,185,70,255,35]},{"1610975":[35,16,7]},{"1610979":[172,239,63,255,2,254,1,72,255]},{"1610989":[4,16,128,193,252,254,34,255,15,158,255,31,255,15,255,128,255,169,239,58,254,1,191]},{"1611013":[199,35]},{"1611016":[18,16,1,64,56,158,255,63,255,15,255,38,255,81,223,50,254,1,255,192,132,126,5,3,32,1]},{"1611044":[73,228,251,5,204,243,24,231,240,15,36,24]},{"1611057":[48,133,215,1,147,52,3,255]},{"1611776":[15,255]},{"1611779":[252,3,248,7,243,15,231,31,207,63,152,127,183,120,39]},{"1611795":[1,220,63,67,35,227,67,220,192,8,206,192,39,224,211,48]},{"1611812":[28,28,34,63,17,31,15,127,128,191,192,159,224,79,112,103,120,48,63,24,31,143,15,34]},{"1611837":[23,128,128,192,224,240,247,74,247,76,218,102,236,115,183,120,152,127,207,63,231,31]},{"1611861":[1,36]},{"1611864":[224,33,226,14,196,28,73,121,19,243,167,103,79,207,158,158,60,60,17,35,134,12,24,48,97,195,112,112,247,240,231,224,207,192,159,128,69,63]},{"1611903":[4,143,15,31,63,127,34,255,9,176,79,24,231,60,243,127,240,47,240,67,12,243,224,33,248,7,79,231,195,128,208,224,1,3,8,247,12,243,31,224,255]},{"1611945":[131,124,1,254,63,255,127,255,247,243,224]},{"1611957":[124,254,192,128,67,65,190,15,193,62,227,28,255]},{"1611971":[199,56,159,124,159,254,190,190,62,28,35]},{"1611983":[27,255]},{"1611986":[15,240,224,255,31,31,128,128,6,6,249]},{"1611998":[255,255]},{"1612001":[240,31,224,127,249,255]},{"1612008":[160,96,199,64,71,199,66,5,191,2,189,60,31,63,35,60,2,124,66,192,67,127,255,5,63,255]},{"1612035":[192,127,254,67,127,255,224,48]},{"1612044":[64,64,63]},{"1612048":[64,65,127]},{"1612052":[24,230,29,231,24,229,14,242,7,249,3,252,1,254]},{"1612067":[255,225,224,226,241,248,252,254,255,253,195,134,249,51,252,113,126,228,251,14,241,255]},{"1612090":[3,252,34]},{"1612095":[128,34]},{"1612098":[224,58,252,195,195,224,224,112,240,184,120,220,60,102,158,51,207,255]},{"1612117":[60,31,15,7,3,1]},{"1612125":[3,252,7,248,8,242,10,243,13,245,10,246,5,251,14,242,252,249,245,244,242,241,240,241,175,112,155,103,183,72,175,80,191,67,69,191,68,39]},{"1612164":[224,40,233,24,148,172,202,86,247,59,127,27,127,11,255,131,127,11,7,67,33]},{"1612186":[128,192,64,128,199,7,224]},{"1612194":[112]},{"1612196":[63]},{"1612198":[31]},{"1612200":[95,64,111,96,112,112,248,35,255,4,191,159,143,227,31,67,155,103,67,248,7,69,31,224,36]},{"1612226":[34,1,224,81,248,248,136,248,40,216,72,152,172,60,14,62,119,79,123,71,7,7,39,103,195,193,128,128,63]},{"1612256":[1]},{"1612258":[60,36,126,66,126,82,46,42,6,6,135,135,255,255,195,129,129,209,249,120,240,15,97,159,79,191,211,51,201,57,196,60,226,30,99,159,7,158,176,44,54,59,29,28,252,252,248,248,240,240,224,224,192,192,131,73,1,6,64]},{"1612318":[3,7,15,31,63,34,255,7,247,102,246,103,247,103,244,100,67,240,96,7,241,96,254,96,24,25,24,27,35,31,23,224,31,224,159,240,207,184,167,28,19,140,139,206,201,238,233,31,31,15,71,227,115,49,21,55]},{"1612375":[6,223,127,160,96,192,127,255,136,135,2,2,64,31,64,132,151,2,9,223,14,239,38,119,147,59,201,29,228,133,38,1,224,39,48,24,140,198,227,241,248,252,111,206,79,206,239,110,247,182,251,218,253,108,255,240,248,7,48,48,16,8,4,130]},{"1612440":[7,255]},{"1612443":[255,112,253,98,241,78,67,227,28,67,199,56,15]},{"1612457":[3,13,17,35,35,71,71,255]},{"1612466":[255,14,63,198,15,242,67,7,248,29,3,252,243,12]},{"1612481":[192,48,8,4,4,2,242,52,220,52,212,49,208,57,200,29,228,30,230,26,234,40,216,195,203,131,98,1,23,5,7,5,5,255]},{"1612516":[255,127,247,255,136,136,247,128,247,127,255,192,250,255,127,128,119,127,131,75,1,45]},{"1612539":[39,255,69,170,91]},{"1612545":[174,70,95,160,1,191,64,34,4,36]},{"1612556":[224,41,22,234,26,238,26,234,8,240,9,244,27,230,42,214,46,214,225,225,229,231,227,225,193,193,206,60,141,124,201,120,203,120,235,120,223,92,141,76,165,100,3,3,34,7,2,35,51,27,67,99,159,16,223,63,191,127,176,112,224,96,239,96,224,96,28,28,32,64,79,34,31,69,64]},{"1612632":[9,124]},{"1612635":[127]},{"1612637":[131]},{"1612639":[120,120,252,252,37,255,1,135,3,35,243]},{"1612651":[247,72,243,118,1,246,115,34,12]},{"1612661":[140,35,12,10,255,254,193,254,129,254,31,252,51,240,243,68,112,251,3]},{"1612681":[28,28]},{"1612684":[35,12,15,251,124,247,120,247,122,177,114,93,190,237,30,173,30,205,78,34]},{"1612705":[24,12]},{"1612709":[64,48,5,255,28,255,62,255,127,255,253,255,250,254,249,255,252,255,248,224,192,128,131,89]},{"1612734":[224,33,1,255,48,255,38,239,15,127,60,254,186,254,89,127,92,127]},{"1612754":[16,128,1,1,128,128,1,255,20,223,54,255,15,255,125,255,134,42,4]},{"1612774":[32,34]},{"1612777":[26,1,128,128,3,252,7,249,14,242,29,228,59,201,119,147,239,38,223,14]},{"1612799":[1,3,6,12,24,48,79]},{"1612807":[255,39,255,15,72,184,75,184,107,184,123,184,105,168,68,164,218,50,204,56,35,7,24,23,27,13,7,176,195,171,192,173,192,189,210,154,232,255,243,255,124,255]},{"1612850":[28,23,18]},{"1612854":[5,132,213]},{"1612858":[68,255]},{"1612861":[8,14,255,31,251,31,241,31,245,31,34]},{"1612873":[4,14,31,27,17,17,79,170,91,39,4,77,245,31,1,187,91,38,17,6,21,137,96,151,112,187,120,67,189,124,5,158,126,198,62,240,15,131,97,1,2,3,1,1,68]},{"1612919":[2,11,4]},{"1612923":[11,3,20,7,44,15,92,31,185,190,34,255,14,252,251,243,227,70,255]},{"1612943":[191,63,223,95,255,96,240,96,67,247,103,17,246,102]},{"1612958":[64,32,31,31,24,24,25,224,31,247,8,255]},{"1612971":[207,48,67,231,24,5,238,17,255]},{"1612981":[31,8,37]},{"1612985":[11,115,252,135,120,255]},{"1612992":[243,12,241,14,113,142,67,63,192]},{"1613002":[140,134,15]},{"1613006":[5,253,126,253,70,253,86,69,253,70,2,185,70,255,35]},{"1613022":[35,16,7]},{"1613026":[172,239,63,255,2,254,1,72,255]},{"1613036":[4,16,128,193,252,254,34,255,15,158,255,31,255,15,255,128,255,169,239,58,254,1,191]},{"1613060":[199,35]},{"1613063":[18,16,1,64,56,158,255,63,255,15,255,38,255,81,223,50,254,1,255,192,132,126,5,3,32,1]},{"1613091":[73,228,251,5,204,243,24,231,240,15,36,24]},{"1613104":[48,133,215,1,147,52,3,255]},{"1613824":[34,255,12,192,215,136,248,151,220,171,234,145,229,152,227,157,34,255,2]},{"1613844":[255]},{"1613846":[67]},{"1613848":[255,67,255]},{"1613852":[9,255,255,3]},{"1613857":[28,3,34,29,66,61,67,192,63,19,164,27,170,17,240]},{"1613873":[15,240]},{"1613876":[255,113,142,81,142,74,132,85,128,91,128,133,48]},{"1613890":[224,67,207,48,88,32,87,32,84,35,87,32,31]},{"1613904":[224,31]},{"1613907":[255,231,24,52,8,213,8,85,136,213,8,128]},{"1613920":[127,128,6,249,254,1,12,3,244,3,20,227,244,3,63,1,70,56,142,112,20,224,56,192,68,184,4,248,66,252,24,24,36,60,68,124,132,252,100,124,69,36,60,4,60,60,66,126,129,69,255,153,6,255,105,111,18,30,12,12,67,18,30,69,34,62,67,82,126,1,126,126,67,129,255,9,158,254,144,240,156,252,130,254,129,255,131,160]},{"1614009":[1,34,62,131,130]},{"1614015":[6,72,120,140,252,130,254,126,132,177]},{"1614026":[3,121,127,9,15,69,18,30]},{"1614035":[60,138,145]},{"1614039":[67,153,255,133,208]},{"1614045":[131,182]},{"1614048":[133,184]},{"1614051":[79,231,153,47,255,19,51]},{"1614059":[20,3,56,7,104,23,96,31,254,1,249]},{"1614071":[192]},{"1614073":[95,128,213,10,67,81,142,8,241,14,192,63,143,112,112]},{"1614089":[80,132,73]},{"1614093":[10,84,35,220,35]},{"1614099":[255,113,14,15]},{"1614104":[20,132,89]},{"1614108":[224,37,85,136,119,136,1,254,128,127,255]},{"1614120":[12,3,248,7]},{"1614125":[255,1,255,3,255,7,255,31,255,248,248,114,252,254,254,252,252,248,248,240,240,192,192,35]},{"1614150":[77,36,60,1,24,24,131,196]},{"1614159":[67,72,120,1,142,254,67,129,255,3,126,126,82,126,67,178,254,67,129,255,1,114,126,131,158]},{"1614185":[131,154]},{"1614188":[11,9,15,105,111,153,255,129,255,66,126,60,60,137,228]},{"1614204":[133,186,1,141,224]},{"1614210":[3,66,126,124,124,131,188]},{"1614218":[69,153,255,69,130,254,1,156,252,73,144,240,1,96,96,73,153,255,18,129,255,130,254,124,124,253,255,250,255,253,255,239,255,215,255,251,255,253,38,255,8,150,255,244,255,247,255,239,255,158,34,255,67,215,255,8,57,255,223,255,95,255,190,255,121,38,255,67,95,255,4,79,255,215,255,223,34,255]},{"1614297":[127,34,255,2,243,255,227,67,255,243,1,255,97,35,255,11,127,255,255,227,255,217,255,243,255,231,255,65,38,255,140,84,2,34,255,143,100,2,2,195,255,249,131,147,2,1,255,67,34,255,8,195,255,153,255,249,255,227,255,231,34,255,131,168,2,37,255]},{"1614365":[248,132,39,2,2,238,255,241,34,255,8,31,255,111,255,247,255,123,255,187,67,255,221,17,255,251,255,231,249,199,248,206,241,225,222,247,200,255,225,255,255,221,69,255,189,1,255,219,132,167,2,37,255,4,225,255,205,255,253,131,207,2,36,255,4,242,255,243,253,247,67,255,248,4,255,203,255,199,252,131,95,2,11,111,191,111,255,159,247,247,255,251,15,255,247,39]},{"1614463":[123,69,123,74]},{"1614468":[123,39]},{"1614472":[255,67,255,9,134,59,2,8,104,255,111,255,110,255,221,255,187,38,255,8,97,255,77,255,245,255,123,255,167,38,255,69,175,255,2,171,255,103,50,255,39]},{"1614515":[127,67,127,72,1,127,73,67,127,255,132,83,2,4,211,255,193,255,115,131,16]},{"1614537":[38]},{"1614540":[252,67,252,36,18,252,228,252,254,127,253,191,251,223,247,239,239,247,223,251,191,253,127,254,143,176,3,2,251,255,225,71,255,192,131,220,2,35,255,12,199,215,171,215,41,239,17,215,41,215,171,255,71,47,255,6,227,255,224,255,242,255,252,132,7,3]},{"1614607":[254,34,255,7,15,251,7,255,119,255,255,143,67,255,151,3,255,31,255,255,71,74,123]},{"1614631":[78,67,127,66,34,127,8,121,255,28,255,20,247,116,247,122,67,251,10,34,251,1,255,254,67,255,252,1,255,248,132,17,2,3,253,255,254,127,67,255,63,4,255,31,255,127,159,132,81,4,1,127,255,67,255,254,3,255,252,255,253,132,97,4,131,95,2,133,82,4]},{"1614702":[31,67,255,191,131,79,2,1,127,255,140,147,2,1,73,127,67,152,255,2,153,255,41,67,239,40,34,239]},{"1614731":[228,67,252,100,67,252,228]},{"1614739":[252,67,33,255,4,255,255,126,126,198,67,254,186,7,254,194,254,250,254,134,254,252,144,175,3,12,130,130,69,199,74,207,118,255,110,255,95,255,191,132,157,3,1,192,192,67,160,224,7,32,224,163,224,166,225,212,243,135,224,3,10,199,57,239,17,239,147,239,87,255,255,172,67,255,171,5,255,139,255,171,255,172,36,255,2,189,255,185,134,225,2]},{"1614831":[136,134,13,5,6,186,255,190,255,189,255,187,142,27,5,2,190,255,137,36,255,4,216,255,141,255,173,131,67,5,1,255,173,36,255,2,157,255,169,69,255,173,1,255,152,134,77,5,6,170,255,174,255,173,255,171,142,91,5,1,174,255,133,15,1,131,82,5,5,165,255,160,255,173,255,131,15]},{"1614909":[4,255,255,152,255,171,132,119,5]},{"1614919":[170,134,139,5,4,156,255,171,255,169,67,255,170,136,139,5,133,100,5,135,138,5]},{"1614942":[200,132,225,2,4,173,255,181,255,205,34,255,1,124,124,131,178,4,15,170,238,186,254,130,254,186,254,238,238,252,252,134,254,186,254,131,226,5,131,228,5,1,252,252,133,208,5,67,166,230,5,186,254,198,254,124,124,133,224,5,67,170,238,133,234,5,4,254,254,130,254,190,131,17,6,132,19,6,35,254,135,18,6,67,160,224,1,224,224,133,208,5,4,190,254,166,254,178,132,251,5]},{"1615044":[238,67,238,170,134,215,5]},{"1615052":[170,34,238,131,16,6,1,238,254,67,40,56]},{"1615065":[238,136,27,6,2,246,254,244,67,252,180,1,252,132,34,252,5,238,238,186,254,182,254,67,136,248]},{"1615092":[182,132,219,5]},{"1615097":[224,71,224,160]},{"1615102":[224,137,26,6,73,170,254,1,254,254,131,112,6,67,154,254,67,170,254]},{"1615122":[178,134,29,6,135,4,6,135,28,6,131,216,5,141,40,6,131,214,5,5,182,254,202,254,126,126,131,16,6,131,216,5]},{"1615155":[182,132,5,6,11,238,238,126,126,194,254,190,254,204,252,118,126,134,186,4,136,81,6,67,40,56,1,56,56,133,64,6,137,182,6,137,16,7,6,214,254,108,124,56,56,254,138,147,6,133,28,7,1,186,254,131,42,7,2,108,124,214,132,219,5,135,64,7,7,104,120,216,248,176,240,224,224,131,16,6,6,250,254,52,60,108,124,222,132,27,6,135,208,5,131,214,5,131,252,5,5,248,248,136,248,232,248,137,86,6,131,224,5,5,250,254,102,126,220,252,133,26,6,133,144,7,131,98,7,133,186,4,135,64,6,4,194,254,122,126,10,34,14,133,16,6,2,198,254,122,134,249,6,133,240,6,133,230,5]},{"1615315":[198,134,13,6,11,250,254,26,30,22,30,52,60,44,60,56,56,133,208,5,131,218,5,133,250,5,255]},{"1615872":[39]},{"1615874":[7,3]},{"1615877":[15,2,31,13,27,14,35]},{"1615885":[3,3,15,31,31,35]},{"1615892":[11,96]},{"1615895":[146]},{"1615897":[204]},{"1615899":[240,64,248,176,184,80,35]},{"1615907":[10,64,240,248,216,8]},{"1615914":[28]},{"1615916":[38,24,28,68,8,20,67,28]},{"1615925":[2,8,20,58,34,28,1,20,20,57]},{"1615936":[9,126]},{"1615939":[227,98,247,118,126]},{"1615945":[60,24,67,52,16,9]},{"1615952":[126,157,137,126,36,44,44]},{"1615961":[131,48]},{"1615965":[60,70]},{"1615968":[28,5,62]},{"1615973":[8,20,36,34,20]},{"1615979":[62,240,49,96]},{"1615984":[240,45,2]},{"1615988":[240,95]},{"1615992":[240,47,48]},{"1615996":[3,57,31,61,30,67,59,28,19,31,12,31,14,15]},{"1616011":[3]},{"1616013":[63,63,62,62,30,31,14,3,124,136,238,16,73,255]},{"1616028":[224,36,206]},{"1616032":[140,222,49,245,53,181,49,206,20,8,55,8,119,8,95,32,127,40,127,8,75]},{"1616054":[1]},{"1616056":[28,63,92,119,126,126,74,1]},{"1616066":[156,70]},{"1616069":[254,67,190]},{"1616073":[224,34,28]},{"1616078":[156,98,106,234,170,162,28,126]},{"1616087":[118,60,255,66,255,126,195,66,231,102,126,60,60]},{"1616101":[126,126,189,129,189,153,66,60,127,68]},{"1616112":[62,16,30]},{"1616116":[62]},{"1616118":[60]},{"1616120":[62]},{"1616122":[28]},{"1616124":[65,62,34,26,34,44,34,158,223,1,133,250,1,19,14]},{"1616140":[4]},{"1616142":[65,62,42,42,34,26,10,4,57,31,60,31,59,31,57,30,132,136,1]},{"1616162":[3,131,142,1,19,63,63,30,31,15,3,124,136,46,208,223,96,222,32,255]},{"1616183":[255,48,255,64,131,166,1,5,241,118,49,125,241,206,131,64,2,7,63,27,63,16,31]},{"1616207":[31,1,134,76,2,2,59,17,27,131,86,2,1,110,144,141,156,1,13,177,53,181,181,177,206,20,8,54,8,117,10,95,34,131,184,1]},{"1616244":[73,34]},{"1616247":[5,28,62,95,119,126,127,131,172,2,21,14]},{"1616260":[159]},{"1616262":[222]},{"1616264":[255]},{"1616266":[207]},{"1616268":[159]},{"1616270":[14]},{"1616273":[14,145,86,49,77,145,14,134,160,2,67,32,127,1]},{"1616288":[77,133,173,2,2,123,113,123,131,220,2]},{"1616300":[78,74]},{"1616303":[255,3,78]},{"1616308":[78,132,154,2]},{"1616313":[78,240,49,48]},{"1616318":[41]},{"1616320":[2,1]},{"1616323":[27,38]},{"1616326":[1,1,26,35]},{"1616331":[131,124]},{"1616334":[6,124]},{"1616337":[248]},{"1616339":[240]},{"1616341":[224,34]},{"1616344":[5,28,36,68,136,16,32,141,48,3,1,63,1,37]},{"1616359":[25,1,62,15]},{"1616364":[31,14,59,26,119,54,238,108,220,88,248,240,240,192,15,17,37,73,146,164,8,48,240,70,96,3]},{"1616391":[63,132,120,3,6,30,119,62,238,124,220,120,132,132,3,6,31,63,127,254,252,248,240,228,54]},{"1616417":[67,1]},{"1616420":[67,3]},{"1616424":[7,34]},{"1616427":[3,1,1,3,3,131,47,4,37]},{"1616437":[67,128]},{"1616440":[67,192]},{"1616443":[34]},{"1616445":[3,128,128,192,192,131,41,4,19,7]},{"1616456":[6,1,28,3,250,5,242,13,66,61,1,2,4,5,27,229,143,127,131,63,4,67,64,128,15,48,192,142,112,134,124,140,120]},{"1616490":[128,192,192,240,126,254,252,141,176,1,16]},{"1616503":[28,63,94,118,126,126,75]},{"1616511":[128]},{"1616513":[198]},{"1616515":[239]},{"1616517":[255,132,155,4,23,94]},{"1616524":[12]},{"1616526":[128,70,169,53,169,189,82,12,31]},{"1616536":[31,8,31,4,63,26,127,56,120,48,131,143,3,224,62,20,18,25,36,71,72,48]},{"1616559":[192]},{"1616561":[140]},{"1616563":[30]},{"1616565":[190]},{"1616567":[158]},{"1616569":[30]},{"1616571":[63]},{"1616573":[30]},{"1616575":[64,140,18,162,146,18,33,30,63]},{"1616585":[27,4,17,14,59,4,127]},{"1616593":[249]},{"1616595":[240]},{"1616597":[96]},{"1616599":[35,17,16,40,70,137,144,96,192,128,156]},{"1616611":[190]},{"1616613":[255,68]},{"1616616":[190,131,248,1,7,64,156,162,217,178,166,65,62,153,224,4,4,188]},{"1616635":[254]},{"1616637":[191,132,43,5,5,126]},{"1616644":[60]},{"1616646":[64,188,67,194,185,8,66,60,63]},{"1616656":[31,4,31,14,63,146,231,4,21,140]},{"1616667":[158]},{"1616669":[190]},{"1616671":[254]},{"1616673":[255]},{"1616675":[62]},{"1616677":[12]},{"1616679":[192,140,146,162,210,193,50,12,228,48]},{"1616691":[7,68]},{"1616694":[15,67,31]},{"1616698":[67,63]},{"1616701":[8,127,7,15,15,31,31,63,63,127,68]},{"1616713":[224,67,240]},{"1616717":[67,248]},{"1616720":[12,252]},{"1616723":[254,224,224,240,240,248,248,252,254,32,31,67,16,15,6,35,31,47,28,124,56,120,34]},{"1616748":[63,131,179,5,15,124,120]},{"1616756":[56,240,112,224,48,224,56,240,152,112,124,56,60,34]},{"1616772":[248,131,202,5,2,124,60]},{"1616780":[255]},{"1617920":[12,130,130,69,199,74,207,118,255,110,255,95,255,191,34,255,3]},{"1617939":[192,192,67,160,224,224,39,32,224,163,224,166,225,212,243,1,1,3,2,6,5,12,11,13,10,15,11,15,8,15,15,240,240,16,240,112,144,240,80,176,208,96,160,192,64,128,128,35]},{"1617988":[67,4,28,7,2,126,76,124,8,56,48,48,39]},{"1618002":[3,2,126,124,124,39]},{"1618009":[67,4,28,1,24,24,67,8,56,21,48,48,20,60,18,126,17,255,29,255,1,255,130,254,68,124,56,56,9,123,52,127,69,37,111,13,9,123,115,115]},{"1618051":[33,127,175,255,34,254,174,254,67,40,120,8,120,120]},{"1618067":[9,59,53,127,36,68,111,37,16,73,123,51,51]},{"1618082":[41,123,42,126,36,252,170,254,45,127,41,34,123,5]},{"1618098":[16,112,104,248,69,72,216,21,144,240,96,96]},{"1618112":[24,8,60,4,255,41,126,42,126,2,255,17,239,41,198,198,133,206]},{"1618131":[3,60,4,126,2,68,255,1]},{"1618140":[255,68,51]},{"1618144":[67,255,51,134,241]},{"1618150":[34,255]},{"1618153":[225,68,255,237]},{"1618158":[193,68,255,159,35,255,25,69,255,1,255,171,255,199,255,207,255,199,255,223,27,231,175,95,243,31,239,63,233,63,237,63,19,34,255,7,27,231,191,95,227,63,237,63,131,52,1]},{"1618206":[45,142,45,1]},{"1618211":[35,34,255,12,35,255,123,255,247,127,119,255,193,255,247,255,23,52,255]},{"1618231":[199,72,255,231]},{"1618236":[195,134,109,1,8,179,255,243,255,231,255,207,255,131,36,255,2,135,255,243,132,145,1,2,179,255,135,36,255,67,179,255,6,183,255,131,255,231,255,199,36,255,2,195,255,159,132,145,1,131,148,1,35,255,4,227,255,207,255,135,68,255,179,133,156,1,4,195,255,147,255,187,134,133,1,135,126,1]},{"1618315":[131,68,255,179,133,172,1,131,130,1,131,228,1]},{"1618329":[243,134,171,1,11,255,231,255,219,255,165,231,189,255,219,255,231,36,255,8,231,247,203,239,213,239,149,223,169,131,123,1,12,222,253,219,230,215,249,221,230,215,248,230,251,248,34,255,12,163,127,99,223,195,63,107,215,251,151,167,127,31,34,255,67,223,255,133,32,2,1,229,254,131,44,2,67,227,255,7,163,127,107,215,219,47,103,223,131,60,2,8,255,255,254,255,252,255,249,255,147,132,113,1,137,238,1,135,232,1,146,240]},{"1618443":[255,70,255,252,4,254,255,253,255,252,36,255,20,59,127,131,143,115,255,3,255,255,143,251,254,253,253,254,254,251,253,227,243,204,68,255,128,14,255,255,115,127,131,255,7,127,135,255,11,255,3,255,35,150,126,2,36,255,17,248,255,250,255,248,255,255,139,255,127,195,255,121,255,195,255,249,127,131,124,1,15]},{"1618526":[1,7,2,14,4,28,8,56,16,112,32,224,192,192,34]},{"1618542":[10,28,24,62,16,51,32,103,34,111,5,125,131,156]},{"1618557":[13]},{"1618559":[56,50,126,66,206,132,156,68,220,8,248,240,240,133,145,2,9,243,252,239,243,239,247,215,239,223,237,35,255,8,63,255,207,255,183,255,23,255,187,67,255,219,7,246,213,239,236,243,224,255,240,134,158,2,10,203,255,251,127,247,175,247,15,207,63,63,136,227,2,10,243,255,240,255,248,255,247,255,239,255,223,34,255,24,31,255,207,255,15,255,31,255,239,255,215,255,235,255,217,255,221,254,223,252,221,255,223,255,231,131,237,2,7,255,35,255,99,255,227,127,99,132,10,2,133,92,2,31,253,251,189,243,190,249,215,252,227,255,214,255,191,249,255,255,223,127,187,207,183,217,255,3,255,231,31,255,255,231,191,240,72,255,224,132,88,3,13,143,115,135,121,199,57,207,49,255,1,255,3,255,15,39,255]},{"1618743":[129,42,255,12,240,255,229,255,202,255,133,255,138,255,133,255,192,34,255,14,127,255,31,255,175,255,87,255,163,255,93,255,61,255,224,132,152,2,3,254,243,255,227,132,24,1,3,255,125,255,251,132,121,3,133,92,2,134,93,2]},{"1618804":[248,68,255,240,2,224,255,192,132,188,2,12,127,255,31,191,79,31,239,143,119,239,19,231,25,68,255,128,1,192,251,68,255,240,131,44,2,6,255,1,255,97,159,243,31,68,255,15,134,172,3,132,49,4,131,122,3,67,239,255,12,251,254,255,253,206,251,159,247,251,239,243,255,247,37,255,19,225,255,241,255,49,255,45,255,223,255,167,255,103,255,139,255,31,243,255,35,67,255,243,1,63,225,42,255,1,129,126,70,255]},{"1618915":[139,197,4,2]},{"1618920":[255]},{"1618922":[139,212,4,68,255]},{"1618928":[5,139,255,63,227,255,89,131,133,1,1,127,193,132,13]},{"1618944":[35]},{"1618946":[3,1,1,3,3,67,4,7,1,8,15,133]},{"1618960":[6,119,255,110,255,94,255,190,136,253,4,9,128,128,192,192,35,224,38,225,20,243,131,126,3,8,103,255,171,255,107,255,170,255,167,34,255,79,9,15,138,112,3,3,254,239,252,210,34,255,135,203,4,37]},{"1619015":[12,211,255,213,254,219,254,215,252,221,255,231,255,249,34,255,79,149,243,4,148,243,150,241,147,74,240,144,12,203,255,171,127,219,127,235,63,123,255,103,255,95,136,253,4,35]},{"1619062":[1,255]},{"1619065":[137,102,5,35]},{"1619070":[4,192]},{"1619073":[96,128,32,80,192,160,80,255]},{"1619082":[143,189,4,45,255]},{"1619088":[254,136,227,2,6,224,255,135,255,31,255,127,133,111,3,9,253,231,250,207,244,159,249,158,243,157,133,127,3,8,63,231,95,179,207,121,143,249,47,131,124,5,143,4,6,12,241,251,229,247,201,239,147,223,167,255,15,255,63,134,50,3]},{"1619151":[240,67,223,224,3,185,198,144,239,132,66,3,2,63,247,15,67,251,7,3,237,19,197,59,133,49,3,12,251,207,251,143,251,15,253,7,254,147,255,255,141,70,255,181]},{"1619196":[142,38,255,8,173,255,165,255,161,255,169,255,109,38,255,8,152,255,123,255,72,255,107,255,152,38,255]},{"1619224":[205,68,255,180,2,181,255,205,38,255,67,191,255,67,63,255,131,12]},{"1619243":[35,255,4,68,255,109,255,108,132,227,6,37,255,8,93,255,201,255,85,255,221,255,93,135,143,2,67,249,255,67,243,255,68,231,255,3,30,30,63,33,67,63,45,15,127,65,254,158,240,144,96,96,246,155,248,207,253,231,255,243,132,97,2,7,252,255,255,111,249,223,243,191,131,136,1]},{"1619319":[127,68,255,63,11,255,227,255,245,251,254,241,236,251,198,255,143,132,12,1,7,244,255,250,247,253,251,254,229,133,42,4,133,145,2,3,242,253,238,241,67,220,227,67,184,199,139,112,6,7,253,3,13,243,255,209,255,224,132,154,3,133,154,3,34,255,8,140,255,187,255,138,255,187,255,140,38,255]},{"1619398":[218,70,255,90]},{"1619403":[166,38,255]},{"1619407":[141,132,197,6,2,141,255,189,38,255,8,209,255,151,255,81,255,215,255,209,38,255,13,252,255,240,255,233,246,217,230,219,228,186,197,188,195,137,112,6,5,131,127,97,159,57,199,47]},{"1619456":[255]},{"1622016":[19,254,6,253,44,251,24,247,56,231,108,219,198,189,131,126]},{"1622033":[255]},{"1622035":[255]},{"1622037":[255]},{"1622039":[255]},{"1622041":[255]},{"1622043":[255]},{"1622045":[255]},{"1622047":[255,230]},{"1622050":[217]},{"1622052":[157]},{"1622054":[110]},{"1622056":[118]},{"1622058":[185]},{"1622060":[155]},{"1622062":[103]},{"1622064":[230,230,217,217,157,157,110,110,118,118,185,185,155,155,103,103,1,252,35,249,7,243,143,231,23,207,39,159,67,63,129,126,2,255,4,255,8,255,16,255,32,255,64,255,128,255,1,255,253,252,251,249,215,211,119,111,224,216,218,188,237,46,254,125,2,255,4,255,40,255,144,255,39,255,67,255,145,255,2,255,193,124,99,185,55,211,155,103,201,55,196,59,254,1,255]},{"1622160":[2,255,4,255,8,255]},{"1622167":[255]},{"1622169":[255]},{"1622171":[255]},{"1622173":[255]},{"1622175":[255,245,243,203,199,20,12,36,24,90,60,230,103,193,193,3,1,12,255,56,255,243,255,231,255,195,255,153,255,62,255,254,255,129]},{"1622210":[195,129,102,66,60,36,24]},{"1622218":[60,24,102,36,195,66,129,129,195,195,102,102,60,60,24,24,60,60,102,102,195,195]},{"1622272":[239,28,219,54,172,123,114,205,186,229,75,180,235,20,239,16,223,255,183,255,123,255,205,255,229,255,180,255,23,255,219,255,253,10,246,41,223,32,254,1,253,2,247,8,255]},{"1622318":[255]},{"1622320":[255,255,169,255,166,255,159,255,254,255,233,255,243,255,255,255,63,188,124,115,240,239,41,223,89,63,219,191,186,127,188,127,67,252,143,240,31,224,63,192,255,128,127,128,255]},{"1622366":[255]},{"1622368":[220,29,56,203,200,246,247,251,251,253,130,252,97,254,57,254,226,63,244,15,249,7,252,3,254,1,255,1,255]},{"1622398":[255]},{"1622400":[56,185,11,200,100,2,153,167,251,231,223,227,53,75,99,28,70,255,52,255,153,255,64,255]},{"1622425":[255]},{"1622427":[255,128,255,128,255,24,217,176,51,64,134,33,93,153,165,156,160,178,204,233,30,38,255,76,255,57,255,130,255,66,255,67,255,1,255]},{"1622463":[255,56,185,11,200,100,2,153,167,251,231,223,227,53,75,99,28,70,255,52,255,153,255,64,255]},{"1622489":[255]},{"1622491":[255,128,255,128,255,24,217,176,51,64,134,33,93,153,165,156,160,178,204,233,30,38,255,76,255,57,255,130,255,66,255,67,255,1,255]},{"1622527":[255,126,129,195,126,165,126,163,126,137,126,161,126,195,126,126,129]},{"1622545":[255,126,255,126,255,126,255,126,255,126,255,126,255]},{"1622559":[255,1,252,66,249,55,243,111,231,219,195,191,153,125,62,238,111,2,255,4,255,8,255,16,255,36,255,66,255,129,255,16,255,56,186,9,205,131,235,195,243,195,239,146,210,30,159,8,203,69,255,50,255,20,255,12,255,16,255,45,255,96,255,52,255,62,127,159,191,195,211,131,187,1,101,24,218,8,185,72,75,128,255,64,255,44,255,68,255,154,255,37,255,70,255,180,255,56,186,9,205,131,235,195,243,195,239,146,210,30,159,8,203,69,255,50,255,20,255,12,255,16,255,45,255,96,255,52,255,62,127,159,191,195,211,131,187,1,101,24,218,8,185,72,75,128,255,64,255,44,255,68,255,154,255,37,255,70,255,180,255,129,103,65,189,35,91,145,173,232,246,228,235,242,245,249,250,24,255,2,255,132,255,66,255,1,255,16,255,8,255,4,255,241,246,226,237,132,154,137,181,19,107,33,221,88,190,188,127,8,255,16,255,97,255,66,255,132,255,2,255,1,255]},{"1622783":[255,223,60,249,118,253,50,205,50,161,94,167,88,143,112,175,80,189,255,118,255,50,255,50,255,94,255,89,255,115,255,87,255,255]},{"1622818":[189,66,27,228,207,48,231,24,243,12,247,8,255]},{"1622832":[255,255,254,255,253,255,59,255,159,255,207,255,235,255,231,255,156,127,134,127,65,191,95,63,175,159,147,175,12,99,11,200,255]},{"1622866":[255]},{"1622868":[127,128,255,128,127,192,95,224,159,240,55,252,61,254,93,254,218,252,155,253,151,251,9,245,51,195,206,46,255]},{"1622898":[255]},{"1622900":[255,1,254,1,252,3,250,7,252,15,209,63,195,60,74,188,34,92,154,172,146,172,158,160,34,65,29,220]},{"1622929":[255,1,255,129,255,65,255,65,255,65,255,156,255,34,255,37,30,209,206,238,224,233,229,225,233,193,221]},{"1622957":[54,200,43,192,255,32,255,17,255,18,255,22,255,34,255,201,255,20,255,195,60,74,188,34,92,154,172,146,172,158,160,34,65,29,220]},{"1622993":[255,1,255,129,255,65,255,65,255,65,255,156,255,34,255,37,30,209,206,238,224,233,229,225,233,193,221]},{"1623021":[54,200,43,192,255,32,255,17,255,18,255,22,255,34,255,201,255,20,255,127,128,224,96,207,64,155,8,156,8,156,8,156,8,156,8]},{"1623057":[255,31,255,48,255,103,255,103,255,103,255,103,255,103,255,251,38,229]},{"1623076":[253]},{"1623078":[253,60,225]},{"1623082":[129,126,129,126,255]},{"1623088":[88,255,90,255,66,255,66,255,126,255]},{"1623099":[255]},{"1623101":[255]},{"1623103":[255,128,127]},{"1623107":[128,96,128,191,63,191,63,192,127,128,127,255]},{"1623121":[255,127,255,127,255,64,255,64,255]},{"1623131":[255]},{"1623133":[255]},{"1623135":[255,181,66,231,36,165,102,165,102,165,102,165,102,165,102,165,126,24,255,24,255,24,255,24,255,24,255,24,255,24,255]},{"1623167":[255,156,127,128,127,192,63,255,64,179,127,192,63,255]},{"1623182":[127,128]},{"1623185":[255]},{"1623187":[255]},{"1623189":[255]},{"1623191":[255]},{"1623193":[255]},{"1623195":[255]},{"1623197":[255]},{"1623199":[255,1,254,3,252,255]},{"1623206":[159,254,1,254,255]},{"1623212":[255]},{"1623214":[255]},{"1623217":[255]},{"1623219":[255]},{"1623221":[255]},{"1623223":[255]},{"1623225":[255]},{"1623227":[255]},{"1623229":[255]},{"1623231":[255,64,191,160,223,228,12,162,14,178,86,178,86,180,70,176,90]},{"1623249":[255]},{"1623251":[255,19,255,81,255,73,255,73,255,73,255,69,255,255]},{"1623266":[255]},{"1623268":[255,63,240,48,225,33,236,44,228,36,240,48]},{"1623281":[255,127,255,64,255,79,255,94,255,83,255,91,255,79,255,2,6,5,12,7,16,3,36,25,66,60,129,126]},{"1623310":[253]},{"1623312":[253,255,251,255,255,255,255,255,255,255,255,255,255,255,255,255,49,191,35,191,7,191,39,191,63,222,14,255,64,249,61,226,78,255,92,255,120,255,88,255,97,255,113,255,63,255,29,255,249,246,225,222,129,254,9,254,13,254,15,254,64,241,144,111,15,255,63,255,127,255,247,255,243,255,241,255,190,255,144,255,129,103,65,189,35,91,145,173,232,246,228,235,242,245,249,250,24,255,2,255,132,255,66,255,1,255,16,255,8,255,4,255,255,255,191,191,95,127,57,249,224,241,238,255,240,254,253,253]},{"1623441":[255,64,255,128,255,6,255,14,255]},{"1623451":[255,1,255,2,255,224,227,209,223,175,191,71,103,39,127,62,126,190,255,127,255,28,255,32,255,64,255,152,255,128,255,129,255]},{"1623485":[255]},{"1623487":[255,56,185,8,203]},{"1623493":[102,129,189,195,219,193,221,131,179,14,110,70,255,52,255,153,255,66,255,36,255,34,255,76,255,145,255,62,255,31,159,27,219,3,99,129,185,128,188]},{"1623533":[102,8,203]},{"1623537":[255,96,255,36,255,156,255,70,255,67,255,153,255,52,255,155,8,159,15,153,15,143,16,192,64,255,96,191,112,156,108,103,255,96,255,96,255,96,255,63,255,31,255]},{"1623581":[255,3,255,155,8,159,15,153,15,143,16,192,64,255,96,191,127,156,127,103,255,96,255,96,255,96,255,63,255,31,255]},{"1623613":[255]},{"1623615":[255,159,1,1,1,1,1,1,1,51,51,254,255,254,255,206,255,254,255,254,255,254,255,254,255,204,255]},{"1623643":[255]},{"1623645":[255]},{"1623647":[255,177,80,217,56,155,120,147,112,147,112,153,120,158,126,129,120,15,255,7,255,7,255,15,255,15,255,7,255,1,255,7,255,255]},{"1623683":[255,254,255,1,1,1,1,243,1,255,1,255,1]},{"1623697":[255]},{"1623699":[255]},{"1623701":[255,254,255,254,255,254,255,254,255,254,255,240,15,225,30,195,60,135,121,14,243,30,227,63,201,119,156,240,255,224,255,192,255,128,255,1,255,1,255]},{"1623741":[255,8,255,160,87,168,90,165,95,181,111,184,119,191,56,128,31,255]},{"1623760":[72,255,69,255,64,255,96,255,112,255,120,255,127,255]},{"1623775":[255,224,32,230,38,246,54,255]},{"1623784":[191,127,234,85,149,63,224,64,95,255,89,255,73,255,127,255]},{"1623801":[255]},{"1623803":[255,64,255,63,255,227,24,140,115,24,231,40,215,71,187,157,127,126,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,57,198]},{"1623843":[241,62,223,39,190,3,191,35,191,56,183,63,191,57,255,127,255,97,255,89,255,120,255,92,255,79,255,64,255,128,127,1,130,121,254,56,255,24,255,141,254,226,223,248,247,128,255,255,255,135,255,198,255,230,255,115,255,60,255,15,255,241,246,226,237,132,154,137,181,19,107,33,221,88,190,188,127,8,255,16,255,97,255,66,255,132,255,2,255,1,255]},{"1623935":[255,226,227,209,223,175,191,95,127,48,121,49,127,63,255,127,255,28,255,32,255,64,255,128,255,134,255,128,255]},{"1623965":[255]},{"1623967":[255,231,231,139,207,155,223,199,255,252,253,253,255,158,222,204,253,24,255,48,255,32,255]},{"1623991":[255,2,255]},{"1623995":[255,33,255,2,255,28,221,24,219]},{"1624005":[102,131,191,193,221,224,230,248,251,252,253,34,255,36,255,153,255,64,255,34,255,25,255,4,255,2,255,60,189,120,123,240,246,33,237,33,41,193,221]},{"1624045":[54,8,235,66,255,132,255,9,255,18,255,214,255,34,255,201,255,20,255,17,17,17,18,17,3,19,17,17,17,17,18,17,3,19,17,17,17,17]},{"1624128":[49,17,17,17,17,35,51,23,1,51,51,17,17,1,16]},{"1624144":[49,17,17,17,17,35,51,23,17,17,17,18,17,1,16]},{"1624160":[17,17,17,18,17,1,17,49,49,17,17,17,17,19,51,19,49,17,17,17,17,35,51,39,17,17,17,18,17,3,19,50,17,17,17,17,17,1,17,49,65,17,18,16,33,1,51,23,49,17,17,17,33,35,51,23,1,17,17,19,35,32,3,39]},{"1624237":[16]},{"1624248":[17,17,17,17,17,34,34,39,1,17,17,18,17,35,19,55,17,18,17,18,17,1,19,35]},{"1624280":[34,34,34,34,34,2,34,50]},{"1624320":[49,17,17,17,1,35,51,23]},{"1624336":[49,17,17,17,17,35,51,39,1,17,17,18,17,3,35,35,1,17,17,18,17,3,35,35]},{"1624368":[1,17,17,3,49]},{"1624374":[3,19]},{"1624381":[32]},{"1624383":[7]},{"1624405":[16]},{"1624560":[17,17,17,17,17,33,34,39]},{"1624569":[33,17,17,17,1,17,17]},{"1624577":[17,17]},{"1624584":[49,17,17,17,17,3,19,23,49,17,17,17,17,35,51,23,49,67,17,17,17,3,3,23,49,17,17,17,17,3,3,23,49,67,17,17,17,3,3,23,49,17,17,17,17,3,51,23,49,17,17,17,17,3,19,39,49,67,17,17,17,3,3,23,49,67,17,17,17,3,3,39,49,67,17,17,17,3,51,23,49,17,17,17,17,35,51,23,17,17,17,33,17,1,19,51,17,17,17,17,17,3,35,35,49,17,17,18,17,35,51,23,49,17,17,18,17,35,51,23]},{"1624712":[49,17,17,33,17,1,51,51]},{"1624728":[19,51,51,48,17,1,16]},{"1624736":[1,51,51,16,17,1,16]},{"1624744":[17,17,17,17,17,3,19,33,49,17,17,17,17,3,19,33]},{"1624768":[49,17,17,19,17,33,51,23]},{"1624798":[3,3]},{"1624806":[3,3]},{"1624864":[17,17,17,17,17,1,19,51]},{"1624912":[81,49,17,17,17,3,3,23,49,17,17,17,17,1,17,17]},{"1624936":[49,17,17,18,17,35,51,23,49,17,17,18,17,35,51,23,17,17,17,18,17,3,51,19]},{"1624968":[49,17,17,19,17,3,51,19]},{"1625032":[17,17,17,18,17,17,17,49]},{"1625056":[1,17,17,16,33,3,51,51]},{"1625096":[1,17,17,18,17,3,50,50]},{"1625112":[1,18,33,32,18]},{"1625123":[16,1]},{"1625128":[17,17,17,17,17,1,35,35,1,17,17,16,1,1,51,23]},{"1625152":[1,17]},{"1625157":[4]},{"1625176":[49,17,17]},{"1625180":[17,3,51,35]},{"1625185":[17,17,16,1,1,16]},{"1625193":[17,17]},{"1625196":[17,1,16]},{"1625200":[17,17,17,17,33,1,50,35,49,17,17,18,33,3,51,18,17,17,17,16,17,1,19,50,17,17,17]},{"1625233":[17,17,16,17]},{"1625248":[17,17,17,18,17,3,19,35]},{"1625288":[17,17,17,18,33,1,3,18,17,17,17,18,17,2,50,17,1,17,17,16,1,1,18,50,1,17,17,18,17,3,35,34,1,17,17,18,17,3,35,34]},{"1625354":[17]},{"1625357":[2,2]},{"1625361":[17,17]},{"1625365":[5]},{"1625373":[1,2]},{"1625376":[1,17,17,16,17,3,1,49,49,17,17,17,33,3,51,19,49,17,17,17,33,3,51,19,17,17,17,17,17,33,35,39,1,17,17,18,17,3,51,17,1,17,17,18,17,3,51,17,17,17,17,17,17,3,19,19,17,17,17,17,17,1,16]},{"1625488":[17,17,17,18,17,1,17,49]},{"1625577":[17,17,48,17]},{"1625585":[17,17,48,17]},{"1625624":[1,17,17,48,17]},{"1625646":[1,49]},{"1625654":[1,49,1,17,17,16,18,3,19,19]},{"1625672":[81,17,17,48,33,3,49,49,80]},{"1625689":[17,17]},{"1625697":[17,17]},{"1625702":[64]},{"1625705":[17,17]},{"1625709":[4]},{"1625712":[1,17,17]},{"1625720":[17,17,17,18,17,1,17,33]},{"1625729":[1,17]},{"1625732":[2]},{"1625741":[16,2,34]},{"1625749":[32]},{"1625751":[7,17,17,17,17,17,33,17,39]},{"1625777":[3,51]},{"1625788":[2]},{"1625792":[255,252,253,250,255,241,255,227,255,199,255,143,255,159,255,255,191,115,255,127,255,255,255,255,255,255,255,255,255,255,255,255,249,198,225,158,253,159,251,157,223,186,239,220,255,227,255,255,231,155,195,191,195,63,131,127,135,127,135,127,255,135,255,255,255,24,255,24,255,24,255,24,255,24,255]},{"1625868":[255,129,255,195,255,231,255,231,255,231,255,231,255,231,255,231,255,231,255,231,255,24,255]},{"1625892":[255]},{"1625894":[255,24,255,24,255,24,255,24,255,24]},{"1625906":[63,63,127,68,111,80,114,79,115,109,126,74,124,68]},{"1625922":[255,255,255]},{"1625926":[255]},{"1625929":[255,255,255]},{"1625936":[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,255,249,255,229,255,253,255,79,255,127,255,127,255]},{"1625970":[1,1,2,3,1,1,3,3,5,7,5,7,8,15,255,255,255,1,255,1,1,255,255,255,255,255,255,255,255,255,255,255,255]},{"1626004":[255]},{"1626007":[255,255,255,255,255,255,255,255,255]},{"1626018":[192,192,32,224,160,224,32,224,227,224,38,225,212,243,15,15,63,48,119,72,120,71,215,175,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,239,159,255,255,255,255,255,255,247,255,240,255,244,251,247,248,247,248,246,249,247,249,251,252,253,254,254,255,255,255,255,255,255,255,255,255,252,255,240,255,231,248,239,240,223,224,219,228,217,230,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,199,255,128,255,184,159,254,207,255,231,255,243,255,255,255,255,225,255,241,255,49,255,45,255,223,255,167,255,103,250,255,253,255,250,207,247,159,239,251,255,243,255,247,255,255,255,255,225,255,241,255,241,63,237,63,223,255,191,231,127,231,255,255,255,255,255,255,192,255,255,191,255,128,255,192,255,255,255,255,255,255,255,255,15,255,231,255,247,31,247,31,247,31,255,255,252,255,240,255,233,246,217,230,219,228,186,197,188,195,255,255,252,255,242,253,238,241,220,227,220,227,184,199,184,199,255,255,252,255,243,252,239,240,223,224,223,224,185,198,144,239,255,255,253,251,189,243,190,249,215,252,227,255,214,255,191,249,255,255,223,127,187,207,183,217,255,3,255,231,31,255,255,231,255,255,255,255,255,255,254,253,255,242,255,225,247,232,255,192,255,255,159,255,109,255,115,191,255,79,255,135,207,55,231,27,255,255,254,255,191,250,191,226,255,146,255,146,255,202,255,202,255,255,127,255,125,223,253,71,255,73,255,73,255,83,255,83,255,255,255,199,223,163,219,37,239,145,119,137,127,195,159,247,251,254,255,253,206,251,159,247,251,239,243,255,247,255,255,255,255,227,255,243,127,243,63,249,159,249,207,249,239,243,255,255,254,255,253,255,251,207,247,159,239,251,255,243,255,247,255,255,255,255,225,255,241,255,241,255,237,255,223,255,191,255,127,255,255,255,225,255,249,255,229,255,253,255,79,255,127,255,127,255,247,159,247,159,247,159,247,159,247,159,247,159,255,207,255,255,156,227,134,249,193,254,223,224,239,240,243,252,252,255,255,255,176,207,191,192,223,224,223,224,239,240,243,252,252,255,255,255,163,220,183,200,223,224,223,224,239,240,243,252,252,255,255,255,191,240,255,224,255,224,255,224,255,224,255,240,255,252,255,255,143,115,135,121,199,57,207,49,255,1,255,3,255,15,255,255,239,208,239,208,255,192,255,224,255,224,255,240,255,252,255,255,255,255,255,255,255,255,255,254,255,254,255,254,255,254,255,252,255,255,255,135,255,3,255,49,255,121,255,121,127,241,191,97,255,35,255,7,255,135,255,199,255,207,191,207,127,159,255,63,255,255,255,255,255,255,255,255,254,255,253,255,253,255,254,255,255,255,255,193,221,227,221,163,227,157,119,137,111,215,159,255,255,254,255,252,254,249,253,242,251,228,255,224,255,240,255,248,255,127,247,63,115,159,57,207,159,103,207,51,255,1,243,12,255,255,255,255,255,255,255,255,255,255,247,255,231,255,195,254,255,255,255,231,247,203,255,225,223,225,191,203,127,159,255,63,255,255,255,255,255,255,255,254,255,250,255,240,249,238,247,232,255,255,255,255,255,195,255,11,127,163,255,7,255,135,255,15,255,255,240,255,229,255,202,255,133,255,138,255,133,255,192,255,255,255,127,255,31,255,175,255,87,255,163,255,93,255,61,255,255,255,255,224,255,192,248,199,248,199,255,192,255,192,255,192,255,255,255,7,255,7,31,231,31,231,255,7,255,7,255,7,255,255,254,255,252,255,253,255,255,240,255,224,247,255,247,254,255,252,253,250,255,241,255,227,255,199,255,143,255,159,255,255,191,115,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,251,255,51,255,7,255,7,255,47,255,103,255,71,252,255,248,255,245,255,239,243,223,231,191,207,255,159,255,255,111,255,159,255,255,255,255,255,255,255,255,255,255,255,255,255,255,252,243,254,225,255,193,255,131,255,135,255,207,255,255,255,251,4,255,1,255,3,255,135,255,207,255,255,255,255,255,255,199,252,135,252,131,255,168,255,176,255,152,255,193,255,255,255,255,127,255,255,127,255,31,255,63,255,127,255,255,255,255,255,255,192,255,208,255,193,255,192,255,193,255,227,255,255,255,255,255,15,255,223,255,63,255,31,255,95,255,191,255,255,255,255,224,255,252,255,254,255,254,243,255,227,255,199,255,207,255,255,125,255,251,255,247,255,239,255,31,255,255,255,255,255,255,255,255,197,255,192,255,192,255,207,248,223,255,207,255,224,255,255,255,87,255,7,255,7,255,255,15,255,255,255,255,7,255,255,247,254,247,254,247,252,247,252,247,254,243,254,255,224,255,255,47,255,47,255,239,63,175,127,175,127,207,127,255,7,255,255,255,240,255,252,255,254,255,254,255,254,255,254,255,254,255,255,255,15,255,63,255,127,255,31,255,63,255,31,255,127,255,255,255,255,248,255,243,255,240,255,248,255,247,255,239,255,223,255,255,255,31,255,207,255,15,255,31,255,239,255,215,255,235,255,255,255,248,255,243,255,240,255,248,255,247,255,239,255,215,239,27,231,191,95,227,63,237,63,227,63,237,63,45,255,255,255,27,231,175,95,243,31,239,63,233,63,237,63,19,255,255,255,27,231,191,95,227,63,237,63,227,63,237,63,35,255,255,255,35,255,123,255,247,127,119,255,193,255,247,255,23,255,255,255,255,255,31,255,207,255,15,255,31,255,239,127,247,63,75,255,255,255,255,255,255,143,159,224,231,248,185,222,222,231,223,225,255,255,255,191,255,31,255,31,255,63,191,111,127,207,255,143,255,255,255,248,255,243,253,231,250,207,244,159,249,158,243,157,255,255,255,31,255,207,63,231,95,179,207,121,143,249,47,249,255,255,255,255,255,252,255,252,255,252,255,254,255,253,255,252,255,255,255,255,255,59,127,131,143,115,255,3,255,255,143,251,255,255,242,255,243,253,247,255,248,255,248,255,203,255,199,252,255,255,127,255,111,191,111,255,159,247,247,255,251,15,255,247,223,255,223,255,223,255,223,255,223,255,231,255,248,255,255,255,227,255,227,255,227,255,235,255,219,255,231,255,31,255,255,255,216,231,223,224,223,224,223,224,222,225,231,248,248,255,255,255,27,231,163,95,227,31,235,23,219,39,231,31,31,255,255,255,217,255,221,254,223,252,221,255,223,255,231,255,248,255,255,255,35,255,99,255,227,127,99,255,219,255,231,255,31,255,255,255,211,255,213,254,219,254,215,252,221,255,231,255,249,255,255,255,203,255,171,127,219,127,235,63,123,255,103,255,95,255,255,255,223,224,223,224,191,192,191,192,191,192,206,241,240,255,255,255,255,15,255,135,255,65,61,227,99,255,127,255,255,255,255,255,246,155,248,207,253,231,255,243,255,254,255,252,255,252,255,255,111,249,223,243,191,231,255,207,255,127,255,63,255,63,255,255,254,253,253,254,254,251,253,227,243,204,255,128,255,128,255,255,255,115,127,131,255,7,127,135,255,11,255,3,255,35,255,255,227,255,224,255,242,255,252,255,248,255,248,255,254,255,255,255,15,251,7,255,119,255,255,143,255,151,255,151,255,31,255,255,255,255,255,242,253,243,255,247,255,248,255,248,255,203,252,199,255,255,255,127,191,111,255,111,247,159,255,247,15,251,247,255,255,255,255,254,255,248,255,240,255,240,255,224,255,192,255,128,255,255,255,127,255,31,191,79,31,239,143,119,239,19,231,25,255,255,255,255,252,255,243,252,239,243,239,247,215,239,223,237,255,255,255,255,63,255,207,255,183,255,23,255,187,255,219,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,231,255,199,255,143,255,31,255,63,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,241,251,229,247,201,239,147,223,167,255,15,255,63,255,127,255,255,195,255,249,255,195,255,249,255,67,255,255,255,255,255,255,255,255,255,247,255,240,255,244,251,247,248,247,248,255,255,252,255,240,255,231,248,239,240,223,224,219,228,217,230,255,255,199,255,192,255,216,255,223,239,220,239,217,239,211,238,255,255,243,239,43,255,239,255,131,125,239,255,171,127,123,175,255,255,255,252,255,243,251,207,251,143,251,15,253,7,254,147,255,227,255,224,255,242,255,252,255,248,255,248,255,254,255,255,251,15,255,7,255,119,143,255,151,255,151,255,31,255,255,255,255,128,255,128,255,192,251,255,240,255,240,255,248,255,255,255,255,1,255,97,159,243,31,255,15,255,15,255,31,255,255,255,219,246,213,239,236,243,224,255,240,255,252,255,255,255,255,255,203,255,251,127,247,175,247,15,207,63,63,255,255,255,255,255,244,255,250,247,253,251,254,229,255,199,255,207,255,255,255,255,127,255,255,255,243,255,227,255,243,255,243,255,97,255,255,255,227,255,245,251,254,241,236,251,198,255,143,255,159,255,255,255,255,127,255,255,227,255,217,255,243,255,231,255,65,255,255,255,255,127,255,255,243,255,227,255,211,255,193,255,115,255,255,255,246,249,247,249,251,252,253,254,254,255,255,255,255,255,255,255,220,231,220,227,238,243,239,241,247,248,249,254,254,255,255,255,222,229,221,226,251,228,239,249,198,187,233,255,252,239,255,255,251,55,219,119,187,247,119,239,239,223,223,63,63,255,255,255,255,209,255,224,231,255,248,255,255,231,255,248,255,255,255,255,255,255,255,255,227,255,221,255,190,255,191,255,191,255,191,255,255,255,255,255,227,255,221,227,190,193,191,192,191,192,191,192,255,255,255,248,254,241,252,243,254,225,248,231,252,227,240,207,255,255,255,127,247,59,103,185,123,189,127,173,255,77,239,85,255,255,248,255,231,255,223,254,223,252,191,248,185,255,184,255,255,255,255,255,255,255,248,255,247,255,239,255,238,255,241,255,255,255,31,255,111,255,247,255,123,255,187,255,221,255,221,255,255,255,254,255,254,255,252,255,253,255,254,255,254,255,255,255,127,255,63,255,63,255,31,255,31,255,191,255,191,255,127,255,255,255,255,255,199,255,223,248,255,231,251,255,227,255,255,255,255,255,255,227,255,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,253,255,249,255,248,255,248,255,252,255,255,255,255,63,255,255,191,191,95,191,95,255,31,255,63,255,255,255,255,255,225,255,237,255,237,255,193,255,159,255,159,255,255,255,255,255,69,255,1,255,171,255,199,255,207,255,199,255,223,255,255,201,255,182,201,190,193,190,193,221,227,235,247,247,255,223,255,239,255,247,255,251,255,253,255,254,255,255,255,255,255,223,224,239,240,247,248,251,252,253,254,254,255,255,255,255,255,249,198,225,158,253,159,251,157,223,186,239,220,255,227,255,255,231,155,195,191,195,63,131,127,135,127,135,127,255,135,255,255,220,191,222,191,231,159,248,199,255,192,255,224,255,248,255,255,251,255,231,249,199,248,206,241,225,222,247,200,255,225,255,255,221,255,189,255,189,255,189,255,219,255,231,255,255,255,255,255,255,254,255,252,255,252,255,248,255,250,255,253,255,253,255,254,127,255,63,255,63,255,31,255,127,159,255,63,255,63,255,127,255,255,255,255,255,199,248,223,231,255,255,251,255,227,255,255,255,255,227,255,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,253,252,251,253,250,255,251,255,248,255,255,255,255,31,255,127,159,255,95,191,223,127,191,255,127,255,255,255,255,255,231,255,219,255,165,231,189,255,219,255,231,255,255,255,255,255,231,247,203,239,213,239,149,223,169,255,195,255,255,255,255,255,255,235,255,213,235,221,227,235,247,247,255,255,255,255,255,227,255,217,255,217,255,179,255,179,255,135,255,255,255,255,255,227,255,243,255,231,255,231,255,207,255,135,255,255,255,255,255,227,255,217,255,243,255,231,255,197,255,147,255,255,255,255,255,193,255,243,255,199,255,243,255,179,255,135,255,255,255,255,255,217,255,209,255,179,255,129,255,231,255,199,255,255,255,255,255,225,255,207,255,199,255,243,255,243,255,135,255,255,255,255,255,241,255,231,255,199,255,147,255,179,255,135,255,255,255,255,255,227,255,217,255,185,255,243,255,231,255,207,255,255,255,255,255,227,255,217,255,193,255,179,255,179,255,135,255,255,255,255,255,227,255,217,255,217,255,195,255,243,255,135,255,255,255,255,255,255,255,231,255,231,255,255,255,207,255,207,255,255,255,255,255,254,255,252,255,249,255,147,255,199,255,231,255,255,255,255,255,255,255,231,255,231,255,131,255,207,255,207,255,255,255,255,255,255,255,255,255,255,255,131,255,255,255,255,255,255,255,215,255,147,255,17,255,29,255,1,255,131,255,199,255,255,255,255,255,201,255,182,255,190,255,190,255,221,255,235,255,247,255,255,239,255,199,255,41,255,171,255,131,255,17,255,57,255,255,255,255,255,239,255,199,255,199,255,131,255,1,255,1,255,255,251,255,225,255,192,255,192,255,192,255,192,255,225,255,255,255,255,139,255,31,243,255,35,255,243,255,243,63,225,255,255,255,255,139,255,63,227,255,89,255,243,255,231,127,193,255,255,255,255,139,255,127,195,255,121,255,195,255,249,127,195,255,255,255,255,255,255,223,239,191,247,159,251,207,253,231,254,243,254,243,249,255,252,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,31,255,143,255,199,255,231,255,254,255,253,207,251,159,247,251,239,243,255,247,255,255,255,255,255,255,225,255,241,255,241,255,237,255,223,255,191,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,255,255,255,255,255,255,255,248,255,224,255,135,255,31,255,127,255,252,255,249,255,249,255,243,255,243,255,231,255,231,255,231]},{"1630208":[75,190,126,3,188,124,185,121,37,1,3,3,6,255,255,42]},{"1630225":[1,255,127,38,255]},{"1630232":[132,38]},{"1630235":[3,179,179,243,243,35,255,1,223,223,42,255,14]},{"1630250":[255,239,16,220,39,178,79,97,159,192,63,128,127,39]},{"1630265":[131,72]},{"1630268":[131,72]},{"1630271":[69]},{"1630273":[255,137,24]},{"1630277":[67,255]},{"1630280":[10,191]},{"1630283":[159]},{"1630285":[207]},{"1630287":[224]},{"1630289":[127]},{"1630291":[245,34]},{"1630294":[5,123,123,59,31,128,138,69,127,255,5,120,248,183,127,192,63,67,255]},{"1630314":[3,63,31,15,7,133,92]},{"1630322":[3,128,127,255,127,67,128]},{"1630330":[132,96]},{"1630333":[131,25]},{"1630337":[127,131,87]},{"1630341":[11,112,143,112,144,227,35,199,68,143,136,159,144,67,191,160,224,39]},{"1630360":[15,28,56,114,102,70,70,74,181,177,251,65,115,189,191,244,117,251,11,255,71,255,64]},{"1630384":[132,204,124,14,7,32,48,127,128,95,160,159,96,127,224,71,159,128,35]},{"1630404":[35,96,4,255,222,255,237,253,34,241,2,243,146,187,68]},{"1630420":[63,7,33,51,63,63,94,196,192,192,38,255,7,179,255,77,77,12,76]},{"1630440":[206,35]},{"1630443":[20,76,254,191,179,49,96,159,76,179,174,113,126,225,182,169,186,173,189,174,172,191,35]},{"1630467":[35,64,224,38,7]},{"1630473":[12,4,25,8,59,24,115,48,241,112,176,48,188,60]},{"1630488":[3,7,7,15,15,79,67,2]},{"1630497":[34]},{"1630499":[28]},{"1630501":[24]},{"1630503":[28]},{"1630505":[36]},{"1630507":[98]},{"1630509":[2,40]},{"1630512":[7,179,115,167,103,143,79,159,95,67,191,127,13,158,126,206,62,12,24,48,32]},{"1630535":[1,1,223,222,67,95,94,1,63,62,67,47,46,3,31,30,23,22,35,224,34,240]},{"1630558":[248,140,24]},{"1630562":[34]},{"1630564":[39,255,5,155,103,205,51,235,20,69,233,23,3,105,151,185,199,37,112,13,48,16,128,127,15,255,224,241,1,242,3,132,5,200,67,135,202,7]},{"1630604":[14,12,120,50,48,48,73,255]},{"1630613":[15,191]},{"1630616":[223]},{"1630618":[224]},{"1630620":[138,128,27,59,59,123,59,31,36,60,67,66,102,4,90,126,219,255,231,131,107]},{"1630642":[4]},{"1630644":[195,153,153,129,35]},{"1630650":[7,128]},{"1630653":[128,127,192,64,159,31,67,166,39,13,191,63,143,63,127]},{"1630669":[63,96,88,88,64,64,111,160,67,127,176,11,119,184,127,159,127,128,64,191,255,63,22,7,132,163]},{"1630696":[8]},{"1630698":[255,65,255,33,255,35,255,7,99,253,131,108]},{"1630711":[2,60,28,24,36]},{"1630717":[5,159,128,255,224,255]},{"1630724":[67,31,32,23,159,160,223,96,223,32,96]},{"1630737":[192,192,64]},{"1630742":[255,254,254,252,252,224,241,144,243,112,68,255,248,6,254,1,3,31,126,252,120,132,101]},{"1630766":[26,184,255,240,247,224,231,192,207,136,255,112,255,227]},{"1630782":[8,24,56,120,240,96,169,190,242,237,246,9,67,158,161,6,190,161,254,97,252,35,64,131,74,1,8,72,8]},{"1630812":[158,30,135,7,195,67,67,248,120,15,124,60,63,15,127,7,97,120,60,7,7,3]},{"1630836":[232,247,67,240,239,1,208,239,67,224,223,67,160,223,39]},{"1630852":[15,246,207,214,239,254,231,234,247,253,243,254,249,255,252,255,254,141,180,1,132,27,3,134,190,1,41]},{"1630880":[12,253,254,2,252,254]},{"1630887":[255,1,2,253,255,252,255,98,255]},{"1630897":[1,34]},{"1630900":[3,190,126,254,62,67,62,94,3,190,222,222,62,67,190,126,3,1,1,129,129,36,1]},{"1630924":[254,149,98]},{"1630928":[79,190,126,39,1,5,255,255,15,15,3,3,35,1,141,186,1,3,142,62,192,64,67,128,127,2,255]},{"1630956":[255,132,173,3,1,65,63,37]},{"1630965":[224,47,191,184,247,244,251,10,60,4,190,130,159,135,207,64,239,32,122,12,6,195,73,96,48,22,127,1,191,129,95,65,47,33,23,17,243,241,255,1,255,65,184,220,236,244,248,12]},{"1631014":[60,71,95,160,3,122,133,96,159,131,76,2,138,112]},{"1631030":[49,68,255,243,67,247,255,1,227,255,136,247,2,55]},{"1631045":[11,122,167,117,174,107,188,119,184,74,181,112,143,139,252,3,10,80,96,240,208,160,192,96,160,192,64,128,132,255]},{"1631076":[23,143,15,31,31,63,127,255,255,102,158,50,206,153,231,204,243,231,248,243,252,248,255,127,255,135,152,3,2,63,255,31,68,255,15]},{"1631112":[159,36,255]},{"1631116":[127,137,111]},{"1631120":[46,255,39]},{"1631124":[69,189,126,69,161,126,67,189,126,137,184,1,5,1,1,2,2,6,6,35,14,35,30,17,255,255,253,249,241,241,225,225,255]},{"1631158":[3,252,254,1,3,253,2,252,132,96,3,132,25]},{"1631172":[131,68,3,11,255,254,253,254,254,253,250,253,252,251,244,251,67,248,247,39]},{"1631193":[19,221,227,222,233,213,230,242,235,232,247,239,240,239,242,236,243]},{"1631212":[8,4,133,188,1,13,127,255,159,127,224,31,31,224,128,127,231,31,242,14,38]},{"1631234":[1,97,253,68,222,241,3,253,222,1]},{"1631245":[67,1,254,133,25]},{"1631251":[131,15,3,224,44,224,97,163,98,113,178,89,186,188,221,174,222,215,239,219,231,30,28,12,4,2,1]},{"1631280":[135,63,167,63,151,95,143,111,128,112,192,63,224,31,255]},{"1631296":[64,64,32,16,15,132,49,3,9,251,252,246,249,237,243,251,231,223,231,67,247,207,137,184,1]},{"1631322":[3,131,97,1,26,12,12,11,5,3,5,251,253,250,255,255,252,248,251,251,3,251,253,250,252,251,254,249,3]},{"1631352":[248,248,133,30,3,34,251]},{"1631360":[252,131,163]},{"1631364":[67,190,126,11,254,62,62,222,30,238,14,246,6,254,253,253,38,1]},{"1631383":[3,35,62,3,254,254,62,254,71,190,126,1,193,193,37,1,255]},{"1638400":[116]},{"1638402":[194]},{"1638404":[184]},{"1638406":[190]},{"1638408":[255]},{"1638410":[177]},{"1638412":[170]},{"1638414":[191]},{"1638416":[174]},{"1638418":[255]},{"1638420":[175]},{"1638422":[184]},{"1638424":[190]},{"1638426":[183]},{"1638428":[173,117]},{"1638431":[189]},{"1638433":[177]},{"1638435":[174]},{"1638437":[255]},{"1638439":[182]},{"1638441":[170]},{"1638443":[185]},{"1638445":[255]},{"1638447":[184]},{"1638449":[175,127,127,116]},{"1638454":[194]},{"1638456":[184]},{"1638458":[190]},{"1638460":[255]},{"1638462":[177]},{"1638464":[170]},{"1638466":[191]},{"1638468":[174]},{"1638470":[255]},{"1638472":[175]},{"1638474":[184]},{"1638476":[190]},{"1638478":[183]},{"1638480":[173,117]},{"1638483":[189]},{"1638485":[177]},{"1638487":[174]},{"1638489":[255]},{"1638491":[172]},{"1638493":[184]},{"1638495":[182]},{"1638497":[185]},{"1638499":[170]},{"1638501":[188]},{"1638503":[188]},{"1638505":[255]},{"1638507":[184]},{"1638509":[175,127,127,116]},{"1638514":[184]},{"1638516":[177]},{"1638518":[255]},{"1638520":[181]},{"1638522":[184]},{"1638524":[184]},{"1638526":[180]},{"1638528":[199]},{"1638530":[255]},{"1638532":[178]},{"1638534":[189]},{"1638536":[216]},{"1638538":[188,117]},{"1638541":[189]},{"1638543":[177]},{"1638545":[174]},{"1638547":[255]},{"1638549":[171]},{"1638551":[178]},{"1638553":[176]},{"1638555":[255]},{"1638557":[180]},{"1638559":[174]},{"1638561":[194]},{"1638563":[255]},{"1638565":[184]},{"1638567":[175,127,127,116]},{"1638572":[189]},{"1638574":[177]},{"1638576":[178]},{"1638578":[188]},{"1638580":[255]},{"1638582":[178]},{"1638584":[188]},{"1638586":[255]},{"1638588":[170,117]},{"1638591":[188]},{"1638593":[182]},{"1638595":[170]},{"1638597":[181]},{"1638599":[181]},{"1638601":[255]},{"1638603":[180]},{"1638605":[174]},{"1638607":[194]},{"1638609":[255]},{"1638611":[189]},{"1638613":[184,127,127,118]},{"1638618":[181]},{"1638620":[178]},{"1638622":[176]},{"1638624":[177]},{"1638626":[189]},{"1638628":[255]},{"1638630":[192]},{"1638632":[184]},{"1638634":[187]},{"1638636":[181]},{"1638638":[173,127,127,118]},{"1638643":[173]},{"1638645":[170]},{"1638647":[187]},{"1638649":[180]},{"1638651":[255]},{"1638653":[192]},{"1638655":[184]},{"1638657":[187]},{"1638659":[181]},{"1638661":[173,127,127,118]},{"1638666":[176]},{"1638668":[170]},{"1638670":[183]},{"1638672":[184]},{"1638674":[183]},{"1638676":[188]},{"1638678":[255]},{"1638680":[189]},{"1638682":[184]},{"1638684":[192]},{"1638686":[174]},{"1638688":[187,127,127,118]},{"1638693":[189]},{"1638695":[190]},{"1638697":[187]},{"1638699":[189]},{"1638701":[181]},{"1638703":[174]},{"1638705":[255]},{"1638707":[187]},{"1638709":[184]},{"1638711":[172]},{"1638713":[180,127,127,118]},{"1638718":[189]},{"1638720":[177]},{"1638722":[178]},{"1638724":[174]},{"1638726":[191]},{"1638728":[174]},{"1638730":[188]},{"1638732":[255]},{"1638734":[189]},{"1638736":[184]},{"1638738":[192]},{"1638740":[183,127,127,118]},{"1638745":[189]},{"1638747":[184]},{"1638749":[192]},{"1638751":[174]},{"1638753":[187]},{"1638755":[255]},{"1638757":[184]},{"1638759":[175]},{"1638761":[255]},{"1638763":[177]},{"1638765":[174]},{"1638767":[187]},{"1638769":[170,127,127,118]},{"1638774":[178]},{"1638776":[172]},{"1638778":[174]},{"1638780":[255]},{"1638782":[185]},{"1638784":[170]},{"1638786":[181]},{"1638788":[170]},{"1638790":[172]},{"1638792":[174,127,127,118]},{"1638797":[188]},{"1638799":[180]},{"1638801":[190]},{"1638803":[181]},{"1638805":[181]},{"1638807":[255]},{"1638809":[192]},{"1638811":[184]},{"1638813":[184]},{"1638815":[173]},{"1638817":[188,127,127,118]},{"1638822":[182]},{"1638824":[178]},{"1638826":[188]},{"1638828":[174]},{"1638830":[187]},{"1638832":[194]},{"1638834":[255]},{"1638836":[182]},{"1638838":[178]},{"1638840":[187]},{"1638842":[174,127,127,118]},{"1638847":[173]},{"1638849":[170]},{"1638851":[187]},{"1638853":[180]},{"1638855":[255]},{"1638857":[185]},{"1638859":[170]},{"1638861":[181]},{"1638863":[170]},{"1638865":[172]},{"1638867":[174,127,127,118]},{"1638872":[188]},{"1638874":[192]},{"1638876":[170]},{"1638878":[182]},{"1638880":[185]},{"1638882":[255]},{"1638884":[185]},{"1638886":[170]},{"1638888":[181]},{"1638890":[170]},{"1638892":[172]},{"1638894":[174,127,127,118]},{"1638899":[172]},{"1638901":[170]},{"1638903":[188]},{"1638905":[189]},{"1638907":[181]},{"1638909":[174]},{"1638911":[255]},{"1638913":[189]},{"1638915":[184]},{"1638917":[192]},{"1638919":[174]},{"1638921":[187,127,127,118]},{"1638926":[173]},{"1638928":[174]},{"1638930":[188]},{"1638932":[174]},{"1638934":[187]},{"1638936":[189]},{"1638938":[255]},{"1638940":[185]},{"1638942":[170]},{"1638944":[181]},{"1638946":[170]},{"1638948":[172]},{"1638950":[174,127,127,118]},{"1638955":[174]},{"1638957":[170]},{"1638959":[188]},{"1638961":[189]},{"1638963":[174]},{"1638965":[187]},{"1638967":[183]},{"1638969":[255]},{"1638971":[185]},{"1638973":[170]},{"1638975":[181]},{"1638977":[170]},{"1638979":[172]},{"1638981":[174,127,127,118]},{"1638986":[177]},{"1638988":[194]},{"1638990":[187]},{"1638992":[190]},{"1638994":[181]},{"1638996":[174]},{"1638998":[255]},{"1639000":[172]},{"1639002":[170]},{"1639004":[188]},{"1639006":[189]},{"1639008":[181]},{"1639010":[174,127,127,118]},{"1639015":[177]},{"1639017":[194]},{"1639019":[187]},{"1639021":[190]},{"1639023":[181]},{"1639025":[174]},{"1639027":[255]},{"1639029":[172]},{"1639031":[170]},{"1639033":[188]},{"1639035":[189]},{"1639037":[181]},{"1639039":[174,127,127,118]},{"1639044":[189]},{"1639046":[177]},{"1639048":[178]},{"1639050":[188]},{"1639052":[255]},{"1639054":[173]},{"1639056":[190]},{"1639058":[183]},{"1639060":[176]},{"1639062":[174]},{"1639064":[184]},{"1639066":[183,127,127]},{"1671170":[152,1,181,86]},{"1671178":[24]},{"1671180":[255,127]},{"1671186":[188,2,255,127]},{"1671194":[201,105,255,127]},{"1671202":[198,24,173,57]},{"1671210":[184]},{"1671212":[61,67]},{"1671218":[4,23,255,127]},{"1671228":[255,127]},{"1675264":[23,224]},{"1675267":[216,64,222,88,231,174,225,175,116,223,250,47,125,215,224,184,190,215,209,104,244,186,37]},{"1675291":[3,128]},{"1675294":[192,128,67,96,192,1,48,224,131,27]},{"1675305":[3,192,96,96,48,43]},{"1675312":[3,1]},{"1675315":[3,1,134,54]},{"1675321":[3,133,56]},{"1675325":[17,31]},{"1675328":[127,28,255,120,255,224,127,192]},{"1675338":[1,31,127,223,191,127,35]},{"1675346":[17,240]},{"1675349":[254,48,255,206,139,247,120,255,125,255]},{"1675361":[240,254,255,139,41]},{"1675367":[7,128]},{"1675370":[224,128,112,224,24,240,35]},{"1675378":[12,128,224,112,24]},{"1675385":[3]},{"1675387":[7,3,4]},{"1675391":[44,67,4,92,224,81,12,94,14]},{"1675401":[3,4,7,43,123,115,113]},{"1675410":[192]},{"1675412":[224,192,32]},{"1675416":[212]},{"1675418":[218]},{"1675420":[26,16,58,48]},{"1675425":[192,32,224,52,62,238,206]},{"1675434":[96]},{"1675436":[144,96,208,96,232,48,116,24,252,96,155,116]},{"1675449":[96,240,240,248,124,252,254]},{"1675458":[6]},{"1675460":[9,6,11,6,23,12,46,24,63,6,217,46]},{"1675473":[6,15,15,31,62,63,132,95]},{"1675482":[131,194]},{"1675485":[13,216,96,252,48,244,88,254,96]},{"1675496":[96,240,248,252,131,214]},{"1675503":[133,216]},{"1675506":[16,27,6,63,12,47,26,127,6]},{"1675517":[6,15,31,63,63,127,1,131,58]},{"1675527":[18,131,1,131,3,199,66,247,100,251,126,249]},{"1675540":[1,131,131,199,246,248,248,36]},{"1675549":[18,130]},{"1675552":[130,128,198,132,222,92,190,252,62]},{"1675563":[130,130,198,222,62,62,36]},{"1675571":[18,16]},{"1675574":[40]},{"1675577":[4,16,24,100,244,11]},{"1675585":[16,40]},{"1675588":[16,100,11,36]},{"1675593":[224,50,64]},{"1675597":[32]},{"1675599":[12,12,80,80,163,163,76]},{"1675608":[64,32,12,80,163,76,44,180,46,251,124,75,78,115,78,251,60,82,188,234,125,208,203,12,189,141,13,191,49,99,176,224,56,240,152,240,248,208,67,220,232,7,220,240,60,240,48,56,24,56,34,28,224,108,60,6,3,14,7,28,14,53,28,37,30,83,60,71,59,93,39,6,12,27,51,41,67,71,92,255,128,205,51,186,103,180,77,249,27,199,6,127,193,131,179,255,204,153,179,230,249,127,124,128,30,26,126,255,1,255,86,228,187,231,91,156,254,64,211,253,161,62,63,100,228,129,45,152,240,76,248,172,248,198,124,230,164,249,88,255,166,95,184,24,140,76,166,222,231,121,223,111,39,63,25,31,13,30,4,30,2,15,1,67,7]},{"1675774":[19,88,32,18,19,17,8,4,4,246,228,252,152,248,176,120,32,120,64,240,128,67,224]},{"1675798":[20,26,4,72,200,136,16,32,32,253,10,158,9,254,97,125,18,124,35,55,11,15,34]},{"1675822":[20,255,250,150,119,119,63,15]},{"1675831":[191,80,121,144,127,134,254,72,126,204,236,144,176,131,77,2,224,62,95,105,238,238,252,176]},{"1675856":[187,68,205,2,126,49,126,1,125,50,36,27,31,3,7]},{"1675872":[254,255,74,126,119,63,31,7,221,34,179,64,94,172,126,144,254,28,124,152,216,160,224]},{"1675896":[127,255,114,94,222,220,248,224,58,253,20,191,2,151,2,23,67,1,3,19]},{"1675917":[1,1]},{"1675920":[248,188,150,22,3,3,1]},{"1675928":[184,126,80,250,128,210,128,208,67]},{"1675938":[128,35]},{"1675941":[13,62,122,210,208,128,128]},{"1675950":[19,228,39,16]},{"1675955":[39,34]},{"1675958":[2,4]},{"1675961":[2,35]},{"1675964":[17,228,16,39]},{"1675969":[4,2]},{"1675973":[174,17,50,140,128,50]},{"1675980":[128]},{"1675982":[48,133,218,2,224,32,17,140,50,128,48,2]},{"1675996":[243,222,229,182,107,44,87,24,93,146,93,134,115,76,191,193,109,89,211,231,237,249,243,63,252,67]},{"1676023":[248]},{"1676025":[16,67,248,48,6,240,96,240,224,96,192,252,35,248,2,208,176,96,37]},{"1676045":[131,146]},{"1676048":[5,13,7,27,15,31,14,131,51,3,9,4,9,19,31,15]},{"1676065":[60,7,248,45,67,241,218,13,232,187,208,119,146,242,15,60,251,118,246,231,207,141,131,57]},{"1676090":[6,1,2,16,1]},{"1676097":[4,134,54]},{"1676102":[2,134,63]},{"1676106":[34]},{"1676109":[144,131,98,1,2]},{"1676116":[16,67,16]},{"1676120":[3]},{"1676122":[144,40,16,131,131,3,39]},{"1676130":[2,2,2,5,133,218,2,3]},{"1676140":[2,5,134,157,3,38]},{"1676147":[133,132,3,35]},{"1676152":[138,142,3,61]},{"1676157":[135,143,3,4,16,28]},{"1676164":[34,28,67,77,50,12,65,62,34,28,62]},{"1676176":[34]},{"1676178":[28,62,115,115,127,34,62,3,28]},{"1676188":[46,28,67,83,62]},{"1676194":[77,132,249,3,9,62,28,28,46,95,95,77,34,62,34,132,58]},{"1676212":[2]},{"1676214":[2,1,69,20,3,1,46,17,132,67]},{"1676225":[2,3,7,23,132,136]},{"1676232":[2]},{"1676234":[128]},{"1676236":[69,80,128]},{"1676240":[232,132,143,3,3,128,128,192,208,134,48,3,7,3,12,15,19,28,39,56,47,132,47]},{"1676264":[3,3,12,24,30,37]},{"1676271":[9,192,192,48,240,200,56,228,28,244,12,35]},{"1676284":[15,192,48,24,8,248,195,99,215,223,190,134,124,172,120,24,224,131,39]},{"1676304":[8,124,109,195,150,140,24,224]},{"1676313":[192,131,204,2,42]},{"1676320":[192,134,154,4,8,63,24,63,22,123,47,113,31,241,67,127,227,7,127,231,127,63,61,122,113,240,34,224,11,159,255,137,255,227,127,247,156,124,107,155,183,67,218,214,16,128,128,227,119,156,72,41,41]},{"1676374":[1,17,18]},{"1676378":[17,84,108]},{"1676382":[34,16,132,56]},{"1676387":[2,18,17,108,131,142,3,6,84,108]},{"1676398":[144,16,16,64,40]},{"1676404":[1,108,144,137,143,3,137,115,3,41]},{"1676415":[137,230,4,37]},{"1676420":[132,243,4,40]},{"1676425":[134,106,3,42]},{"1676430":[133,126,3,137,254,4]},{"1676437":[40,134,143,3,67,20]},{"1676444":[19,62,8,93,8,127]},{"1676451":[73]},{"1676453":[127,28,62]},{"1676457":[28,28,54,119,93,127,99,62,67,28,8,139,116,5,1,20,20,133,130,5,5,66,61,72,55,84,35,67,34,1,67,1]},{"1676490":[5]},{"1676493":[63,55,35,1,131,63]},{"1676500":[5,132,120,36,216,84,136,67,136]},{"1676510":[37]},{"1676512":[1,248,216,133,192,5,9,63,32,31,58,15,20,7,8]},{"1676528":[7,134,170,4,1,17,11,132,217,5,8,244,12,248,12,224,24,224,16]},{"1676548":[131,39]},{"1676551":[34]},{"1676553":[2,12,136,144,36]},{"1676559":[255]},{"1802304":[85,42,191,64,95,160,255]},{"1802312":[119,136,255]},{"1802316":[255]},{"1802318":[255]},{"1802368":[255]},{"1802370":[255]},{"1802372":[255]},{"1802374":[255]},{"1802376":[255]},{"1802378":[253,2,255]},{"1802382":[213,42]},{"1802394":[2]},{"1802398":[42]},{"1802432":[255,33,253,3,250,5,243,14,251,5,222,47,244,95,255,255]},{"1802450":[2]},{"1802452":[5]},{"1802454":[12]},{"1802456":[4]},{"1802458":[33]},{"1802460":[11]},{"1802496":[123,21,118,47,241,95,59,255,144,127,138,255,5,255,170,255,196]},{"1802514":[73,192,14]},{"1802518":[204]},{"1802520":[111]},{"1802522":[127]},{"1802524":[255]},{"1802526":[255]},{"1802530":[64]},{"1802560":[211,127,127,255,133,255,171,255,81,255,251,255,95,255,255,255,45]},{"1802578":[162]},{"1802580":[127]},{"1802582":[255]},{"1802584":[255]},{"1802586":[191]},{"1802588":[255]},{"1802590":[255]},{"1802624":[53,255,251,255,93,255,255,255,127,255,255,253,255,255,255,213,223]},{"1802642":[191]},{"1802644":[255]},{"1802646":[255]},{"1802648":[255]},{"1802650":[253,2,255]},{"1802654":[213,42]},{"1802688":[191,191,183,183,243,251,235,234,227,227,245,209,255,250,247,80,191,64,183,72,251,12,230,25,235,20,209,46,250,5,80,175]},{"1802727":[8]},{"1802752":[127,255,221,213,223,155,61,101,206,170,197,68,171,162,222]},{"1802768":[255]},{"1802770":[213,42,155,100,37,250,138,117,68,187,162,93]},{"1802783":[255]},{"1802790":[32]},{"1802816":[255,255,85,85,170,170,120,16,170,168,68]},{"1802828":[170]},{"1802830":[241]},{"1802832":[255]},{"1802834":[85,170,170,85,16,239,168,87]},{"1802843":[255]},{"1802845":[255]},{"1802847":[255]},{"1802880":[206,170,201]},{"1802884":[166,162,40]},{"1802888":[162,128,70]},{"1802892":[33]},{"1802894":[12,2,138,117]},{"1802899":[255,162,93]},{"1802903":[255,128,127]},{"1802907":[255]},{"1802909":[255]},{"1802911":[255]},{"1802944":[139,10,183,4,163,34,89,2,1,6,4,46,65,24,129,54,10,245,4,251,34,221,2,255]},{"1802969":[255,36,243,28,255,44,247]},{"1802983":[8]},{"1802986":[8,4]},{"1802989":[12]},{"1802991":[128]},{"1803008":[172,161,133,48,223]},{"1803014":[49]},{"1803016":[84]},{"1803018":[19,168,21,64,174,64,153,127,50,245]},{"1803029":[255,136,119]},{"1803033":[255,40,255]},{"1803037":[255]},{"1803039":[255]},{"1803042":[26]},{"1803046":[136]},{"1803051":[2]},{"1803055":[170]},{"1803072":[85]},{"1803074":[8,128,68]},{"1803078":[36,2,84,1,232,18,65,12,186,68]},{"1803089":[255,163,220]},{"1803093":[254,138,119,1,255,2,255,52,207]},{"1803103":[255]},{"1803106":[34]},{"1803109":[1,136,32]},{"1803115":[168]},{"1803117":[64]},{"1803119":[186]},{"1803136":[215,129,196,128,144,193,132,1,32,21,209,42,108,17,171,68,129,127,170,213,197,123,43,213,21,255,42,255,17,255,4,255]},{"1803170":[170]},{"1803172":[4,128,42,128]},{"1803179":[128]},{"1803181":[68]},{"1803183":[170]},{"1803200":[82,17,68,149,1,196,128,36]},{"1803209":[5,80,139,132,81,170,85,16,248,177,213,196,239,166,117,21,239,171,223,81,255,85,255,7]},{"1803234":[40,2,4,24,2,8,16]},{"1803242":[32]},{"1803245":[4]},{"1803247":[170]},{"1803264":[85,17,97,81,144,1,32]},{"1803273":[84,160,93,248,21,226,53]},{"1803281":[238,155,85,5,155,138,117,85,254,223,125,213,63,53,247,17]},{"1803298":[138,32,36,80,138,32,1]},{"1803306":[2,32,16,40,56,202]},{"1803328":[125,86,84,1,42,17,4,69,1,70,2,117,102,217,232,23,71,238,171,85,85,187,239,85,86,239,253,119,249,223,119,159,16]},{"1803362":[170]},{"1803364":[68]},{"1803366":[170]},{"1803368":[16,1,136,2,64,6]},{"1803375":[136]},{"1803392":[254,87,20,21,169,17,149,85]},{"1803401":[196,128,117,192,36,184,93,23,189,187,81,84,186,126,212,213,238,127,245,37,230,71,229,64]},{"1803426":[174]},{"1803428":[69]},{"1803430":[43,128,17]},{"1803434":[10,128,25,192,2,184]},{"1803456":[95,159,21,85,56,147,1,80,18,58,112,65,20,42,28,1,218,176,15,5,166,139,255,80,107,170,243,89,115,182,235,21,5]},{"1803490":[27,224,84,1,174]},{"1803496":[77,16,134,24,65,12,226,20]},{"1803520":[255,247,93,157,251,217,85,85,191,15,58,64,106,170,6,80,166,44,178,208,132,34,250,80,126,142,239,80,179,232,255,80,81]},{"1803554":[47]},{"1803556":[93,128,175]},{"1803560":[65]},{"1803562":[137,20,21,66,169]},{"1803584":[254,254,252,252,255,223,87,87,255,119,85,85,171,171,49,1,171,2,71,68,2,32,232,64]},{"1803609":[136,251,81,253,169,239,17,85]},{"1803618":[187]},{"1803620":[221]},{"1803622":[191]},{"1803624":[119]},{"1803626":[174]},{"1803628":[86]},{"1803630":[206,16]},{"1803648":[223,79,247,199,251,251,117,117,253,251,113,21,107,139,5,5,26,128,56]},{"1803668":[46,8,142,4,143,11,238,4,244,128,250]},{"1803680":[117]},{"1803682":[239]},{"1803684":[213]},{"1803686":[251]},{"1803688":[112]},{"1803690":[155,96,31,32,255]},{"1803712":[253,255,252,253,255,255,255,255,255,255,253,253,255,251,101,81,10]},{"1803730":[5,5,32]},{"1803736":[136]},{"1803738":[2]},{"1803740":[38,2,206,64,87]},{"1803746":[248,2,223]},{"1803750":[255]},{"1803752":[119]},{"1803754":[255]},{"1803756":[217,4,167,56]},{"1803776":[251,251,79,239,159,207,86,86,253,253,255,255,255,255,95,95,232,68,165,176,114,96,168,17]},{"1803801":[2]},{"1803806":[160]},{"1803808":[61]},{"1803810":[63,64,255]},{"1803814":[255]},{"1803816":[119]},{"1803818":[255]},{"1803820":[253]},{"1803822":[255]},{"1803840":[186,190,246,226,253,231,253,254,253,255,239,239,254,254,254,254,172,69,92,1,155,1,7,4,170]},{"1803867":[16,42,1]},{"1803871":[1,235]},{"1803874":[227,12,198]},{"1803878":[248,2,255]},{"1803882":[255]},{"1803884":[255]},{"1803886":[255]},{"1803904":[255,255,205,237,255,255,235,235,190,190,239,239,254,254,250,250,255]},{"1803922":[37,50,3]},{"1803926":[1,20,174,65,69,16,170,1,16,5,255]},{"1803938":[223]},{"1803940":[255]},{"1803942":[255]},{"1803944":[255]},{"1803946":[255]},{"1803948":[255]},{"1803950":[255]},{"1803968":[251,251,247,247,223,223,171,175,171,174,252,237,181,191,188,191,251,4,213,8,138,32,7,87,173,82,83]},{"1803996":[138,81,7,70,255]},{"1804002":[255]},{"1804004":[255]},{"1804006":[248]},{"1804008":[252]},{"1804010":[236,19,255]},{"1804014":[249]},{"1804032":[255,255,239,247,255,103,27,91,187,59,111,55,56,138,105,219,239]},{"1804050":[95]},{"1804052":[191]},{"1804054":[211,164,171,236,93,196,254,201,167,32,255]},{"1804066":[239,16,103,8,63,192,23,64,59,192,147,108,28,255]},{"1804096":[245,170,254,229,255,250,255,252,255,255,127,127,127,119,239,95,160,95,228,27,250,5,252,3,255]},{"1804122":[127,128,47,136,183,64,255]},{"1804130":[255]},{"1804132":[255]},{"1804134":[255]},{"1804136":[255]},{"1804138":[255]},{"1804140":[255]},{"1804142":[255,32]},{"1804160":[81,174,174,253,209,254,243,227,247,239,122,125,125,127,255,254]},{"1804177":[255,172,83,220,47,239,28,231,24,120,135,61,130,254,1,255]},{"1804194":[255]},{"1804196":[255]},{"1804198":[255]},{"1804200":[255]},{"1804202":[255]},{"1804204":[255]},{"1804206":[255]},{"1804224":[16,239,170,213,68,251,234,117,81,174,234,213,244,251,234,125]},{"1804241":[85,128,127,64,189,96,159]},{"1804249":[253,192,63,240,15,104,151,85]},{"1804258":[255]},{"1804260":[253]},{"1804262":[255]},{"1804264":[253]},{"1804266":[255]},{"1804268":[255]},{"1804270":[255]},{"1804288":[5,253,34,215,200,253,234,85]},{"1804297":[255,162,93,84,171,170,85,3,22]},{"1804307":[233,136,49,64,175]},{"1804313":[81]},{"1804315":[250]},{"1804317":[221]},{"1804319":[255,23]},{"1804322":[233,6,251,4,239]},{"1804328":[81]},{"1804330":[250]},{"1804332":[221]},{"1804334":[255]},{"1804352":[255]},{"1804354":[253,2,255]},{"1804358":[245,59,225,47,218,36,229,26,64,180]},{"1804370":[2]},{"1804374":[10]},{"1804376":[15,16,63,20,17,1,183,15]},{"1804394":[16]},{"1804396":[4,6,5,1]},{"1804412":[8]},{"1804414":[2]},{"1804416":[254,1,215,43,186,71,84,175,226,95,42,127,77,111,191,95,1]},{"1804434":[40]},{"1804436":[69]},{"1804438":[171]},{"1804440":[29]},{"1804442":[127,128,79,80,63]},{"1804460":[192]},{"1804462":[192]},{"1804476":[32]},{"1804480":[198,127,8,255,125,255,43,255,21,255,191,255,213,249,249,254,57]},{"1804498":[247]},{"1804500":[135]},{"1804502":[223]},{"1804504":[255]},{"1804506":[255]},{"1804508":[255]},{"1804510":[252,5]},{"1804526":[4,2]},{"1804544":[21,255,235,255,85,255,143,255,7,239,255,255,159,203,191,183,255]},{"1804562":[191]},{"1804564":[255]},{"1804566":[191,32,239,112,189,64,139,116,21,72]},{"1804584":[96]},{"1804587":[32]},{"1804598":[64]},{"1804602":[2]},{"1804606":[162]},{"1804608":[127,255,255,255,255,255,127,77,191,238,191,21,170,122,117]},{"1804624":[255]},{"1804626":[255]},{"1804628":[255]},{"1804630":[69,178,238,81,5,154,106,213]},{"1804639":[255]},{"1804649":[32,96]},{"1804653":[32]},{"1804662":[8]},{"1804668":[16]},{"1804672":[255,254,249,208,248,184,253,144,251,168,255]},{"1804684":[255]},{"1804686":[252,3,254,1,208,47,184,71,16,111,168,87]},{"1804699":[255]},{"1804701":[255]},{"1804703":[255]},{"1804726":[128]},{"1804734":[3]},{"1804736":[252,168,216,67,248,130,152,7,160,30,85,161,174,1,36,15,168,87,66,191,128,127,4,253,4,252,1,252]},{"1804765":[255,4,243]},{"1804774":[4,2,5,2]},{"1804779":[3]},{"1804782":[8,4]},{"1804792":[24]},{"1804794":[160]},{"1804796":[1]},{"1804798":[3]},{"1804800":[140,131,210,1,225]},{"1804806":[162,8,161]},{"1804810":[1,46]},{"1804813":[125]},{"1804815":[255,128,127]},{"1804819":[255]},{"1804821":[255]},{"1804823":[255]},{"1804825":[255]},{"1804827":[255]},{"1804829":[255]},{"1804831":[255]},{"1804835":[2]},{"1804858":[4]},{"1804864":[8]},{"1804866":[136,2,21,2,2,172,84,32,2,251,160,95]},{"1804879":[255]},{"1804881":[255]},{"1804883":[255,3,255]},{"1804887":[252,1,252]},{"1804891":[255]},{"1804893":[255]},{"1804895":[255]},{"1804900":[2,1,2]},{"1804904":[3,1]},{"1804918":[1]},{"1804920":[32]},{"1804922":[66]},{"1804924":[2]},{"1804928":[34,7,71,175,145,197,155,229,160,215,34,221]},{"1804941":[255,138,127,2,255,5,253,131,124,1,126,128,127]},{"1804955":[255]},{"1804957":[255]},{"1804959":[255,2]},{"1804962":[5,2]},{"1804965":[129]},{"1804967":[139]},{"1804969":[128]},{"1804971":[34]},{"1804975":[128]},{"1804990":[10]},{"1804992":[82,21,66,153,10,85,138,117]},{"1805001":[255,34,221]},{"1805005":[255,34,85,48,223,32,223]},{"1805013":[127,32,127]},{"1805017":[255]},{"1805019":[255]},{"1805021":[255]},{"1805023":[119,16]},{"1805027":[2,128]},{"1805031":[138]},{"1805035":[34]},{"1805038":[136,170]},{"1805056":[32,85,34,221,160,95,170,85,4,251,168,80,69,188,8,81]},{"1805073":[255,8,255,4,255]},{"1805079":[255]},{"1805081":[255,5,248,6,253,12,89]},{"1805091":[34]},{"1805095":[170]},{"1805097":[4]},{"1805099":[170,4,65,164,166]},{"1805118":[8]},{"1805120":[129,116,234,21,103,152,170,85,17,238,170,85,85,170,1,80,16,255]},{"1805139":[255]},{"1805141":[255]},{"1805143":[255]},{"1805145":[255]},{"1805147":[255]},{"1805149":[255,4,81]},{"1805153":[1]},{"1805155":[170]},{"1805157":[69]},{"1805159":[170]},{"1805161":[17]},{"1805163":[170]},{"1805165":[85,170,171]},{"1805184":[3,116,170,85,69,186,174,81,85,170,136,85,85,162,68,1,20,255,1,255,16,255]},{"1805207":[255]},{"1805209":[255]},{"1805211":[221,8,247,16,69]},{"1805217":[1]},{"1805219":[170]},{"1805221":[69]},{"1805223":[174]},{"1805225":[85,34,170]},{"1805229":[85,170,238]},{"1805248":[17,110,171,84,85,170,231]},{"1805256":[79,136,135,64,85,170,84]},{"1805264":[68,255,20,255]},{"1805269":[255,16,231,44,203,16,199]},{"1805277":[255,1,84]},{"1805281":[17]},{"1805283":[171]},{"1805285":[85,8,239,8,83,40,175]},{"1805293":[85,170,254]},{"1805312":[81,46,187,68,85,170,255]},{"1805320":[55,136,223]},{"1805324":[223,32,69]},{"1805328":[20,239,4,255]},{"1805333":[255,32,223,64,191]},{"1805339":[223]},{"1805341":[255,18,69]},{"1805345":[65]},{"1805347":[187]},{"1805349":[85]},{"1805351":[223]},{"1805353":[55,32,255]},{"1805357":[223,168,237]},{"1805377":[87,170,85,85,170,255]},{"1805384":[115,144,231,4,255]},{"1805390":[103]},{"1805392":[87,255,85,255,138,255]},{"1805399":[255,16,243,12,227,8,247,16,103]},{"1805411":[170]},{"1805413":[85]},{"1805415":[255,24,103,8,255]},{"1805421":[247,136,239]},{"1805440":[48,198,218,21,237,98,247]},{"1805448":[127,128,253]},{"1805452":[255]},{"1805454":[117]},{"1805456":[223,230,53,223,114,239,32,215,149,234,28,225,3,252,1,116,1]},{"1805474":[16,234,96,157,8,223]},{"1805481":[106,2,227]},{"1805485":[252,138,254]},{"1805504":[8,98,14,80,16,170,246,1,255,64,31,128,51,160,69]},{"1805520":[119,234,245,90,239,186,9,247,64,255,8,87,244,163,21,64,17,12,161,10,69,16,8,246,64,191]},{"1805547":[247,160,15,170,250]},{"1805564":[64]},{"1805568":[19,106,62,64,31,162,242]},{"1805576":[195]},{"1805578":[175,48,167,64,254]},{"1805584":[111,250,206,112,232,179,7,240,80,131,228,107,41,230,136,118,5,16,129,56,68,21,9,254,36,155,32,123,88,198]},{"1805615":[119]},{"1805632":[250]},{"1805634":[10,192,98,162,96,16,96,138,240]},{"1805644":[193]},{"1805646":[64,128,251]},{"1805650":[119,168,223,162,159,112,191,202,63,192,190,65,191,192,5,16,145,238,29]},{"1805670":[143,96,21,64,15,208,62,65,63,64]},{"1805694":[128]},{"1805696":[174,174,1,1,160,160,6]},{"1805704":[136,136,64]},{"1805708":[192]},{"1805710":[224]},{"1805712":[83,2,254]},{"1805716":[255,160,255]},{"1805720":[255,136,191,64,127,128,31,224,253]},{"1805730":[255]},{"1805732":[95]},{"1805734":[249,6,119]},{"1805738":[191,64,63,192,31,224]},{"1805760":[143,147,1,65,163,155,53,37,126,22,4,4,10,10,32]},{"1805776":[76]},{"1805778":[254,64,108]},{"1805782":[202,16,233]},{"1805786":[251]},{"1805788":[245]},{"1805790":[255]},{"1805792":[227,20,191]},{"1805796":[231,24,215,48,175,80,255]},{"1805804":[255]},{"1805806":[223]},{"1805814":[8]},{"1805824":[143,207,47,7,155,179,47,27,163,163,101,69,171,171,1,1,112,32,240,8,116,48,248]},{"1805848":[116,56,186]},{"1805852":[84]},{"1805854":[254]},{"1805856":[191,64,167,88,219,52,199,4,195,44,199,56,255]},{"1805870":[255]},{"1805878":[56]},{"1805888":[125,125,251,251,253,253,255,255,255,255,223,223,255,255,23,55,8,130]},{"1805907":[4]},{"1805909":[2]},{"1805914":[32]},{"1805918":[232,16,255]},{"1805922":[255]},{"1805924":[255]},{"1805926":[255]},{"1805928":[255]},{"1805930":[255]},{"1805932":[255]},{"1805934":[223,32]},{"1805952":[187,187,170,170,23,23,62,94,213,37,222,152,255,176,121,56,42,68]},{"1805971":[85,2,232,224,1,240,74,102,1,73,128,75,14,127]},{"1805986":[255]},{"1805988":[255]},{"1805990":[159,64,15,48,185,4,182]},{"1805998":[240,4]},{"1806014":[8]},{"1806016":[111,110,175,175,234,170,184,248,232,137,193,192,115,114,222,254,43,146,4,80,202,53,64,71,233,22,35,28,1,140,32,1,253,1,255]},{"1806052":[223,64,223,32,159,64,255,1,254,1,255]},{"1806080":[214,241,186,121,21,16,47,66,8,81,218,16,193,218,144,150,178,14,159,39,81,200,165,60,249,249,239,29,31,44,14,105,60,255,63,127,154,89,33,231,247,88,181,66,254,1,251,4]},{"1806132":[36]},{"1806134":[24]},{"1806144":[95,127,117,213,251,247,213,217,189,57,19,82,234,232,230,134,47,64,165,74,59]},{"1806166":[91,34,189,66,209,172,10,213,96,25,255]},{"1806178":[95,160,241,14,245,10,251,128,254]},{"1806188":[252,3,156,99]},{"1806208":[255,255,255,255,255,255,253,253,252,252,93,221,126,126,159,95,255]},{"1806226":[255]},{"1806228":[255]},{"1806230":[253,2,252,3,157,162,190,193,223,160,255]},{"1806242":[255]},{"1806244":[255]},{"1806246":[255]},{"1806248":[255]},{"1806250":[255]},{"1806252":[127]},{"1806254":[127,128]},{"1806272":[209,190,251,255,253,255,255,251,255,238,127,117,191,186,255,255,144,111,251,4,253,2,251,4,238,17,117,138,58,69,127]},{"1806304":[255]},{"1806306":[255]},{"1806308":[255]},{"1806310":[255]},{"1806312":[255]},{"1806314":[255]},{"1806316":[255]},{"1806318":[255]},{"1806336":[17,238,170,221,132,59,234,245,81,254,250,239,213,254,254,239]},{"1806353":[253,136,119,128,255,224,31,80,175,234,21,212,43,238,17,253]},{"1806370":[255]},{"1806372":[255]},{"1806374":[255]},{"1806376":[255]},{"1806378":[255]},{"1806380":[255]},{"1806382":[255]},{"1806400":[243,28,18,251,16,177,237,255,22,255,190,254,85,255,191,253,12,5,232,8,178,76,253,1,254,1,254,1,254]},{"1806430":[245,2,5,1,4,3,1]},{"1806438":[1]},{"1806448":[2]},{"1806450":[4]},{"1806454":[2]},{"1806460":[1]},{"1806462":[8]},{"1806464":[49,191,11,159,21,31,31,191,119,126,255,127,223,235,255,233,127]},{"1806482":[95,32,223,32,151,224,126,129,93,128,234,20,65,22]},{"1806497":[128,128]},{"1806518":[8]},{"1806522":[34]},{"1806524":[1]},{"1806526":[168]},{"1806528":[87,255,190,252,94,251,255,208,127,171,252,129,248,142,248,165,248,6,253,2,250,5,80,47,170,84]},{"1806555":[127,128,119,2,93]},{"1806576":[1]},{"1806580":[1]},{"1806582":[128]},{"1806584":[1]},{"1806586":[129]},{"1806588":[12]},{"1806590":[161]},{"1806592":[127,58,127,244,127,57,119,198,253,34,252,131,128,255]},{"1806607":[255,58,197,84,139,40,198]},{"1806615":[185]},{"1806617":[223]},{"1806619":[127]},{"1806621":[127]},{"1806623":[255]},{"1806642":[32]},{"1806644":[17]},{"1806646":[198]},{"1806648":[34]},{"1806650":[131]},{"1806652":[255]},{"1806654":[255]},{"1806656":[255,172,255,32,252,19]},{"1806663":[242]},{"1806665":[255]},{"1806667":[255]},{"1806669":[255]},{"1806671":[255,168,83]},{"1806675":[223]},{"1806677":[239]},{"1806679":[255]},{"1806681":[255]},{"1806683":[255]},{"1806685":[255]},{"1806687":[255]},{"1806704":[4]},{"1806706":[32]},{"1806708":[19]},{"1806710":[242]},{"1806712":[255]},{"1806714":[213]},{"1806716":[186]},{"1806718":[85]},{"1806720":[249,66,16,228]},{"1806725":[230]},{"1806727":[255]},{"1806729":[255,34,255]},{"1806733":[251,162,243]},{"1806737":[191]},{"1806739":[255]},{"1806741":[255]},{"1806743":[255]},{"1806745":[255]},{"1806747":[255]},{"1806749":[243,8,251]},{"1806764":[12]},{"1806766":[4,8,66]},{"1806770":[228]},{"1806772":[230]},{"1806774":[213]},{"1806776":[170]},{"1806778":[98]},{"1806780":[164]},{"1806782":[226]},{"1806784":[2,189,1,38]},{"1806789":[255,10,255]},{"1806793":[255,170,255,84,255,170,255,12,255,8,247]},{"1806805":[255]},{"1806807":[255]},{"1806809":[255]},{"1806811":[255]},{"1806813":[255]},{"1806815":[255,4,8]},{"1806832":[160]},{"1806836":[170]},{"1806838":[10]},{"1806842":[170]},{"1806844":[84]},{"1806846":[170]},{"1806848":[168,87,68,187]},{"1806853":[255,170,255,17,255,168,252,80,250,69,85]},{"1806865":[255]},{"1806867":[255]},{"1806869":[255]},{"1806871":[255,1,255,3,252,5,250,170,85]},{"1806888":[1]},{"1806896":[2]},{"1806900":[160]},{"1806902":[170]},{"1806904":[16]},{"1806906":[168]},{"1806908":[80]},{"1806910":[69]},{"1806912":[40,215,2,255]},{"1806917":[254,196,212,20,190,17,85,192,234,21,21]},{"1806929":[255]},{"1806931":[255,1,254,171,212,1,62,170,21,213,106,234,21]},{"1806950":[128]},{"1806952":[64,128,192,128,64,128]},{"1806960":[128]},{"1806962":[2]},{"1806966":[68]},{"1806968":[84]},{"1806970":[17]},{"1806974":[21]},{"1806977":[255,32,125,4,62,4,21]},{"1806985":[42,9,1,168,178]},{"1806991":[8]},{"1806993":[255,128,125,193,62,96,21,213,42,254,9,77,162,247]},{"1807010":[2,2]},{"1807014":[138,10]},{"1807020":[16,8,8]},{"1807026":[32]},{"1807028":[4]},{"1807030":[132]},{"1807034":[9]},{"1807036":[184]},{"1807038":[8]},{"1807041":[255]},{"1807043":[93,1,27,1,177]},{"1807049":[170]},{"1807052":[162,162]},{"1807057":[255,128,93,164,27,4,17,85,170,221]},{"1807068":[93,162,119]},{"1807074":[34,34,64]},{"1807078":[234,10]},{"1807082":[34,34]},{"1807086":[136,136]},{"1807092":[65]},{"1807094":[225]},{"1807100":[162]},{"1807104":[4,224]},{"1807107":[81,32,168,64,64,34,170,32,192,160,160]},{"1807119":[128,27,224,4,81,119,168,85,64,85,170,117,96,255,128,85]},{"1807136":[4,4,170,170,32]},{"1807142":[234,138]},{"1807146":[138,74,192,32,170,42]},{"1807158":[32]},{"1807160":[34]},{"1807162":[160]},{"1807164":[64]},{"1807166":[128]},{"1807168":[22,238,4,84,1,170]},{"1807175":[16]},{"1807177":[136]},{"1807183":[48,7,254,5,84,16,171,69,16,118,136,85]},{"1807196":[187]},{"1807198":[69]},{"1807200":[6,16,172,170,68,69,170,170,1,1,170,170,68,68,186,138]},{"1807230":[48]},{"1807232":[85,170,16,68,1,42,72,12,10,158,8,12]},{"1807245":[1]},{"1807247":[69]},{"1807249":[255,1,84,208,43,21,64,106,142,89,8,170]},{"1807262":[16]},{"1807265":[85,170,186,4,5,170,230,31,5,174,162,85,84,239,170]},{"1807286":[8]},{"1807288":[16]},{"1807290":[4]},{"1807292":[1]},{"1807294":[69]},{"1807296":[86,168,21]},{"1807300":[41]},{"1807302":[80,68,4]},{"1807306":[1]},{"1807309":[112,96,116,1,254,192,21,138,1,97,64,170,4,69]},{"1807324":[138]},{"1807326":[65,64]},{"1807329":[86,42,63,116,101,238,154,81,85,186,186,117,5,254,138]},{"1807348":[16]},{"1807350":[36]},{"1807356":[112]},{"1807358":[52]},{"1807360":[255,224,5,16,8]},{"1807366":[81,1,8,8,12,69,24,152,1,21,232,231,64,21,178,8,17,65,171,8,4,4,58,24,1,1,224,23,186,191,69,77,175,238,92,85,247,170,221,69,255,234]},{"1807418":[81]},{"1807420":[128]},{"1807422":[20]},{"1807424":[239,24,65,8,137,128,193,145,128,129,69,1,8]},{"1807438":[17,17,56,215,28,81,171,136,73,17,168,129,69,1,170]},{"1807454":[17,17]},{"1807457":[223,162,251,212,72,187,62,213,87,187,186,85,85,255,238]},{"1807476":[20]},{"1807478":[128]},{"1807488":[255]},{"1807490":[220]},{"1807492":[154,48,17,16,34,2,5,5,170]},{"1807505":[255,25,196,112,154,49,48,170,2,5,5,170]},{"1807521":[255,34,231,21,238,158,238,87,85,255,250,85,85,255,255]},{"1807540":[1]},{"1807552":[236,3,68,129,15,8,85]},{"1807560":[170]},{"1807562":[85]},{"1807564":[170]},{"1807566":[17,16,26,230,18,198,157,138,197]},{"1807576":[162,8,85]},{"1807580":[170]},{"1807582":[17,16,2,245,168,255,120,210,26,186,85,93,170,170,85,85,254,238]},{"1807616":[254]},{"1807618":[79]},{"1807620":[226,1,98,14,165,4,21,19,152,53,131,8,152,102,4,67,120,129,118,9,179,15,176,16,176,2,145,53,1,103,168,251,7,157,175,152,71,88,16,239,64,127,241,14]},{"1807668":[2]},{"1807670":[39]},{"1807672":[7]},{"1807674":[31]},{"1807676":[63]},{"1807678":[255]},{"1807680":[245]},{"1807682":[255]},{"1807684":[254]},{"1807686":[215,128,63,192,149,128,251]},{"1807694":[85,128,138,117,160,95,113,142,83,132,189,194,85]},{"1807708":[59,128,85,128,10,117]},{"1807715":[95]},{"1807717":[143,40,172,192,106,42,239,68,166,42,170]},{"1807736":[128]},{"1807738":[192]},{"1807740":[192]},{"1807742":[128]},{"1807746":[192]},{"1807748":[169]},{"1807750":[247]},{"1807752":[251]},{"1807754":[209,128,191]},{"1807758":[21,16,255]},{"1807762":[63,192,214,41,247]},{"1807768":[255]},{"1807770":[215,128,255]},{"1807774":[85,16,255]},{"1807778":[63,192,86,169,8,125,2,229,40,63]},{"1807789":[111,170,239]},{"1807802":[128]},{"1807806":[16]},{"1807808":[64,160,32]},{"1807812":[3]},{"1807814":[173]},{"1807816":[254]},{"1807818":[221]},{"1807820":[190]},{"1807822":[87,96,255]},{"1807826":[255]},{"1807828":[255]},{"1807830":[127,128,175,80,215,8,187,4,83,100,143,112,223]},{"1807844":[252,3,82,172,1,254,34,253,1,222,168,255]},{"1807872":[184,136,34,32,128,2,108]},{"1807880":[224,8,240]},{"1807884":[252]},{"1807886":[255]},{"1807888":[119]},{"1807890":[255,32,255]},{"1807894":[255,128,255]},{"1807898":[255]},{"1807900":[255]},{"1807902":[127,128,207,16,221,2,191,64,83,172,31,224,15,240,3,252]},{"1807919":[255]},{"1807922":[32]},{"1807936":[183,159,9,69,226,34,192,1]},{"1807945":[170]},{"1807947":[4]},{"1807949":[10,152]},{"1807952":[104,16,254]},{"1807956":[221]},{"1807958":[255]},{"1807960":[255]},{"1807962":[255]},{"1807964":[255]},{"1807966":[255]},{"1807968":[255]},{"1807970":[247,8,63,192,63,192,255]},{"1807978":[255]},{"1807980":[255]},{"1807982":[103,152]},{"1808000":[255,253,211,221,186,187,100,49,127,138,100,21,2,170,1]},{"1808016":[6,4,42]},{"1808020":[69,14,251,36,240,5,251]},{"1808028":[253]},{"1808030":[254,1,249]},{"1808034":[243,12,251,4,159,64,143,112,159,96,255]},{"1808046":[255]},{"1808048":[4]},{"1808054":[36]},{"1808056":[5]},{"1808062":[1]},{"1808064":[84,84,186,186,221,221,119,119,255,255,71,85,51,159,5,1]},{"1808081":[171]},{"1808083":[69]},{"1808085":[34,136]},{"1808090":[184,2,252,16,250,52,255]},{"1808098":[255]},{"1808100":[255]},{"1808102":[255]},{"1808104":[255]},{"1808106":[255]},{"1808108":[207]},{"1808110":[207,48]},{"1808122":[2]},{"1808124":[16]},{"1808126":[4]},{"1808128":[142,130,133,141,93,90,249,247,215,215,254,254,241,233,94,94,140,113,10,116,7,160,6,8]},{"1808153":[40]},{"1808155":[1,28,10,160,21,247]},{"1808162":[251]},{"1808164":[250,5,255]},{"1808168":[255]},{"1808170":[255]},{"1808172":[235,4,247,8]},{"1808182":[8]},{"1808192":[168,168,130,131,225,225,131,131]},{"1808201":[1,251,251,20,108,208,200,137,84,1,124,32,30]},{"1808215":[124,1,254]},{"1808219":[4,48,203,56,7,254]},{"1808226":[255]},{"1808228":[255]},{"1808230":[255]},{"1808232":[255]},{"1808234":[255]},{"1808236":[239,16,223,32,1]},{"1808252":[72]},{"1808256":[191,63,69,69,11,27,25,169,202,202,42,170,32,32]},{"1808272":[191,64,69,186,27,228,145,102,10,181]},{"1808283":[213,32,223]},{"1808287":[255,127]},{"1808290":[255]},{"1808292":[255]},{"1808294":[255,16,255]},{"1808298":[255]},{"1808300":[255]},{"1808302":[255]},{"1808310":[32]},{"1808314":[128]},{"1808320":[255,255,245,245,251,251,5,5,155,171,45,61,187,163,9,25,255]},{"1808338":[245,10,251,4,1,250,179,68,21,194,187,68,25,238,255]},{"1808354":[255]},{"1808356":[255]},{"1808358":[255]},{"1808360":[255]},{"1808362":[255]},{"1808364":[231,16,247]},{"1808382":[8]},{"1808384":[245,250,255,252,255,255,95,95,191,191,31,31,191,191,85,85,240,15,252,3,255]},{"1808406":[95,160,191,64,31,224,191,64,85,170,255]},{"1808418":[255]},{"1808420":[255]},{"1808422":[255]},{"1808424":[255]},{"1808426":[255]},{"1808428":[255]},{"1808430":[255]},{"1808448":[87,254,255,255,95,250,254,244,119,255,254,247,255,235,255,230,254,1,221]},{"1808468":[186,5,116,11,235]},{"1808474":[84,9,170,20]},{"1808479":[25]},{"1808489":[1]},{"1808498":[34]},{"1808500":[64]},{"1808502":[128]},{"1808504":[20]},{"1808506":[162]},{"1808508":[65]},{"1808510":[230]},{"1808512":[119,170,255,231,255,250,127,104,127,125,79,200,215,212,195,254,168,85,64,24,160,5]},{"1808535":[151,168,2,48,7,48,27]},{"1808543":[29]},{"1808556":[16]},{"1808560":[2]},{"1808562":[167]},{"1808564":[90]},{"1808566":[104]},{"1808568":[85]},{"1808570":[200]},{"1808572":[196]},{"1808574":[246]},{"1808576":[248,207,252,128,252,199,240,11,224,30,192,63,224,191]},{"1808591":[255,128,55]},{"1808595":[127]},{"1808597":[59]},{"1808599":[255,1,254]},{"1808603":[253]},{"1808605":[95]},{"1808607":[255]},{"1808624":[77]},{"1808626":[128]},{"1808628":[199]},{"1808630":[11]},{"1808632":[30]},{"1808634":[62]},{"1808636":[191]},{"1808638":[253]},{"1808640":[64,191,132,125,8,187,10,255]},{"1808649":[255,2,255,1,255,42,255]},{"1808657":[255,6,249,14,247,6,255]},{"1808665":[255]},{"1808667":[255]},{"1808669":[255]},{"1808671":[255]},{"1808675":[4,2,8,6,8]},{"1808688":[191]},{"1808690":[113]},{"1808692":[177]},{"1808694":[121]},{"1808696":[126]},{"1808698":[86]},{"1808700":[233]},{"1808702":[122]},{"1808705":[255,2,255,4,255,170,255,5,255,170,255,69,143,254,199]},{"1808721":[255]},{"1808723":[255]},{"1808725":[255]},{"1808727":[255]},{"1808729":[255]},{"1808731":[255,80,143,80,215]},{"1808748":[32,64,64,184,238]},{"1808754":[86]},{"1808756":[166]},{"1808758":[234]},{"1808760":[165]},{"1808762":[170]},{"1808764":[109]},{"1808766":[134]},{"1808768":[1,255,168,249,83,251,165,245,86,255,168,254,95,254,245,244]},{"1808785":[255,6,249,4,251,10,245]},{"1808793":[255]},{"1808795":[252,1,254,10,244]},{"1808805":[2]},{"1808807":[1,1,7,2,2]},{"1808813":[15,1,113,161]},{"1808818":[168]},{"1808820":[83]},{"1808822":[165]},{"1808824":[87]},{"1808826":[170,1,95]},{"1808830":[245]},{"1808832":[21,255,169,253,85,255,37,117,215,64,32,64,42,97,21,80]},{"1808849":[255,2,253]},{"1808853":[255,138,117,191,111]},{"1808859":[64,20,36,42,80]},{"1808872":[111,255,96,64,75,79,69,69,21]},{"1808882":[169]},{"1808884":[85]},{"1808886":[37]},{"1808888":[255]},{"1808890":[96,159,111,128,85,128,4,238,245,213,218,250,85,85]},{"1808905":[240,1]},{"1808908":[31,224,16]},{"1808912":[113,238,74,149,5,250,170,85,15]},{"1808924":[31,24,239]},{"1808928":[64,32]},{"1808931":[97]},{"1808933":[128]},{"1808936":[240,240,1]},{"1808940":[248,255,16,16,4]},{"1808946":[149]},{"1808948":[218]},{"1808950":[85]},{"1808952":[240]},{"1808954":[1,254,255]},{"1808958":[16]},{"1808960":[106,234,84,84,170,162,16,16,170,13,37,27,196,39,4,232,21,234,171,84,85,166,239,16,82,74]},{"1808987":[24,131,35,17,18]},{"1808993":[40]},{"1808996":[8,44]},{"1809000":[167,231,56,24,100,163,239,114,106]},{"1809010":[84]},{"1809012":[174]},{"1809014":[16]},{"1809016":[239]},{"1809018":[56,199,227,28,254,1,170,170]},{"1809029":[192]},{"1809031":[138]},{"1809033":[1,55,130,235,251,196,19,85,170,255,32,63]},{"1809046":[117]},{"1809048":[254,22,89,131,252,16,16,11]},{"1809059":[32,192,128,138]},{"1809064":[1,22,7,139,4,16,200,19,170]},{"1809074":[32]},{"1809076":[192]},{"1809078":[138]},{"1809080":[23]},{"1809082":[143,112,16,239,211,44,128,144]},{"1809091":[58]},{"1809093":[68,6,175,3,31,2,255,155,196,213,221,111,192,197,192,187,144,84,4,227,67]},{"1809116":[44,64,254,8,16,64,58,192,68,144,175,2,31,72,255,66,11,68,34,8,208]},{"1809138":[250]},{"1809140":[212]},{"1809142":[171]},{"1809144":[92]},{"1809146":[255]},{"1809148":[71,184,8,247]},{"1809153":[17]},{"1809155":[168]},{"1809157":[69]},{"1809159":[239]},{"1809161":[119]},{"1809163":[255,255,93,130,109,238,64,85]},{"1809172":[186,16,16]},{"1809176":[136]},{"1809180":[171,11,21,238,17,64,170,2,69,16,239]},{"1809192":[119]},{"1809194":[255]},{"1809196":[95,246,140,101,81]},{"1809202":[168]},{"1809204":[85]},{"1809206":[239]},{"1809208":[119]},{"1809210":[255]},{"1809212":[246]},{"1809214":[101,154,80,101,32,207]},{"1809221":[223,3,254,1,254,2,255,66,254,160,225,234,96]},{"1809236":[32]},{"1809238":[1,1]},{"1809241":[1,3]},{"1809244":[71,69,90,174,69,48,223,32,223]},{"1809254":[254,3,255,1,254,2,253,6,46,213,5]},{"1809266":[223]},{"1809268":[222]},{"1809270":[254]},{"1809272":[255]},{"1809274":[254,1,191]},{"1809278":[87,40]},{"1809281":[87,128,253,96,127,64,117,66,124,196,182,43,99,118,253,168]},{"1809298":[128,128,32,32,64,192,100,131,55,185]},{"1809309":[132,1,3,87]},{"1809314":[255,2,255,64,127,138,91,231,153,124,16,255,1,254,87]},{"1809330":[125]},{"1809332":[95]},{"1809334":[53]},{"1809336":[127]},{"1809338":[253,2,255]},{"1809342":[255]},{"1809345":[78,6,87,2,255,141,221,137,63,159,23,243,255,125,249,160]},{"1809362":[4,4,2,6,5,5,24,120,21,69,14,10,5,7,95,17,255,168,255,4,255,34,223,112,39,224,15,240,5,248,78]},{"1809394":[83]},{"1809396":[249]},{"1809398":[216]},{"1809400":[119]},{"1809402":[226,24,249,4,248,6]},{"1809409":[10,23,23,135,175,155,155,210,186,159,223,255,255,81,85,160]},{"1809426":[21,21,226,162,17,17,130,162,21,117,170,170,81,255,95,85,255,136,207,112,255,4,191,101,223,64,255]},{"1809454":[85,4,10]},{"1809458":[98]},{"1809460":[77]},{"1809462":[234]},{"1809464":[24]},{"1809466":[138,32,85]},{"1809471":[170,10,42,84,84,168,170,187,187,170,170,238,238,253,253,3,16,138,10,84,84,168,168,17,17,170,170,68,68,170,170]},{"1809503":[184,127,85,255,171,255,85,255,68,255,85,238,17,252,3,16,87,32]},{"1809524":[2]},{"1809526":[170]},{"1809530":[170]},{"1809532":[84]},{"1809535":[168,170,2]},{"1809540":[170,170,128,128,170,170,234,232,85,84,14,13,170,2,8]},{"1809556":[234,170,13]},{"1809560":[171,170,87,64,4,6,12,168,87,85,247,255,191,85,242,127,254,85,234,21,84,171,8,86]},{"1809590":[128]},{"1809594":[170]},{"1809596":[84]},{"1809598":[14,161,170]},{"1809602":[1,96,139,181,32]},{"1809608":[151,175,173,143,115,100,151,210,170]},{"1809618":[65,96,143,160,104,62,160,160,72,56,32,36,60,214,85,85,190,190,255,47,153,215,224,127,152,79,112,135,66,229]},{"1809650":[64]},{"1809652":[79]},{"1809654":[63]},{"1809656":[63]},{"1809658":[159,32,87,8,7]},{"1809664":[70,1,172,129,156,35,188,65,188,129,122,131,101,14,236,29,225,249,129,144,197,199,5,6]},{"1809689":[66,10,15,12,151,11,25,32,223,2,255,68,186,7,251]},{"1809705":[255,14,242,20,233,6,240,127]},{"1809714":[255]},{"1809716":[254]},{"1809718":[255]},{"1809720":[255]},{"1809722":[254,1,248]},{"1809726":[240]},{"1809728":[111]},{"1809730":[85]},{"1809732":[171,1,144,16,216,216,122,186,149,3,80,47,191,64,213]},{"1809748":[43,129,41,160,237,232,69,192,246,3,175,47]},{"1809761":[80,170,42,84,212,198,191,138,247,58,5,20,104,96,208]},{"1809780":[1]},{"1809782":[192]},{"1809784":[192]},{"1809786":[122,128,22,1]},{"1809791":[47,238,1,61,8,179,17,80,72]},{"1809801":[12,146,142,136,47,18,251,159,1,125,8,187,17,93,72,239,4,77,15,111,111,253,255,96,122,163,194,68,78,162,167,16,251,176,80,144,136,8,16,1]},{"1809842":[40]},{"1809844":[17]},{"1809846":[72]},{"1809848":[4]},{"1809850":[172,3]},{"1809853":[119,1,238,191]},{"1809858":[213]},{"1809860":[127,64,85,69,154,128,114,95,193,207,250,135,255]},{"1809874":[213]},{"1809876":[255,64,87,69,191,135,250,255,255,247,125,135,128,79,170,63]},{"1809893":[170,168,170,88,103]},{"1809899":[85]},{"1809901":[201,120]},{"1809906":[128]},{"1809908":[64]},{"1809910":[69]},{"1809912":[144]},{"1809915":[170,6,48,124,131,254]},{"1809922":[215]},{"1809924":[255]},{"1809926":[119,98,191,213,1,1,84,200,135,120,255]},{"1809938":[255]},{"1809940":[255]},{"1809942":[247,98,255,213,127,65,183,192,255,248,1,254,40,215]},{"1809957":[255,8,136]},{"1809961":[128,128,62,28,35,7]},{"1809974":[98]},{"1809976":[85]},{"1809978":[1,192,20,200,127,128,250,18,216,1,255,1,247,162,252,84,78,81,112,95,232,25,252,18,252]},{"1810004":[255,1,247,162,255,84,122,80,223,17,251,26,7,232,38,217]},{"1810021":[254,8,92]},{"1810025":[139,143,160,96,158,232,5,16]},{"1810036":[1]},{"1810038":[162]},{"1810040":[84]},{"1810042":[90,5,1,96,240,14,136,42,43,70,195,44,247,132,249,194,238,65,182]},{"1810062":[255,160,247]},{"1810066":[255,2,247]},{"1810070":[251,140,247,200,251,68,253,2,126,161,127,128,84,161,35,220,4,123,14,49,149,42,139,116,65,30]},{"1810098":[2]},{"1810102":[128]},{"1810104":[200]},{"1810106":[196]},{"1810108":[2]},{"1810110":[33,128,55,234,41,84,19,170,84,1,166,8,103,17,115,136,222,37,88,165,254,1,236,17,171,84,95,160,191,65,252,3,223,4,255]},{"1810146":[215,40,255]},{"1810150":[255]},{"1810152":[248,7,216,38,143,112,33,218,133]},{"1810162":[1]},{"1810164":[17]},{"1810166":[84]},{"1810168":[160]},{"1810170":[65]},{"1810172":[3]},{"1810174":[4,32,217,251,246,93,243,191,87,17,253,46,149,196,153,42,221,64]},{"1810193":[38,8,163,4,72,168,70,128,83,234,145,103,144,186,69,255]},{"1810210":[255]},{"1810212":[255]},{"1810214":[255]},{"1810216":[127,128,127]},{"1810220":[254,1,71,184,34]},{"1810226":[163]},{"1810228":[72]},{"1810230":[70]},{"1810232":[83]},{"1810234":[145]},{"1810236":[144]},{"1810238":[5]},{"1810240":[124,108,152,136,4,108,166,118,205,189,15,85,221,170,80,5,16,131,56,79,120,227,88,193,112,2,240,10,98,21,175,80,239,16,247]},{"1810276":[239,16,223,32,191,64,159,96,191,64,255]},{"1810290":[8]},{"1810294":[128]},{"1810298":[10]},{"1810300":[21]},{"1810302":[80]},{"1810310":[164,162,12,15,175,175,192,224,226,74]},{"1810321":[255]},{"1810323":[255]},{"1810325":[255,12,83,1,254]},{"1810331":[80]},{"1810333":[63]},{"1810335":[189,255]},{"1810338":[255]},{"1810340":[255]},{"1810342":[243,8,255]},{"1810346":[255]},{"1810348":[255]},{"1810350":[255]},{"1810358":[2]},{"1810360":[2]},{"1810364":[32]},{"1810366":[168]},{"1810368":[170,170,1,1,34,34]},{"1810376":[10,10]},{"1810380":[2,2,128,152,170,85,1,254,34,221]},{"1810391":[255,10,245]},{"1810395":[255,2,253,24,103,255]},{"1810402":[255]},{"1810404":[255]},{"1810406":[255]},{"1810408":[255]},{"1810410":[255]},{"1810412":[255]},{"1810414":[255]},{"1810432":[239,239,85,85,171,171,1,1,147,147,69,69,42,42,5,5,239,16,85,170,171,84,1,254,131,108,69,186,42,213,5,250,255]},{"1810466":[255]},{"1810468":[255]},{"1810470":[255]},{"1810472":[255]},{"1810474":[255]},{"1810476":[255]},{"1810478":[255]},{"1810496":[127,174,255,237,243,233,243,123,255,151,205,159,168,211,200,255,170,81,64,18,160,30]},{"1810519":[140,128,104,32,80,36,107,48,55]},{"1810541":[16,16,32,4]},{"1810546":[173]},{"1810548":[73]},{"1810550":[123]},{"1810552":[23]},{"1810554":[143]},{"1810556":[129]},{"1810558":[205]},{"1810560":[112,255,112,255,227,191,202,255,132,255,128,255]},{"1810573":[255]},{"1810575":[255]},{"1810577":[143]},{"1810579":[141]},{"1810581":[92]},{"1810583":[53]},{"1810585":[123]},{"1810587":[127]},{"1810589":[255]},{"1810591":[255]},{"1810608":[243]},{"1810610":[255]},{"1810612":[191]},{"1810614":[255]},{"1810616":[255]},{"1810618":[255]},{"1810620":[255]},{"1810622":[255]},{"1810625":[255,3,253,4,255,10,254]},{"1810633":[255,42,255,5,255,186,255]},{"1810641":[255,1,253,3,255,3,126]},{"1810649":[255]},{"1810651":[255]},{"1810653":[255]},{"1810655":[255]},{"1810658":[3]},{"1810661":[7,2]},{"1810672":[255]},{"1810674":[222]},{"1810676":[252]},{"1810678":[252]},{"1810680":[234]},{"1810682":[239]},{"1810684":[175]},{"1810686":[186]},{"1810688":[1,255,42,255,85,255,174,255,17,251,161,245,91,255,255,255]},{"1810705":[255]},{"1810707":[255]},{"1810709":[255]},{"1810711":[255,4,251,12,245,6,255]},{"1810719":[255]},{"1810727":[6]},{"1810729":[1,2,4,6,9]},{"1810735":[53,233]},{"1810738":[250]},{"1810740":[245]},{"1810742":[174]},{"1810744":[145]},{"1810746":[163]},{"1810748":[89]},{"1810750":[255]},{"1810752":[101,239,143,207,69,239,245,245,86,254,253,252,223,250,85,81,40,215,48,207,16,239,10,245,1,254,2,252]},{"1810781":[250,170,81]},{"1810785":[60]},{"1810787":[133]},{"1810789":[64]},{"1810791":[244]},{"1810793":[18,1,29,5,223,4,69,77]},{"1810802":[143]},{"1810804":[69]},{"1810806":[245]},{"1810808":[86]},{"1810810":[253]},{"1810812":[223]},{"1810814":[85]},{"1810816":[87,255,245,245,250,250,108,112,250,225,28,199,26,106,20,96]},{"1810833":[255,10,245,5,250,131,96,28,228,88,12,197,74,139,1]},{"1810849":[67]},{"1810851":[5]},{"1810853":[154,20,12,27,191,131,247,48,90,116,117,87]},{"1810866":[245]},{"1810868":[250]},{"1810870":[100]},{"1810872":[255]},{"1810874":[223]},{"1810876":[26]},{"1810878":[117]},{"1810880":[14,138,4,16,129,226,96,9,180,147,66,145,10,1,6,168,49,42,203,64,13,164,164,40,68,148,34,2,254,72,87,17,164,174,84,84,98,231,107,104,55,183,211,211,9,79,169,189,174,64,84,32,231,16,106,16,183,8,211,12,79]},{"1810942":[189,2,232,129]},{"1810947":[2,32,5,2,173,129,87,11,244,159,97,183,194,22,134,253,45,218,130,82,18,40,8,11,10,30,30,109,224,105,239,2,47,37,167,175,183,215,223,254,255,255,63,122,231,239]},{"1810994":[47]},{"1810996":[167]},{"1810998":[191]},{"1811000":[223]},{"1811002":[255]},{"1811004":[191]},{"1811006":[127]},{"1811008":[196,16,15,241,30,224,110,150,239,80,240,138,240]},{"1811022":[3,32,238,169,12,12,31,30,89,78,160,128,107,32,199,65,253,206,147,252,254,252,254,254,230,87,223,224,154,193,49,134,237,208,253,2,254,1,254,1,255]},{"1811064":[239]},{"1811066":[241,14,246,9,16,239,71,185,103,185,254,176,185,64,230,212,100,195,107,6,44,223,198,70,68,129,108,36,27,90,127,4,216,55,182,203,174,76,127,239,59,229,51,25,39,196,190]},{"1811114":[62,133,225,38,46,243,255]},{"1811122":[255]},{"1811124":[30,193,120,135,12,243,13,242,2,253,78,177,236,1,255,187,255,24,17,40,198,110,176,111,168,253,31,63,154,1,68,1,103,93,174,128,127,119,47,244,138,29,64,159,104,145,187,255,152,58,191]},{"1811176":[49,110,164,79,53,72,159,255,241,14,255]},{"1811188":[255]},{"1811190":[23,232,110,145,100,155,8,247,128,127,107,190,208,11,255,160,32,239]},{"1811209":[170,64,191,197,213,255,255]},{"1811217":[129,180,139,88,248,223,32,255,101,191,68,239,213]},{"1811231":[255,1,212,88,35,167,160,239,16,117,170,4,191,85,128,255,255,128,127,227,28,255]},{"1811254":[16,239,186,69,4,251,197,58]},{"1811263":[255,8,216,205,96,129,32,59,224,6,128,28,193,60,3,57,131,36,215,16,130,104,30,224,36,209,120,161,98,132,71,5,1,20,195,144,47,152,119,192,63,112,175,34,221,69,59,2,253,199,56,15,240,255]},{"1811318":[63,192,190,65,127,128,126,128,121,132,53,56,208,2,155,39,31,76,102,201,65,190,254,126,237,211,7,203,26,39,55,71,52,143,120,119,62,193,126,255,195]},{"1811360":[3,243,32,192,76,247,195,156,209,8,129,190,127,1,238,255,243,12,224,16,255]},{"1811382":[148,3,40,23]},{"1811387":[127,127,128,193,62,201,159,53,138,116,199,185,195,182,3,121,7,118,6,116,12,134,37,194,69,135,76,71]},{"1811416":[199,200,137,141,142,133,137,135,5,122,192,190,197,62,131,191,199,63,139,118,135,123,143,124,126,129,252,3,254,1,59,68,250,5,253,2,247,8,243,12,63,117,224,32,127,127,199,227,81,254,139,127,199,147,167,127,10,58,61,194]},{"1811477":[127,216,71,254]},{"1811482":[127]},{"1811484":[130,59,6,1,240,5,29,50,254,1,248,163,255,251,255,203,63,213,3,251,138,53,29,226,128,126,216,36,4,251,116,139,234,21,250,5,144,127,143,79,255,248,254,248,94,166,230,239,129,203,136]},{"1811536":[128,239,16,239,10,249,26,227,160,1,243,16,193,146,37,243,111,127,16,239,15,247,19,253,225,255,209,237,196,127,103,152,128,16,16,232,11,4,31]},{"1811576":[190,65,61,194,255]},{"1811582":[123,132,31,195,247,151,64,9,134,16,7,144,95,32,31,64,92]},{"1811600":[8,216,24,168,144,118,32,233,193,105,129,128,130,163,33,162,248,215,8,247,176,79,96,223,193,190,129,127,131,125,163,94,63]},{"1811634":[31,32,191,64,127,128,127,128,254,1,255]},{"1811646":[255]},{"1811648":[65,204,195,208,197,144,3,96,223,48,14,128,244,128,31,129,142,202,100,92,48,2,136,92,16,32,80,49,161,170,163,99,226,25,44,243,112,239,184,119]},{"1811689":[127,241,46,225,94,226,29,163,68,207,16,191,64,31,224,63,128,127]},{"1811708":[190,65,255]},{"1811712":[83,2,197,46,176,111,235,89,191,159,84,191,18,238,253,22,38,134,74,110,105,79,205,210]},{"1811737":[31,144,175,2,81,20,136,8,243,80,165,9,246,132,127,64,63,128,255,175,127,118,255,200,36,240,10,192,13,192,27,64,151,128,63,3,124,21,232,136,116,128]},{"1811780":[169,64,250,255,170,190,5,175,241,127,111,64,119,119,106,106,86,86,82,5,3,252,1,254,113,4,80,175,4,136,21,170,64,169,168,255,1,255]},{"1811819":[255,138,255,208,127]},{"1811825":[119,21,106]},{"1811829":[86]},{"1811831":[255,1,254]},{"1811835":[255]},{"1811837":[255,208,47,20,59,95,18,192]},{"1811846":[118,157,72,200,69,254,4,255,255]},{"1811856":[99,123,160,178,31,31,107,255,104,128,1,255,4,219]},{"1811871":[255,132,12,69,237,32,192]},{"1811879":[246,55,232]},{"1811883":[255,32,255]},{"1811887":[255,163,80]},{"1811891":[178,32,31]},{"1811895":[255]},{"1811897":[223]},{"1811899":[255]},{"1811901":[255]},{"1811903":[255,3,254,174,173,9,13,21,233,164,164,11,243,21,246,254,12,239,254,7,175,209,209,229,233,174,4,5,248,28,227,13,250,16,19,80,6,38,13,98,25,91,170,14,255,8,255,1,247,236,1,80,171,32,210,4,234]},{"1811961":[245,4,251,8,247,1,254,17,254,168,239,252,159,7,135,34,226,133,125,192,191,128,124,239,94,71,175,3,159,248,255,125,255,127,255,255,127,28,252,1,160,16,64,96,96,128]},{"1812008":[64,160,24,133,12,192,3,224,79,16,23,168,3,156]},{"1812023":[255]},{"1812025":[95]},{"1812027":[250]},{"1812029":[255]},{"1812031":[255,213,53,28,222,119,247,51,49,126,127,223,116,246,174,175,21,229,53,254,190,247,119,247,243,255,255,255,255,247,255,191,151,193,14]},{"1812067":[95,8,243,8,49]},{"1812073":[126]},{"1812075":[85]},{"1812077":[175,64,173,96,27,128,35]},{"1812085":[12,4,202]},{"1812089":[129]},{"1812091":[170]},{"1812093":[80]},{"1812095":[250,213,138,158,200,47,192,35,64,111,68,31,251,223,240,7,230,127,64,63,8,223,64,255,192,63,68,255,187,223,208,247,166,10,245,1,254,40,151,48,23,40,147]},{"1812139":[71,96,143,8,217]},{"1812147":[8,64,32,104,144,4,192,56,131,16,96,38,128,118,136,247,2,206,36,255]},{"1812168":[252,18,255,8,255,64,255,144,253,2,190,67,119,140,254,1,223,48,255,8,253,66,255,144,139,84,73,180,185,70,1,254,35,220]},{"1812203":[247,2,253]},{"1812207":[127,2]},{"1812210":[67]},{"1812212":[136,4,1]},{"1812216":[32,16,8]},{"1812220":[2,64,128,16,61,210,249,36,97,170,89,68,69,170,219,20,247,29,245,181,250,21,254,33,222,33,222,113,186,117,190,81,111,149,250,189,167,72,7,216,175,80,135,40,239,16,69,170,176,75,7,234,21]},{"1812274":[33]},{"1812276":[1]},{"1812278":[65]},{"1812280":[69]},{"1812282":[81]},{"1812284":[132,1,16,162,125,170,250,85,221,187,95,21,95,170,89,4,155,37,80,5,2,213,7,168]},{"1812309":[102,160,74,160,85,167,88,103,153,175,80,255]},{"1812322":[253,2,255]},{"1812326":[255]},{"1812328":[255]},{"1812330":[252,2,254,2,255]},{"1812336":[213]},{"1812338":[168]},{"1812340":[102]},{"1812342":[74]},{"1812344":[85]},{"1812346":[88]},{"1812348":[153]},{"1812350":[80]},{"1812352":[208,208,168,42,84,213,235,87,85,213,255,93,125,173,126,21]},{"1812369":[47]},{"1812371":[215]},{"1812373":[171]},{"1812375":[188]},{"1812377":[170]},{"1812379":[162,128,82,128,107,255]},{"1812386":[255]},{"1812388":[255]},{"1812390":[255]},{"1812392":[255]},{"1812394":[255]},{"1812396":[255]},{"1812398":[255]},{"1812402":[130]},{"1812404":[129]},{"1812406":[188]},{"1812408":[128]},{"1812410":[162]},{"1812412":[80]},{"1812414":[107]},{"1812417":[24,136,136,128,193,33,98,6,5,195,224,240,176,248,88,16,239]},{"1812435":[119,65,62,129,94,3,248,3,60]},{"1812445":[79]},{"1812447":[167,255]},{"1812450":[255]},{"1812452":[255]},{"1812454":[254,1,254,1,252,2,255]},{"1812462":[255]},{"1812464":[8]},{"1812470":[66]},{"1812474":[32]},{"1812476":[64]},{"1812478":[160]},{"1812480":[202,202,164,228,130,98,88,32,199,22,228,22,75,6,50,192,138,53,100,59,194,61,248,7,233,62,241,43,97,190,98,185,255]},{"1812514":[223]},{"1812516":[127,128,39,152,110,144,113,182,218,29,181,114]},{"1812530":[32]},{"1812532":[32]},{"1812538":[8]},{"1812540":[32]},{"1812542":[136]},{"1812544":[248,47,242,63,200,59,224,247,140,255,2,247,224,255,234,255]},{"1812561":[215]},{"1812563":[205,12,251,8,23,4,123]},{"1812571":[243]},{"1812573":[31]},{"1812575":[31]},{"1812580":[8]},{"1812585":[4,12]},{"1812592":[47]},{"1812594":[55]},{"1812596":[51]},{"1812598":[243]},{"1812600":[211]},{"1812602":[251]},{"1812604":[250]},{"1812606":[251]},{"1812609":[255,2,255,5,255,10,255,1,255,43,255,21,255,191,255]},{"1812625":[255]},{"1812627":[255]},{"1812629":[255]},{"1812631":[255]},{"1812633":[255]},{"1812635":[255]},{"1812637":[255]},{"1812639":[255]},{"1812649":[1]},{"1812655":[130,254]},{"1812658":[255]},{"1812660":[255]},{"1812662":[90]},{"1812664":[251]},{"1812666":[251]},{"1812668":[191]},{"1812670":[255]},{"1812672":[21,255,171,255,85,255,239,255,117,255,255,255,95,255,255,255]},{"1812689":[255]},{"1812691":[255]},{"1812693":[255]},{"1812695":[255]},{"1812697":[255]},{"1812699":[255]},{"1812701":[255]},{"1812703":[255]},{"1812713":[17]},{"1812715":[35]},{"1812717":[1]},{"1812719":[151,149]},{"1812722":[235]},{"1812724":[245]},{"1812726":[239]},{"1812728":[245]},{"1812730":[255]},{"1812732":[95]},{"1812734":[255]},{"1812736":[87,255,253,253,95,255,253,253,127,255,223,213,255,186,149,196]},{"1812753":[255,2,253]},{"1812757":[255,2,253]},{"1812761":[255,32,213]},{"1812765":[186,90,244]},{"1812769":[23]},{"1812771":[156]},{"1812773":[95]},{"1812775":[253]},{"1812777":[127,10,223,69,255,17,245,87]},{"1812786":[253]},{"1812788":[95]},{"1812790":[253]},{"1812792":[127]},{"1812794":[223]},{"1812796":[255]},{"1812798":[149]},{"1812800":[251,250,245,86,250,168,84,90,238,171,85,74,171,174,17,170,4,250,8,84,5,168,161,80,16,170,160,64,80,170,68,4,1,251,163,247,82,250,14,94,69,239,31,95,5,175,187,191,251]},{"1812850":[247]},{"1812852":[250]},{"1812854":[94]},{"1812856":[239]},{"1812858":[95]},{"1812860":[175]},{"1812862":[191]},{"1812864":[238,168,85,2,186,37,81,170,232,157,64,171,160,85,32,255,17,168,168]},{"1812884":[64,32,4,4,2,138,20,20,10,10,32,32,70,238,87,87,159,191,251,255,117,255,235,255,245,255,223,223,238]},{"1812914":[87]},{"1812916":[191]},{"1812918":[255]},{"1812920":[255]},{"1812922":[255]},{"1812924":[255]},{"1812926":[255,32,168,86,66,168,129,85,2,237,133,82,15,250,5,93,171,248,1,2,22,22,42,43,18,18,47,42,13,10,166,167,171,168,254,255,234,254,213,255,239,255,208,255,240,247,91,251,80,80,255]},{"1812978":[254,1,255]},{"1812982":[255]},{"1812984":[253]},{"1812986":[253,10,255,4,248,175,150,100,62,72,25,100,244,41,249,55,161,224,54,144,232,1,147,129,53,48,156,84,83,48,175,181,235,202,33,136,247]},{"1813024":[229,247,122,125,116,252,191,50,148,191,127,124,184,128,224,7,246,9,127,128,252,3,177,64,191,64,224,159,128,127,7,248,184,7,42,128,181,189,170,160,139,12,41,20,131,193,156,107,189,255,234,191,202,119,218,127,187,183,157,14,62,89,50,59,253,133,191,64,119]},{"1813094":[127]},{"1813096":[243,64,15,32,153,37,251,5]},{"1813105":[255,191,64,119,136,127,128,112,143,108,211,25,230,255,192,239,205,35]},{"1813124":[85,221,168]},{"1813128":[169,90,141,1,254,94,255,250,205,220,35,255,170,119,168,255,185,251,234,1,164,164,6]},{"1813152":[220,254,255]},{"1813156":[119]},{"1813158":[255]},{"1813160":[185,24,9,101,252,252,248,248]},{"1813169":[255,255]},{"1813172":[119,136,255]},{"1813176":[4,255,97,158,248,7,248,7,46,56,248,2,5,5,240,10,155,149,68,70,175,168,229,143,168,14,24,31,250,255,208,223,250,146,231,88,104,144,90,41,78,200,31,226,255]},{"1813222":[223,42,155,252,94,237,147,128,167,153,65,191,253,2,255]},{"1813238":[245,10,16,239,157,98,147,108,137,118,191,170]},{"1813251":[42,84,92]},{"1813255":[170,170,18]},{"1813259":[160,251]},{"1813262":[253,216,170,191]},{"1813267":[255,171,247,1,255,255,185,189,3,4]},{"1813278":[38,114,191,170,255,42,247]},{"1813286":[255,170,185,16,163,28,248,3,222,85,64,255,213,42,247,8,85,170,1,254,31,224,251,4,251,140,19]},{"1813314":[112,12,125,7,104,10,192,17,208,8,250,20,189,88,198,97,136,143,154,145,152,143,31,17,61,16,103,64,102,69,75,184,131,124,157,108,159,102,49,249,58,213,127,147,27,243,120,135,255]},{"1813364":[249,2,237,18,248,7,215,42,219,36,253,8,172,16,1,168,81,252,10,168,13,208,3,192,3,224,182,225,1,67,2,254,174,82,12,245,120,218,152,12,193,45,96,73,67,82,254,169,82,1,244,171,88,87,248,7,193,62,192,127,175,252,87,168,83,172,95,160,143,240,47,176,63,192,255,128,96]},{"1813442":[227,1,198,2,211,52,131,73,20,97,140,131,47,135,10,151,22,14]},{"1813461":[49,121,73,210,246,32,202,167,247,131,147,22,225,30,233,48,223,105,182,178,108,131,94,103,155,130,249,247,8,239,16,255]},{"1813494":[223,32,254,1,222,32,255]},{"1813502":[249,4,254,253,4,255,241,5,24,65,122,64,186,134,51,4,120,9]},{"1813523":[3,128,137,96,163,12,203,206,76,78,70,154,158]},{"1813537":[252,3,255,129,126,167,157,205,176,78,183,78,181,150,109,255,3,252,3,255]},{"1813558":[190,65,249,6,255]},{"1813564":[247,8,255]},{"1813568":[48,130,62,129,81]},{"1813574":[127,7,117,3,254,15,104,4,244,22,2,5,64,193,131,168,135,130,133,138,5,4]},{"1813597":[149,48,53,13,252,192,191,135,125,129,123,143,115,5,243,31,229,47,218,125,130,127,128,253,2,251,4,249,4,240,11,251]},{"1813630":[241,6,52,193,57,1,186,133,116,1,118,14,99,11,116,28,124,8,198,13,67,196,207,72,130,142,144,159,131,146,161,175,162,167,132,185,199,63,76,176,141,117,149,104,158,97,171,78,166,77,188,67,254,1,255,3,252]},{"1813688":[251,6,247]},{"1813692":[227,16,231,24,183,129,28,131,59,129,122,135,181,1,177,5,120,8,237,9,130,73,39,36,193,68,134,2,8,70,10,71,25,153,2,27,194,191,167,218,70,56,5,125,1,251,12,247,22,233,25,230,252,3,127]},{"1813748":[125,129,124,130,240,15,240,11,254,1,240,11,124,4,7,69]},{"1813765":[249,21,73,8,178,76,36,48,102,128,138,134,10,189,1,253,4,170,17,67,83,56,152,105,3,35,235,247,253,65,71,7,2,64,71,182,191,57,226,134,122,114,221,131,124,191,184,247,248,180,187,78,241,25,164,176,73,120,3,127]},{"1813826":[128,64,128,93,128]},{"1813832":[31,17]},{"1813838":[1,193]},{"1813841":[255,191]},{"1813844":[221,34,255]},{"1813848":[238,238,255,255,223,222,254,254,128,255,64,64]},{"1813864":[17,31]},{"1813867":[170,32,84,192,43]},{"1813873":[255,191,63,255,255,255,127,224,255]},{"1813883":[255,33,222]},{"1813887":[254,255]},{"1813893":[85]},{"1813896":[255,17,1,1,42,139]},{"1813903":[193]},{"1813905":[255,255]},{"1813908":[85,170,255]},{"1813912":[238,238,255,255,213,223,255,255]},{"1813921":[255]},{"1813928":[17,187,1,170,32,113,64,40]},{"1813937":[255,255,255,255,255,255,255,68,255]},{"1813947":[255]},{"1813949":[223]},{"1813951":[255,255]},{"1813957":[84]},{"1813960":[247,118,28,252,91,99,213,141]},{"1813969":[255,255]},{"1813972":[84,171,255]},{"1813976":[128,129,183,247,252,127,218,143,81,255]},{"1813992":[127,247,40,92,128,128,40,16]},{"1814001":[255,255,255,255,255,255,255]},{"1814009":[255]},{"1814011":[171]},{"1814013":[127,64,191,255,255,1]},{"1814021":[68,3,2,241,138,255,12,235,152,94,216]},{"1814034":[255]},{"1814036":[69,186,251,5,11,126,223,226,92,243,188,130,255,255]},{"1814054":[1,1,240,240,34,98,34,35,67,194]},{"1814065":[255,255,254,255,255,254,254,15,254,29,236,28,255,60,251,74,159,179,193,214,35,247,9,94,11,255]},{"1814092":[127,16,190,224,23,215,51,115,127,255,127,191,151,71,254,161,151,121,31,78,96,195,140,225,128,203,128,225,160,211,161,161,233,233,160,240,8,125]},{"1814131":[190]},{"1814133":[245]},{"1814135":[254,136,125,94,1,6,120,1,254,31,60,47,170,143,188,143,119,170,225,22,94,244,52,206,54,63,44,159,170,239,204,255,231,245,241,167,116,239,52,191,228,16,195]},{"1814179":[213,16,163,8,112,10,228,10,65]},{"1814189":[43,202,209,44,208,10,224,12,80,15,224,1,90,132,58,196,16,12,98,255,68,251,26,255,4,191,202,63,19,255,170,255,245,103,102,255,68,255,26,255,4,255,10,191,243,95,202,255,181,79,118]},{"1814241":[251]},{"1814243":[245]},{"1814245":[251,160,87,128,46]},{"1814251":[117,64,11,136,153,4,64,10,16,4]},{"1814262":[40,130,81,2,10,128,180,65,78,32,255,7,231,4,245,82,239,180,247,56,255,176,255,144,252,249,127,135,255,28,247,80,255,180,253,50,255,176,255,144,255,248,128,124,24,231,10,245,8,71,2,253]},{"1814315":[79]},{"1814317":[255]},{"1814319":[31,131,4]},{"1814323":[4]},{"1814325":[64,184,4,2,32,176]},{"1814333":[144,224,24,93,162,255,66,125,128,190,227,127,128,254,1,221,38,255,146,162,93,174,83,254,67,255,162,220,35,191,64,119,140,255,146,255]},{"1814370":[81,172,39,216,1,92,163,92,65,190,170,85]},{"1814383":[255,93]},{"1814386":[19]},{"1814388":[1]},{"1814390":[162]},{"1814392":[35]},{"1814394":[64]},{"1814396":[136,4]},{"1814399":[146,119,175,159,69,127,139,119,49,61,194,191,64,247,10,211,4]},{"1814417":[216,96,154,128,116,184,118,240,15,96,159,8,245,172,83,255]},{"1814434":[255]},{"1814436":[255]},{"1814438":[207,16,207,48,223,32,255]},{"1814446":[127,128,216]},{"1814450":[154]},{"1814452":[116]},{"1814454":[102,16,15]},{"1814458":[159]},{"1814460":[245]},{"1814462":[83]},{"1814464":[68,92,174,246,88,92,232,23,209,53,248,20,212,175,123,79,24,163,24,65]},{"1814485":[167,192,63,128,46,7,233,14,117,142,62,255]},{"1814498":[247,8,255]},{"1814502":[63,192,126,129,254,1,251]},{"1814510":[245,4]},{"1814514":[64]},{"1814516":[4]},{"1814518":[63]},{"1814520":[36,64,232]},{"1814524":[117]},{"1814526":[58]},{"1814528":[79,249,182,89,8,20,40,182,228,60,10,88,145,97,249,67,174,88,79,176,28,227,140,83,208,139,240,7]},{"1814557":[254,2,188,199,58,241,14,255,8,247,8,63,192,127]},{"1814572":[255]},{"1814574":[254,1]},{"1814578":[160]},{"1814582":[18]},{"1814584":[8]},{"1814586":[130]},{"1814588":[240]},{"1814590":[184]},{"1814592":[64,255,2,255,5,255,42,255,81,191,59,31,53,191,207,255]},{"1814609":[191]},{"1814611":[255]},{"1814613":[255]},{"1814615":[255,96,255,160,95,64,191,32,239]},{"1814633":[32,32,122]},{"1814637":[48]},{"1814639":[58,254]},{"1814642":[255]},{"1814644":[255]},{"1814646":[190]},{"1814648":[31]},{"1814650":[59]},{"1814652":[189]},{"1814654":[207]},{"1814656":[23,255,191,255,95,255,255,255,87,255,255,255,255,255,255,245]},{"1814673":[255]},{"1814675":[255]},{"1814677":[255]},{"1814679":[255]},{"1814681":[255]},{"1814683":[255]},{"1814685":[255]},{"1814687":[245]},{"1814691":[10]},{"1814693":[16]},{"1814695":[3]},{"1814697":[7]},{"1814699":[153]},{"1814701":[63,10,255,191]},{"1814706":[191]},{"1814708":[95]},{"1814710":[255]},{"1814712":[215]},{"1814714":[255]},{"1814716":[255]},{"1814718":[255]},{"1814720":[127,255,223,221,239,255,255,253,255,255,253,247,255,186,85,250]},{"1814737":[255,32,221]},{"1814741":[239]},{"1814743":[253]},{"1814745":[255]},{"1814747":[245]},{"1814749":[186]},{"1814751":[80]},{"1814753":[107,2,23,16,255,2,255]},{"1814761":[127,10,255,69,255,175,255,127]},{"1814770":[223]},{"1814772":[255]},{"1814774":[255]},{"1814776":[255]},{"1814778":[255]},{"1814780":[255]},{"1814782":[255]},{"1814784":[238,155,149,198,255,170,85,90,250,171,212,106,170,231,170,119,96,202,8,132]},{"1814805":[170,160,80,4,174,1,65,16,178,171,171,21,207,115,215,85,255,15,95,81,255,190,255,77,255,221,85,175,32,247]},{"1814836":[255]},{"1814838":[95]},{"1814840":[255]},{"1814842":[255]},{"1814844":[255]},{"1814846":[255,170,58,73,68,186,160,213,90,175,139,156,43,190,119,120,127,112,132,140,1,1,42,170,90,90,99,235,105,106,215,247,255,127,115,255,254,255,117,255,245,213,23,255,150,215,15,175,143,7,255]},{"1814898":[255]},{"1814900":[255]},{"1814902":[223,10,255]},{"1814906":[255,40,255,80,255,120,192,183,18,207,101,31,170,245,149,122,191,104,255,64,86,2,104,136,82,98,197,197,170,170,21,21,191,191,255,255,253,253,23,255,205,189,122,218,95,95,239,239,215,215,191,191,255,87,255]},{"1814962":[159,2,255,5,255,160,255,16,255,40,255,64,255,168,19,236,169,80,93,240,254,99,127,128,253,56,149,4,254,254,19,21,175,172,95,94,254,255,127,127,199,215,235,235,1,255,255,253,252,254,174,174,157,157,255,255,255,253,255,239,255,255,252,3,254,1,254,81,255,98,255]},{"1815034":[255,2,255]},{"1815038":[255]},{"1815040":[11,1,228,161,94,88,111,40,85,52,205,156,62,76,201,196,253,241,95,209,167,104,81,216,74,44,67,182,179,204,42,214,250,245,245,251,122,249,253,120,60,62,191,158,236,207,215,230,231,24,251,4,249,6,60,195,62,193,156,99,207,48,229,26,48,148,16,177,80,56,8,42,43,157,110,30,230,22,15,59,254,169,214,54,130,35,127,73,226,83,207,63,62,1,201,184,233,130,126,152,115,132,201,44,123,128,95,6,37,20,190,6,200,119,78,241,199,120,129,254,131,124,11,244,5,250,8,245,255,214,127,124,191,47,143,166,206,38,31,191,15,47,113,72,42,174,130,16,208,254,169,216,145,247,224,63,208,207,191,247,254,255,126,253,238,110,231,150,239,7,63,111,207,31,254,6,252,3,252,3,62,193,174,65,174,97,15,240,223,32,225,30,153,29,213,66,154,158,223,136,223,139,237,76,110,34,151,68,58,4,41,67,31,22,172,32,159,201,70,1,27,68,167,196,193,71,96,92,114,119,36,38,237,173,25,18,205,144,47,7,135,120,99,190,5,250]},{"1815287":[255]},{"1815289":[255]},{"1815291":[255,16,239,200,127,243,84,243,248,227,192,254,200,118,96,103,32,189,192,167,3,168,4,4,12,53,29,56,32,137,88,202,90,98]},{"1815326":[88,184,84,255,212,251,221,250,209,79,121,230,186,20,225,30,249,5,251,4,223,32,239,16,239,144,238,17,254,161,29,226,93,226,95,55,95,30,63,207,127,255,127,236,232,253,232,210,144,245,8]},{"1815378":[65,161,49,144,3,2,22,30,26,14,28,45,121,11,182,159,148,222,75,175,222,117,234,237,246,205,220,131,232,55,190,65,213,42,251,4,95,40,255]},{"1815418":[235,52,223,96,191,192,135,3,14,128,85,34,160,76,70,150,158,46,47,92,155,79,33,121,199,112,8,2,29,6,53,13,97,16,131,35,84,112,225,92,196,190,5,248,2,249,7,242,14,229,92,136,175,1,252,2,122,132,245,8,235,18,210,33,175,66,31,132,187,46,19,135,120,9,4,14,240,138,135,158,224,152,16,2,60,150,71,235,4,131,74,241,147,13,198,116,186,55,68,220,124,60,75,180,128,241,215,40,27,250,76,179,54,217,253,163,252,20,253]},{"1815538":[241,10,253,2,227,20,255]},{"1815546":[247,8,239,16,60,67,112]},{"1815554":[103,130,88,20,79,11,57,22,14,22,55,191,149,63,20,15,179,35,144,161,221,237,100,141,52,156,160,168,42,193,20,251,51,78,129,120,238,29,82,177,164,11,248,207,42,149,231,16,111,144,249,6,229,24,178,64,128,66,144,7]},{"1815615":[126,89,8,234,42,174,28,14,60,244,62,127,63,188,190,86,119,60,138,102,98,32,54,64,178,226,40,193,2,128,195,168,136,12,243,84,189,82,223,240,61,40,223,130,61,131,63,33,222,213,32,225,10,227,12,129,78,195,20,1,62,1,124]},{"1815679":[254,203,24,74,24,247,43,99,1,243,55,13,59,240,34,114,38,33,13,174,151,3,24,201,248,51,12,140,194]},{"1815709":[19,112,229,29,226,159,120,8,205,252,21]},{"1815721":[223,131,119,7,246,237,175,199,40,207,32,197,58,221,34,221,32,244,8,241,8,225,18,64,24,231,30,214,14,74,30,223,26,80,28,81,24,71,18,21,189]},{"1815763":[27]},{"1815765":[11,150,172,38,24,138,158,172,150,138,154,10,253,8,252,43,237,166,83,16,235,183,101,156,107,171,118,242,5,240,7,225,22,243,12,199,60,227,28,206,49,255]},{"1815808":[138,137,192,146,30,7,201,79,165,220,78,158,221,255,85,85,89,97,147,3,171,151,75,7,227,154,1,247,145,170,42,110,84,42,44,248,200,82,30,180,153,252,16,216,243,38,128,187,100,145,244,2,201,37,136,75,193,7,128,47,81,29]},{"1815871":[127,96,160,23,39,5,53,76,252,5,79,91,143,191,191,23,23,125,189,72,239,180,241,119,115,117,122,160,175,64,247,232,239,66,165]},{"1815907":[56,142,128,132,138,143,10,20,116]},{"1815917":[72]},{"1815919":[248,66,221,128,175,78,53,4,127,5,245]},{"1815931":[171]},{"1815933":[255]},{"1815935":[255,181,196,125,126,3,120,246,224,84,210,84,48,164,169,105,124,195,199,131,255,247,254,63,207,87,199,255,239,85,253,143,191,56,177,2,129,73,8,48,6,184,196,16,196,3,12,4,211,8,71]},{"1815987":[255,49,199,48,235,56,23,16,191,2,245]},{"1815999":[239,47,159,58,30,57,150,155,133,183,206,186,61,215,117,79,67,241,255,245,255,239,181,188,134,249,207,245,206,171,250,255,184,1]},{"1816034":[16,32,72,98,219,1,115,129,55,130,6,6,64,160]},{"1816049":[255,4,251,141,17,62,195,58,70,49,255,33,221,79,251,206,32,143,177,255,98,27,2,247,196,58,133,255,12,122,45,236,154,121,6,243,29,161,89,239,19,195,63,75,179,163,119,41,10,150,135,16,31,30,27,24,31,32,62,4,62,72,94,116,179,120,247,224,111,224,255,224,215,192,255,192,63,128,255,109,186,91,162,27,232,23,241,157,193,204,96,185,197,253,5,93,222,127,254,250,249,253,243,247,251,255,227,245,205,255,207]},{"1816161":[202]},{"1816163":[196,5,9,66,19,9,202,32,68,73,174,5,64,33,116,1,250,2,245,12,226,4,121,24,167,16,111,48,207,239,39,95,119,159,255,111,127,95,255,187,219,189,253,191,215,95,151,15,7,223,211,207,229,159,78,255,192,127,192,63,128,136,192,168,112,12,240,90]},{"1816232":[49,128,187,4,61,2,127]},{"1816240":[39,240,15,128,3,76,5,250,14,113,96,155,64,189,40,215,211,119,183,166,207,223,255,255,254,244,255,254,255,255,159,127,219,107,247,180,239,135,255,95,253,245,254,84,255,171,159,1,4,160,42,81,88,34,160]},{"1816296":[2,8,171]},{"1816300":[84]},{"1816302":[254]},{"1816304":[83,20,132,42,133,90,95,160,244,3,84,171,171,84,129,126,188,22,252,249,255,85,255,184,255,241,255,251,255,255,254,255,254,23,255,216,255,85,255,184,255,241,255,251,255,255,255,65,34,207,32,7]},{"1816357":[254]},{"1816359":[87]},{"1816361":[47]},{"1816363":[69]},{"1816365":[35,190]},{"1816368":[16,4,216,32,1,84,168,16,208,33,186,65,220,35,65,190,247,155,255,180,61,82,63,170,255,196,255,218,255,88,191,191,95,147,255,180,94,49,254,171,245,206,255,218,255,88,127,63,168,69]},{"1816419":[79,163,76,1,118,10,245]},{"1816427":[255]},{"1816429":[255,64,215,18,33,176,4,49]},{"1816438":[137,34,10,196]},{"1816443":[218]},{"1816445":[88,40,87,223,32,255,128,223,32,251,60,125,242,255,34,255,48,255,240,224,31,160,223,112,143,188,123,243,124,187,102,244,59,254,241,63,192,95,160,175,80,71,168,142,97,68,187,11,244,1,222,31]},{"1816498":[95,128,143]},{"1816502":[83,40,28,96,68,34,11,48,33,208,85,175,239,17,213,40,127,144,247,10,223,32,255]},{"1816526":[246,5,6,252,3,253,3,255,129,109,1,252,161,94]},{"1816541":[255,173,86,251]},{"1816546":[252,3,254,1,254,2,255]},{"1816554":[126,129,255]},{"1816558":[83,168,252]},{"1816562":[252,1,252]},{"1816566":[108]},{"1816568":[252]},{"1816570":[94]},{"1816572":[255]},{"1816574":[86]},{"1816576":[82,98,162,27,211,229,251,80,211,18,235,213,213,59,119,24,48,143,19,239,1,191,128,47,128,109,144,174,56,215,189,90,238,16,253,3,254,1,255]},{"1816616":[255]},{"1816618":[127]},{"1816620":[239]},{"1816622":[199,48,1]},{"1816626":[168,2,54,1,43]},{"1816632":[65]},{"1816634":[174]},{"1816636":[214]},{"1816638":[74,16,95,239,255,253,255,254,245,95,254,235,126,220,255,238,111,122,48,255]},{"1816659":[253]},{"1816661":[254]},{"1816663":[85]},{"1816665":[234,43,127,85,255,111,111,32,15,2,127,1,255,170,255,21,255,162,213,17,170,21,16,207]},{"1816690":[255]},{"1816692":[255]},{"1816694":[255]},{"1816696":[255]},{"1816698":[255,42,255,85,127,239,255,254,247,94,187,175,254,159,255,184,185,209,255,236,245,50]},{"1816721":[254,2,86,65,235,174,190,87,255,191,191,127,255,255,255,1,255,169,253,20,254,97,81,71,174,110,76,19,128,207]},{"1816752":[255]},{"1816754":[255,2,255,1,255,174,255,81,255,179,255,127,255,255,251,174,235,239,247,238,255,210,254,144,244,160,184,16,84,2,1,171,187,251,85,247,255,255,126,254,255,255,255,255,255,255,85,254,4,84,25,171,45]},{"1816808":[110,136,95,1,239,2,255,1,255,1,255,171,255,84,255,255,254,119,255,254,255,253,255,254,255,236,252,77,253,128,16,130,160,64,66,171,1,23,42,255,87,252,255,255,255,255,255,127,127,127,253,63,254,255,213,255,16,170,178,1,127,34,127,197,191,94,63,214,255,169,255,42,255,85,254,254,255,221,255,58,63,33,255,41,255,86,255,213,252]},{"1816898":[16]},{"1816900":[132,4,46,127,21,63,168,253,80,255,16,119,255,191,255,127,251,255,209,255,234,255,86,255,170,255,200,255,63,239,255,77,255,126,255,46,255,149,255,171,255,85,255,191,255,16,255,50,255,129,255,209,255,106,253,86,255,170,119,200,129,1,46,63,90,255,80,249,96,243]},{"1816971":[213,24,234,18,200,254,255,208,255,160,255,14,243,132,243,32,245,24,234,18,202,255,255,255,111,255,95,251,247,251,127,247,247,247,239,239,231,255]},{"1817010":[255,144,255,160,245,10,247,136,213,42,234,21,192,63,119,255,149,253,42,186]},{"1817031":[85]},{"1817033":[232,16]},{"1817036":[117]},{"1817038":[157,6,8,255,194,127,197,191,170,255]},{"1817049":[232,50,16,117,69,181,179,255,247,255,255,191,255,255,255,255,255,221,255,239,207,255,213,255,8,253,2,250,5,85,170,232,23,34,221]},{"1817085":[255,12,251,112,226,88,192,12,164,2,10,5,3,129,1,90]},{"1817102":[80,5,148,234,34,224,89,250,14,3,5,7,171,131,94,91,255,250,235,103,241,231,254,249,255,242,253,253,215,253,251,254,250,85,230,153,214,45,161,94,4,255,2,255,40,215,4,251,5,255,119,54,119,60,47,31,46,6,45,26,165,139,161,204,66,172,58,53,192,10,97,86,80,75,234,79,216,141,244,199,176,231,183,166,62,128,235,147,239,3,223,10,253,137,223,198,251,161,18,237,129,127,20,239,161,254,144,255,114,255,24,255,28,255,64,64,240,168,208,85,244,222,206,90,187,110,178,113,86,182,181,105,132,32,239,116,205,16,119,15,55,27,52,144,50,5,107,151,35,81,245,206,146,161,15,34,27,66,144,94,45,42,100,155,114,143,114,141,51,206,140,243,154,229,30,229,207,242,48,36,54,160,45,74,17,23,171,2,139,3,82,138,61,129,201,134,157,2,123]},{"1817302":[81,28,250,229,116,122,35,36,193,135,130,219,246,81,215,135,190,82,255,174,251,6,252,4,255,1,76,183]},{"1817331":[255]},{"1817333":[255,236,181,22,249,128,255,220,251,250,125,207,192,107,65,24]},{"1817350":[89,3,27,2,23,4,48,13,100,12,215,117,85,146,161,99,96,228,224,97,107,227,92,223,25,131,118,104,145,173,103,156,224,31,100,159,231,27,216,40,133,125,61,194,185,70,127,128,255]},{"1817400":[127,128,241,14,248]},{"1817406":[236,19,155,10,148,149,177,124,218,150,72,100,146,80,93,192,85]},{"1817424":[129,64,198,101,31,5,48,88,13,97,5,229,2,2]},{"1817439":[42,196,125,72,188]},{"1817445":[232,23,200,87,216,63,128,255]},{"1817454":[213,42,125,130,252]},{"1817460":[233,16,199,35,202,135,58,63,253,127,213,255,97,223]},{"1817475":[95]},{"1817477":[170]},{"1817479":[128,64,64,88]},{"1817484":[249]},{"1817486":[85]},{"1817488":[62,160,95,128,170]},{"1817494":[192,32,224,32,5,167]},{"1817501":[4,168,170,95,64,127]},{"1817508":[255]},{"1817510":[95,224,255,64,93,162,251,4,85,2,97,31,32,255,85,255,95,191,223,63,88,255,251,255,253,255,9,14,168,132,162,223,136,16,16,16,1]},{"1817548":[128]},{"1817550":[16]},{"1817552":[200,31,52,13,1,196,152,6,136,156,64,234]},{"1817565":[87,138,239,28,5,2,202,189,70,249,6,235,20,85,170,168,87,16,101,12,56]},{"1817587":[129,56,195,233,255,99,239,21,255,168,255,154,255,232,255,128,253]},{"1817605":[255,170]},{"1817608":[17]},{"1817610":[49,16,136,2]},{"1817616":[151,128,127,2,255]},{"1817622":[170]},{"1817624":[17]},{"1817626":[33,154,2,85,234,255,151,104,253,2,255]},{"1817638":[255]},{"1817640":[255]},{"1817642":[101,154,168,87]},{"1817647":[21]},{"1817649":[127,128,255]},{"1817653":[255,255,255,255,255,101,239,168,255,234,255,34,254,48,93]},{"1817669":[190,170,17,85]},{"1817674":[15,4,6]},{"1817678":[20]},{"1817680":[220,48,238,155,255,69,187]},{"1817688":[85]},{"1817690":[43,244,100,249,190,235,253,3,109,147,190,65,255]},{"1817704":[255]},{"1817706":[11,212,6,153,20,65]},{"1817713":[254,32,238]},{"1817717":[255,238,255,255,255,43,251,102,255,190,255,55,7,97,85,64,206,138,117,85,10,255]},{"1817740":[175]},{"1817742":[21]},{"1817744":[177]},{"1817746":[78,123,31,149,255,37,95]},{"1817754":[255]},{"1817756":[175,80,191,234,1,47,149,186,206,176,255]},{"1817768":[255]},{"1817770":[255]},{"1817772":[175,80,21,64,33,70]},{"1817779":[15,64,31,138,255,245,255,255,255,175,255,191,255,76,38,95,19,9,146,200,103,49,8,143]},{"1817804":[255]},{"1817806":[87]},{"1817808":[135,132,4,168,255,155,83,79,23,46,255,112,255]},{"1817822":[255,168,148,127,132,123,88,175,103,140,137,110,143,112,255]},{"1817838":[87]},{"1817840":[254]},{"1817842":[248,4,16,105,32,3,129,7,143,255,255,255,255,255,40,104,128,192,128,192,130,104,81,6,255]},{"1817868":[247]},{"1817870":[255]},{"1817872":[215,215,191,255,127,255,253,127,190,239,220,43,255,12,255,10,64,191]},{"1817891":[127,64,191,234,21,87,168,247,8,243,4,245]},{"1817905":[127]},{"1817907":[191]},{"1817909":[127,130,255,81,255,247,255,251,255,255,255,159,175,48]},{"1817924":[4,8,171,4,85,130,255]},{"1817932":[255]},{"1817934":[255]},{"1817936":[112,239,255,239,251,255,85,255,171,255,144,111,25,230,255,170,16,64,16,239,12,241,174,80,214,41,255]},{"1817964":[255]},{"1817966":[85,8,16,255,16,255,4,255,170,255,84,255,255,255,255,255,247,255,247,236,106,71,54,24,250,160,85,78,255]},{"1817996":[247,17,255,11,23,255,141,229,239,237,91,91,146,27,151,127,166,196,52,228,4,25,59,134,24,247,164,176,231,204,168,105,91,241,235,235]},{"1818033":[247,40,255]},{"1818037":[255,8,255,1,119,150,255,6,255,20,207,217,204,49,18,117,46,233,8,251,88,254,153,149,18,247,117,52,247,235,229,159,226,91,228,191,128,31,96,95,160,255,129,8,8,17,145,104]},{"1818086":[160,96,64,64,193,192,130,128,132,132,7,254,14,254,127,234,159,246,63,212,63,200,127,232,122,93,223,72,235,8,214,86,239,14,246,23,189,168,243,165,251,147,111,215,131,35,96,66,129,96,2,98,227,180,162,242,142,235,160,190,124,106,191,180,62,110,221,245,92,92,95,87,121,120,32,223,128,127,34,223,129,126]},{"1818169":[254,67,190]},{"1818173":[249,5,247,233,77,187,39,241,15,119,143,191,15,239,223,207,191,255,159,236,205,126,255,254,29,94,63,53,151,59,127,125,255,127,127,16,14,130,132]},{"1818213":[46,166,168,197,168,203,176,141,112,159,128,32,215]},{"1818227":[191,192,61,64,63,8,255,64,255,128,255,32,255,42,255,42,245]},{"1818245":[255,234,255,247,250,63,241,191,87,255,238,42]},{"1818258":[170,128,192,192,4,238]},{"1818265":[242,224,241,192,215,238,238,255]},{"1818274":[127]},{"1818276":[3,60]},{"1818279":[17]},{"1818281":[13,32,78]},{"1818285":[104,238,17]},{"1818289":[255,170,117,252,63,21,251,13,255,14,255,40,255,17,255,25,247,51,249]},{"1818309":[255,136,255,20,247,186,217,84,251,255,226,209,192,213,224,4,4,176,56,8,16,8,152]},{"1818333":[80]},{"1818335":[226,63]},{"1818338":[29,6,251]},{"1818342":[129,70,8,239,8,103]},{"1818349":[175]},{"1818351":[29,192,63,194,63,4,251,246,207,231,255,99,255,175,255,29,255,250,246,220,254,108,253,192,191,18,255,185,175,193,124,106,254,243,160,222,2,239,193]},{"1818391":[128,34,48,128,169,192,65,192,234,95,1,252,1,127,3,63,64,199,8,128,86,73,183,64,149,160,95,2,253,128,126,64,255,40,223,22,255,180,255,20,255,63,251,127,251,251,117,247,254,191,117,21,255,131,255,128,126,127,59,123,81,113,33,246]},{"1818456":[53]},{"1818458":[21]},{"1818460":[131,128]},{"1818465":[239,174,1,222]},{"1818470":[255]},{"1818472":[255]},{"1818474":[127,128,127,128,62,193,16,43,80,175,33,222]},{"1818487":[255]},{"1818489":[255,128,255]},{"1818493":[127,192,255,255,219,223,238,255,255,255,255,255,255,255,255,255,223,213,255,223,203,207,206,255,251,255,81,255,175,255,5,223,2,213,128,48,207,48,69,4,160,174,1,80,138,250]},{"1818540":[253,2,127,128]},{"1818545":[251,138,116,91,164,80,175,37,218,5,250]},{"1818557":[255]},{"1818559":[127,243,80,247,246,255,236,255,232,255,255,255,254,143,127,223,239,94,241,254,255,253,238,255,104,255,255,255,30,15,15,207,5,161,66,1,254,2,253,128,95]},{"1818601":[255,224,5,240,11,250,5,189,64,1,242,2,236,32,200]},{"1818617":[255,26,228,4,251]},{"1818623":[255,255,4,255,16,223,116,255,246,223,144,255,250,254,255,254,251,12,247,52,211,116,215,254,247,176,159,251,254,254,190,254,122,251,8,203,52,171,80,1,222,111,160,4,91,65,174,129,20,247]},{"1818674":[195,24,135,88,33,214,31,224,164,90,16,239,106,145,127,168,253,16,218,152,80,129,170,69,64,45,64,221]},{"1818703":[255,215,255,255,255,255,255,255,255,255,255,255,255,191,255,255,255,215,168,239]},{"1818724":[103,32,255]},{"1818728":[255]},{"1818730":[255]},{"1818732":[255,98,255]},{"1818736":[255,87,255,255,255,223,255,255,255,255,255,255,255,157,255,255,240,32,85]},{"1818756":[138,21]},{"1818759":[215]},{"1818761":[23,10,255]},{"1818765":[255,2,255,255,255,255,255,255,255,255,255,255,255,241,255,255,255,125,255,223,14,255]},{"1818788":[255,32,255]},{"1818792":[255,168,255,14,255]},{"1818798":[255,130,255,241,255,255,255,223,255,255,255,87,255,241,255,255,255,125,64,5,80,163]},{"1818821":[23,2,255]},{"1818825":[247,162,255]},{"1818829":[255]},{"1818831":[119,255,255,255,255,255,255,253,255,255,254,92,255,255,255,221,255,255,170,255,4,255,168,255,2,254,9,255,163,255]},{"1818862":[255,170,255,85,255,251,255,87,255,253,255,246,255,92,255,255,119,221,16,127,169,253,80,255]},{"1818887":[127,65,62,128,156]},{"1818893":[254,2,253,238,255,86,255,170,255,80,127,105,190,177,188,160,254,2,255,255,145,255,171,255,85,127,47,127,150,190,46,254,94,255,255,255,110,253,86,255,170,127,208,62,105,156,115,254,161,253,2]},{"1818945":[255]},{"1818947":[253]},{"1818949":[250,11,80,21,8,251,128,215,32,255]},{"1818960":[168,255]},{"1818963":[253,128,250,11,91,149,29,251,251,215,247,255,255,255,87,255,255,255,127,255,255,95,223,127,255,255,255,255,255,255,168,253,2,250,133,80,175,136,119,128,127,32,223]},{"1819007":[255,5,128,45]},{"1819012":[95]},{"1819014":[117,2,248,7,225,29,134,123,164,84,5,133,47,45,95,95,255,125,255,248,255,193,254,130,255,4,255,255,253,255,255,255,125,247,248,255,195,220,131,248,12,80,128,127,2,253]},{"1819061":[255,130,127,7,255,31,255,123,255,92,255,125,10,220,1,237,18,161,85,66,170,68,95,170,191,80,239,125,122,251,208,255,168,255,1,255,2,228,68,234,187,64,249,240,250,210,241,168,186,11,84,23,168,255]},{"1819116":[238]},{"1819118":[86,32,14,245,35,223,18,255,95,255,191,255,255,255,255,255,239,223,252,2,130,85,64,170]},{"1819143":[2,168,191,64,255,128,255,2,253,255,233,253,40,255]},{"1819158":[253]},{"1819160":[232,168,192,242]},{"1819165":[63,2,255,233,234,42,85,21,170,255]},{"1819176":[255]},{"1819178":[205,192,128,64,2]},{"1819184":[2,255,87,255,191,255,255,255,255,255,63,255,63,255,253,255,107,214,89,122,116,148,225,175,215,159,226,170,128,192,40,224,223,94,154,85,85,171,79,241,216,224,77,247,71,247,71,127,95,247,248,117,190,63,254,255,223,95,255,255,159,159,63,63,128,255,141,199,65,129,1,129,167,39]},{"1819259":[128,104,232,192,192,186,170,71,191,4,4,24,248,248,248]},{"1819275":[6]},{"1819277":[4,2,4,185,67,187,68,69,251,251,27,5,141,255,249,253,249,253,251,83,84,4,67,190,255,230,255,252,253,254,255,254,255,254,255,7,248,239,251,65,65,29,29,115,113,1,1,3,3,1,1,144,197,56,166,2,62,42,63,128,143,178,191,16,7,18,23,235,68]},{"1819347":[161,128,161,225,90,64,168,89,191,229,135,197,255,125,67,157,131,223,65,69,129,166,64,185,81,133,117,253,37,56,255,125,254,221,62,222,191,255,95,254,71,250,111,250,39,132,159,62,204,208,160,28,60,110,14,143,191,148,197,133,167,129,249,212,7,113,23,86,186,79,147,143,83,133,248,23,233,231,153,28,221,6,119,158,62,197,87,212,167,229,229,102,103,122,135,83,161,121,129,161,64,186,114,91,179,58,216,217,185,1,255,171]},{"1819460":[68,68,85,85,255,255,170,34]},{"1819472":[84,255]},{"1819475":[255,85,187,255,255]},{"1819481":[136,85,119,255,255,255,255,84,84]},{"1819491":[255,238,255,170,255,255,255,255,255,255,255,255,255,171,255,255,255,17,17,85,85,119,119,136,136]},{"1819520":[18,252,212,89,86,92,55,231,151,6,59,36,194,133,105,63,69,241,91,170,89,173,224,7,32,39,165,142,147,240,190,201,74,68,76,169,234,240,224,240,128,177,228,254,113,224,239,233,187,255,230,191,31,7,31,15,254,175,89,70,159,141,14,18,169,3,104,41,118,228,205,109,210,82,55,50,110,76,223,158,86,85,150,178,151,75,124,243,247,15,109,136,209,17,224,38,168,2,77,13,32,163,31,159,61,63,127,127,255,255,255,255,253,255,244,248,95,227,32,224,226,98,215,215,174,174,89,89,85,255,234,64,196,196,18,127,255,85,128,128,42,42,133,133,170,127,64,191,197,59,255,146,170]},{"1819674":[127,255,255,255,127,255,42,170,64,63,254,255,237,255,255,255,255,255,213,255,250,255,85,255,255,63,1,1,18,18,255,255]},{"1819708":[42,42,5,5,119,255,255,68,69,69,117,245,255,127,1]},{"1819724":[128,128]},{"1819728":[136,255,68,187,69,186,255,127,128,8,254,254,255,255,255,255,136,136,68,187,255,255,138,255,255,255,255,255,127,255,255,255,119,255,255,187]},{"1819766":[117,117,247,247,1,1,128,128]},{"1819776":[127,255,187]},{"1819780":[85,85,31,10,128,251,225,191,227,125,241,191,128,255]},{"1819795":[255,85,170,224,234,26,4,82,128,26,2,66,128,128,128]},{"1819811":[255,255,255,255,255,255,255,255,255,253,255,255,255,127,255,255,255]},{"1819830":[21,21,251,251,127,127,255,255,127,127,254,254,190,28,91,93,136,189,188,89,205,141,243,151,193,201,1,255,24,227,95,162,122,194,207,148,110,48,20,10,90,116]},{"1819874":[28,229,249,251,253,255,123,255,255,255,251,251,163,243,255,255,251,227,6,2,7,7,231,231,199,199,237,237,215,223,251,255,251,226,64,64,80,95,127,255,104,160,64]},{"1819918":[120,168]},{"1819921":[255,226,29,68,191,127,112,128,10,151,55,63,63,135,47]},{"1819937":[4,64,29,251,255,47,127,255,255,255,255,127,127,255,255,251,255,255,191,4,4,208,80,117,117,72,72,192,64,80,80,183,250,191,42]},{"1819975":[255,255,85]},{"1819980":[10,10]},{"1819984":[8,243,42,213]},{"1819989":[255,255]},{"1819992":[170,1,255,255,255,255,255,255,12,69]},{"1820003":[213,255,255,255,255,255,255,255,255,245,255,255,255,186,247,255,255]},{"1820024":[254,254]},{"1820028":[10,10]},{"1820032":[247,40,28,163]},{"1820039":[255,255,85]},{"1820044":[2,2]},{"1820048":[49,70,163,92,4,255,255]},{"1820056":[170,64,255,255,255,255,255,255,168,238]},{"1820067":[92,251,255,255,255,255,255,255,255,253,255,255,255,17,238,255,255,4,4]},{"1820088":[191,191]},{"1820092":[2,2]},{"1820096":[76,237,161,190,68,68,22,255,255,94]},{"1820107":[1,2,2,1,3,253,130,250,69,69,187,255,22,161,10,255,254,254,254,255,253,15,12,64,69,254,255,233,255,255,255,255,255,253,255,254,255,243,188,191,31,1,1,22,22,245,245]},{"1820156":[3,3,1,1,215,3,15,135,77,73,207,88,15,23,223,212,15,56,159,136,52,10,128,121,104,180,45,179,32,114,115,147,71,231,199,23,227,225,7,118,207,253,219,251,223,253,220,252,168,248,168,248,62,195,249,255,48,63,100,122,162,191,51,47,69,127,103,95,255,63,175,95,199,47,239,87,255,111,255,213,255,207,255,21,255,255,215,255,169,237,16,255,146,255,32,255,16,255,232,255,63]},{"1820258":[39,216,81,46,168,215,2,109,202,21,224,47,2,21]},{"1820273":[255,40,255,70,255,111,255,125,255,255,255,223,255,255,255,255,92,255,255,255,253,255,255,255,255,255,255,255,255,255,79,92,92,254,255,253,253,127,255,255,255,69,255,8,253,48,255,92,163,254]},{"1820324":[253,2,127,128,255]},{"1820330":[69,186,8,247,128,79,163,255]},{"1820339":[255,2,255,128,255]},{"1820345":[255,186,255,247,255,207,255,255,81,255,251,253,94,255,255,85,254,251,255,245,255,255,255,16,80,187,251,94,94,240,248,255,255,214,246,63,127,84,254,16,175,187,4,92,163,240,15,84,170,210,45,53,202,84,171,175,255,4,255,163,255,15,255,170,255,45,255,202,255,171,255,112,31,58,69,253,18,255,234,119,255,255,255,223,251,234,249]},{"1820433":[208]},{"1820435":[64]},{"1820437":[16,234,234,140,156]},{"1820443":[250,180,248,87,251,64,239,128,127]},{"1820453":[239,234,21,4,251]},{"1820459":[255,144,105,64,185,47,127,63,191,239,255,21,255,251,255,255,255,111,251,189,251,1,254,56,199,108,147,255,192,245,10,255,128,111,208,191,232,1]},{"1820498":[1,1,24,16]},{"1820503":[192]},{"1820506":[128,128,208,208,104,232,46,209]},{"1820515":[254,2,253]},{"1820519":[63]},{"1820521":[255,128,127,64,191,40,215,208,255,255,254,253,255,63,255,255,255,127,255,191,255,215,255,168,247,128,127]},{"1820549":[255,224,223,64,223,186,197,244,11,254,129,32]},{"1820566":[128,128,192,192,192,192]},{"1820574":[128,128,127]},{"1820578":[126,129,239,16,135,120,138,181,128,127]},{"1820589":[255,128,127,128,255,129,255,16,255,120,255,21,127,63,255,255,255,127,255,207,251,103,223,175,255,1,255,8,255]},{"1820619":[255]},{"1820621":[255,128,127,203,139,119,21,175,42,1]},{"1820632":[8,8]},{"1820640":[116,138,202,36,213,42,255]},{"1820648":[246,9,95,160,63,192,5,250,1,254,49,238]},{"1820661":[255]},{"1820663":[255,1,255,160,255,192,255,250,255,255,255,239,139,137,198,83,140,144,102,172,99,43,255,21,255,255,255,171,1,166,134,70,4,144]},{"1820698":[169,33,43,10,21,1]},{"1820705":[191,206,49,111,182,153,98,102,153,102,152,245,10,254,1,64,191,32,255]},{"1820725":[249,70,251,144,255,137,254]},{"1820733":[255]},{"1820735":[255]},{"1820737":[127]},{"1820739":[255]},{"1820741":[255]},{"1820743":[255]},{"1820745":[255]},{"1820747":[255]},{"1820749":[255]},{"1820751":[127,255,255,255,255,255,255,247,255,255,255,253,255,254,255,247,255,255,128,255]},{"1820772":[255]},{"1820774":[255,8,255]},{"1820778":[255,2,255,1,255,8,255,127,255,255,255,255,255,247,255,255,255,253,255,254,255,247]},{"1820801":[255]},{"1820803":[255]},{"1820805":[255]},{"1820807":[255]},{"1820809":[255]},{"1820811":[255,16,255,16,239,255,255,85,255,251,255,85,255,171,255,5,255,186,255,53,207,255]},{"1820834":[255,170,255,4,255,170,255,84,255,250,207,117,255,250,255,255,255,85,255,251,255,85,255,171,255,5,223,138,255,5]},{"1820865":[255]},{"1820867":[255]},{"1820869":[255]},{"1820871":[255]},{"1820873":[255]},{"1820875":[255]},{"1820877":[255,128,127,234,255,212,255,170,255,81,255,234,255,85,255,170,255,149,255,255,21,255,43,255,85,255,174,255,21,255,170,255,85,255,234,255,234,255,212,255,170,255,81,255,234,255,85,255,170,127,149,4,218,34,189]},{"1820933":[254,2,253]},{"1820937":[254,10,245,24,231,8,245,132,222,34,191,128,254,2,255,128,254,26,247,24,231,8,253,223,95,159,191,255,127,255,255,255,127,247,247,255,231,255,255,218,165,189,66,254,129,253,2,254,129,245,10,231,24,245,10,94,129,189,2,94,129,252,3,94,129,189,2,95,160,191]},{"1821008":[95,222,191,189,95,222,255,252,95,222,191,189,95,255,191,191,254,255,253,255,254,255,252,255,254,255,253,255,255,255,255,255,129,127,2,255,129,127,3,255,129,127,2,255,160,95]},{"1821055":[255,152,123,37,247,26,234,177,123,74,175,53,207,154,123,181,71,251,156,252,38,254,11,241,53,250,15,245,5,254,154,253,5,159,224,45,210,15,224,63,64,26,160,15,192,159,224,15,64,123,252,254,253,238,255,123,255,191,255,207,255,127,255,79,255,160,191,68,251,170,253]},{"1821127":[251,128,255,65,254,171,250,4,251,160,239,68,127,174,251,10,247,132,255,69,255,171,255,10,63,224,48,196]},{"1821156":[174,8,14,10,132,4,69,4,175,14,206,10,143,255,251,255,245,251,253,243,251,255,250,255,244,251,241,255,4,251,25,238,183,72,117,138,207,48,253,2,127,128,49,206,4,255,27,251,187,251,127,255,207,255,255,255,127,255,59,255,4]},{"1821218":[27,14,187,8,127,10,207]},{"1821226":[255,2,127]},{"1821230":[59,10,251,255,224,255,68,255,128,255,48,255]},{"1821243":[255,128,255,196,255,136,200,40,232,128,64,172,124,134,78,36,228,143,71,171,103,207,127,79,127,79,127,95,111,87,111,79,127,71,119,71,115,159,159,63,63,23,23,187,191,25,31,51,55,16,23,180,183,224,96,192,192,232,224,84,212,254,254,204,196,239,231,75,195,10,12,2]},{"1821316":[42,42,18,16,170,170,82,80,250,250,118,120,253,251,249,251,251,251,249,251,251,251,249,251,251,251,249,247,246,255,250,251,210,251,234,251,86,255,174,255,6,255,142,255,9,9,5,1,45,41,21,17,173,173,85,85,253,253,113,113,165,39,6,1,134,23,18,2,130,66,100,68,141,73,132,6,6,119,189,165,19,15,158,240]},{"1821401":[118,192,190,11,120,7,60,54,222,229,89,111,235,240,14,87,237,158,99,120,239,124,197,253,19,254,27,238,25,255,13,191,100,255,34,191,67,253,3,84,165,128,208,4,244,46,204,134,228,151,228,23,44,71,229,5,184,84,232,180,136,196,218,244,234,212,91,60,179,213,27,39,39,100,68,166,230,207,223,231,231,87,87,191,55,7,7,218,234,191,220,27,250,49,241,25,249,40,232,200,104,40,232,136,136]},{"1821508":[170,170,85,85,63,255,5,255]},{"1821517":[95]},{"1821519":[175,255,255,255,255,255,255,255,255,255,63,255,5,95]},{"1821534":[175]},{"1821536":[119,255,255,255,85,255,170,255,192,255,250,255,95,95,175,175,136,136]},{"1821556":[170,170,85,85,63,63,5,5,160]},{"1821566":[80]},{"1821568":[201,137,97,237,73,201,74,203,77,68,97,251,71,85,105,121,157,242,247,88,218,116,251,116,80,127,255,65,87,105,127,67,113,225,255,235,243,235,211,227,119,111,231,231,231,231,231,231,150,142,22,14,31,7,60,44,152,8,14,30,138,154,140,148,191,222,63,190,127,92,63,174,148,128,65,65,140,255]},{"1821647":[254,97,8,193,96,3,64,208,102,235,235,255,255,255,140,254]},{"1821664":[255,255,255,255,255,255,255,255,127,255,190,255,115,255,254,254,183,183,31,31,191,191,25,25,148,148,65,65,140,140,1]},{"1821696":[46,46,149,21,63,63,86,87,192,240,15,170,93,93,248,111,255,255,127,127,255,255,255,254,240,192,176,26,93,98,47,151,209,255,234,255,192,255,169,255,58,250,191,191,63,127,240,240,46,46,149,149,63,63,86,86,207,202,69,5,192,64,95,95,169,168,64,64,168,168,84,84]},{"1821769":[5,250,170,85,85,1,254,254,254,255,255,255,255,255,255,5]},{"1821786":[5,175,85,170,254,255,87,255,191,255,87,255,171,255,173,173,255,255,255,255]},{"1821808":[169,169,64,64,168,168,84,84,250,168,80,80]},{"1821822":[255,254,251,63,255,62,126,4,62,43,104,233,40,33,84,84,1,254,64,32,1,32,155,129,197,234,253,124,214,246,85,171,254,87,255,255,255,255,255,255,255,255,149,253,255,255,254,255,168]},{"1821872":[223,223,223,223,126,126,20,20,106,104,9,9,1,1,255,254,99,47,33,237,227,207,81,93,251,231,169,181,219,103,57,213,164,154,166]},{"1821908":[196,178,246,48,172,98,174]},{"1821916":[76,146,14,32,255,251,239,251,127,235,255,219,231,227,135,195,199,211,151,179,85,93,87,71,181,165,183,135,125,85,95,55,173,245,79,119,96]},{"1821954":[106,34,80]},{"1821958":[168,8,128,128,128]},{"1821964":[171,171,215,87,31,31,21,55,47,47,87,223,255,127,127,255,255,127,127,255,255,255,255,255,255,255,255,255,255,127,255,255,212,127,168,255,224,224,200,200,208,208,32,32,128]},{"1822012":[171,43,87,87,8,8]},{"1822020":[32,32]},{"1822024":[160,169,104,111,189,253,55,87,255,255,255,255,255,255,255,255,249,240,255,248,237,162,203,140,247,255,255,255,223,255,255,255,89,249,151,255,127,255,212,216,8,8]},{"1822068":[32,32]},{"1822072":[166,160,104,104,144,144,63,26]},{"1822086":[8,8,31,127,209,209,255,255,104,232,255,255,255,255,255,255,247,255,127,31,255,255,255]},{"1822110":[168,87,255,255,255,255,255,255,255,255,96,127,46,255,255,255,64,64]},{"1822136":[159,31,209,209]},{"1822142":[191,23,2,1,1,7,15,11,130,138,4,244,86,86,208,209,203,213,252,254,255,248,249,252,122,241,250,10,252,250,212,42,210,40,255,255,255,255,247,255,251,251,244,247,175,255,252,255,21,5,1,1]},{"1822196":[10,10,5,1,15,6,83,82,6,7,250,177,31,40,63,80,127,106,127,40,127,234,255,108,255,234,255,172,135,159,47,207,85,31,23,151,149,63,19,23,21,63,83,83,8,240,208,208,106,224,232,104,234,192,236,232,234,192,172,172,207,191,175,223,159,127,151,127,63,255,23,255,63,255,83,255,255,175,255,21,255,43,255,5,255,55,255,69,255,139,255,5,80,255,234,255,212,255,250,255,200,239,186,255,116,255,248,255]},{"1822305":[175]},{"1822307":[21]},{"1822309":[43]},{"1822311":[5,48,23,64,5,128,11,2,5,255,255,255,255,255,255,239,255,103,255,239,255,223,255,255,255,255,199,255,239,251,249,255,121,255,255,255,95,255,252,255,117,42,255,16,255,2,251,134,255,10,255,128,255,3,255,10,255,18,213]},{"1822371":[239,4,249]},{"1822375":[121,10,245,33,94]},{"1822381":[252,128,117,197,255,239,255,249,255,249,255,245,255,255,255,252,255,253,255,245,255,255,255,237,231,255,199,255,127,255,127,253,255,255,243,170,255,4,255,138,239,48,223,128,253]},{"1822427":[255,2,223,12,255,160,95,4,251,144,103,24,255,16,111,128,255]},{"1822445":[255]},{"1822447":[243,95,255,251,255,103,255,199,239,127,255,127,255,255,255,243,255,85,255,255,255,253,255,254,255,125,255,254,255,221,251,254,247,234,251]},{"1822483":[191,2,127,1,255,130,255,1,255,38,255,9,255,64,191]},{"1822499":[255]},{"1822501":[255]},{"1822503":[255]},{"1822505":[255,12,243]},{"1822509":[251]},{"1822511":[247,191,255,255,255,255,255,255,255,255,255,255,255,251,255,247,255,198,249,171,254,65,254,235,255,81,255,170,255,80,255,170,255,57,185,124,255,191,254,20,255,190,255,95,255,175,255,87,255]},{"1822561":[255,41,215]},{"1822565":[254]},{"1822567":[255,16,239,10,245]},{"1822573":[255,2,253,255,255,214,255,253,254,255,255,239,255,245,255,255,255,253,255,179,76,175,88,223,96,239,240,207,112,191,248,22,249,166,249,108,76,212,216,160,96,16,208,184,176,96,248,235,249,249,249]},{"1822625":[255]},{"1822627":[127]},{"1822629":[255,128,127]},{"1822633":[191,32,223]},{"1822637":[255,160,95,255,255,127,255,127,255,255,255,127,127,223,255,255,255,95,255]},{"1822657":[255,184,71,84,171,234,21,208,47,226,45,240,15,232,23]},{"1822682":[24,8,56,40,48,48,139,116,1,254,3,252,1,254,2,253,8,239]},{"1822701":[239,17,222,116,255,254,255,252,255,254,255,253,255,247,231,215,207,206,239,47,255,5,250,3,255,1,254,11,255,5,255,11,247,5,255,47,10]},{"1822740":[3,2]},{"1822744":[11,10,5,1,3,2,5,1,245,10,255]},{"1822756":[253,2,127,128,245,10,254,1,253,2,254,1]},{"1822769":[255]},{"1822771":[255]},{"1822773":[255,128,255]},{"1822777":[255]},{"1822779":[255]},{"1822781":[255]},{"1822783":[255]},{"1822785":[127]},{"1822787":[255,128,95]},{"1822791":[55,160,197,84,9,154,101,189,68,255,255,253,255,255,255,255,255,255,255,255,255,223,191,223,159,255,128,255,2,255,32,255]},{"1822824":[127,10,255]},{"1822828":[191,96,187,192,255,127,255,253,255,223,255,255,255,245,255,255,255,159,255,31]},{"1822849":[239]},{"1822851":[255]},{"1822853":[255,128,247]},{"1822857":[87,66,55,160,85,16,230,142,239,68,255,255,255,125,255,255,255,253,255,255,255,255,255,239,97,255,187,255]},{"1822886":[255,138,255,168,255,2,255,10,255,1,239,158,255,68,255,255,247,125,255,87,255,253,255,245,255,254,128,63]},{"1822915":[127]},{"1822917":[255]},{"1822919":[255,1,255,162,255]},{"1822925":[95,8,255,170,63,21,127,250,255,85,255,254,255,93,255,255,255,247,255,191,21,255,234,255,5,255,170,255,1,255,162,255,160,255,8,63,234,127,149,255,250,255,85,255,254,255,93,255,95,255,247]},{"1822977":[254]},{"1822979":[255]},{"1822981":[255]},{"1822983":[127,64,255,128,253,80,255,165,255,160,254]},{"1822995":[255,160,255,208,255,170,255,86,255,170,255,80,255,255,95,255,255,255,95,255,175,255,85,255,171,255,85,255,175,254,161,255]},{"1823028":[255,160,127,208,255,170,253,86,255,170,255,80,23,160,43,70,15,230,15,208,1,250]},{"1823051":[253]},{"1823053":[255]},{"1823055":[255,23,183,43,111,15,235,15,223,129,251]},{"1823067":[253,160,255]},{"1823071":[255,255,255,249,255,253,255,255,255,255,127,255,255,255,95,255,255,160,95,70,185,230,25,208,47,250,133,253,2,255,160,255]},{"1823104":[142,126,241,21,161,31,254,1,94,1,173]},{"1823116":[5,160,10,64,239,142,255,145,255,129,255,212,95,94,175,173,5,165,10,74,159,224,155,132,129,158,212,213,254,255,253,255,255,255,255,255,127,255,31,255,31,255,1,255,1,255,2,253,160,95,64,191,169,190,64,111,170,191,80,91,146,107,104,148,237,18,86,1,169,255,192,95,234,175,244,80,254,130,255,64,255,232,255,92,233]},{"1823202":[240]},{"1823204":[250]},{"1823206":[255]},{"1823208":[135,232,67,212,232,250,92,245,190,255,239,255,255,255,255,255,111,255,151,255,18,255,161,95,42,213,9,246,4,251]},{"1823239":[255,136,223]},{"1823243":[162]},{"1823245":[142,86,7,42,255,11,255,4,255]},{"1823255":[211,168,139,93]},{"1823260":[249,4,255,130,42]},{"1823266":[11,2,4]},{"1823270":[44]},{"1823272":[252]},{"1823274":[255]},{"1823276":[119,136,174,5,213,255,244,255,251,255,255,255,255,255,255,255,251,255,47,249]},{"1823297":[199,96,162,4,192,111,180,199,135,226,162,69,130,202,144,79,120,74,120,72,124,84,103,79,127,79,255,88,234,213,229,31,31,126,126,31,31,119,119,223,95,122,122,218,90,213,85,232,232,141,140,235,235,152,144,40,168,141,136,63,186,191,53,6,82,6,132,70,6,252,84,92,92,12,14,212,6,140,2,83,7,133,7,7,69,85,253,253,253,255,253,47,45,115,113,94,95,150,151,254,253,254,255,94,95,14,15,38,39,114,115,169,9,121,17,187,185,3,3,163,3,241,1,249,33,253,113,197,69,234,74,231,117,155,107,200,119,78,251,44,31,24,111,197,254,110,18,247,169,11,4,231,168,83,152,17,180,68,220,238,93,58,175,191,63,14,142,175,39,155,155,189,23,212,5,255,17,147,108,137,118,180,123,144,127,36,255,192,127,234,63,135,207,34,96,7,190,115,240,165,188,96,96,13,173,93,159,31,209,245,59,206,32,20,234,156,32,85,233,29,97,167,25,207,69,38,166,62,116,230,150,46,70,228,212,103,247,159,175,170,104,173,204,75,232,125,140,123,154,127,156,26,242,80,224,64]},{"1823554":[254,64,255,250,239,239,64,72,235,100,48,32,40,192]},{"1823569":[64,64,190,250,255,255,255,247,255,112,244,47,47,215,55,254,254,255,191,255,255,239,239,72,72,228,228,175,175,231,231,191,190,65,1]},{"1823606":[16]},{"1823608":[191,8,31,4,223,143,31,7,131,147,160,56,201,216,170,170,74,202,174,38,70,70,115,122,215,99,127,195,222,226,237,211,77,241,99,77,206,224,115,196,165,39,166,166,230,230,167,183,231,247,38,54,227,243,107,123,206,22,77,28,13,28,93,29,159,159,217]},{"1823676":[157,137,149,5]},{"1823682":[3]},{"1823684":[255,42,255,85,85,85,129]},{"1823692":[93,34,42]},{"1823699":[3,42,215,85,255,255,255,126,126,128,162,85,213,171,171,95,95,255,215,255,255,85,85]},{"1823724":[162,162,85,85,255,171,252,92,40]},{"1823736":[170]},{"1823738":[255]},{"1823740":[255,162,255,85,15]},{"1823746":[183,180,208,211,151,113,158,143,192,120,223,56,234]},{"1823760":[128,247,144,247,160,188,125,138,128,128,120,64,24,63,21,21,112,103,240,243,220,228,119,255,159,159,125,125,63,63,21,21,184,47,60,47,123,103,175,175,127,31,135,5,224,32,255,21,255,44,255,127,89,182,255,231,174,255]},{"1823820":[228]},{"1823822":[170]},{"1823824":[4,215,128,125,16]},{"1823830":[231,8]},{"1823837":[228,85,85,40,251,2,2,16,144,255,255,255,255,85,85,255,255,85,85]},{"1823857":[255,253,127,111,255,255,255,255,255,255,85,27,27,255,85,255,139,255,222,51,207,252,101,145,215,162,6]},{"1823885":[123,200,5,1,117]},{"1823891":[117,8,10,101,27,81,42,11,169,123]},{"1823902":[55,58,138,254,138,171,9,9,231,247,252,255,254,255,251,251,15,15]},{"1823921":[255,84,255,246,255,248,255,199,198,85,85,133,129,240]},{"1823936":[251,183,249,245,251,247,109,225,175,227,157,145,135,211,231,235,132,106,142,128,4,170,30,84,212,126,134,92,220,54,76,54,159,219,119,115,95,91,39,39,79,79,207,207,191,159,255,231,37,253,15,247,165,253,219,243,49,249,243,187,105,17,185,161,64,127,128,170,128]},{"1824006":[255,21,117,117,87]},{"1824012":[85]},{"1824016":[255,192,170,128]},{"1824022":[21,127,255,255,168,168,170,170,127,255,63,127,170,170,127,127,127,127,245,245,128,128,170,170,127,127,192,64,85]},{"1824052":[255,127,128]},{"1824056":[138,128,255,128,255,170,255,127,19,213,49,147,17,19,250,58,75,79,32,42,87,7,2]},{"1824080":[233,38,138,1,45,38,46,229,223,219,234,224,175,175,253,253,244,252,213,221,245,251,251,255,116,127,42,42,167,167,253,253,59,62,126,90,255,251,20,20,171,43,213]},{"1824124":[248,160,255,253,146,193,228,159,127,170]},{"1824135":[4,234,234]},{"1824139":[255,255,170,253]},{"1824144":[102,154,132,96,160,85,250,235,255,255,255]},{"1824156":[170,247,2,2,131,131,31,31,10,43,21,255,21,255,255,255,255,247]},{"1824176":[124,116,224,100,245,213,254,254,234,234]},{"1824188":[8]},{"1824190":[255]},{"1824192":[255,67,191,196,45,126]},{"1824199":[117,236,245,28,244,252,164,220,5,112,140,161,26,44,129,140,138,244,224,244,26,164,88,37,43,15,15,94,94,124,253,114,248,28,254,252,254,252,94,13,15,240,79,161,158,130,175,255,249,235,233,3,3,163,1,242,3,255,170,255,160,255,32,255,128,247,170,255,133,253,42,127,4,85,255,95,95,223,255,126,127,28,127,106,63,195,255,139,255,170]},{"1824290":[160,160,32]},{"1824294":[129,128,225,202,144,197,20,42,112,4,255,255,95,255,255,255,127,255,55,255,63,255,253,255,254,255,255,47,255,21,255,191,255,87,127,255,255,95,95,191,255,31,208,255,232,255,64,255,161,255,139,255,21,255,239,255,223,191]},{"1824353":[47,2,21]},{"1824357":[191,9,86,11,244,181,74,15,176,63,64,127,255,255,255,255,255,254,255,116,255,234,255,80,255,160,255,255,251,255,255,255,255,255,255,255,255,255,255,255,221,255,255,6,255,65,255,187,255,87,255,255,255,255,255,209,213,250,251,2,249,65,190,187,68,87,168,255]},{"1824426":[255]},{"1824428":[209,46,250,4,249,255,190,255,68,255,168,255]},{"1824441":[255]},{"1824443":[255,46,255,4,255,247,243,255,243,245,255,255,255,253,127,255,255,255,79,255,170,224,247,28,191,223,223,230,238,102,119,175,239,68,76,170,170,236,23,16,227,213,42,230,25,100,155,175,16,68,179,170,85,19,255,227,255,42,255,25,255,155,255,16,255,179,255,85,255,85,243,254,247,213,255,234,127,217,246,255,162,255,16,254,161,174,247,9,239,63,127,159,255,54,118,34,34]},{"1824541":[16,128,160]},{"1824545":[243]},{"1824547":[247,21,234,74,53,16,239,34,221]},{"1824557":[239,128,95,251,247,247,255,234,255,117,255,239,255,221,255,239,255,95,255]},{"1824577":[255,162,255,67,252,175,248,245,10,250,37,68,187,161,94,255,255,223,255,254,252,248,248,128]},{"1824603":[32]},{"1824606":[1]},{"1824609":[255,130,125,64,191,168,87]},{"1824617":[255]},{"1824619":[223]},{"1824621":[255]},{"1824623":[255,255,255,125,255,191,255,87,255,255,255,223,255,255,255,255,255,63,192,111,152,252,7,254,17,16,239,224,95,18,175,128,127,194,192,144,144,184,24,8,8]},{"1824668":[2]},{"1824673":[255]},{"1824675":[255]},{"1824677":[239]},{"1824679":[247,11,244,7,248,143,112,127,128,255,255,255,255,231,247,247,255,244,255,248,255,48,255,128,255,64,191,163,94,5,248,6,248,8,253,18,254,172,223,71,255]},{"1824722":[3,2,1,3,2,3,11,9,16,1,141,1,71]},{"1824737":[255,2,253,9,247,122,134,244,8,252,2,255,1,255]},{"1824752":[255,255,253,255,244,252,133,252,3,253,1,252]},{"1824765":[254]},{"1824767":[255,43,255,21,250,57,255,117,255,127,127,255,127,127,253,127,255,43,10,16]},{"1824788":[57,40,245,149,255,47,127,221,125,61,127,63,245,10,255]},{"1824804":[215,40,234,149,80,47,162,213,66,184,192,21]},{"1824817":[255]},{"1824819":[255]},{"1824821":[255]},{"1824823":[127,128,127,8,247,133,250,42,213,254,164,253,116,255,160,255,110,254,184,252,40,250,201,72,181,95,255,191,255,95,255,255,255,87,255,255,255,255,255,247,247,91,160,139,64,95,160,145]},{"1824872":[71,168,215,129,55]},{"1824878":[255,16,255,95,255,191,255,95,255,255,255,87,255,126,255,255,255,231,232,5,80,11,160,145,80,47,80,84,42,207]},{"1824909":[127,160,255,255,255,255,255,255,255,255,255,143,223,133,239,223,255,87,255,255,2,255,4,127,10,255]},{"1824936":[223,218,239,106,255,160,255,168,255,253,255,251,255,245,255,255,223,37,239,149,255,95,255,87]},{"1824961":[87,10,31]},{"1824965":[87,10,255]},{"1824969":[31,168,255,4,255]},{"1824975":[255,255,255,245,255,255,255,245,255,255,255,85,255,187,255,21,255,255,168,255,74,255,160,255,10,255,160,255,170,255,68,255,234,255,87,255,181,255,95,255,245,255,95,255,85,255,187,255,21]},{"1825025":[255,130,219,16,253,160,159,18,254,16,255]},{"1825037":[255]},{"1825039":[255,232,255,66,219,136,253,48,159,136,254,68,255,170,255]},{"1825055":[255,255,23,217,155,253,117,191,143,254,118,255,187,255,85,255,255,255,232,219,100,253,138,159,112,254,137,255,68,255,170,255]},{"1825089":[255]},{"1825091":[223,128,255]},{"1825095":[247,32,127,3,124,3,248,10,240,168,255,100,255,42,255,24,255,136,127,3,125,3,251,10,250,255,87,255,187,255,213,255,239,127,247,125,125,255,255,255,255,255,168,223,100,255,42,247,24,255,8,124,131,248,7,240,15,1,224,2,192]},{"1825157":[224,10,192,1,160,43]},{"1825164":[21]},{"1825166":[183]},{"1825168":[1,225,2,194]},{"1825173":[224,10,202,1,161,43,43,21,21,191,183,255,255,255,255,255,255,255,255,255,255,255,255,255,255,247,255,224,31,192,63,224,31,192,63,160,95]},{"1825211":[255]},{"1825213":[255,8,247,94,1,149]},{"1825220":[94,1,85]},{"1825224":[121,6,222,11,253,8,176,72,95,94,191,151,95,94,255,95,123,120,255,246,255,228,247]},{"1825248":[254,255,215,253,254,255,95,245,252,250,250,221,232,236,15,64,1,255,40,215,1,255,160,95,6,255,15,241,12,243,79,255,145,104,130,85,177,10,14,81,224,10,144,64]},{"1825293":[170]},{"1825295":[27,255,128,253,40,255,228,245,160,255,128,255]},{"1825308":[255]},{"1825310":[228]},{"1825312":[134,232,42,85,228,170,170,81,149,138,47,64,85,170,255]},{"1825328":[110,255,87,255,10,255,91,255,31,255,111,255,255,255,255,255,192,128,72,128,74,144,79,144,64,152,202,144,78,145,207,144,207,255,71,183,82,231,79,239,80,224,74,234,90,234,95,239,95,223,151,23,216,85,215,87,208,88,82,82,210,82,215,208,175,47,111,167,48,176,55,183,48,176,178,178,50,178,48,176]},{"1825410":[2]},{"1825412":[186]},{"1825414":[248,4,4]},{"1825419":[5,245,3,228,27,253,253,221,255,185,253,250,255,4,7]},{"1825435":[6,246,246,167,190,254,255,222,223]},{"1825445":[85,253,249,5,7,5,3,247,241,191,1,255,255,253,221,3,1,248,248,4,4,1,1,241,241]},{"1825472":[30,111,67,47,139,79,5,111,18,101,155,166,232,215,194,191,8,252,84,199,176,193,24,68,8,70,128,35,96,224,169,51,154,8,228,4,186]},{"1825510":[53,140,62,128,31,130,254,192,165,201,165,127,171,127,181,127,178,127,185,127,252,255,223,191,118,31,21,213,132,100,12,252,160,241,194,248,128,240,230,125,65,160,29,41,69,25,238,131,32,143,14,66,68,202,14,226,21,27,45,253,213,229,244,245,181,180,220,118,212,212,252,118,5,4,18,224,27,233,10,232,74,232,14,236,46,236,10,232,238,236,240,32,36]},{"1825604":[42]},{"1825606":[95,160,1]},{"1825610":[189,2,171,84,255,10,47,239,213,219,42,255,31,191,1,1,189,189,161,245,253,255,239,239,17,17]},{"1825637":[213,191,31,1,1,189,189,245,160,245]},{"1825648":[31,15,255,21]},{"1825654":[31,31,1,1,189,189,160,160]},{"1825664":[217,93,103,123,156,26,198,16,94,29,83,158,215,12,215,7,223,228,101,214,223,232,162,183,25,47,61,40,8,45,160,47,107,251,119,127,107,121,210,182,106,58,74,62,106,49,72,56,150,14,128,24,87,75,169,189,21,15,49,46,30,7,55,47,129,128,130,128,192,192,223,207,207,207,113,247,180,116,251,27,254,254,125,253,192,127,144,111,96,191,171,74,209,41,115,172,254,254,253,253,192,255,192,224,224,240,250,125,127,63,47,175,127,126,127,125]},{"1825786":[152,152,199,71,80,144]},{"1825794":[32]},{"1825796":[85]},{"1825798":[247,247,255,255,255,255,65,63,56,104,255,255,223,223]},{"1825813":[170,255,8,23,232,191,64,74,202,199,143,255,255,223,223,85,170,8,247]},{"1825833":[23]},{"1825835":[191,10,245,127,255,255,255,255,223]},{"1825854":[240,240,1]},{"1825860":[68]},{"1825862":[127,127,255,254,255,255,3,255,143,140,254,254,255,255]},{"1825877":[187,248,135,81,174,248,7,191,188,117,255,254,254,255,255,68,187,128,120]},{"1825897":[80]},{"1825899":[248,172,83,250,255,255,254,255,255]},{"1825918":[5,4,20,4,60,11,89,1,244,248,248,63,252,191,255,255,127,255,237,237,203,204,15,175,28,239,204,180,79,179,1,254,96,31,231,231,207,207,85,173,8,19,132,11,3,12]},{"1825965":[1]},{"1825967":[224,250,226,240,192,14,4]},{"1825984":[127,251,3,103,183,51,213,20,19,230,93,108,247,168,233,222,188,14,244,158,120,71,206,248,236,250,46,96,86,182,32,192,239,255,227,251,51,27,19,59,211,59,191,15,9,15,15,31,89,81,61,61,236,8,15,15,13,13,7,7,15,15,15,15,136]},{"1826050":[4]},{"1826052":[59]},{"1826054":[127,128,128,128,106]},{"1826060":[235,148,127,128,255,255,213,251,59,255,255,255,128]},{"1826074":[234,234,171,59,255,255,119,255,209,209]},{"1826085":[213,255,127]},{"1826089":[128,234,106,59,171,255]},{"1826096":[255,119,255,213]},{"1826102":[127,127]},{"1826106":[106,106,43,43]},{"1826114":[64]},{"1826116":[186]},{"1826118":[255]},{"1826124":[165,90,209,63,255,255,85,191,186,255,255,255]},{"1826140":[165,165,252,240,255,255,21,21]},{"1826149":[85,255,255]},{"1826156":[160,154,239,31,255,255,255,85]},{"1826166":[255,255]},{"1826172":[128,128,31,31,5]},{"1826178":[2]},{"1826180":[160]},{"1826182":[241,14,6,1,44,3,85,170,16,255,250,250,253,253,160,255,240,242,6,6,44,45,85,85,70]},{"1826208":[250,250,253,253]},{"1826213":[95,242,240,6,6,45,44]},{"1826221":[170,255,255,255,250,255,253]},{"1826230":[240,240,6,6,44,44]},{"1826238":[255,255,76,44,172,5,4,5,240,1,124,132,120,129,244,4,2,243,156,176,85,91,13,249,253,255,20,144,57,191,252,248,111,13,188,182,93,95,13,255,241,7,156,6,181,15,12,14,241,255,251,177,242,83,10,9,6,7,3,1,10,3,11,9,254,253,215,42,255,21,255,43,255,17,245,42,255,5,95,42,255,129,168,127,128,255,130,127,142,255,142,127,170,255,244,255,126,127,213,42,106,21,214,41,96,145,209,42,80,5,1,42,128,129,215,255,255,255,253,255,123,255,241,255,255,255,223,255,127,255,63,255,255,95,255,253,255,87,255,255,255,95,255,191,255,5,223,223,29,191,187,255,85,255,175,255,5,255,2,255,184,255,31,224,189,66,185,68,253,2,175,80,165,90,66,189,66,5,32,255,226,255,68,255,170,255,80,255,250,255,253,255,239,255,249,251,255,225,255,221,255,255,255,245,255,255,255,223,223,95,247,243,238,235,213,221,255,255,245,245,93,253,175,255]},{"1826463":[223,243,2,224,20,213,34,255]},{"1826472":[245,10,93,162,143,80,160,95,12,249,16,255,34,255]},{"1826487":[255,10,255,162,255,80,255,223,255,255,208,255,42,255,200,255,187,255,213,251,255,245,255,255,255,80,208,32,42]},{"1826517":[200,170,187,211,213,126,254,186,250,17,255,80,47,32,213]},{"1826533":[55,170,68,209,42,122,133,176,79,21,234,47,255,213,255,55,255,68,255,42,255,133,255,79,255,238,255,245,122,218,165,205,215,254,213,247,8,255,163,127,196,239,250]},{"1826577":[112,48,160,16,213,128,212,130]},{"1826586":[34,35,192,196,122,250]},{"1826593":[143,32,127,16,58,128,43]},{"1826601":[255,34,220,64,187,106,149,143,255,79,223,10,239,43,255,255,255,220,255,187,255,149,255,1,254,128,127,64,255,8,183]},{"1826633":[255,224,31,208,47,186,5]},{"1826644":[128,128,128,128]},{"1826652":[96,32,192,224,14,241,5,250,135,184,7,248,11,244,1,254,2,253,32,63,241,255,250,255,120,127,56,255,244,255,254,255,157,255,31,191,46,247,21,255,43,253,21,255,11,245,5,255,67,189,161,31,38]},{"1826706":[21]},{"1826708":[41]},{"1826710":[21]},{"1826712":[1]},{"1826714":[5]},{"1826716":[1]},{"1826718":[1]},{"1826720":[255]},{"1826722":[255]},{"1826724":[255]},{"1826726":[255]},{"1826728":[255]},{"1826730":[255]},{"1826732":[191,64,31,224]},{"1826737":[255]},{"1826739":[255]},{"1826741":[255]},{"1826743":[255]},{"1826745":[255]},{"1826747":[255,64,255,160,255,255,95,199,175,193,79,109,255,191,95,127,206,143,247,31,254,95,11,135,5,113]},{"1826774":[109,1,31,11,110,4,167,34,30]},{"1826784":[244,10,234,17,239,32,254,1,244,10,219,36,253,34,255]},{"1826800":[1,254,4,251,16,239]},{"1826807":[255,1,254,32,255]},{"1826813":[223]},{"1826815":[255,253,188,157,239,255,221,255,255,255,239,254,255,62,124,127,190,190,188,175,47,221,159,255,127,239,239,254,92,189,60,190,148,67,154,240,44,98,141,128,87,16,238,163,84,195,185,107,20,36,219,3,220,18,237,40,215,1,254,8,247,4,251,128,127,144,173,80,47,160,31]},{"1826887":[119,160,7]},{"1826891":[127,160,95]},{"1826895":[191,127,239,255,231,255,255,255,255,255,255,255,255,255,255,255,255,71,170,247,56,255]},{"1826918":[255]},{"1826920":[255,8,255]},{"1826924":[255]},{"1826926":[255]},{"1826928":[215,85,255,199,255,255,255,255,255,247,255,255,255,255,255,255]},{"1826945":[255]},{"1826947":[255]},{"1826949":[255]},{"1826951":[255]},{"1826953":[255]},{"1826955":[255]},{"1826957":[255]},{"1826959":[255,254,255,213,255,234,255,80,255,234,255,196,255,234,255,80,255,255,1,255,42,255,21,255,175,255,21,255,59,255,21,255,175,255,254,255,213,255,234,255,80,255,234,255,196,255,234,255,80]},{"1827009":[255,8,243,21,226,170,85,1,254,42,213,5,250,138,117,170,255,72,251,149,247,170,255,137,255,42,255,5,255,138,255,255,85,251,187,247,119,255,255,255,119,255,255,255,255,255,255,255,170,243,76,226,157,85,170,254,137,213,42,250,5,117,138]},{"1827073":[255,162,85,213,42,175,80,23,168,175,64,86,170,172,17,128,255,162,247,213,127,175,255,23,191,175,239,86,255,172,187,255,127,255,255,127,127,255,255,255,255,255,255,253,254,250,251,255,128,85,170,42,213,80,175,168,87,64,191,170,85,19,236,5,224,175,64,85,160,255]},{"1827144":[87]},{"1827146":[255]},{"1827148":[223,32,255]},{"1827152":[5,229,175,239,85,245,255,255,87,87,255,255,159,175,223,191,255,255,255,255,255,255,255,255,255,255,255,255,143,175,255,191,224,31,64,191,160,95]},{"1827191":[255]},{"1827193":[255]},{"1827195":[255,32,223,32,223,94,1,246,9,249,6,251,4,224,30,235,21,165,90,234,21,95,94,255,244,255,248,255,80,255,224,255,193,255,160,255,64,254,255,244,253,248,254,80,84,225,254,193,212,160,250,64,85,1,255,9,255,6,255,4,255,31,255,21,255,90,255,21,255,146,106,148,87,10,175,16,155,170,175,68,111,170,175,16,27,255,130,252,20,250,10,116,16,250,170,212,68,250,170,244,16,135,232,63,64,95,160,255]},{"1827304":[255]},{"1827306":[255]},{"1827308":[255]},{"1827310":[255]},{"1827312":[111,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,160,239,16,255,32,255]},{"1827335":[255,128,255]},{"1827339":[255]},{"1827341":[255]},{"1827343":[191,176,168,8,45,32,255]},{"1827351":[95,128,255]},{"1827355":[127,64,239,192,181,231]},{"1827362":[218,8,32]},{"1827366":[160]},{"1827368":[128]},{"1827370":[128]},{"1827372":[80,64,138,128,239,255,231,255,255,255,255,255,255,255,255,255,191,255,63,255,207,129,239,167,90,159,204,139,80,179,73,232,6,244,223,238,78,123,75,252,223,229,87,167,38,190,13,215,126,193,20,218,210,80,240,251,221,210,25,26,92,95,108,110,124,77,223,222,32,160,8,128,40,160,248,184,164,228,144,208,186,218,32,224,172,84,252,254,170,234,1,254]},{"1827465":[255,255]},{"1827470":[254]},{"1827472":[253,253,162,95,234,65,255,255,174,174,255,255]},{"1827485":[255]},{"1827487":[1,171,1,2,161,84,171,126,128,8,247]},{"1827501":[255,254,1,1,1]},{"1827520":[109,79,130,159,225,127,52,117,49,51,250,26,57,18,247,5,72,181,108,115,76,63,237,153,123,236,210,221,52,246,13,14,154,248,188,220,124,116,121,113,84,253,31,95,22,246,255,14,127,71,231,219,171,55,26,23,109,110,96]},{"1827580":[47,6,9,8,165,220,193,241,84,237,52,213,124,253,14,14,221,32,253,84,15,2,101,202,47,211,199,203,30,130,174,243,2,38,86,174,158,86,116,117,47,38,215,214,230,231,94,255,37,36,247,174,42,234,142,236,218,250,42,234,26,146,160,160,250,32,90,10,255,63,244,246]},{"1827653":[95,11,244,121,128,15]},{"1827660":[126,1,115]},{"1827664":[193,190,246,2,94,94,91,91,248,254,3,243,30,153,244,252,128,1,11,244,254,1,64,180,1,134,12,243,97,153,4,116]},{"1827706":[3]},{"1827708":[31,7,127,4,215,143,83,151,71,135,75,15,137,15,96,51,82,211,249,185]},{"1827729":[167,180,167,208,247,108,239,95,120,180,140,69,248,175,211,96,48,196,52,48,224,12,252,255,105,167,175,247,231,247,231,23,15,59,47,95,15,123,39,94,65,203,155,158,142,28,4,121,197,255,243,255,255,253,255,85,85]},{"1827787":[255]},{"1827789":[244,31,128,159,102,3,255]},{"1827797":[255]},{"1827799":[253,85,170]},{"1827804":[244,32,128,31]},{"1827809":[160]},{"1827811":[12]},{"1827816":[255,255,255,255,244,244,151,159,95,228,240,255,255,255,255,255,170,85,255,255,43,32,104,8,127,64,255]},{"1827844":[253,251,247,249,85,93]},{"1827851":[255]},{"1827853":[85,191,17,191,191,255,42]},{"1827861":[253]},{"1827863":[243,93,162]},{"1827868":[85]},{"1827870":[17,174,192,255,42,42,2,6,4,6,255,247,255,255,85,85,119,238,127,127,213]},{"1827892":[249,255,249,255,170,85,255,255,170]},{"1827902":[217,200,234,130,250,6,254,248,238,233,84,244,2,250,2,82,255,81,126,233,255,168,6,163,19,246,241,8,2,5,83,1,81,175,151,255,173,169,90,90,11,14,253,93,255,255,82,80,253,175,124,124,87,5,165,249,241,253,171,81,248,248,175]},{"1827966":[82,2,127,63,197,175,64,127,194,223,144,143,63]},{"1827982":[126]},{"1827984":[125,66,175,106,159,31,149,53,154,58,223,223,192,255,128,129,128,189,250,197,223,224,193,254,128,175,224,200,64,127,254,129,128,128]},{"1828020":[192,192,64,64,64]},{"1828026":[64,64,192,64,128,128,235,244,73,86,33,118,9,254,25,230,225,14,51,4,157,28,18,242,240,176,120,88,224,232,185,176,233,240,55,250,31,112,29,15,191,79,207,63,111,159,15,239,15,31,9,219,159,127,15,15,15,15,7,7,7,7,15,15,15,15,23,3,7,7,127,16,127,255,34,247]},{"1828103":[255]},{"1828105":[255,125]},{"1828110":[255]},{"1828112":[111,58,255,128,247,213,127,127,42,42,125,255]},{"1828125":[255]},{"1828128":[170]},{"1828130":[128,127,221,34,117,138]},{"1828137":[255]},{"1828139":[138]},{"1828141":[255,255]},{"1828160":[209,53,241,242,19,112,55,212,115,147,120,24,117,2,255]},{"1828176":[239,170,193,12,104,101,108,101,226,236,106,231,40,186,160,175,178,26,26,254,215,59,86,159,25,159,29,255,82,178,69,175,29,24,29,28,28,27,28,27,30,28,50,18,47,2,186,10,93,93,255]},{"1828228":[255,213,255,125,255,255]},{"1828236":[221,34,238]},{"1828240":[255,170,160,95,42,42]},{"1828247":[146]},{"1828250":[34,255]},{"1828253":[34]},{"1828255":[238,162,170,95,95,213,247,109,239,255,255,221,255,34,34,85,255,93,8,160,95,8,255,16,255]},{"1828282":[34,34,255,34,187,187,215,217,255,6,255,84,255,199,255,239]},{"1828300":[222,32,160,1,248,164,1,249,171,171]},{"1828311":[56]},{"1828313":[16,35,255,3,33,1,162,43,175,254,254,84,84,199,255,239,239,220,255,33,33,85,245,212,135,1,255,171,255]},{"1828343":[255,16]},{"1828346":[35,35,254,34,254,244,255,32,255,50,253,173,255,233,31,122,127,192,31,162,31,32,223,255,205,221,80,250,20,23,37,143,223,95,29,31,159,223,32,16,50,34,173,7,235,234,186,144,96,96,194,192,64,144,239,255,221,255,248,253,21,255,239,95,223,63,255,191,239,191,239,175,255,21,255,2,255,1,255,138,255]},{"1828428":[255,2,255]},{"1828432":[64,239,234,255,253,255,254,255,117,255,255,255,253,255,255,255,24,167,16,5]},{"1828453":[2]},{"1828455":[1,128,10]},{"1828461":[2]},{"1828464":[239,255,255,255,215,255,255,255,223,255,255,255,223,255,255,255,255,255,255,127,255,191,255,85,255,174,255,85,255,191,255,23]},{"1828497":[255,128,255,64,255,170,255,81,255,170,255,64,255,232,255]},{"1828513":[255]},{"1828515":[127]},{"1828517":[191]},{"1828519":[85]},{"1828521":[174]},{"1828523":[85]},{"1828525":[191]},{"1828527":[23,255,255,255,255,255,255,255,255,254,255,255,255,255,255,191,255,247,255,255,247,253,243,255,79,255,175,255,127,253,255,255,127,40,252,9,255,6,255,161,255,80,255,128,255,2,255,128,255,32,223,1,246,24,235,25,86,128,47]},{"1828587":[127]},{"1828589":[255]},{"1828591":[127,223,255,246,255,243,255,206,255,175,255,127,255,255,255,255,255,119,249,250,255,84,255,234,255,85,254,251,255,239,239,255,255,137,233,79,239,191,255,21,255,171,235,4,254]},{"1828637":[103,64,254,1,254,74,181,20,235]},{"1828647":[255]},{"1828649":[254]},{"1828651":[254,17,230,64,191,254,255,181,255,235,255,255,255,254,255,255,255,239,255,191,255,148,171,190,225,125,130,190,193,189,194,191,226,125,194,255,136,32,32,224,224,128,128,192,192,72,64,96,226,224,192,136,136,64,191,160,95]},{"1828709":[255,128,127]},{"1828713":[127,160,93,64,191,136,119,159,255,95,255,255,255,127,255,255,255,221,255,191,255,119,255,66,191,128,127]},{"1828741":[255,168,87,8,247,168,95,64,191,128,127,2]},{"1828760":[8]},{"1828762":[8,8]},{"1828768":[191,64,31,224,30,225,7,248,35,220,15,240,15,240,23,232,64,255,224,255,225,255,248,255,220,255,240,255,240,255,232,255,255,223,77,242,35,253,17,254,175,255,21,254,41,255,17,253,223,138,72]},{"1828820":[41,40,16]},{"1828824":[175,10,20]},{"1828828":[41,40,17]},{"1828832":[117,138,247,8,215,32,255]},{"1828840":[245,10,255]},{"1828844":[215,40,253,2]},{"1828849":[255,8,255,8,247]},{"1828855":[255]},{"1828857":[255]},{"1828859":[255]},{"1828861":[255]},{"1828863":[255,239,255,247,239,235,247,65,255,255,252,121,186,185,254,87,255,239,239,231,69,227,163,65,1,252,168,62,18,184,40,87,17,16,239,186,65,92,163,254,1,87,168,239,6,215,40,238,17]},{"1828913":[255,4,251]},{"1828917":[255]},{"1828919":[255]},{"1828921":[255,16,237]},{"1828925":[255]},{"1828927":[255,168,23,64,21,232,149,80,203,226,225,212,1,250,225,245,38,255,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,255]},{"1828962":[255]},{"1828964":[127,2,191]},{"1828968":[31,136,255]},{"1828972":[31]},{"1828974":[219]},{"1828976":[255,255,255,255,255,253,255,255,255,119,255,255,255,255,255,255]},{"1828993":[255]},{"1828995":[255]},{"1828997":[255]},{"1828999":[247]},{"1829001":[223]},{"1829003":[255,32,95]},{"1829007":[255,254,255,245,255,255,255,125,255,255,255,255,255,255,255,255,255,255,1,255,10,255]},{"1829030":[255,138,255,32,255]},{"1829036":[255,128,255]},{"1829040":[255,254,255,245,255,255,247,125,255,223,255,255,255,127,255,255]},{"1829057":[255,2,253]},{"1829061":[255]},{"1829063":[255]},{"1829065":[255]},{"1829067":[255,64,255,128,255,160,255,66,255,160,255,80,255,234,255,84,255,170,255,85,255,255,95,255,191,255,95,255,175,255,21,255,171,255,85,255,170,255,160,253,66,255,160,255,80,255,234,255,84,255,170,255,85,23,232,43,80,5,250,11,240]},{"1829129":[254,2,253]},{"1829133":[255]},{"1829135":[255,151,252,43,123,5,255,11,251,128,254,2,255,128,255]},{"1829151":[255,252,124,255,255,255,255,255,255,255,127,255,255,255,127,255,255,232,151,80,175,250,5,240,15,254,129,253,2,255,128,255]},{"1829184":[127,128,191]},{"1829188":[95,32,255]},{"1829192":[85,168,171,64,69,168,170,80,127,255,191,191,95,127,255,255,85,253,171,235,69,237,170,250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,127]},{"1829235":[255,32,223]},{"1829239":[255,168,87,64,191,168,87,80,175,233,22,234,21,228,19,251,4,254,1,255]},{"1829260":[95]},{"1829262":[247]},{"1829264":[255,232,255,192,247,232,255,241,255,254,255,253,95,95,255,247,232,254,192,213,232,243,241,245,254,255,253,253,255,255,247,255,22,255,21,255,19,255,4,255,1,255]},{"1829307":[255]},{"1829309":[255,8,247,42,235,212,20,64,170,164,85,148,106,168,85,220,35,66,53,190,42,255,20,255]},{"1829334":[255,4,255,128,255]},{"1829340":[255,136,223,136,127,128,63]},{"1829348":[21,170,14,81,129,234,2,85,136,171,168,21,255,255,63,255,191,255,95,255,107,255,87,255,35,255,53,255,168,255]},{"1829379":[191,168,191]},{"1829383":[11,32,171,2,66,64,171,12,80,168,168,64]},{"1829396":[232,168,244]},{"1829400":[252,32,255]},{"1829404":[252]},{"1829406":[247,128,255]},{"1829410":[255]},{"1829412":[255]},{"1829414":[255]},{"1829416":[119,136,190,66,23,168,171,80,255,255,255,255,255,255,255,255,255,255,254,253,191,255,123,255,19,202,26,243,1,253,13,243,6,21,3,2,1,33,128]},{"1829456":[126,193,10,92,13,22,6,1,235,4,253,2,255,1,127]},{"1829472":[79,71,187,27,249,1,251,9,249]},{"1829482":[254,2,223,32,255]},{"1829488":[156,236,229,245,238,246,246,250,255,253,253,254,255,254,255,255,255]},{"1829506":[255]},{"1829508":[234,128,232,230,245,250,103,255,189,125,231,199,81,81,127,85,63,21,177,55,80,138,175,71,217,36,102,248,174,81]},{"1829539":[85,149,149,247,247,250,234,255,127,125,60,47,47,81]},{"1829554":[255,42,255,191,95,87,63,42,144,144,195,64,145,209,255]},{"1829570":[255]},{"1829572":[170]},{"1829575":[239,85,171,255,255,255,255,46]},{"1829584":[7,7,255,93,255,85,16,255,1,171,255,255,255]},{"1829598":[128,174,248,7]},{"1829603":[93,85,85,255,255,171,171,255,255,255]},{"1829614":[145,191,7]},{"1829618":[255,162,255,255,255,255,254,170]},{"1829628":[255]},{"1829630":[127,63,255]},{"1829634":[252]},{"1829636":[160,1,43,212,87,191,255,255,253,168,80]},{"1829648":[255,255,255,83,254,95]},{"1829655":[212,23,191,255,208,168,85]},{"1829663":[80]},{"1829665":[255,3,83,95,95,212,208,191,151,255,208,186,87]},{"1829679":[80,255]},{"1829682":[255,175,255,255,255,212,232,168,47]},{"1829692":[239,71,255,80,231,1,47,19,95,190,254,252,248,248,236,64,32,5]},{"1829711":[255,249,153,195,210,30,191,252,242,248,128,64,172,5,37,242,253,25,153,211,210,191,191,253,243,254,134,80,188,133,165,242,255,254,120,253,208,224,160,15,3,127,6,255,188,255,165,253,253,146,152,187,59,19,88,58,122,3,88,34,122,10,152,34,186,164,184,41,150,108,113,108,82,116,41,56,70,126,224,248,68,214,238,183,166,215,231,119,103,198,239,39,103,70,230,230,230,127,110,89]},{"1829812":[254,238,221,69,175,191,201,89,175,190,11,26,127,112,224,120,212,203,255,122,127,127,63,31,23,2,1,224,112,48,103,255,224,107,122,186,127,15,31,32,2,21,64,225,240,176,255,255,203,75,122,186,255,143,95,96,42,61,64,225,207,128,31,31,191,11,197,128,240,128,255,96,255,61,255,225,81,174,5]},{"1829893":[64,238,153,85,255,255,255,255,171,86]},{"1829905":[174,255,250,191,255,136,153,85,255,255,85,171,84]},{"1829919":[86,174,174,250,250,255,255,153,153,255,85,255,85,187,84,1,87,255,174,255,255,255,255,119,17,170,170,170]},{"1829948":[239,68,255,87,3,208,93]},{"1829956":[2]},{"1829958":[168,87,85,250,255,255,255,191,238]},{"1829968":[47,253,253,162,255,253]},{"1829975":[87,80,250,255,255,191,64]},{"1829983":[238,252,253,160,160,253,253,87,87,250,90,255,255,255,64,17,255,255,254,255,253,255,255,255,87,175,170]},{"1830012":[191]},{"1830014":[255,255,255]},{"1830018":[255]},{"1830020":[191]},{"1830023":[160,80,175,254,254,252,251,231,7,80,80,255,95,255,66,95,255]},{"1830041":[175,254,254,251,4,11,232,175,80]},{"1830051":[95,64,66,255,255,175,171,255,255,251,7,15,239,80]},{"1830066":[255,160,255,253,255,255,255,175,1,1,253,5,244,228,243,5,197,5,215,31,97,53,171,255,97,205,138,215,48,161,14,10,174,184,244,170,166,200,188,134,102,20,220,34,170,68,241,27,115,187,51,187,247,251,235,235,251,235,183,131,115,51,31,31,175,47,205,77,159,159,85,93,183,167,125,5,207,63,255]},{"1830146":[253]},{"1830148":[160,1,42,221,87,255,255,255,253,160]},{"1830160":[95,95,255,210,254,95,8,221,87,255,255,192,160,93]},{"1830176":[160,95,2,210,95,95,221,216,255,215,255,192,170,95]},{"1830192":[95]},{"1830194":[255,47,255,255,247,213,168,168,63]},{"1830204":[247,87,255]},{"1830208":[250]},{"1830210":[68]},{"1830213":[85,255,170,119,255,255,223,85]},{"1830222":[1]},{"1830224":[255,253,255,187,170,255,170,170,119,255,223,32]},{"1830237":[85]},{"1830239":[1,5,253,187,187,255,255,170,170,255,119,223,32,170,255]},{"1830255":[1,255,7,255,255,255,255,85]},{"1830264":[136,136,255,32,255,255,255,1,238]},{"1830274":[68]},{"1830277":[85,238,153,87,253,255,255,127,43,22]},{"1830288":[255,17,255,187,170,255,136,153,85,253,255,85,43,84]},{"1830303":[22,17,17,187,187,255,255,153,153,253,85,255,85,187,212,1,23,255,255,255,255,255,255,119,17,170,168,170]},{"1830332":[239,196,255,23,171,1,67,1,2,92,236,152,85,254,255,254,255,170,239]},{"1830352":[255,87,255,191,163,255,139,155,84,254,254,86,171,84,1,238,84,87,188,191,253,255,155,155,255,87,255,87,187,85,17,255,255,253,255,253,254,252,118,18,171,171,169,1,239,69,255,255,159,160,95,96,63,162,95,97,191,170,95,100,63,170,127,101,31,223,223,223,29,63,222,223,21,255,218,223,16,127,192,255,192,208,64,192,192,194,64,193,192,202,65,196,197,202,90,197,239,191,255,191,255,191,255,191,255,191,255,191,255,191,255,191,255,42,255,4,255,171,255,21,255,175,255,85,255,191,255,87,213,255,251,255,84,255,234,255]},{"1830489":[255,160,255,2,255]},{"1830495":[255]},{"1830497":[42]},{"1830499":[4]},{"1830501":[171]},{"1830503":[21,80,175,10,85,66,189,168,87,127,255,254,255,255,255,255,255,255,255,255,255,253,255,255,255,255,95,255,95,255,255,255,125,255,188,254,222,255,255,255,127,160,255,160,255]},{"1830549":[255,130,255,75,254,4,254,139,223,87,255,64,31]},{"1830563":[95]},{"1830565":[255]},{"1830567":[125,8,181,39,216,139,116,215,40,95,255,255,255,255,255,253,255,180,255,250,255,116,255,168,255,247,255,255,249,255,249,251,249,253,255,251,247,213,255,255,255,8,255,7,255,7,209,23,251,67,87,79,239,254,254,127,255]},{"1830625":[255,1,248,1,254,17,232,69,178,67,180,212,43,127,128,255,255,248,255,248,255,236,251,188,255,176,255,43,255,128,255,85,255,234,255,85,254,239,250,117,222,191,234,127,196,254,225,251,251,31,191,254,254,122,250,218,218,234,234,192,196,96,96,81,174,10,245,84,171,106,149,80,175,170,85,64,187,96,159,174,255,245,255,171,255,149,255,175,255,85,255,187,255,159,255,243,13,229,50,245,30,254,1,208,47,234,21,213,42,170,213,142,12,54,50,56,28]},{"1830751":[128]},{"1830753":[255,40,215,16,235]},{"1830759":[255]},{"1830761":[255]},{"1830763":[255]},{"1830765":[255]},{"1830767":[127,253,255,197,255,235,255,255,255,255,255,255,255,255,255,127,255]},{"1830785":[255,128,127]},{"1830789":[255,128,127,2,255,1,255,2,239,241,47]},{"1830808":[2]},{"1830810":[1]},{"1830812":[2]},{"1830814":[17]},{"1830816":[143,112,31,224,63,192,31,224,63,192,95,160,111,144,15,240,112,255,224,255,192,255,224,255,192,255,160,255,128,255,240,255,168,255,85,255,43,223,69,254,171,221,87,250,191,255,87,255,168,168,85]},{"1830868":[11,2,68]},{"1830872":[137,136,82]},{"1830876":[191,42,87,1,87,168,255]},{"1830884":[253,2,255]},{"1830888":[119,136,255]},{"1830892":[213,42,254,1]},{"1830897":[255]},{"1830899":[255]},{"1830901":[255]},{"1830903":[255]},{"1830905":[255]},{"1830907":[255]},{"1830909":[255]},{"1830911":[255,63,251,63,239,255,239,247,255,255,191,223,175,207,15,223,235,59,43,175,133,239,171,247,85,191,175,143,5,127,11,203,1,212,43,122,5,84,171,170,21,80,175,250,5,180,123,254,1]},{"1830961":[255,128,127]},{"1830965":[255,64,191]},{"1830969":[255]},{"1830971":[255,64,255]},{"1830975":[255,254,206,255,133,255,176,255,35,255,254,255,245,255,175,255,188,119,255,255,255,95,255,255,255,87,255,191,255,85,255,175,191,49,136,122]},{"1831012":[79,160,220,8,1,168,10,64,80,170,67,80,255,119,255,255,255,95,255,247,255,87,255,191,255,85,255,175]},{"1831041":[5,80,43,160,17,193,142,226,65,213]},{"1831052":[251]},{"1831054":[245,80,255,255,255,255,243,243,255,251,255,255,255,255,255,255,255,255,255,170,255,4,243,2,123,28,191,140,255]},{"1831084":[255]},{"1831086":[175]},{"1831088":[255,85,255,251,243,253,255,227,255,115,255,255,255,255,255,255]},{"1831105":[127,40,255]},{"1831109":[95,10,127]},{"1831113":[87,2,187,128,5,64,3,254,255,213,255,255,255,245,255,255,255,253,255,255,255,255,255,255,129,255,42,255,160,255,10,255,168,255,70,255,42,255,20,255,126,255,213,255,95,255,245,255,87,255,185,255,213,255,235,16,207,56,199,16,239,132,247,16,255,1,255,80,255,160,255,144,207,88,207,146,255,88,255,234,255,212,255,170,255,85,255,207,79,223,159,255,125,255,175,255,21,255,43,255,85,255,170,207,176,215,104,239,146,247,88,255,234,255,212,255,170,255,85,1,234,2,244]},{"1831237":[250]},{"1831239":[253]},{"1831241":[255]},{"1831243":[95]},{"1831245":[255,64,255,1,235,2,246]},{"1831253":[250]},{"1831255":[253,160,255,224,255,162,255]},{"1831263":[255,255,255,255,255,255,255,255,255,255,95,255,191,255,93,255,255,234,21,244,11,250,5,253,2,255,160,95,224,255,162,255]},{"1831296":[87,128,169]},{"1831300":[69]},{"1831302":[170]},{"1831305":[128]},{"1831307":[208]},{"1831309":[248]},{"1831311":[240,87,215,171,169,69,69,170,170]},{"1831321":[128]},{"1831323":[208]},{"1831325":[248]},{"1831327":[240,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,128,127,2,253]},{"1831349":[255]},{"1831351":[255,128,127,208,47,248,7,240,15,190,65,85]},{"1831364":[95]},{"1831366":[117]},{"1831368":[85]},{"1831370":[9]},{"1831372":[5]},{"1831374":[1]},{"1831376":[255,170,255,95,95,95,255,117,85,85,43,9,5,5,11,2,170,235,95,245,255,255,117,255,255,255,221,255,255,255,246,252,65,255,160,95]},{"1831413":[255,138,117]},{"1831417":[255,34,221]},{"1831421":[255,8,247,149,106,64,21,187]},{"1831430":[85]},{"1831432":[110]},{"1831434":[85]},{"1831436":[89]},{"1831438":[21]},{"1831440":[255,128,255,234,255,238,255,255,127,111,255,87,93,89,189,21,128,234,234,85,238,170,255,85,239,254,87,253,251,255,87,253,106,255,21,255]},{"1831477":[255]},{"1831479":[255,16,239,168,87,4,251,170,87,64,170,30,64,16,170,1,80,168,2,84]},{"1831500":[170]},{"1831502":[85]},{"1831504":[255]},{"1831506":[245,160,255,68,255,174,255,253,255,255,251,251,117,117,21,170,171,64,69,170,174,80,253,170,255,84,255,170,255,85,191,255,75,255,171,255,80,255,2,255]},{"1831547":[255,4,255,138,255,53,77,37,19,17,228,171,4,1,170,34,64,128,34]},{"1831568":[221,42,223,2,110,1,84,16,254,84,221,157,255,221,95,95,131,99,232,24,151,99,251,4,85,170,191,64,221,162,255]},{"1831600":[156,232,239,243,182,249,235,255,171,255,98,255,34,255,160,255,189,160,191,191,223,128,32,255,21,224,42]},{"1831628":[4,32,10]},{"1831632":[146,66,127,128,192,253,149,42,138,106,213,213,251,219,245,245,255,255,255,255,64,64,64,223,127,128,255]},{"1831660":[223,32,255]},{"1831664":[61,61,64,64,63,128,32,255,149,255,42,255,36,255,10,255,127]},{"1831682":[255,255,253]},{"1831686":[150,255,85]},{"1831690":[171]},{"1831692":[69]},{"1831694":[170]},{"1831696":[128,128,255]},{"1831700":[2,223]},{"1831703":[247,170,170,84,84,186,186,85,85,255,255,255,255]},{"1831718":[8,105,255]},{"1831722":[255]},{"1831724":[255]},{"1831726":[255]},{"1831728":[127,127]},{"1831732":[255]},{"1831734":[150,255,85,255,171,255,69,255,170,255,255]},{"1831746":[255,255,215,7,62,225,230,31,195,31,105,23,180,11,23]},{"1831762":[255]},{"1831764":[47,250,1,124,16,6,12,51,150,129,74,65,255,255,255,255,2,2,131,222,232,16,208,44,232,22,245,10,255,255]},{"1831796":[253,5,33,254,239,255,195,255,105,255,180,255,209,82,251,251,239,191,106,138,69,180,176,70,159,231,152,231,37,56,239,16,151,202,138,21,129,6,71,8,69,130,167,128,215,231,247,231,170,162,219,78,199,217,232,225,210,245,180,20,255,239,28,4,77,21,189,110,46,241,24,247,15,248,232,95,255]},{"1831874":[255,255,255,96,59,175,234,208,123,104,8,152,24,20]},{"1831890":[255]},{"1831892":[96,191,33,84,224,5,98,8,154,111,20,226,255,255,255,255,32,160,234,191,234,229,247,240,250,181,249,94,255,255]},{"1831924":[223,192,64,63,26,255,143,127,104,151,225,31,87]},{"1831938":[255,255,221]},{"1831942":[171,127,40]},{"1831946":[71]},{"1831950":[81,16,168,168,255]},{"1831956":[34,255]},{"1831959":[212,1,213,3,184]},{"1831965":[85,1,190,255,255,255,255]},{"1831974":[171,255,42,212,71,184,170,85,65,190,87,87]},{"1831988":[255]},{"1831991":[255,43,255,71,255,170,255,65,239,85]},{"1832002":[255,255,157,66,171,126,84]},{"1832010":[162]},{"1832012":[24,8,248,1,170,170,255]},{"1832020":[98,191,1,213,84,163,162,93,17,79,250,7,255,255,255,255,64]},{"1832038":[42,255,92,163,162,93,176,78,248,5,85,85]},{"1832052":[255,66]},{"1832055":[255,92,255,162,255,177,247,250,255,239,44,236,249,77,131,234,252,5,124,3,242,1,254,3,248,78,19,226,14,144,245,1,22,131,252,12,253]},{"1832093":[253,4,254,252,255,248,252,10,14,233,255,2,122,2,243,2,255,1,251,227,227,21,21,225,143,1,254,135,252,12,255]},{"1832125":[255,4,255,119,135,235,27,117,91,239,153,236,123,249,37,155,214,187,76,149,10,41,134,219,70,159,160,122,128,175,80,210,32,74,165,227,107,83,211,160,160,65,65,79,205,5,1,159,191,28,29,156,104,44,196,159,127,62,249,50,252,254,83,96,251,226,125,255]},{"1832194":[255,255,85,66,126,38,103,161,239,32,223,64,159]},{"1832210":[255]},{"1832212":[106,63,224,56,150,88,31,80,63,160,122,229,255,255,255,255]},{"1832230":[7,30,167,105,175,224,95,192,31,128,255,255]},{"1832244":[255,66,192,191,150,127,31,255,63,255,127,255,255]},{"1832258":[255,255,23,96,255,245,247,8,255]},{"1832268":[213,42,255]},{"1832274":[255]},{"1832276":[232,189,10,95,232,31,200,55,106,191,32,223,255,255,255,255,64]},{"1832294":[245,170,255]},{"1832298":[255]},{"1832300":[255]},{"1832302":[255]},{"1832304":[255,255]},{"1832308":[255,96,85,255,247,255,255,255,213,255,255,255,117]},{"1832322":[255,255,85,170,255,127,127,128,255]},{"1832332":[221,32,255]},{"1832336":[138,138,255]},{"1832340":[170,255,128,255,128,255]},{"1832347":[255,34,255]},{"1832351":[255,255,255,255,255]},{"1832358":[127,128,255]},{"1832362":[255]},{"1832364":[253]},{"1832366":[255]},{"1832368":[117,117]},{"1832372":[255,170,127,255,127,255,255,255,221,255,255,255,84,1,255,255,4,250,254,239,119,138,254,5,126,42,251,17,170,170,255]},{"1832404":[250,175,17,239,138,255,5,255,171,255,21,255,255,255,255,255,80]},{"1832422":[238,17,119,136,254,1,126,129,251,4,85,85]},{"1832436":[255,250,238,255,117,255,250,255,84,255,234,255,191,170,159,69,63,131,255,1,255,175,191,85,255,143,191,23,64,191,160,63,248,77,25,255,143,223,85,255,175,255,87,255,149,202,154,197,180,3,231,8,223,32,191,64,223]},{"1832494":[191]},{"1832496":[191,255,191,255,247,127,230,255,112,255,170,255,80,255,168,255,255,255,255,95,255,255,255,87,255,255,255,223,255,255,255,255,34,119,85,255,159,223,87,255,223,223,207,239,255,255,255,255,34,221,245,10,159,96,255]},{"1832552":[223,32,239,16,255]},{"1832558":[255]},{"1832560":[221,255,170,255,96,255,168,255,32,255,48,255]},{"1832573":[255]},{"1832575":[255,255,255,255,255,255,255,255,255,255,247,255,254,255,121,255,255,127,127,95,255,255,255,239,239,247,247,250,254,80,121,232,255,127,128,95,160,255]},{"1832614":[239,16,247,8,250,1,80,134,232]},{"1832624":[128,255,160,255]},{"1832629":[255,16,255,8,255,1,255,134,255]},{"1832639":[255,255,85,255,234,255,192,255,235,255,117,255,232,253,18,254,241,93,85,234,234,192,192,234,235,112,117,160,232]},{"1832669":[16,128,240,85,170,234,21,192,63,234,20,112,138,160,23]},{"1832685":[239,128,15,170,255,21,255,63,255,20,255,138,255,23,255,239,255,15,255,253,118,254,225,208,47,250,141,80,151,168,119,32,223,160,255,208,84,160,224,12,12,4,132,8]},{"1832730":[16,16,48,16,8,168,80,171,160,31,8,255]},{"1832743":[127,8,239]},{"1832747":[255,3,252,1,86,171,255,31,255,243,247,115,247,215,255,239,255,236,255,94,247]},{"1832769":[255,160,95,4,251,128,127]},{"1832777":[255]},{"1832779":[255,2,255]},{"1832783":[255]},{"1832796":[2]},{"1832800":[2,253,1,254,10,245,25,230,59,196,95,160,255]},{"1832814":[127,128,253,255,254,255,245,255,230,255,196,255,160,255]},{"1832829":[255,128,255,74,159,133,127,11,253,21,255,175,255,93,255,191,213,95,255,74]},{"1832850":[5]},{"1832852":[9]},{"1832854":[21]},{"1832856":[175,10,93]},{"1832860":[149]},{"1832862":[95]},{"1832864":[159,96,127,128,127,128,255]},{"1832872":[245,10,255]},{"1832876":[255]},{"1832878":[255]},{"1832880":[64,255,128,255,128,255]},{"1832887":[255]},{"1832889":[255]},{"1832891":[255]},{"1832893":[255]},{"1832895":[255,239,247,71,187,255,127,255,239,255,255,255,239,255,95,255,255,231,162,3,1,127,43,239,5,255,171,239,69,95,11,255,23,93,162,254,1,212,42,250,1,84,170,186,5,244,11,232,21]},{"1832945":[255]},{"1832947":[255,1,254,4,251,1,254,64,191]},{"1832957":[255,2,253,255,251,255,255,249,253,255,253,255,254,255,255,255,255,255,253,251,187,255,85,251,251,253,125,255,254,255,127,255,255,255,253,68,171,170,81,6,184,130,81]},{"1833001":[255,128,85]},{"1833005":[174]},{"1833007":[23,16,239,4,251,65,188,44,211]},{"1833017":[254,42,213,81,174,232,21,255,190,255,78,175,255,255,190,255,175,126,253,255,170,254,249,21,191,43,111,5,175,175,191,21,191,42,126,5,175,170,250,65,234,177,212,80,250,65,80,80,234,131,213,85,250,7,85,255,21,255,43,255,5,255,175,255,21,255,42,255,5,255,170,255,165,253,112,248,168,245,232,247,143,179,97,255,243,255,151,127,255,255,255,95,255,255,255,123,247,191,191,95,255,255,255,90,136,143,2,87,163,31]},{"1833128":[116,140,222,76,12,164,104]},{"1833136":[255,119,255,253,255,92,255,255,255,115,255,179,255,91,255,255,96,16,52,41,136,17,20,32]},{"1833161":[16,16,2,248,197,244,129,255,255,223,255,159,159,223,255,255,255,255,255,255,255,254,255,255,138,255,96,159,2,255,97,255,234,255,69,63,2,127,1,255,117,255,159,159,253,255,158,255,21,255,186,255,253,255,254,17,95,42,191,5,95,42,255,1,63,42,191,4,95,10,143,238,255,213,255,250,255,213,255,254,255,213,255,251,255,117,255,255,177,255,106,255,165,255,42,255,129,255,106,255,164,255,218,255,78,255,149,255,90,255,213,255,126,255,149,255,91,255,37,64,255]},{"1833283":[255,10,255]},{"1833287":[119,16,255,128,223,84,255,229,247,168,255,64,255,160,255,216,255,234,255,116,255,170,255,24,255,255,87,255,191,255,95,255,175,255,21,255,171,255,85,255,239,255,168,255,64,255,160,119,216,255,234,223,116,255,170,247,24]},{"1833345":[250]},{"1833347":[252]},{"1833349":[254]},{"1833351":[255]},{"1833353":[255]},{"1833355":[221]},{"1833357":[187]},{"1833359":[209]},{"1833361":[250]},{"1833363":[252]},{"1833365":[254]},{"1833367":[255]},{"1833369":[255,32,253,64,251,42,249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,255,250,5,252,3,254,1,255]},{"1833400":[255]},{"1833402":[221,34,187,68,211,44,7,128]},{"1833412":[1]},{"1833417":[160]},{"1833419":[192]},{"1833421":[224]},{"1833423":[80,7,134,10]},{"1833428":[1,1,10]},{"1833433":[160,2,192]},{"1833437":[224,128,208,254,254,245,255,191,191,245,255,255,255,253,255,255,255,255,255,128,127,10,245]},{"1833461":[255,10,245,160,95,194,61,224,31,80,175,20]},{"1833474":[129]},{"1833476":[81]},{"1833478":[5]},{"1833480":[20]},{"1833484":[5]},{"1833488":[21,20,171,129,85,81,175,5,21,20,42]},{"1833500":[5,5,58,32,254,255,213,255,251,255,85,255,254,255,213,255,255,255,101,95,1,254,42,213,4,251,170,85,1,254,42,213]},{"1833533":[255,26,229,66]},{"1833538":[84]},{"1833540":[138]},{"1833542":[85]},{"1833544":[98]},{"1833546":[21]},{"1833548":[16]},{"1833552":[87,67,215,87,223,141,87,87,118,98,151,23,85,16,160]},{"1833568":[235,254,127,212,173,248,255,85,235,254,127,213,186,255,95,245,20,235,168,127,80,175,168,255,21,235,168,127,69,186,170,95,170]},{"1833602":[64]},{"1833604":[170]},{"1833608":[170]},{"1833610":[64]},{"1833612":[162]},{"1833616":[255,255,119,119,255,255,87,23,191,191,127,127,191,183,87,2,255,170,255,64,255,170,191,64,255,170,255,64,247,170,170,85]},{"1833649":[255,136,255]},{"1833653":[255,232,191,64,255,128,255,72,247,253,170,161,9,2,1,160]},{"1833672":[8]},{"1833676":[2]},{"1833680":[254,247,253,252,255,255,255,255,255,255,255,255,190,190]},{"1833696":[247,169,254,1,255,160,255]},{"1833704":[255,8,255]},{"1833708":[255,2,255]},{"1833712":[8,255,2,255]},{"1833717":[255]},{"1833719":[255]},{"1833721":[255]},{"1833723":[255,65,255,255,255,128,128,130]},{"1833732":[6,1,231,14,85,3,7,11,23,11,7,11,255,255,125,253,248,255,31,22,171,162,247,248,167,172,117,118,127,128,127]},{"1833764":[249]},{"1833766":[244,8,252,4,249,1,253,5,255,15,128,127,2,255]},{"1833781":[255,229,250,91,254,6,248,82,248,128,248,22,1,188,3,7,255,17,8,116,116,254,254,255,255,254,254,233,232,67,64,3,167,247,230,100,155,255]},{"1833820":[254,1,254,1,254,1,252,3,251,88,8,8,16,16,255,255,255,255,254,254,22,255,188,255,7,252,17]},{"1833848":[239,139,1,1]},{"1833854":[1,1,125,193,212,234,236,247,250,253,225,113,47,191,223,31,79,239]},{"1833873":[195,10,193,134,225,153,227,208,175,247,184,191,160,127,64,147,16,26,27,143,15,60,60,241,225,79,79,207,207,191,159,111,252,229,255,240,127,83,235,94,38,208,176,16,64,48,112,212,220,156,222,174,234,117,239,169,167,236,235,244,247,250,249,218,103,30,192,104,147,228,17,67,184,249,4,252,2,248,6,122,249,253,126,188,45,12,12,231,231,243,242,251,251,249,249,228,31,165,91,210,111,243,183,89,90,29,20,12,14,6,6,4]},{"1833986":[15,5]},{"1833989":[120,210,3,20,16,59,191,127,254,127,124,4,19,10,181,12,199,124,171,135,252,255,131,255,2,127,129,236,19,74,181,48,251,4,133,23,23,124,120,248,120,121,121,236,255,74,250,4,255,86,131,107,104,196,199,133,134,134,132,80]},{"1834050":[144]},{"1834053":[127,226,128,145,24,251,250,116,113,246,243,83,7,159,111,128,64,253,186,159,228,247,15,119,141,119,139,248,4,144,96,191,127,37,39,138,130,121,121,118,118,240,240,251,255,159,255,128,127,69,130,123,104,128,130,139,137,13,11,70,245,7,251,118,129,80,39,87,215,255,255,255,255,127,127,8,250,3,180,13,114,223,212,192,63,127,128,127,128,255]},{"1834144":[5,183,74,254,136,248,112,112,151,23,255,255,255,255,255,255,72,254,1,255,15,243,15,15,232,168]},{"1834174":[128,128,111,156,118,217,103,56,191,92,81,111,147,163,55,71,39,87,156,67,240,2,104,135,31,173,91,128,155,68,247,24,255,80,60,47,93,95,56,183,81,81,46,36,163,163,215,151,143,143,208,175,160,215,200,167,162,188,219,194,92,76,232,200,248,216,119,136,27,132,119,56,123]},{"1834248":[244,249,250,248,249,251,253,252,126,201,125,230,39,72,251,114,14,245,250,6,255,1,253,2,63,192,31,128,151,120,117,114,254,247,251,250,254,252,252,252,55,255,123,255,7,255,137,135,10,9,4,5,6,7,3,2,117,138,191,64,247,8,254]},{"1834312":[85,22,191,254,189,188,253,125,170,223,234,85,247,124,190,236,199,121,253,131,189,195,253,3,255]},{"1834338":[255]},{"1834340":[131,124,109,236,211,209,127,63,61,61,60,60,117,255,191,255,131,255,18,193,46,42,64,192,66,194,194,67,87,162,251]},{"1834372":[87,130,254]},{"1834376":[223,10,186,192,214,2,234]},{"1834384":[234,191,4,255,170,255,129,255,170,255,69,127,171,255,149,255,247]},{"1834402":[251,4,215,40,126,129,95,160,250,133,86,137,106,149,85,255,251,255,85,255,126,255,85,255,58,255,84,255,106,255,122,42,175,5,254,170,255,21,238,174,229,69,171,171,149,21,175,255,85,255,171,255,21,255,191,255,95,255,255,255,127,255,122,5,175,80,254,1,255]},{"1834472":[238,17,229,10,171,84,149,106,80,255,170,255,84,255,234,255,64,255,160,255]},{"1834493":[255,128,255,255,255,93,93,191,191,85,85,255,255,93,93,255,255,87,87,255,255,255,255,255,255,255,255,255,255,255,255,253,255,255,255,255]},{"1834530":[93,162,191,64,85,170,255]},{"1834538":[93,162,253]},{"1834542":[87,168]},{"1834545":[255]},{"1834547":[255]},{"1834549":[255]},{"1834551":[255]},{"1834553":[255]},{"1834555":[255]},{"1834557":[255]},{"1834559":[255,127,255,191,127,255,255,255,255,255,255,255,255,247,251,127,127,213,255,250,255,221,255,254,255,85,255,255,255,220,255,254,255,85,128,58,192,221]},{"1834598":[254]},{"1834600":[85]},{"1834602":[255]},{"1834604":[208,8,126,128]},{"1834609":[255]},{"1834611":[255]},{"1834613":[255]},{"1834615":[255]},{"1834617":[255]},{"1834619":[255]},{"1834621":[255]},{"1834623":[255,255,252,255,229,255,195,255,128,255,169,255,187,253,227,255,203,64,252,160,229]},{"1834645":[195,128,128]},{"1834649":[169,160,187]},{"1834653":[225,128,203,64,3,160,26]},{"1834661":[60,128,127]},{"1834665":[86,160,68]},{"1834669":[30,128,52,3,255,26,255,60,255,127,255,86,255,68,255,30,255,52,255,80,63,122,189,212,239,250,239,95,247,242,107,220,255,184,207]},{"1834705":[16,128,184]},{"1834709":[196]},{"1834711":[234,8,87,8,106]},{"1834717":[220]},{"1834719":[136]},{"1834721":[239]},{"1834723":[199]},{"1834725":[59]},{"1834727":[21]},{"1834729":[168]},{"1834731":[157]},{"1834733":[35,1,118,111,255,71,255,59,255,21,255,168,255,145,255,35,255,118,255]},{"1834753":[255]},{"1834755":[255,16,255,128,255]},{"1834761":[255,160,255,80,207,32,255]},{"1834773":[16,72,200,64,64]},{"1834779":[160]},{"1834781":[64,136,168,15,240,5,250,8,231,5,50,15,176,5,90,11,180,7,80,240,255,250,255,231,255,122,183,240,191,90,255,148,255,216,119,2,255,1,255,64,255,25,231,131,215,5,255,35,253,133,191,2]},{"1834834":[1]},{"1834836":[32,32,17]},{"1834840":[179,16,13,8,33]},{"1834846":[133,128,255]},{"1834850":[255]},{"1834852":[31,192,7,248,231,56,199,48,255]},{"1834862":[191,64]},{"1834865":[255]},{"1834867":[255,224,223,248,255]},{"1834873":[255,56,247]},{"1834877":[255]},{"1834879":[255,255,95,127,255,191,221,127,255,191,255,95,255,255,213,220,253,95,10,127]},{"1834900":[157,8,127,1,191,10,95,4,213]},{"1834910":[222]},{"1834912":[245,10,255]},{"1834916":[247]},{"1834918":[254]},{"1834920":[245,10,251]},{"1834924":[255]},{"1834926":[255,2]},{"1834929":[255]},{"1834931":[255,8,247,1,254]},{"1834937":[255,4,251]},{"1834941":[255]},{"1834943":[255,255,254,255,191,255,127,31,191,255,255,255,255,255,255,255,255,255,190,191,31,95,127,95,23,255,191,255,95,255,191,255,95,64,175,224,21,160,75,232,85,64,175,160,85,64,43,160,21,16,238,10,245,20,139,2,253,16,239,10,245,148,107,74,181,255,255,255,207,255,255,255,255,255,172,255,214,255,237,255,252,255,255,255,207,255,255,255,255,253,174,255,214,253,239,254,253]},{"1835041":[255]},{"1835043":[255]},{"1835045":[255]},{"1835047":[127,2,253]},{"1835051":[255,2,253,1,126]},{"1835057":[255]},{"1835059":[207]},{"1835061":[255,128,127,2,172]},{"1835067":[214,2,237,129,124,255,235,214,126,250,191,223,127,255,235,215,92,251,170,125,219,1,235,3,87]},{"1835093":[186,10,95,1,235,34,118,4,174,8,89,20,254,168,253,69,255,160,245,20,254,139,253,81,255,166,247,255,1,255,2,255]},{"1835126":[255,10,255,1,255,2,255]},{"1835134":[255,8,255,253,251,239,247,174,191,115,255,202,235,14,255,234,175,219,87,255,187,251,85,247,191,191,117,239,171,171,85,255,175,175,2,170,20,68,89,170,204,64,37,186,229,68,21,170,116,80,255,85,255,187,255,85,255,191,255,69,239,187,255,85,255,175,240,144,245,176,249,80,245,144,254,224,253,80,253,84,245,240,127,255,255,255,255,255,255,255,127,255,255,255,255,255,255,255,111,139,79]},{"1835236":[175,162,111]},{"1835240":[31,128,175]},{"1835244":[171,162,15]},{"1835248":[255,116,255,255,255,93,255,255,255,127,255,255,255,93,255,255,1,69,2,39,132,69,2,7,65,21,2,139,1,65]},{"1835279":[11,254,255,253,255,251,255,253,255,254,255,253,255,254,255,255,255,255,171,255,82,255,62,255,82,255,171,255,86,255,187,255,84,255,84,255,173,255,193,255,173,255,84,255,169,255,68,255,171,84,255,169,255,85,255,170,255,85,127,170,255,84,254,239,255,170,255,84,255,170,255,85,255,170,255,84,255,170,254,16,255,255,85,255,171,255,85,255,170,255,213,255,171,254,84,255,239,255,170,255,84,255,170,255,85,255,42,255,84,254,171,255,16,40,255,64,253,32,255,80,247,66,255,64,93,32,126,64,87,128,255,2,255,128,255,8,255,168,255,34,127]},{"1835421":[126,168,255,255,127,255,255,255,127,255,255,255,87,127,127,127,127,255,255,255,128,253,2,255,128,247,8,255,168,93,162,126,129,87,168]},{"1835457":[248]},{"1835459":[212]},{"1835461":[254]},{"1835463":[84]},{"1835465":[238]},{"1835467":[85,192,191,128,21]},{"1835473":[248,40,252]},{"1835477":[254,168,252,16,254,40,125,192,191,162,55,255,255,255,255,255,255,255,255,255,255,127,127,63,191,127,127,248,7,212,43,254,1,84,171,238,17,85,170,191,64,21,234,32]},{"1835529":[160]},{"1835531":[64]},{"1835533":[128]},{"1835536":[48,32,162]},{"1835540":[64]},{"1835542":[8]},{"1835545":[160,2,64]},{"1835549":[128,8]},{"1835552":[239,255,93,255,191,255,215,223,255,255,253,255,255,255,247,255,16,239,162,93,64,191,8,247,160,95,66,189,128,127,8,247]},{"1835591":[128]},{"1835600":[17]},{"1835602":[168]},{"1835604":[5]},{"1835606":[160]},{"1835608":[1]},{"1835610":[168]},{"1835612":[4]},{"1835614":[162]},{"1835616":[238,255,87,253,250,255,223,117,254,255,87,253,251,255,93,247,17,238,170,87,5,250,42,223,1,254,170,87,4,251,170,93]},{"1835650":[4]},{"1835662":[16]},{"1835664":[68]},{"1835666":[150,134,80]},{"1835670":[85]},{"1835672":[84,16,17]},{"1835676":[84]},{"1835678":[85,16,187,238,239,84,175,250,170,85,187,238,238,85,171,254,186,85,85,187,57,239,85,175,255,170,69,187,187,238,85,171,239,186,32]},{"1835714":[64]},{"1835716":[130]},{"1835720":[2]},{"1835722":[4]},{"1835728":[49,49,194,194,138,130,16]},{"1835736":[2,2,5,5]},{"1835742":[16]},{"1835744":[255,168,255,64,247,170,239,16,255,170,255,68,255,170,239,16,70,255,61,255,93,247,255,239,85,255,186,255,85,255,255,239,9,11,15,2,6,1]},{"1835783":[1]},{"1835785":[1,130]},{"1835788":[1,2,65,2,95,92,147,150,216,222,111,110,194,194,29,156,191,156,173,173,242,136,252,4,249,1,254,1,255,9,127,1,220,34,255,3,43,242,109,250,32,255,144,255,52,255,99,254,97,222,80,254,92,92,124,61,60,124,189,190,255,124,58,185,112,117,255,250,126,129,223,225,221,99,190,192,186,71,250,132,127,128,118,143,62,62,126,126,188,188,63,61,126,127,121,121,126,123,254,252,227,163,3,3,194,66,66,195,128,1,198,197,142,141,2,1,92,156,255,62,125,60,221,28,156,95,157,92,190,255,62,190,222,33,93,35,253,67,125,195,126,192,125,195,221,227,94,97,158,30,191,191,221,221,125,253,191,189,61,189,190,62,190,190,227,35,64,128,162,2,34,162,226,98,98,226,193,65,1,129,115,112,59,184,117,244,121,127,4,138,198,124,248,102,112,158,120,135,248,7,252,3,119,136,138,245,196,3,100,3,4,49,120,120,248,120,248,122,120,120,8]},{"1836010":[124,124,254,250,214,242,143,143,199,199,143,138,135,135,255,255,131,69,101,155,13,121,123,120,251,248,254,253,126,125,126,124,252,254,250,248,249,251,123,133,123,135,127,131,251,6,250,7,250,5,254,3,255]},{"1836064":[121,121,251,251,250,250,255,254,254,254,254,252,254,254,254,252,134,132,4,4,5,1,129,129,129,129,3,3,5,5,7,6,246,251,102,109,110,100,246,240,247,241,237,225,252,246,234,246,127,130,239,20,254,13,234,19,234,27,234,25,255,6,255]},{"1836128":[249,240,249,240,248,248,246,246,247,247,237,237,225,225,245,225,13,11,139,141,147,149,9,13]},{"1836153":[4,18,22,27,23,31,19,117,117,242,244,231,234,251,252,255,247,243,245,231,224,241,246,252,3,245,14,250,4,234,17,230,25,252,3,236,17,231,26,249,249,240,240,251,243,244,245,246,246,228,226,226,227,244,240,142,138,15,13,28,31,10,9,11,13,29,11,28,27,15,14,39,215,31,223,111,15,254,30,126,158,127,223,126,222,175,79,183,8,126,33,174,81,62,225,46,241,110,177,47,144,47,208,223,79,207,143,143,207,46,238,62,254,63,255,95,223,15,207,176,144,80,16,176,80,17,193,1,193]},{"1836283":[192,33,193,48,208,29,28,221,28,157,95,153,90,195,36,255,80,71,240,251,132,61,194,253,194,255,129,254,131,230,89,248,215,198,121,94,245,60,60,252,252,254,188,253,189,101,65,132,135,134,57,238,241,227,226,35,34,98,99,102,103,190,61,40,87,134,255,10,63,189,62,184,58,255,125,251,120,251,120,59,188,48,181,62,187,190,65,190,194,186,70,187,199,185,199,253,131,253,133,245,13,63,61,189,188,127,127,250,251,250,251,126,122,123,120,255,126,194,67,70,71,128,1,4,5,4,7,196,199,204,207,192,195,10,138,168]},{"1836420":[66,130,169,65,74,170,160]},{"1836428":[2,2,129,1,255,255,215,255,191,255,87,255,255,255,95,255,255,255,127,255,138,117,40,87,194,29,233,22,170,85,160,95,2,253,129,126]},{"1836465":[255,40,255,64,255,168,255]},{"1836473":[255,160,255]},{"1836477":[255,128,255,174,174,85,85,171,171,21,21,175,175,85,85,171,171,21,21,255,255,255,255,255,255,255,255,253,255,255,255,253,255,255,255,174,81,85,170,171,84,21,234,173,80,85,170,169,84,21,234]},{"1836529":[255]},{"1836531":[255]},{"1836533":[255]},{"1836535":[255]},{"1836537":[255]},{"1836539":[255]},{"1836541":[255]},{"1836543":[255,254,254,222,223,255,255,87,87,239,239,71,95,255,255,87,87,119,255,255,255,221,255,254,255,93,255,186,255,213,255,234,255,118]},{"1836578":[222,33,221]},{"1836582":[86,168,77]},{"1836586":[10,176,213]},{"1836590":[66,168]},{"1836593":[255]},{"1836595":[255]},{"1836597":[255]},{"1836599":[255]},{"1836601":[255]},{"1836603":[255]},{"1836605":[255]},{"1836607":[255,255,255,127,122,239,255,215,238,255,255,255,255,255,255,255,249,80,255,168,250,112,255,184,238,16,255,160,255]},{"1836637":[255,168,249,80]},{"1836642":[40,5,96,16,128,57,16]},{"1836650":[160]},{"1836654":[168,6]},{"1836657":[255,5,255]},{"1836661":[255,1,255]},{"1836665":[255]},{"1836667":[255]},{"1836669":[255,6,255,245,254,250,255,245,255,254,223,181,255,255,251,213,255,254,255]},{"1836689":[244,128,250]},{"1836693":[245,128,222,64,245]},{"1836699":[251]},{"1836701":[213]},{"1836703":[254]},{"1836705":[11,128,5]},{"1836709":[10,128,33]},{"1836713":[74]},{"1836715":[4]},{"1836717":[42]},{"1836719":[1,11,255,5,255,10,255,33,255,10,255,4,255,42,255,1,255,16,231,160,255,64,255,186,255,17,245,170,255,192,191,224,255,8]},{"1836755":[160]},{"1836757":[64]},{"1836759":[186,26,17,17,187]},{"1836765":[128]},{"1836767":[224,10,253,1,94,3,188]},{"1836775":[69,26,238]},{"1836779":[68,3,124]},{"1836783":[31,245,255,94,255,188,255,69,255,228,255,85,238,124,255,31,255,2,255]},{"1836803":[255,2,223,160,255,8,255,20,255]},{"1836813":[255,2,255,2]},{"1836818":[32,32,98,64,64,224,8]},{"1836826":[4,16,16,16,1,3,239,16,223]},{"1836836":[63,224,31,64,255]},{"1836842":[231,8,239]},{"1836846":[124,128,16,255,32,223,128,255]},{"1836855":[255]},{"1836857":[255,8,255,16,239,129,254,63,247,87,255,191,221,95,255,255,117,93,255,191,221,85,255,55]},{"1836882":[87]},{"1836884":[157]},{"1836886":[95]},{"1836888":[117]},{"1836890":[93]},{"1836892":[157]},{"1836894":[85]},{"1836896":[255]},{"1836898":[255]},{"1836900":[255]},{"1836902":[255]},{"1836904":[255]},{"1836906":[255]},{"1836908":[255]},{"1836910":[255]},{"1836913":[255]},{"1836915":[255]},{"1836917":[255]},{"1836919":[255]},{"1836921":[255]},{"1836923":[255]},{"1836925":[255]},{"1836927":[255,255,93,255,185,255,253,255,254,255,255,255,255,255,255,255,255,93,8,187,1,253,168,254,20,255,175,255,21,255,43,255,21,247,8,252,2,87,32,235,16,80,170,234,5,212,42,234,1]},{"1836977":[255,3,254,136,119,4,251,5,250,16,239,1,254,20,235,255,254,255,254,249,253,255,255,255,254,255,239,255,255,255,255,255,254,255,254,255,253,255,125,255,254,255,239,255,255,255,255]},{"1837025":[239]},{"1837027":[81,2,187,130,81]},{"1837033":[185]},{"1837035":[85]},{"1837037":[187]},{"1837039":[87,16,238,174,80,68,187,44,211,70,184,170,69,68,187,168,87,255,145,255,82,255,120,255,212,255,212,255,251,255,20,255,122,213,187,250,87,252,123,254,213,213,254,251,255,212,63,254,123,42,213,5,250,3,252,1,254,42,213,4,123,43,212,1,254,42,145,5,82,3,120,1,212,42,212,132,123,43,20,1,122,254,235,215,94,250,175,253,90,239,168,214,46,235,47,74,171]},{"1837137":[234,34,118]},{"1837141":[170,15,93,23,189,3,7,17,59,30,30,21,255,137,253,85,255,165,247,69,254,248,253,196,254,225,245,255]},{"1837170":[255,2,255]},{"1837174":[255,8,255,1,255,2,255,1,255,10,191,250,239,54,255,190,175,251,255,235,191,184,247,62,255,124,21,191,239,239,85,255,175,175,87,255,255,255,87,119,255,255,69,234,217,80,65,234,84,80,20,168,7,68,201,168,131,1,255,21,255,175,255,21,255,175,255,87,255,187,255,87,255,254,252,160,253,196,254,224,245,128,222,64,53,68,200,64,84,64,127,255,255,255,255,255,255,255,191,255,223,223,191,255,255,255,95,138,59]},{"1837284":[31,1,127]},{"1837288":[255,232,251,192,255,98,191,1,255,117,255,255,255,254,255,255,255,23,255,31,255,157,255,254]},{"1837313":[17,2,131,64,212,136,137,128,17,2,163,128,68,10,15,255,255,253,255,63,255,119,255,255,255,253,255,255,255,245,255,255,234,255,86,255,234,255,216,255,42,255,86,255,42,255,26,255,21,255,169,255,21,255,39,255,213,255,169,255,213,255,229,21,127,169,255,85,127,175,255,85,127,168,253,69,255,160,245,234,255,84,255,170,255,80,255,170,255,87,255,186,255,95,255,255,149,255,171,255,213,255,175,255,213,255,170,255,69,255,170,255,106,255,84,255,42,255,80,255,42,253,87,255,186,245,95,66,255,84,247,138,255,80,215,64,238]},{"1837451":[85,8,175]},{"1837455":[21,168,255,8,255,32,255,40,255,187,255,250,255,240,255,250,255,255,87,255,255,255,223,255,255,255,85,255,175,255,95,255,239,255,168,247,8,255,32,215,40,238,187,85,250,175,240,21,250]},{"1837505":[254]},{"1837507":[84,128,142]},{"1837511":[69,8,238]},{"1837515":[85]},{"1837517":[190]},{"1837519":[85,129,255,169,253,80,206,138,207,144,254,170,255,64,254,160,245,255,127,255,255,239,255,223,223,255,127,255,255,255,255,255,255,254,129,84,171,158,97,69,186,238,145,85,170,190,65,85,170]},{"1837569":[160,2,64]},{"1837573":[160]},{"1837575":[64]},{"1837577":[128]},{"1837581":[128,2]},{"1837585":[160]},{"1837587":[64]},{"1837589":[160]},{"1837591":[64]},{"1837593":[128]},{"1837597":[128,2,2,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,160,95,66,189,160,95,64,191,128,127]},{"1837627":[255,128,127]},{"1837631":[255]},{"1837646":[34]},{"1837648":[1]},{"1837650":[40]},{"1837654":[2]},{"1837658":[34]},{"1837662":[170,34,254,255,215,253,255,255,253,247,255,255,221,255,255,255,119,255,1,254,42,215]},{"1837685":[255,10,253]},{"1837689":[255,34,221]},{"1837693":[255,136,119]},{"1837698":[16]},{"1837704":[4]},{"1837706":[129]},{"1837708":[81]},{"1837710":[4]},{"1837712":[84]},{"1837714":[145,16,85]},{"1837720":[20,4,137,129,85,81,164,4,171,254,126,213,170,255,255,85,239,254,247,221,251,255,95,245,85,171,171,126,85,170,170,255,17,239,42,247,4,251,170,95]},{"1837766":[64]},{"1837768":[2]},{"1837770":[20]},{"1837772":[24,16,85]},{"1837778":[20]},{"1837782":[64,64,67,3,21,21,24,24,125,125,255,170,235,84,255,170,255,80,191,234,255,84,255,186,255,85,85,255,191,235,85,255,175,255,84,191,170,255,85,255,130,255,132,1]},{"1837827":[4,6,4,5,9,41,9,89,5,167,31,39,31,171,140,74,15,31,30,25,18,125,126,103,108,191,160,195,212,219,162,188,64,255,163,245,13,241,169,243,75,235,179,255,15,115,221,241,189,69,249,226,254,10,242,150,254,76,244,32,240,116,122,228,236,252,244,236,248,236,248,240,232,192,225,216,242,255,1,252,10,251,7,248,8,217,61,247,15,255,6,151,84,249,242,245,246,227,224,247,224,235,224,207,192,254,209,253,227,140,139,29,27,28,7,23,31,26,23,48,15,56,47,25,14,207,111,47,79,119,7,7,47,3,23,253,9,221,159,7,251,127,192,47,176,151,248,247,192,253,230,13,10,191,196,119,16,63,31,111,239,183,55,219,59,235,27,249,1,187,121,233,137,48,240,16,208,40,200,20,224,12,244,254,242,186,70,118,114,25,77,133,169,152,174,248,230,225,247,201,221,201,209,203,223,38,153,146,65,255,2,215,48,223,48,253,26,245,6,249,26,109,121,181,181,237,201,255,249,239,233,229,225,249,233,231,231,166,154,90,78,127,99,7,11,30,18,54,58,50,58,48,56,249,251,254,254,223,223,207,207,231,247,231,247,207,223,207,223,254,1,253,2,239,16,239,16,223,32,223,32,215,40,215,56,255,253,255,255,255,255,239,239,255,239,255,239,223,207,207,207,6,6,1,1,32,32,48,48,24,24,24,24,48,48,48,48,201,213,207,211,237,237,235,231,211,203,213,221,197,213,171,179,241,2,249,22,221,34,213,42,201,54,223,32,215,40,243,12,253,237,227,227,233,233,227,227,195,195,195,195,195,203,195,195,50,58,60,52,22,30,28,20,60,60,62,62,62,62,124,92,242,242,255,254,253,252,233,232,225,252,218,200,208,232,208,232,252,3,253,3,253,3,253,2,222,47,221,58,242,7,228,15,254,254,255,255,253,253,252,252,240,225,213,214,234,205,244,219,13,12]},{"1838260":[2,2,23,22,28,29,37,42,48,47,32,63,143,223,147,35,121,177,125,1,215,161,82,87,84,65,196,57,183,88,23,232,89,166,245,142,114,143,3,254,235,21,127,199,47,239,7,231,67,179,117,13,115,143,1,252,170,126,124,196,48,208,28,236,76,212,242,250,80,124,1,175,171,85,57,185,251,196,255,224,221,209,255,245,245,250,243,250,117,126,116,112,174,117,214,57,253,7,239,27,249,14,255]},{"1838364":[253,6,243,14,255,241,247,249,224,230,248,254,240,246,252,246,248,242,245,245,10,31,6,15,56,55]},{"1838391":[7,9,14,13,10,137,142,139,142,118,241,118,245,119,248,98,104,124,118,236,226,72,74,12,103,247,11,247,15,251,5,123,137,111,155,111,159,107,157,243,30,241,114,241,114,254,117,118,113,122,125,234,237,98,101,99,12,140,139,136,143,138,143,154,159,128,135,16,23,176,191,224,235,8,8]},{"1838467":[128]},{"1838469":[128]},{"1838471":[8]},{"1838477":[162]},{"1838479":[144,255,255,255,255,255,255,255,255,255,255,255,255,255,93,255,239,8,247,128,127,128,127,8,247]},{"1838505":[255]},{"1838507":[255,162,93,144,111]},{"1838513":[255]},{"1838515":[255]},{"1838517":[255]},{"1838519":[255]},{"1838521":[255]},{"1838523":[255]},{"1838525":[255]},{"1838527":[255,170,170,5,5,42,42,1,1,8,8]},{"1838540":[2,2]},{"1838544":[247,255,255,255,221,255,255,255,255,255,255,255,253,253,255,255,162,85,5,250,8,213,1,254,8,247]},{"1838571":[255]},{"1838573":[255]},{"1838575":[255]},{"1838577":[255]},{"1838579":[255]},{"1838581":[255]},{"1838583":[255]},{"1838585":[255]},{"1838587":[255]},{"1838589":[255]},{"1838591":[255,255,255,87,87,43,43,21,21,175,175,21,21,42,42,1,1,84,255,250,255,220,255,234,255,80,255,234,251,213,255,254,255,84]},{"1838626":[82,168,8,84]},{"1838631":[234]},{"1838633":[80]},{"1838635":[238]},{"1838637":[213]},{"1838639":[254]},{"1838641":[255]},{"1838643":[255]},{"1838645":[255]},{"1838647":[255]},{"1838649":[255]},{"1838651":[255]},{"1838653":[255]},{"1838655":[255,255,255,255,255,255,255,119,119,255,255,85,85,143,143,85,85,16,255,184,255,16,255,136,255]},{"1838681":[255,170,255,112,126,170,239,16]},{"1838690":[184]},{"1838692":[16]},{"1838695":[136]},{"1838699":[170]},{"1838701":[209]},{"1838703":[186]},{"1838705":[255]},{"1838707":[255]},{"1838709":[255]},{"1838711":[255]},{"1838713":[255]},{"1838715":[255]},{"1838717":[255]},{"1838719":[255,245,255,254,255,221,223,255,255,255,255,255,255,255,255,255,255]},{"1838737":[245,32,254,32,253]},{"1838743":[255,5,250,8,247,19,236,22,169]},{"1838753":[10,32,1]},{"1838757":[2]},{"1838760":[5]},{"1838762":[8]},{"1838764":[19]},{"1838766":[22,64,10,255,1,255,2,255]},{"1838775":[255,5,255,8,255,19,255,22,255]},{"1838785":[255,170,255,64,255,234,255,85,255,250,255,255,253,255,255,39,39,43,129,92,28,126,148,77,24,55,205,191,64,111,144,8,209,46,80,99,128,107]},{"1838824":[71,160,50]},{"1838828":[191]},{"1838830":[111]},{"1838832":[246,217,123,254,220,227,126,235,237,247,55,250,191,253,111,255,16,239,39,221,74,191,171,245,90,191,187,231,215,126,255,250,8,8,39]},{"1838868":[74]},{"1838870":[187,16,90]},{"1838874":[251,64,215]},{"1838878":[255]},{"1838880":[103,144,255]},{"1838884":[255]},{"1838886":[239]},{"1838888":[255]},{"1838890":[191]},{"1838892":[255]},{"1838894":[255]},{"1838896":[152,247,34,221,64,191,186,229,80,191,250,167,213,126,255,250,255,245,127,255,255,255,255,127,255,255,255,95,253,173,255,180,245]},{"1838930":[127]},{"1838932":[255]},{"1838934":[255]},{"1838936":[255]},{"1838938":[255]},{"1838940":[255]},{"1838942":[255]},{"1838944":[255]},{"1838946":[255]},{"1838948":[255]},{"1838950":[255]},{"1838952":[255]},{"1838954":[255]},{"1838956":[253,2,255]},{"1838961":[255]},{"1838963":[255]},{"1838965":[255,128,127]},{"1838969":[255,160,95,80,173,235,180,255,255,255,255,255,255,255,255,253,125,255,255,215,215,127,63,255,175,255,85,255,171,255,21,127,41,255,5,247,3,223,129,80,170,170,4,84,40,234]},{"1839016":[212,2,250]},{"1839020":[220,40,126]},{"1839024":[5,250,81,174,131,124,21,234,41,212,5,250,3,212,97,158,255,255,255,251,255,254,255,238,255,250,255,254,191,181,239,239,255,255,255,251,255,254,255,238,255,250,255,92,191,181,255,69]},{"1839073":[175]},{"1839075":[93]},{"1839077":[187]},{"1839079":[21]},{"1839081":[175,162,5,64,74,170,17,80,175,162,89,68,186,234,4,80,170,88,166,181]},{"1839102":[68,171,255,146,255,246,255,8,255,146,255,2,255,168,255]},{"1839118":[221,200,215,186,255,246,221,42,255,146,247,10,255,168,255]},{"1839134":[223,64,40,215]},{"1839139":[249,34,221]},{"1839143":[255,8,247]},{"1839147":[255]},{"1839149":[255,170,117,40,146,6,240,34,8]},{"1839159":[146,8,2]},{"1839163":[168]},{"1839167":[200,171,173,43,63,61,126,191,247,127,239,253,204,170,170,168,168,81,249,235,235,157,189,191,191,127,127,255,255,255,255,87,87,6,254,20,212,67,227,72,72,144,144,51,49,85]},{"1839214":[255,168,255,1,255,43,255,28,255,183,255,111,255,206,255,255,255,87,223,255,249,136,248,120,80,64,232,65,2,2,4,12,160,176,95,223,255,255,255,255,255,255,255,255,253,255,251,255,95,255,32,160,119,68,135,130,191,16,191,170,255,2,255,4,255,170,255,95,255,187,255,125,255,239,255,85,255,253,255,251,245,95,192,128,64,8,4,21,44,38,8,14,32,32]},{"1839309":[43,10,79,255,255,255,255,227,247,211,239,247,255,223,255,255,255,255,255,127,106,255,68,255,190,231,52,255,152,255,34,255]},{"1839342":[255,170,255,149,255,187,247,73,247,203,239,119,253,223,255,255,95,255,1,87,42,239]},{"1839365":[255,160,241]},{"1839369":[136]},{"1839371":[85]},{"1839373":[186,170,191,254,255,213,255,255,255,95,255,255,255,255,255,255,255,255,255,255,169,255,42,255]},{"1839398":[255,170,255,1,255,170,255,69,255,170,255,86,255,213,255,255,245,95,254,255,85,255,186,255,255,255,16,254,128,213,64,250]},{"1839431":[85]},{"1839433":[238,32,117]},{"1839437":[170,138,128,239,255,127,255,191,255,255,255,250,254,252,253,170,170,138,138,255,17,255,170,255,69,255,170,255,21,255,171,255,85,255,255,254,239,213,127,250,191,85,255,238,251,117,254,170,255,128,255]},{"1839489":[239]},{"1839491":[85]},{"1839493":[186]},{"1839495":[80]},{"1839497":[234,2,64,1,34,170]},{"1839504":[186,255,232,253,234,250,144,208,170,234,66,66,35,35,170,170,255,85,255,191,255,85,255,239,255,85,255,191,255,221,255,255,239,186,85,234,186,239,80,191,234,191,64,255,34,255]},{"1839551":[255]},{"1839553":[250]},{"1839555":[80]},{"1839557":[160,2]},{"1839560":[1,136,170]},{"1839564":[85]},{"1839566":[255]},{"1839568":[128,250]},{"1839571":[80]},{"1839573":[160,2,2,137,137,170,170,85,85,255,255,255,127,255,255,255,255,255,255,255,119,255,255,255,255,255,255,250,133,80,175,160,95]},{"1839607":[255,136,255]},{"1839611":[255]},{"1839613":[255]},{"1839615":[255,2]},{"1839618":[2]},{"1839620":[5]},{"1839622":[170]},{"1839624":[85]},{"1839626":[191]},{"1839628":[255]},{"1839630":[213,42,6,2,2,2,5,5,170,170,85,85,191,191,255,255,255,197,251,255,255,255,255,255,255,255,255,255,255,255,255,255,197,239,4,251]},{"1839667":[255]},{"1839669":[255]},{"1839671":[255]},{"1839673":[255]},{"1839675":[255]},{"1839677":[255,42,255,1]},{"1839682":[170]},{"1839684":[85]},{"1839686":[255]},{"1839688":[127]},{"1839690":[251,12,251,4]},{"1839695":[255,1,1,170,170,85,85,255,255,127,127,255,251,255,251,255]},{"1839712":[255,255,255,255,255,255,255,255,255,255,251,247,251,255]},{"1839727":[255]},{"1839729":[255]},{"1839731":[255]},{"1839733":[255]},{"1839735":[255]},{"1839737":[255,12,255,4,255,255,255,85]},{"1839746":[189]},{"1839748":[93]},{"1839750":[255]},{"1839752":[255]},{"1839754":[84,171,160,95,8,255,85,85,191,191,93,93,255,255,255,255,255,84,255,160,255,8,255,255,255,253,255,255,255,255,255,255,84,255,160,255,8,247]},{"1839793":[255]},{"1839795":[255]},{"1839797":[255]},{"1839799":[255]},{"1839801":[255,171,255,95,255,255,255,118]},{"1839810":[213]},{"1839812":[255]},{"1839814":[213,34,238,17,64,191]},{"1839821":[255,170,255,119,119,253,253,255,255,255,221,255,238,255,64,255]},{"1839838":[255,170,255,254,255,213,255,255,221,247,238,255,64,255]},{"1839853":[255,170,85]},{"1839857":[255,2,255]},{"1839861":[255,34,255,17,255,191,255,255,255,255,255,3,11,71,55,47,191,47,95,31,191,95,127,143,207,16,80,123,76,215,168,199,8,159,128,255]},{"1839898":[143,16,159,224,41,214,247,151,183,7,127,159,255,47,47,143,255,63,159,95,159,95,56,232,24,232,192,224,80,240,176,192,128,192,240,144,105,169,138,178,34,83,190,159,2,117,218,221,240,247,250,253,2,7,175,87,206,82,85,143,253,1,241,8,251,1,248,2,119,138,180,130,191,161,190,186,246,130,255,254,254,252,247,245,247,243,98,92,206,252,85,107,253,251,33,35,11,9,8,2,125,122,5,11,245,241,117,121,247,243,125,125,255,255,255,255,254,254,127,132,117,138,253,6,245,14,243,12,255]},{"1840028":[127,128,191,64,127,117,241,241,253,245,247,247,255,255,255,255,255,255,127,127,250,250,14,10,138,138,8,8,130,130]},{"1840062":[129,129,203,215,233,245,233,245,251,239,203,243,147,155,95,127,48,16,241,18,199,36,231,4,255,8,243,4,251,4,239,16,91,252,239,239,251,251,219,219,199,195,251,203,219,211,187,155,51,19,48,56,6,14,38,14,52,12,52,44,124,100,228,216,135,183,199,231,143,175,135,183,215,215,215,247,143,191,135,191,76,52,247,8,247,8,231,40,183,72,215,8,159,64,191,64,179,76,231,199,239,207,215,215,215,215,183,183,183,167,191,135,183,183,56,56,112,112,104,104,40,56,72,24,88,72,120,72,251,131,139,139,195,219,247,223,199,215,163,187,243,235,7,127,136,184,203,52,131,116,147,100,251,4,191,72,239]},{"1840220":[255]},{"1840222":[63,192,203,219,219,219,223,223,151,135,183,167,191,183,255,167,183,183,116,124,36,52,32,48,120,40,92,108,76,124,248,200,111,31,128,169,212,217,255,219,131,159,245,244,253,255,253,255,5,7,255,38,184,66,187,119,223,38,242,14,249,4,254,1,14,240,214,217,213,219,233,238,217,193,253,253,255,255,251,249,251,248,112,111,52,47,11,20,125,126]},{"1840313":[1,1]},{"1840316":[6,1,14,13,82,81,186,57,251,121,58,56,56,184,127,127,255,255,191,127,123,135,187,198,187,196,250,7,253,130,191,64,255]},{"1840350":[95,96,58,186,187,186,248,248,122,122,125,125,127,127,191,191,191,191,109,109,69,69,7,5,197,197,199,199,128,128,64,128,64,192,112,120,224,233,237,224,244,254,224,234,237,251,201,207,30,58,255,1,255,10,251,12,228,17,239,18,251,8,215,56,147,72,254,244,244,245,250,254,254,254,237,229,247,229,207,201,181,181,143,137,30,27,19,20,5,1,31,19,18,30,38,42,219,207,152,158,172,237,128,3,248,224,204,208,204,216,236,250,58,57,247,9,3,190,219,96,52,220,241,25,243,27,195,33,117,136,102,249,69,90,31,48,215,216,239,232,239,232,253,242,214,209,96,151,160,247,156,7,35,15,62,55,52,63,6,15,111,95]},{"1840513":[234,32,197]},{"1840517":[175]},{"1840519":[1]},{"1840522":[128]},{"1840524":[2,168,168,85,255,21,239,10,175]},{"1840534":[1]},{"1840536":[128,128,122,122,255,87,87,2,234,21,245,10,255]},{"1840550":[255]},{"1840552":[255]},{"1840554":[255]},{"1840556":[87,170,170,85]},{"1840561":[255,48,255,80,255,254,255,127,255,133,255,168,255,253,255,10,170,16,85]},{"1840581":[255,2,119,129,175]},{"1840588":[42,136,33,16,245,85,239,170,255]},{"1840598":[117]},{"1840600":[174,128,128,128,254,126,223,207,160,95,85,170,255]},{"1840614":[255]},{"1840616":[255,128,255]},{"1840620":[127,170,239,17]},{"1840625":[255,16,255]},{"1840629":[255,138,255,209,255,127,255,137,255,48,255,170,170,21,85,43,187]},{"1840647":[247,21,255]},{"1840651":[71,162,162,17,17,85,85,234,170,212,68,255,8,234]},{"1840666":[71]},{"1840668":[162,162,253,253]},{"1840673":[255,64,191,145,110,247,8,255]},{"1840682":[255]},{"1840684":[255,162,255,17]},{"1840689":[255]},{"1840691":[255,1,255]},{"1840695":[255,21,255,184,255,255,255,19,255,251,251,85,85,255,255,87,87,63,255,1,255,170,175,21,21,4,70,170,171]},{"1840726":[168,168,192]},{"1840730":[254]},{"1840732":[175,170,21,21]},{"1840737":[189]},{"1840739":[254,64,191,66,189,245,10,255]},{"1840748":[255,170,255,21]},{"1840753":[255]},{"1840755":[255,64,255,66,255,53,255,1,255,250,255,255,255,247,255,255,255,255,255,253,253,255,255,223,255,243,255,85,95,52,202,10,21,4]},{"1840790":[2,2]},{"1840794":[32]},{"1840796":[174,162,95,85,60,9,10,224,4,251,136,119,80,175,255]},{"1840812":[255,162,255,85,52,247,10,255,4,255,136,255,80,255,223,255,243,255,245,255,87,255,255,255,244,246,234,234,85,85,251,251,255,255,95,255,87,168,159]},{"1840853":[11]},{"1840855":[21]},{"1840857":[170]},{"1840859":[4]},{"1840862":[224,64,255,168,159,96,2,246]},{"1840871":[234]},{"1840873":[85,186,65,255]},{"1840878":[255,64,87,87,159,255]},{"1840885":[253]},{"1840887":[255]},{"1840889":[255,186,255,255,255,95,255,223,112,255,250,70,100,170,170]},{"1840905":[8,170,170,213,213,63,191,255,32,255]},{"1840916":[70,185,42,85]},{"1840921":[255]},{"1840923":[85]},{"1840925":[42,128]},{"1840928":[223]},{"1840930":[255]},{"1840932":[102,32,42,128,8,8,170]},{"1840940":[215]},{"1840942":[255]},{"1840944":[255,80,255,250,70,221,42,255]},{"1840953":[247,170,255,215,255,127,255,255,171,255,160,183,46,149,133,2,8,12,12,68,68,234,234,255]},{"1840978":[255]},{"1840980":[145,76,152,106,2,253]},{"1840987":[247]},{"1840989":[187]},{"1840991":[21,255]},{"1840994":[255]},{"1840996":[187,8,145,12,10,8,4,8,238]},{"1841006":[255]},{"1841008":[85,171,255,160,179,68,145,238,2,245]},{"1841019":[255,238,255,255,255,245,181,255,95,255,191,255,149,239,175,5,5,2,2,128,128,125,128,245]},{"1841044":[106]},{"1841046":[234]},{"1841048":[64,16]},{"1841051":[250]},{"1841053":[253]},{"1841055":[127,119,10,255]},{"1841060":[255]},{"1841062":[255]},{"1841064":[239]},{"1841066":[5]},{"1841068":[170]},{"1841070":[213]},{"1841072":[64,181,170,85,213,42,255,128,239,16,5,250,170,253,213,255,218,202,170,170,220,92,246,118,255,255,95,95,171,171,1,1,250,138,186]},{"1841108":[166]},{"1841110":[132,8,10]},{"1841115":[160]},{"1841117":[84]},{"1841119":[254,85,37,239,85,221,35,247,1,255]},{"1841130":[95]},{"1841132":[191]},{"1841134":[87]},{"1841136":[154,64]},{"1841139":[170,216,4,242,12,245,10,95,160,191,84,87,254,255,84,85,84,170,168,168,168,80,80,250,250,255,255,85,85,255,84,85,84,170,168,232]},{"1841176":[144]},{"1841183":[170]},{"1841185":[171,170,171,85,87,191,87,127,175,255,5,255]},{"1841198":[255]},{"1841200":[84]},{"1841202":[84]},{"1841204":[168]},{"1841207":[168,64,16,250]},{"1841212":[255]},{"1841214":[255,170,1,1]},{"1841220":[85,85,85,85,84,1,255,255,64,191,255,255,254,255,255,255,255,255,247,247,170]},{"1841242":[81,251,191]},{"1841246":[138]},{"1841248":[255,1,255,171,255,255,255,85,255]},{"1841258":[119,34,255,255,117,255,255,254,84,255,85,255,93,255,255,255,217,174,191,64,138]},{"1841281":[12,42,42,85,85,16,85]},{"1841289":[87,254,255]},{"1841293":[255,255,255,255,255,255,255,85,85,255,186,168]},{"1841306":[17,251,255]},{"1841310":[170]},{"1841312":[255,17,255,191,255,255,186,85,255]},{"1841322":[255,235,255,191,85,255,238,255,106,255,85,255,85,255,255,255,16,239,250,5,170]},{"1841345":[34,170,170,95,68,10,85]},{"1841353":[255,255,255]},{"1841357":[255,254,255,254,254,170,170,95,95,245,160]},{"1841369":[7,5,191,255]},{"1841374":[170,1,255,85,255,255,255,255,170,85,248]},{"1841386":[255,191,255,239,85,254,170,255,170,255,68,255,95,255,255,255]},{"1841403":[255,144,111,171,1]},{"1841409":[160,10]},{"1841412":[255]},{"1841414":[133,85]},{"1841417":[255,255,253]},{"1841421":[255,238,255,160,160,10,10,255,255,127,5]},{"1841433":[255,85,255,255]},{"1841438":[238,17,255,95,255,255,255,255,175,80]},{"1841450":[255,253,255,255,17,238,160,255]},{"1841459":[255]},{"1841461":[255,255,255,255,255]},{"1841467":[255]},{"1841469":[255,255,17,1,136,191]},{"1841476":[170,85,21,21]},{"1841481":[238,255,213]},{"1841485":[255,255,255,137,137,191,191,255,170,255,21,17,238,85,255,255]},{"1841502":[255]},{"1841504":[255,119,255,255,170,255,255]},{"1841514":[255,213,255,255]},{"1841519":[255,136,255]},{"1841523":[255,85,255,255,255,238,255]},{"1841531":[255]},{"1841533":[255,255]},{"1841536":[87]},{"1841538":[253,2]},{"1841541":[255,17,251,174,81,255,85]},{"1841549":[213,255,255,87,87,255,253,255]},{"1841558":[17,23,191,255,85,255,255]},{"1841566":[255]},{"1841568":[255,255,253,255]},{"1841573":[255,253]},{"1841576":[191,17,255,85,255,213]},{"1841583":[255]},{"1841585":[255,2,255,255,255,251,255,64,255]},{"1841595":[255]},{"1841597":[255,255]},{"1841600":[254,65,64,191,85,255]},{"1841607":[174,170,85,251,68,21]},{"1841614":[127,127,255,254,255,64,255,85]},{"1841623":[255,255,255,68,255,191,64,127,128,254,191,64,255,85,170,81]},{"1841640":[255,85,255,64,255,85]},{"1841647":[255,65,255,191,255,255,255,174,255]},{"1841657":[255,4,251,64,191,255,128,232,23,42,255,223,255,38,128,168,87,94,161,255]},{"1841678":[85,85,255,232,255,42,255,223,38,166,253,255]},{"1841691":[94,255]},{"1841694":[85,170,232,255,42,213,223,32,38,89,253,85,94]},{"1841708":[255,255]},{"1841711":[255,23,255,255,255,255,255,217,255]},{"1841721":[255]},{"1841723":[255]},{"1841725":[255,255,170,128,127,175,255,255,255,239,16]},{"1841737":[255,167,88,255]},{"1841742":[85,85,255,128,255,175,255,255,239,255,80,255]},{"1841755":[167,255]},{"1841758":[85,170,128,255,175,80,255]},{"1841766":[239]},{"1841768":[80,80,167]},{"1841772":[255,255]},{"1841775":[255,127,255,255,255,255,255,16,255]},{"1841785":[255]},{"1841787":[255]},{"1841789":[255,255,170,21,255,255,255,251,250,255]},{"1841800":[81,255,128,127,170]},{"1841806":[85,85,255,21,255,255,251,251,255,255,81,255]},{"1841819":[128,187,68,85,170,21,234,255]},{"1841828":[251,4,255]},{"1841832":[81,81,128]},{"1841836":[238,255]},{"1841839":[255,255,255,255,255,254,255]},{"1841847":[255]},{"1841849":[255]},{"1841851":[255,68,187,255,170,87,255,255,255,186,186,255]},{"1841864":[8,255,128,127]},{"1841870":[81,81,255,87,255,255,186,186,255,255,29,255]},{"1841884":[170,85,81,170,87,168,255]},{"1841892":[186,69,255]},{"1841896":[29,8]},{"1841899":[128,85,255]},{"1841903":[255,255,255,255,255,255,255]},{"1841911":[255,21,234]},{"1841915":[255,85,170,255,170,217,254,159,176,255,160,85,170]},{"1841929":[255]},{"1841931":[255]},{"1841936":[166,135,176,191,255,255,85,255,95,255]},{"1841948":[187,68]},{"1841951":[170,248,24,191,112,255]},{"1841958":[85]},{"1841960":[95]},{"1841964":[68,255]},{"1841967":[255,167,199,192,255,160,255]},{"1841975":[255,95,160]},{"1841979":[255,68,187,255,170,7,241,255,8,255,2,85,170]},{"1841993":[255,34,255]},{"1841998":[32,32,243,255,15,255,255,255,85,255,255,255,34]},{"1842012":[187,68,32,136,15,9,255,8,255]},{"1842022":[85]},{"1842024":[255]},{"1842028":[68,255,32,223,248,247]},{"1842035":[255,2,255]},{"1842039":[255,255]},{"1842043":[255,68,187,255,136,34,162,73,174,170,93]},{"1842055":[255]},{"1842057":[255,34,255]},{"1842062":[32,32,227,28,174,209,170,255]},{"1842071":[255,255,255,34]},{"1842076":[187,68,32,136,128,128,255,186,170,8]},{"1842088":[255]},{"1842092":[68,255,32,223,127,255,20,235]},{"1842101":[255]},{"1842103":[255,255]},{"1842107":[255,68,187,255,136,59,206,103,140,254,33]},{"1842119":[255]},{"1842121":[255,170,255]},{"1842128":[176,113,100,239,254,255]},{"1842135":[255,255,255,170]},{"1842140":[187,68]},{"1842143":[136,182,70,103,20,254]},{"1842152":[255]},{"1842156":[68,191]},{"1842159":[255,193,57,16,255,32,255]},{"1842167":[255,255]},{"1842171":[255,68,187,255,136,121,102,215,104,186,69]},{"1842183":[255]},{"1842185":[255,171,255]},{"1842192":[102,183,88,252,186,255]},{"1842199":[255,255,255,171]},{"1842204":[187,68]},{"1842207":[128,120,96,220,67,186]},{"1842216":[255]},{"1842220":[68,187]},{"1842223":[255,135,118,8,247]},{"1842229":[255]},{"1842231":[255,255]},{"1842235":[255,68,187,255,128,49,38,79,240,186,69]},{"1842247":[255]},{"1842249":[255,186,255]},{"1842256":[38,255,64,121,186,255]},{"1842263":[255,255,255,186]},{"1842268":[171,84]},{"1842272":[120,104,73,70,186]},{"1842280":[255]},{"1842284":[84,171]},{"1842287":[255,207,54]},{"1842291":[255]},{"1842293":[255]},{"1842295":[255,255]},{"1842299":[255,84,171,255]},{"1842304":[83,162,254,4,143,112]},{"1842311":[255]},{"1842313":[255,170,255]},{"1842320":[167,255,6,254,143,255,32,255,255,255,170]},{"1842332":[187,68]},{"1842336":[3,2,254,5,143]},{"1842342":[32]},{"1842344":[255]},{"1842348":[68,187]},{"1842351":[255,248,243,1,255]},{"1842357":[255,32,223,255]},{"1842363":[255,68,187,255]},{"1842368":[149,117,46,95,236,31]},{"1842375":[255]},{"1842377":[255,170,255]},{"1842382":[128,128,213,130,31,96,236,255]},{"1842391":[255,255,255,170]},{"1842396":[187,68,128]},{"1842400":[224,96,63,159,236,12]},{"1842408":[255]},{"1842412":[68,187,128,127,95,147,144,239]},{"1842421":[255]},{"1842423":[255,255]},{"1842427":[255,68,187,255]},{"1842432":[102,207,199,122,255]},{"1842438":[17,238]},{"1842441":[255,234,255]},{"1842446":[129,129,211,173,70,255,255,255,17,255,255,255,234]},{"1842460":[171,84,129,8,102,70,199,66,255]},{"1842470":[17]},{"1842472":[255]},{"1842476":[84,191,128,127,137,255,56,255]},{"1842485":[255]},{"1842487":[255,255]},{"1842491":[255,84,171,255,8]},{"1842497":[250,213,111,236,17,85,170,138,255,163,254]},{"1842510":[17,17,215,200,21,253,236,253,85,255,255,255,162]},{"1842524":[170,85,17,136,53,50,215,96,236,2,85]},{"1842536":[255,138]},{"1842539":[1,85,255]},{"1842543":[255,223,207,47,223,19,255]},{"1842551":[255,117,138]},{"1842555":[255,85,170,255,136]},{"1842561":[238,85,117,98,191,127,128,170,255,64,191]},{"1842574":[21,21,255]},{"1842578":[95,213,98,255,127,255,255,255]},{"1842588":[170,85,21,168,17,238,255]},{"1842596":[98]},{"1842598":[127]},{"1842600":[255,170]},{"1842603":[64,85,255]},{"1842607":[255,255,255,127,255,191,255]},{"1842615":[255,85,170]},{"1842619":[255,85,170,255,168]},{"1842625":[174,64,69,170,255,219,36,255,255,215,40,2]},{"1842638":[85,85,255,1,255,64,170,250,219,255,255,255]},{"1842652":[170,85,85,170,81,174,250,5,175]},{"1842662":[219]},{"1842664":[255,255]},{"1842667":[215,87,255]},{"1842671":[255,254,255,255,255,255,255,36,255]},{"1842681":[255]},{"1842683":[255,85,170,255,170,10,224]},{"1842691":[85,162,254,11,244,254,255,95,160,171]},{"1842702":[85,85,255,29,255]},{"1842708":[163,162,11,255,255,255]},{"1842715":[10,171,84,85,170,29,232,170,85,255]},{"1842726":[11]},{"1842728":[255,255,10,85,255,255]},{"1842735":[255,224,255,255,255,255,255,244,255]},{"1842745":[255]},{"1842747":[255,84,171,255,170,170]},{"1842755":[85,160,162,128,127,234,255,255]},{"1842764":[168]},{"1842766":[87,87,255,255,255,170,255,160,128,255,245,245]},{"1842779":[191,170,85,87,168,255,170,170,85,253,2,128]},{"1842792":[255,245,191,64,255,253]},{"1842799":[255]},{"1842801":[255,85,255,255,255,127,255]},{"1842809":[255]},{"1842811":[255,85,170,255,168,110,102,69,17,5,170]},{"1842823":[255,164,245,255]},{"1842828":[128,1,127,127,110,110,255,239,250]},{"1842840":[91,81]},{"1842843":[255,171,84,127,128,255,238,239,85,85,170,255]},{"1842856":[245,81,255]},{"1842860":[255,213]},{"1842863":[255,119,255,17,255,255,255,255,255]},{"1842873":[255]},{"1842875":[255,84,171,255,128,254,254,85,85,64,170]},{"1842887":[250]},{"1842889":[17,187,69]},{"1842893":[11,255,255,254,254,255,255,191,21,5]},{"1842904":[255,17]},{"1842907":[255,171,84,255]},{"1842912":[255,254,255,85,85,170,255]},{"1842920":[17,17,187,69,255,94]},{"1842927":[255,255,255,85,255,234,255,255,255]},{"1842937":[255,68,187,85,170,255]},{"1842944":[181,245,85,85,42,136,10]},{"1842953":[155,191,85]},{"1842957":[191,255,255,234,170,85,85,255,127,245]},{"1842968":[100,155]},{"1842971":[255,191,64,255]},{"1842976":[255,170,255,85,127,170,255]},{"1842984":[17]},{"1842986":[191,85,255,235]},{"1842991":[255,181,255,255,255,136,255,255,255,138,255,64,191,84,171,255]},{"1843008":[93,93,127,255,170,170,254]},{"1843017":[223,255,255]},{"1843021":[255,254,255,160,170,213,85,234,234,1,1,32,221]},{"1843035":[255,255]},{"1843038":[238,1,255,168,255,85,255,170,255]},{"1843048":[87]},{"1843050":[255,255,255,170,17,254,95,247,127,255,191,255,254,255,138,255]},{"1843067":[255,85,170,239,1,217,217,251,251,170,191,168]},{"1843081":[255,255,255]},{"1843085":[255,254,255]},{"1843089":[174,68,68,191,170,87,87,1,212]},{"1843099":[255,255]},{"1843102":[170,1,255,136,255,68,255,170,255]},{"1843112":[126,1,255,255,255,170,85,254,255,119,251,255,234,255,168,255,170,255]},{"1843131":[255,95,160,171,1]},{"1843138":[186,186,175,239]},{"1843144":[2,245,255,255]},{"1843149":[255,235,255]},{"1843153":[255,64,69,234,170,18,18,93]},{"1843162":[69,255,255]},{"1843166":[170,20,255]},{"1843170":[255,64,255,170,255]},{"1843176":[170,85,255,186,255,170,85,235,255,255,191,255,191,255,237,255,170,255,69,186,255]},{"1843198":[190,20,10,10,168,168,223,223,129,1,174,80,255,255,9,246,235,255]},{"1843217":[245]},{"1843219":[87,160,160]},{"1843224":[80,9,93,255,246]},{"1843230":[136,20,255]},{"1843234":[253]},{"1843236":[255,160,255]},{"1843240":[166,81,255,162,255,171,119,235,255,245,253,255,223,255,255,255,166,255,93,162,246,9,156,20,255]},{"1843266":[255,255,255,255,255,255,255,255,163,252,241,14,56,254,85]},{"1843282":[255]},{"1843284":[255]},{"1843286":[255]},{"1843288":[255]},{"1843290":[95,3]},{"1843293":[255]},{"1843295":[1,255,255,255,255,255,255,255,255,255,255,160,163]},{"1843309":[255,255,255,255,255]},{"1843322":[255,163,255,255,1]},{"1843328":[255]},{"1843330":[255,255,255,255,255,255,245,245,213,42,242,34,2,170,87]},{"1843346":[255]},{"1843348":[255]},{"1843350":[255]},{"1843352":[255,10,250,133,34,221,2,85,255,255,255,255,255,255,255,255,245,255,85,213,34,221,255,255,255,255]},{"1843384":[10,10,255,213,255,221,85,2,255]},{"1843394":[255,255,255,255,255,255,85,85,223,32,168,170,42,170,119]},{"1843410":[255]},{"1843412":[255]},{"1843414":[255]},{"1843416":[255,170,160,26,168,127,42,85,255,255,255,255,255,255,255,255,85,255,223,223,170,125,255,255,255,255]},{"1843448":[170,170,255,223,215,87,85,42,255]},{"1843458":[255,255,255,255,255,255,87,87,249,6,13,147,50,186,127,128,255]},{"1843476":[255]},{"1843478":[255]},{"1843480":[127,168,14,160,17,238,34,69,255,255,255,255,255,255,255,255,215,255,249,249,130,109,223,191,255,255]},{"1843512":[40,40,255,249,239,254,101,2,254]},{"1843522":[255,255,255,255,255,255,81,81,255,255,255,255,152,141,254,1,255]},{"1843540":[255]},{"1843542":[255]},{"1843544":[119,174,255]},{"1843548":[213]},{"1843550":[157,98,255,255,255,255,255,255,255,255,217,255,255,255,42,255,255,255,255,255]},{"1843576":[38,38,255,255,213]},{"1843582":[98,157,239]},{"1843586":[255,255,255,255,255,255]},{"1843594":[251,255,253,255,154,237,239,16,255]},{"1843604":[255]},{"1843606":[255]},{"1843608":[119,255,250,5,84,2,255]},{"1843616":[255,255,255,255,255,255,255,255,136,255,123,254,171,255,255,255,255,255]},{"1843640":[119,119,255,254,84,2]},{"1843647":[255,238,17,255,255,255,255,255,255,4,4,190,231,77,221,102,104,255]},{"1843666":[255]},{"1843668":[255]},{"1843670":[255]},{"1843672":[95,251,174,81,88,162,15,144,238,238,255,255,255,255,255,255,164,255,60,255,135,237,255,126,255,238]},{"1843704":[91,91,255,255,106,176,144,15,160,85,255,255,255,255,255,255]},{"1843722":[171,255,84,213,127,128,245,10,255]},{"1843732":[255]},{"1843734":[255]},{"1843736":[117,255,32,223]},{"1843741":[171,255]},{"1843744":[170,170,255,255,255,255,255,255,138,255,171,116,255,213,255,255,255,170]},{"1843768":[117,117,255,116,42,129]},{"1843775":[255,179,85,255,255,255,255,255,255]},{"1843786":[187,255,68,84,254,16,230,25,255]},{"1843796":[255]},{"1843798":[255]},{"1843800":[127,255]},{"1843803":[255]},{"1843805":[187,255]},{"1843808":[187,187,255,255,255,255,255,255,128,255,187,68,255,84,238,239,255,187]},{"1843832":[127,127,255,68,171,16]},{"1843839":[255,55,85,255,255,255,255,255,255,16,16,223,223,128,208,149,213,98,157,255]},{"1843860":[255]},{"1843862":[255]},{"1843864":[247,239,16,239,192,31,191,64,191,191,255,255,255,255,255,255,24,255,239,48,31,176,64,234,255,191]},{"1843896":[231,231,255,48,175,80,128,127,215,85,255,255,255,255,255,255]},{"1843913":[170,255,255]},{"1843918":[21,85,130,125,255]},{"1843924":[255]},{"1843926":[255]},{"1843928":[85,85]},{"1843931":[255]},{"1843933":[255,255,64,255,255,255,255,255,255,255,255,170,255,255]},{"1843948":[255]},{"1843951":[234,255,255]},{"1843960":[255,255,255]},{"1843964":[255]},{"1843966":[64,191,125,85,255,255,255,255,255,255]},{"1843977":[170,251,255]},{"1843982":[1]},{"1843984":[40,215,255]},{"1843988":[255]},{"1843990":[255]},{"1843992":[85,85,4,251]},{"1843997":[254,252,2,255,255,255,255,255,255,255,255,170,255,251]},{"1844012":[254,1,2,253,255,255]},{"1844024":[255,255,251,4,255]},{"1844030":[3,252,87,87,255,255,255,255,255,255]},{"1844041":[42,122,127,64,192]},{"1844049":[255,255]},{"1844052":[255]},{"1844054":[255]},{"1844056":[85,213,69,186,192,63,127,128,255,255,255,255,255,255,255,255,170,255,186,192,63,64,128,127,255,255]},{"1844088":[127,127,250,197,127,128,128,127,119,119,255,255,255,255,255,255,136,170,170,255,64]},{"1844110":[8,8]},{"1844113":[255,255]},{"1844116":[255]},{"1844118":[255]},{"1844120":[85,221,85,170,64,255,255,8,255,255,255,255,255,255,255,255,170,255,170]},{"1844140":[255]},{"1844142":[8,255,255,255]},{"1844152":[255,255,170,85,255]},{"1844158":[8,247,127,127,255,255,255,255,255,255,168,168,171,255,64,4,138,138]},{"1844177":[255,255]},{"1844180":[255]},{"1844182":[255]},{"1844184":[87,255,87,168,64,252,250,141,255,255,255,255,255,255,255,255,168,255,168,3,252,7,141,250,255,255]},{"1844216":[255,255,171,87,251,4,143,112,255,255,255,255,255,255,255,255,170,170,160,255,68]},{"1844238":[170,170]},{"1844241":[255,255]},{"1844244":[255]},{"1844246":[255]},{"1844248":[85,255,95,160,68,255,255,170,255,255,255,255,255,255,255,255,170,255,160]},{"1844268":[255]},{"1844270":[170,255,255,255]},{"1844280":[255,255,160,95,255]},{"1844286":[170,85,119,119,255,255,255,255,255,255,170,238]},{"1844299":[255,69]},{"1844302":[170,170]},{"1844305":[255,255]},{"1844308":[255]},{"1844310":[255]},{"1844312":[17,187,255]},{"1844316":[69,255,255,170,255,255,255,255,255,255,255,255,238,255]},{"1844332":[255]},{"1844334":[170,255,255,255]},{"1844344":[255,255]},{"1844347":[255,255]},{"1844350":[170,85,117,117,255,255,255,255,255,255,160,170,46,255,90,2,164,160]},{"1844369":[255,255]},{"1844372":[255]},{"1844374":[255]},{"1844376":[85,245,213,42,90,249,245,174,255,255,255,255,255,255,255,255,170,255,42,4,249,6,174,241,255,255]},{"1844408":[255,255,46,213,255]},{"1844414":[174,81,85,85,255,255,255,255,255,255,170,170,170,255,84]},{"1844430":[168,168]},{"1844433":[255,255]},{"1844436":[255]},{"1844438":[255]},{"1844440":[85,255,85,170,84,255,255,168,255,255,255,255,255,255,255,255,170,255,170]},{"1844460":[255]},{"1844462":[168,255,255,255]},{"1844472":[255,255,170,85,255]},{"1844478":[168,87,85,85,255,255,255,255,255,255,136,170,187,255,68]},{"1844497":[255,255]},{"1844500":[255]},{"1844502":[255]},{"1844504":[85,221,68,187,68,255,255]},{"1844512":[255,255,255,255,255,255,255,255,170,255,187]},{"1844524":[255]},{"1844527":[255,255,255]},{"1844536":[255,255,187,68,255]},{"1844543":[255,87,85,255,255,255,255,255,255,128,170,255,255,20,85,8,8,2,253,255]},{"1844564":[255]},{"1844566":[255]},{"1844568":[85,213,24,231,20,227,251,4,255,255,255,255,255,255,255,255,170,255,231,24,227,93,4,251,255,255]},{"1844600":[255,255,255,24,190,65,12,243,87,85,255,255,255,255,255,255]},{"1844617":[170,255,255,69,85]},{"1844624":[2,253,255]},{"1844628":[255]},{"1844630":[255]},{"1844632":[85,85]},{"1844635":[255,69,186,117,138,255,255,255,255,255,255,255,255,170,255,255]},{"1844652":[186,85,138,255,255,255]},{"1844664":[255,255,255]},{"1844668":[239,16,138,117,8,85,255,255,255,255,255,255]},{"1844681":[170,255,255,85,93]},{"1844688":[93,162,255]},{"1844692":[255]},{"1844694":[255]},{"1844696":[85,85,34,221,85,170,85,170,170,170,255,255,255,255,255,255,170,255,221,34,170,93,170,127,255,170]},{"1844728":[255,255,255,34,247,8,170,85,175]},{"1844738":[255,255,255,255,255,255]},{"1844745":[136,251,255,109,239]},{"1844752":[175,80,255]},{"1844756":[255]},{"1844758":[255]},{"1844760":[119,119,42,213,109,146,64,191,255,255,255,255,255,255,255,255,136,255,209,46,130,255,191,71,255,255]},{"1844792":[255,255,255,46,125,146,191,64,186]},{"1844802":[255,255,255,255,255,255]},{"1844809":[128,186,255,221,255]},{"1844816":[186,69,255]},{"1844820":[255]},{"1844822":[255]},{"1844824":[117,127,170,85,85,34]},{"1844831":[255,255,255,255,255,255,255,255,255,138,255,16,239,170,255,255,119,255,255]},{"1844856":[245,245,255,239,85,34,255]},{"1844864":[175]},{"1844866":[255,255,255,255,255,255]},{"1844874":[187,255,255,255]},{"1844880":[175,80,255]},{"1844884":[255]},{"1844886":[255]},{"1844888":[117,255,171,84,213]},{"1844895":[255,255,255,255,255,255,255,255,255,138,255,17,239,42,255,255,127,255,255]},{"1844920":[117,117,255,239,213]},{"1844926":[255]},{"1844928":[254]},{"1844930":[255,255,255,255,255,255]},{"1844938":[255,255,191,191]},{"1844944":[118,137,255]},{"1844948":[255]},{"1844950":[255]},{"1844952":[85,255,255]},{"1844956":[189,64]},{"1844959":[255,255,255,255,255,255,255,255,255,170,255,223,255,2,255,255,199,255,255]},{"1844984":[85,85,255,255,253,64,255]},{"1844992":[255]},{"1844994":[255,255,255,255,255,255]},{"1845002":[255,255,216,250]},{"1845008":[119,136,255]},{"1845012":[255]},{"1845014":[255]},{"1845016":[119,255,255]},{"1845020":[216,39]},{"1845023":[255,255,255,255,255,255,255,255,255,136,255,255,255,34,221,255,255,255,255]},{"1845048":[119,119,255,255,255,39,255]},{"1845056":[255]},{"1845058":[255,255,255,255,255,255,21,21,255,208]},{"1845069":[170]},{"1845071":[136,87,40,255]},{"1845076":[255]},{"1845078":[255]},{"1845080":[119,234,211,40]},{"1845085":[255]},{"1845087":[119,255,255,255,255,255,255,255,255,157,255,255,255,170,85,255,255,255,255]},{"1845112":[98,98,255,255,255,255,119]},{"1845120":[255]},{"1845122":[255,255,255,255,255,255,85,85,253,2,234,42]},{"1845135":[170,85,32,255]},{"1845140":[255]},{"1845142":[255]},{"1845144":[127,170,170,1,42,255]},{"1845151":[85,255,255,255,255,255,255,255,255,213,255,253,253,42,255,255,191,255,255]},{"1845176":[42,42,255,253,213,213,85]},{"1845184":[255]},{"1845186":[255,255,255,255,255,255,85,85,223,32,42,42]},{"1845199":[170,85]},{"1845202":[255]},{"1845204":[255]},{"1845206":[255]},{"1845208":[247,170,191]},{"1845212":[42,213]},{"1845215":[85,255,255,255,255,255,255,255,255,93,255,223,223,42,213,255,255,255,255]},{"1845240":[162,162,255,223,255,213,85]},{"1845248":[255]},{"1845250":[255,255,255,255,255,255,119,119,68,191,126,33,4,170,85]},{"1845266":[255]},{"1845268":[255]},{"1845270":[255]},{"1845272":[255,136,251]},{"1845276":[32,223,4,85,255,255,255,255,255,255,255,255,119,255,68,68,32,223,251,254,255,255]},{"1845304":[136,136,255,68,255,223,85]},{"1845313":[159,251,123,21,2,255,255,17,17,213,208,85,85,124,124,159,96,68,122,234,232,255,255,255,255,223,223,170,175,119,247,255,111,193,128,253,2,255,255,255,119,255,213,255,85,139,8,255]},{"1845362":[122,191,23,255,255,255,153,255,240,255,255,170,255,247]},{"1845377":[255,191,191,85,42,253,238,85,85,66,21,4,7,178,182,250]},{"1845394":[64,170,170,128,255,253,213,213,252,232,254,252,71,83,250,255,21]},{"1845412":[213,42,253,255,255,255,235,84,253,86,251,182,250,5,170,255,127,255,238,255,85,255,23,255,175,255,255,79]},{"1845441":[255,172,175,78,186,73,252,141,81]},{"1845451":[244]},{"1845453":[10,160,160,1]},{"1845458":[87,172,163,6,211,91,173,141,31,64,126,126,95,255,1,255,7,7,94,162,127,217,223,143,171,20,255,213,255,170]},{"1845489":[255,168,255,240,255,228,255,81,255,255,255,42,255,245,95,10,53,212,127,138,170,80,239,127]},{"1845514":[64,111]},{"1845517":[128,10,11,32,200,43,171,255,138,255,80,127,127,208,64,128,128,255,255,232,245,255,43,223,32,80,255,255,255,255]},{"1845548":[255,127,255,170,194,63]},{"1845555":[255,255,255,239,255]},{"1845561":[255,255,255,128,255,95,255,128,85]},{"1845571":[255,170,239]},{"1845575":[255,232,23]},{"1845579":[255,84]},{"1845582":[160,241]},{"1845585":[42,255,255,186,170,255]},{"1845592":[255,232]},{"1845595":[255,85,84,243,241,42,255,255,255,255]},{"1845607":[255,232,255]},{"1845612":[255,254,255,173]},{"1845617":[255]},{"1845619":[255,255,255,255,255,23,255,255,255,1,255,242,255,131,82,4,254,168,241,188,231,45,199,79,208,63,192,106,128,3,44,255,252,169,191,245,190,239,45,223,223,127,255,106,234,45,253,254,255,239,7,188,69,45,194,223,208,127,127,127,127]},{"1845681":[255]},{"1845683":[255,240,255,227,255,215,255,32,255]},{"1845693":[255,128,255,32,32,197,127,171,254,255,255,87,255,212,43,160,95,255]},{"1845712":[32,223,111,127,171,255,255,255,255,87,254,255,255,160,255,255,223,223,111,231,171]},{"1845734":[255]},{"1845736":[87,168,254,42,160,255,255,255,192,63,8,247,254,255,255,255,255,255]},{"1845755":[255,95,255]},{"1845759":[255,191,191,68,255,255,170,255,255,255,255,1,255,21,255,244,11,191,64,255,255,255,255,255,255,255,255,171,255,255,21,255,244,64,64,255,196,255]},{"1845798":[255]},{"1845800":[255]},{"1845802":[171,169,21,234,244,255]},{"1845809":[255,59,196,170,255,255,255,255,255,2,253,255,255,11,255,246,254,64,248,242,171,253,239,251,255,88,215,143,255,64,191,246,1,249,250,246,249,253,243,251,231,211,239,223,223,191,224,1]},{"1845858":[250,73,240,4,241]},{"1845864":[227]},{"1845866":[235,98,223,16,224,191,1,254,182,77,160,255,225,255,227,255,129,126,207,191,31,255,119,63,128,127,255,162,255,117,255,254]},{"1845899":[255,255,255,170,255,119,128,127,255,255,255,255,255,255,255,255,255,255,255,255,170,192,192,255]},{"1845924":[255]},{"1845926":[255]},{"1845928":[255]},{"1845930":[255]},{"1845932":[255]},{"1845934":[170,85,128,127,127,128,162,255,117,255,254,255,255]},{"1845948":[255,255,255,255,247,255]},{"1845955":[255,250,5,247,93,255,170]},{"1845963":[255,191,191,255,255,247]},{"1845970":[255,255,250,255,247,255,255,255,255,255,191,191,255,255]},{"1845986":[255]},{"1845988":[250]},{"1845990":[247]},{"1845992":[255]},{"1845994":[255]},{"1845996":[191,64,255]},{"1846001":[255,255]},{"1846005":[255,85,255,170,255,255]},{"1846012":[255,255,255,255,248,248,5,221,162,91,121,138,231,180,18,213,247,170,255,183,252,3,213,210,174,249,127,243,255,243,217,195,255,239,255,207,3,4,210]},{"1846052":[168,4,115,4,243,8,195,8,255,48,207]},{"1846064":[3,252,242,45,8,247,2,253,176,239,225,62,138,247,135,255,255,255,2,125]},{"1846085":[255,81,174,254,137]},{"1846091":[255,191,170,95,85,255]},{"1846098":[85,87]},{"1846101":[255,81,255,254,255,221,221,191,191,95,95]},{"1846114":[85,2]},{"1846118":[81]},{"1846120":[254]},{"1846122":[221]},{"1846124":[191,64,95,160]},{"1846129":[255,215,168]},{"1846133":[255]},{"1846135":[255,136,255,221,34,234,255,245,255,235,235,42,213]},{"1846149":[255]},{"1846151":[255,170,85]},{"1846155":[255,255]},{"1846158":[255,16,255,1,68,110]},{"1846165":[255]},{"1846167":[255,170,255,85,85,255,255,255,255,1,21,68,42]},{"1846184":[170]},{"1846186":[85]},{"1846188":[255]},{"1846190":[255]},{"1846192":[1,254,110,145]},{"1846197":[255]},{"1846199":[255]},{"1846201":[255,85,170]},{"1846205":[255,16,255,248,248,169,1,4,253,2,251,128,123,4,223,245,14,253,14,253,18,5,168,31,253,14,251,140,249,85,81,245,243,255,243,18,21,2,174,29,6,10,6,136,4,81]},{"1846252":[241]},{"1846254":[243,2,18,237,250,85,29,226,10,245,8,247,113,174]},{"1846269":[255]},{"1846271":[255,170,168,170,85]},{"1846277":[255]},{"1846279":[255,136,119]},{"1846283":[247,255]},{"1846286":[235,20,253,2]},{"1846291":[170,93,255]},{"1846295":[255,136,255,85,85,255,255,235,255]},{"1846305":[87]},{"1846307":[170,93]},{"1846312":[136]},{"1846314":[85]},{"1846316":[255]},{"1846318":[235]},{"1846320":[2,253,170,85,93,162]},{"1846327":[255]},{"1846329":[255,93,170]},{"1846333":[255,20,255,170,130,170,17]},{"1846341":[255]},{"1846343":[255,138,117]},{"1846347":[255,255]},{"1846350":[249,6,215,40]},{"1846355":[170,85,255]},{"1846359":[255,138,255,93,93,255,255,249,255]},{"1846369":[125]},{"1846371":[170,85]},{"1846376":[138]},{"1846378":[93]},{"1846380":[255]},{"1846382":[249]},{"1846384":[40,215,238,85,85,170]},{"1846391":[255]},{"1846393":[255,93,162]},{"1846397":[255,6,255,232,136,168,65,6,255,2,255,168,85,33,221,250,4,64,190,155,100,68,232,87,249,3,251,174,252,223,252,251,252,66,253,4,115,66,174,81]},{"1846438":[3,2,172,2,252,2,251,2,67,3,100,155,250,21,81,174,3,252,4,251,220,35]},{"1846461":[255,189,254,255,239,170,85]},{"1846469":[255]},{"1846471":[255,174,81]},{"1846475":[255,255]},{"1846478":[40,215,239,16,68,238,64,255]},{"1846487":[255,174,255,255,255,255,255,168,255]},{"1846497":[16,68,170,64]},{"1846504":[174]},{"1846506":[255]},{"1846508":[255]},{"1846510":[168,128,16,239,238,17,64,191]},{"1846519":[255]},{"1846521":[255,255]},{"1846525":[255,87,255,255,255,34,197]},{"1846533":[255,1,254,175,80,69,255,191,64]},{"1846543":[255,255]},{"1846546":[68,102,69,255,1,255,175,255,255,255,191,255]},{"1846559":[255]},{"1846562":[68,34,69]},{"1846566":[1]},{"1846568":[175]},{"1846570":[255,69,191]},{"1846577":[255,126,153,69,186]},{"1846583":[255]},{"1846585":[255,186,69,64,255,255,255,241,241]},{"1846595":[232,2,254,18,239,255,3,86,253,144,111]},{"1846607":[255,251,4,70,64,82,248,18,252,255,254,252,254,145,255]},{"1846623":[255,4,10,64,6,80]},{"1846630":[16]},{"1846632":[254,2,254,84,145,1]},{"1846640":[4,251,81,191,81,175]},{"1846647":[255]},{"1846649":[255,168,87,110,255,255,255,238,239]},{"1846659":[125]},{"1846661":[255,1,254,238,145,221,127,228,91,72,191,255,1]},{"1846676":[85,255,129,255,238,255,127,127,100,127,32,127]},{"1846689":[17]},{"1846692":[85]},{"1846694":[129,128,238,128,127,221,100,192,96,32,1,254,130,255,85,170]},{"1846711":[255]},{"1846713":[255,34,221,27,255,159,255,255,234,32,147,162,255,17,238,254,1,255,255]},{"1846733":[251,136,255,255]},{"1846739":[32,255,255,27,255,255,255,255,255,68,251]},{"1846751":[254,21,21,32]},{"1846756":[255,166,27,10,255,1,255,255,64,64,35]},{"1846769":[255,76,255,89,166]},{"1846775":[255]},{"1846777":[255]},{"1846779":[255,187,255,221,255,243,226,213,6,13,248,21,234,172,83,221,255]},{"1846797":[175]},{"1846799":[255,251,4,6,209,216,255,190,254,253,255,255,255,80,175]},{"1846815":[234,21,29,211,2,223,10,190,171,253,81,255,255,4]},{"1846830":[191]},{"1846832":[4,251,40,255,208,47]},{"1846839":[255,2,255]},{"1846843":[255,171,255,85,255,170,171,238]},{"1846852":[162,255,81,46,128,255,196,63,32,255,56,255,255]},{"1846867":[238,255,255,123,127,208,255,31,223,112,245,2,248,85,1,238]},{"1846884":[255,239,123,42,208,208,223,31,127,112,245,50]},{"1846897":[255,17,255,16,239,132,255,47,255,32,255,138,255,13,255,170,191,255,4,128,255]},{"1846919":[255]},{"1846921":[255,119,255,1,252,5,170,255]},{"1846930":[4,255,223,255,170,255]},{"1846937":[255,136,170,6]},{"1846942":[250]},{"1846944":[85,21,255,4,223,223,170,170]},{"1846954":[221,136,251,4,85,170]},{"1846961":[255]},{"1846963":[255]},{"1846965":[255,85,255,255,255,34,255,251,255,85,255,168,247,249,86,3,254,9,255]},{"1846985":[255,170,171,21,64,126,128,253]},{"1846994":[80,249,254,255,162,254]},{"1847001":[224,84,171,234,1,129,1,93,95,249,86,255,254,163,162,31]},{"1847018":[1]},{"1847020":[190,64,127,128]},{"1847025":[255]},{"1847027":[255]},{"1847029":[255,92,255,255,255,170,255,190,255,126,255]},{"1847041":[255,213,127,128,247,128,191]},{"1847049":[240,32,175,196,24,2,12,85]},{"1847058":[85,213,93,119,64,172,79,224,82,168,35,27,120,244,85,255,213,85,213,85,187,128,95,64,141,2,255]},{"1847086":[119,136]},{"1847089":[255,42,255,34,255,23,255,191,255,37,255,228,255,3,255]},{"1847105":[255,238,255]},{"1847109":[255,6,248,117]},{"1847114":[23,168,2,2]},{"1847119":[23,84]},{"1847122":[85,255,64,255,1]},{"1847128":[138,10,232]},{"1847132":[242,242,23]},{"1847136":[84,255,255,255,85,64,255]},{"1847144":[255]},{"1847146":[87,168,255,2,255]},{"1847152":[84,171]},{"1847155":[255,170,255,255,255,245,255,87,255,15,255,232,255]},{"1847169":[255,191,241,7,255,254,1,2,10,250]},{"1847180":[42,191,15,255,255]},{"1847186":[64,255]},{"1847189":[69]},{"1847192":[254,246,5,69,191,42,240]},{"1847200":[255,239,254,240,250]},{"1847206":[255]},{"1847208":[247,10,191]},{"1847212":[255,42,255]},{"1847216":[215,40,1,255,189,255,255,255,11,255,186,255,106,255,15,255,1,254,255,255,9,212,168,192,106,15,24]},{"1847244":[209,211,236,239,254]},{"1847251":[187,102,128,22,150,159,154,64,96,166,164,3,16,255,255,238,170,59,68,127]},{"1847272":[255,10,223,32,255,160,255]},{"1847280":[254,1,17,255,187,255,233,255,106,255,159,255,217,255,252,255,21,234,255,255,255]},{"1847304":[255,255]},{"1847307":[95,224,224,129,129,234]},{"1847314":[158,191]},{"1847317":[16,224,224,234,234,95]},{"1847325":[63]},{"1847327":[126,255,255,222]},{"1847332":[239]},{"1847334":[255]},{"1847336":[255,234,255]},{"1847340":[255,160,255]},{"1847344":[234,21,191,97,239,255,31,255,255,255,160,255,255,95,255,254,95,95,43,47,94,120,216,13,242,140,223,145,47,15,255,63,255,255,251,251,223,223,240,253,27,159,40,185,240,239,128,191]},{"1847393":[160,4,212,39,167,255,223,126,119,126,94,96,233,192,192,255,95,255,43,254,89,253,34,255,8,255,32,239]},{"1847422":[255]},{"1847424":[128,144,149,149,5,5,124,125,129,1,208,2,255,170,255,212,247,231,47,159,58,63,130,255,127,127,45,13]},{"1847453":[170]},{"1847455":[212,111,60,218,240,255,205,255,255,128,254,210,223,85,255,43,107,211,255,191,79,63,242,125,130,255,1,223]},{"1847484":[255]},{"1847486":[255]},{"1847490":[64]},{"1847492":[85,95]},{"1847495":[85,87,93,43,47,160,5,80,10,255,255,255,255,170,255,170,255,247,247,251,251,90,90,165,5,255,128,255,64,255,85,255,255,10,170,4,212,165,255,90,95,255,127,255,191,255,170,85,170,255,85,255,43,255]},{"1847550":[95]},{"1847553":[174,160,173]},{"1847557":[187,5]},{"1847560":[224,193,241,128,82,112,181,162,255,255,95,255,228,255,15,5,254,255,253,252,218,216,245,243,255,1,255,162,255,95,245,255,63,43,126,118,44,172,19,83,254,255,253,95,187,228,10,245,255,212,252,139,248,87,243,172,2,225,2,73,36,144,154,32,209,51,192,64,248,16,253,8,243,246,227,239,36,188,223,32,206,191,191,127,255,255,255,255,254,25,247,178,239,231,64,5,191,185,127,69,239,170,247,117,225,255,73,255,144,127,101,250,63,198,127,186,255,85,255,138,1,170,32,117,85]},{"1847686":[255]},{"1847688":[16,254,170,191,5,7,10,10,171,171,244,245,85,85,255]},{"1847704":[239,255,85,255,250,255,245,255,255,85,255,171,255,255]},{"1847720":[255,17,255,170,255,165,255,91,170,255,117,254]},{"1847733":[255]},{"1847735":[255,254,239,255,85,255,90,255,164,21,168,10,64,255]},{"1847750":[80]},{"1847753":[174,128,213,85,127,239,255,189,189,74,74,255,250,251,4,251,255,127,255,170,255,16,255,255,87,255,191,250,250,175]},{"1847784":[255,85,255,170,255,85,255,239,168,255,64,255]},{"1847797":[255,171,255,174,251,213,127,255,170,255,16,126,129,173]},{"1847812":[227,25,6,138,14,236,60,89,56,178,5,37,255,255,174,173,253,163,42,95,154,234,190,223,207,143,218,47,255,127,253,252,163,185,255,10,255,107,223,223,191,77,15,191,128,255]},{"1847859":[255,24,255,160,255,240,159,65,190,194,191,181,74,122,197,127,128,220,34,132,59]},{"1847885":[170]},{"1847887":[80,191,186,255,255,255]},{"1847895":[123]},{"1847900":[85,255,174,254,250,63,255,255,1,34,64]},{"1847912":[255,255,255,255,255,255,255,255,133,127]},{"1847923":[255,35,255,59,255]},{"1847929":[255]},{"1847931":[255,170,85,80,175,128,127,84,171,170,130,128,117,85]},{"1847946":[42]},{"1847952":[255,128,255,84,191,194,10,117,85,85,42,42]},{"1847966":[192,192,128,255,84,255,215]},{"1847976":[255,255,255,255,255,255,255,255,127,255,171,255,151,255,117,255]},{"1847993":[255]},{"1847995":[255]},{"1847997":[255]},{"1847999":[255,21,255,2,255,32,100,1,81,125,3,158,2,64,2,5,129,255,21,255,2,32,187,175,81,127,124,190,159,70,69,169,6,21,234,2,253,255]},{"1848038":[1,1,253,255,223,253,255,251,215,125,255,255,255,255,100,255,80,255,3,254,35,220,1,254,47,208,127,255,105,141,160,225,64,170,45,18,212,129,138]},{"1848080":[255,95,15,185,128,159,191,106,255,40,255,62,31,15,7,2,95,208,59,68,190,192,234,170,168,58,190,149,111,58,250,85,143,255,143,255,1,255]},{"1848119":[255,18,255,129,127,80,239,173,250,254,255,85,95]},{"1848133":[127,5,175,64,168,87]},{"1848140":[138,32]},{"1848144":[254,255,245,85]},{"1848149":[255,250,170,255]},{"1848154":[253,168,255,213,127,127,254]},{"1848162":[255]},{"1848164":[128]},{"1848166":[175,170,23,168,170]},{"1848172":[213,160,255]},{"1848176":[255,255,255,255,127,255]},{"1848183":[255,191,255,2,255,32,255,128,255,171,254,64,239]},{"1848197":[186,119,255]},{"1848202":[226]},{"1848204":[239]},{"1848206":[170]},{"1848208":[171,255,64,127,69,186,136,136,255]},{"1848218":[93]},{"1848220":[186,16,85,85,171]},{"1848226":[208]},{"1848230":[255,136,255]},{"1848234":[191]},{"1848236":[85]},{"1848238":[255]},{"1848240":[254,255,239,255,186,255]},{"1848247":[255,255,255,191,255,69,255,170,255,154,233,20,251,22,188,209,239,24,37,24,46,77,24,239,56,154,247,24,247,67,182,42,182,194,28,203,48,178,12,56,104,150,4,28,24,22,28,251,174,255]},{"1848298":[253,10,219,24,191,16,225,255,227,255,160,255,4,251,227,255,205,247,211,239,191,199,16,239]},{"1848323":[255]},{"1848325":[170,255,255]},{"1848329":[81,139,32,223]},{"1848334":[255]},{"1848336":[16,255]},{"1848339":[255,85,170]},{"1848343":[170,174]},{"1848346":[116,10,32,64]},{"1848351":[5,16]},{"1848358":[255,170,255]},{"1848362":[213,32,191]},{"1848366":[250]},{"1848368":[239,255,255,255,170,255]},{"1848375":[255,255,255,213,255,191,255,250,255]},{"1848385":[255]},{"1848387":[255]},{"1848389":[170,255,255,1,80,159,32,221]},{"1848398":[80]},{"1848401":[255]},{"1848403":[230,85,170]},{"1848407":[170,174]},{"1848410":[96]},{"1848412":[34,247,5,239]},{"1848418":[25]},{"1848422":[87,2,255]},{"1848426":[223,32,42]},{"1848430":[21,170,255,255,255,255,170,255,168,255,255,255,223,255,8,255,16,255]},{"1848449":[254,1,255,29,29,188,255,66,20,253,2,83]},{"1848462":[5,4,2,253,2,232,228,7,12,241,188,3,1,14,168,238,80,254,3,2,23,3,31,2,190,255,234,23,242]},{"1848492":[185,4,81,175,253,254,252,254,7,248,77,177,235,253,241,255,16,254]},{"1848511":[251,128,255]},{"1848515":[255,53,253,175,183,71,240,213,192,192,128,135,135,128,254,128,64,118,140,54,193,88,163,64,106,42,127,80,63,129,128,191,128,245,56,255,47,236,80,213,170,170,213,208,239,127,255,127,255,252,131,214,41,204,191,85,63]},{"1848573":[127,64,56]},{"1848577":[255]},{"1848579":[255]},{"1848581":[95,255,255,255]},{"1848586":[85]},{"1848590":[85,85]},{"1848593":[159,2]},{"1848596":[160,95,101,239]},{"1848601":[134]},{"1848603":[255,170,255]},{"1848607":[255,96]},{"1848610":[253,2,95]},{"1848614":[245,128,121]},{"1848619":[170,170,85]},{"1848623":[255,255,255,253,255]},{"1848629":[255,111,154,121,255]},{"1848635":[255]},{"1848637":[255]},{"1848639":[170]},{"1848641":[255]},{"1848643":[255]},{"1848645":[255,239,255,250,4,68]},{"1848652":[170,42,85,85]},{"1848657":[95,42]},{"1848661":[255,67,255,4,251]},{"1848667":[255]},{"1848669":[255]},{"1848671":[255,160]},{"1848674":[213,42,255]},{"1848678":[83]},{"1848681":[5]},{"1848683":[187]},{"1848685":[127]},{"1848687":[255,255,255,213,255]},{"1848693":[255,239,188]},{"1848697":[255]},{"1848699":[255]},{"1848701":[213]},{"1848703":[170,224,191,96,255,112,255,254,255,154,60,24,28,164,160,89,91]},{"1848721":[87,41,210,96,223,54,206,60,203,28,243,24,231,12,243,249]},{"1848738":[246,105,255,48,63,57,24,117,24,239,24,239,4,255,14,255,36,223,96,159,246,201,24,231,24,231,24,71,4,170]},{"1848769":[255]},{"1848771":[255]},{"1848773":[255,248,255,170]},{"1848780":[186,186,21,183]},{"1848785":[85,59,128,20,235,136,248]},{"1848793":[255]},{"1848795":[255]},{"1848797":[255,162,255,255]},{"1848802":[196,59,235,20,143,7]},{"1848809":[85]},{"1848811":[255]},{"1848813":[255]},{"1848815":[93,170,255,68,255]},{"1848821":[255,248,119]},{"1848825":[255]},{"1848827":[255]},{"1848829":[85]},{"1848831":[234]},{"1848833":[255]},{"1848835":[255]},{"1848837":[255,20,255,170,2,69,69,171,175,87,125,5,80,255]},{"1848852":[111,144]},{"1848855":[20]},{"1848857":[255]},{"1848859":[255,4,255,42,253,250,5]},{"1848867":[255,144,111,235,235]},{"1848873":[87]},{"1848875":[255]},{"1848877":[251,2,213,170,255]},{"1848883":[255]},{"1848885":[255,20,255]},{"1848889":[253]},{"1848891":[186]},{"1848893":[84,2,170,26,253,77,190,6,223,3,253,173,45,87,215,191,255,84,255,93,24,190,13,251,6,17,7,3,252,128,255,64,255,171,255,186,69,76,178,38,221,233,254,2,125]},{"1848939":[127]},{"1848941":[191,1,84,186,231,76,243,34,221,1,254,2,209]},{"1848955":[169]},{"1848957":[64]},{"1848959":[171,191,64,85,128,42,64]},{"1848967":[224,127,127,158,255,234,245,101,250,64,51,128,47,192,63,95,170,128,127,161,127,85,181,186,218,140,64,80,170,128,85,21,224,128,127,1,222,21,234,2,101,140,255,80,255,128,127,31,234,128]},{"1849019":[225]},{"1849021":[245]},{"1849023":[250,208]},{"1849026":[2,2,191,159,33,33,254,219,213,170,172,64,64,232,47,47,84,254]},{"1849045":[255,80,175,1,219,42,170,83,83,255,255,255]},{"1849058":[85,170]},{"1849061":[223,80,175,139,116,42,213,64,188,168,64,208,255,1,253]},{"1849077":[96,80,174]},{"1849081":[139]},{"1849083":[42]},{"1849085":[83]},{"1849087":[191,4]},{"1849090":[3,6,255,255,127,126,164,164,64]},{"1849100":[1,1,22]},{"1849104":[130,133,4,3]},{"1849109":[255]},{"1849111":[254,81,245,186,186,212,213,232,232,250,1,252,2,46,209]},{"1849127":[255,174,81,5,234,42,68,23,190,122,253,248,253]},{"1849141":[46]},{"1849143":[128,10,245,5,186,42,213,1,232,1,255,143,127,243,63,213,221,124,127,170,163,80,112,168,252,254]},{"1849170":[112,128,12,240,42,223]},{"1849177":[59,4,165,6,54,83,255,255]},{"1849186":[122,5,60,3,45,210,171,87,81,11,169,96,4,4,1,255,10,255]},{"1849205":[255,32,15,128,108,80,166,137,86,80,171,255,95,122,250,253,255,7,39,5,240,59,193,5,209,254,128,160,160,128,5]},{"1849237":[2,168,136,5,240,58,192,6,208,127,128,95,10,160,90,2,255,112,143,245,250,251,196,213,250,126,1,255,85,32,255]},{"1849269":[253,80,175,5]},{"1849274":[59]},{"1849276":[5]},{"1849278":[126,128,171,171]},{"1849285":[170,160,245,93,93,234,74,66,64,133,132]},{"1849297":[84]},{"1849299":[255]},{"1849301":[255]},{"1849303":[95,10,8,180]},{"1849308":[182]},{"1849310":[125,4,171,170,5]},{"1849316":[170,170,85,245,93,162,235,21,73,189,130,122,171,85,5,255]},{"1849333":[85]},{"1849335":[170,85]},{"1849338":[234]},{"1849340":[64]},{"1849342":[132]},{"1849344":[231,239,71,103,17,57]},{"1849351":[6,13,4,4]},{"1849356":[175]},{"1849358":[87]},{"1849361":[16,32,152]},{"1849365":[108]},{"1849367":[174,9]},{"1849370":[5]},{"1849372":[175]},{"1849374":[81,6,63,224,39,64,41,186,6,87,245,242,250,251,80,123,168,191,63,208,7,248,1,84]},{"1849399":[168,5]},{"1849408":[21,255,221,194,93,255,138,127]},{"1849417":[255,224,127,224,31,240,95]},{"1849425":[255,32,192]},{"1849429":[255]},{"1849431":[255]},{"1849433":[255]},{"1849435":[159]},{"1849437":[255]},{"1849439":[175]},{"1849442":[31,95]},{"1849445":[5]},{"1849456":[125]},{"1849458":[223]},{"1849460":[93]},{"1849462":[127]},{"1849464":[255]},{"1849466":[127]},{"1849468":[31]},{"1849470":[95]},{"1849472":[127,254,67,172,251,250,175,255,21,255,43,255,5,255,170,255]},{"1849489":[254,19,19,4,250]},{"1849495":[255]},{"1849497":[255]},{"1849499":[255]},{"1849501":[255]},{"1849503":[255,1,9,239,253,1,187]},{"1849511":[11]},{"1849520":[127]},{"1849522":[255,2,251]},{"1849526":[175]},{"1849528":[189]},{"1849530":[107]},{"1849532":[175]},{"1849534":[234]},{"1849536":[254,169,240,128,161,244,253,246,123,253,255,241,115,231,199,207]},{"1849553":[168,255,255,11,171,1,244,2,249,14,251,24,251,48,247,87,255,127,127,85,255,10,203,5,111,10,191,28,111,56,127,255]},{"1849586":[255,128,255]},{"1849590":[255]},{"1849592":[127]},{"1849594":[255]},{"1849596":[127,16,255]},{"1849600":[129,131,197,139,159]},{"1849606":[85,56,254,171,85,86,251,250,85,85,101,229,100,139,191,63,66,80]},{"1849625":[170,168,84,4,250,170,85,38,230,139,239,63,191,109,125,85,255,3,87,1,251]},{"1849647":[69,231,25,239,16,191,64,125,128,255]},{"1849658":[87]},{"1849660":[251]},{"1849662":[85]},{"1849664":[215,172,70,253,128]},{"1849670":[10,175,168,221,64,171,170,183,81,11,87,215]},{"1849683":[253,255,255,90,90,2,138,20,20,64,162,164,1,123,248,255,253,255,255,165,245,117,255,235,255,29,191,90,91,255,7,255]},{"1849716":[255]},{"1849718":[255,10,255]},{"1849722":[255]},{"1849724":[191]},{"1849726":[91]},{"1849728":[232]},{"1849730":[162,80,95,93,191,209,20,111,42,191,128,85,16,238,255,255]},{"1849747":[80,162,253,191,191,148,148,106,106,42,42,1,1,255,255,242,80,253,255,110,110,123,251,149,213,213,255,254,255,255]},{"1849778":[242,13,255]},{"1849782":[255,145,255,4,255,42,255]},{"1849790":[255]},{"1849792":[20,22,3]},{"1849796":[171,217,254,10,117,152,169,64,85,139,138,39,234,254,42]},{"1849812":[33,217,247,250,107,97,183,163,77,69,186,170,255,189,132,172,216,249,252,251,241,251,227,247,198,206,173,189,254,67,40,215,249,6,251,4,251,4,247,8,207,49,191,66,182,30,98,128,80,42,239,175,237,5,247,162,95,224,255,162,105,63,127,128,128,42,80,80,250,250,253,253,95,95,255,255,63,55,64,157,126,174,255,255,255,239,95,87,191,191,93,93,30,233,157,98,250,5,255]},{"1849912":[255,16,255,168,255,64,255,162,170,234,149]},{"1849924":[32]},{"1849926":[255,255,95,95,255,191,253,21,255,175,21,255,255,42,5]},{"1849943":[127,160,191,64,77,234,234,80,80,255,255,42,64,48,21,255,255,255,255,255,255,255,255,255,255,234,21,64,191,37,218,255]},{"1849976":[255]},{"1849978":[255]},{"1849980":[255]},{"1849982":[255]},{"1849984":[128,168,85]},{"1849990":[125,125,255,255,255,255,255,255,255,255,86,254,255,170,85]},{"1850006":[130,255]},{"1850009":[255]},{"1850011":[151]},{"1850013":[183]},{"1850015":[35,255,255,175]},{"1850020":[40,125,255,255,255,255,255,255,255,255,255,255,168,87]},{"1850035":[255,85,170,125,130,255]},{"1850042":[255]},{"1850044":[255]},{"1850046":[255]},{"1850048":[10,1,241,10,24,18,8,58,249,180,159,226,247,155,23,101,9,4,91,4,255,30,255,193,111,235,69,149,12,167,154,111,254,245,255,10,2,251,247,205,178,158,170,248,211,251,221,61,4,249,174,241,251]},{"1850102":[28,227,237,2,215,26,175,96,247,104]},{"1850114":[160,10]},{"1850117":[10]},{"1850119":[138,77,1,103,34,255,136,251,234,20]},{"1850130":[95,160,255,85,250,112,242,242,216,216,118,254,21,85,235,254,85,10,85,170,255,117,191,178,191,152,137,136,238,68,21,235,85,255,170,85]},{"1850167":[255,77,179,103,186,255]},{"1850174":[251,174]},{"1850178":[20,171,1,32]},{"1850183":[255,160,87,4,171,106,85,187,174,127,21,239,16,254,223,255]},{"1850200":[87]},{"1850202":[251,80,149,128,68,64,149,234,68,171,222,32,255]},{"1850216":[255,8,255,80,255,128,255,64,106,149,64,255,32,223]},{"1850231":[255,160,95,4,251,106,213,187,238]},{"1850243":[255,87]},{"1850247":[64,2,98]},{"1850251":[253,160,95]},{"1850255":[255,255,127,245,10,168,255,66,2,232,2,253]},{"1850268":[95]},{"1850270":[255]},{"1850272":[127,128,10,245,168]},{"1850278":[255]},{"1850280":[119,136,255]},{"1850284":[255]},{"1850286":[255]},{"1850288":[128,127]},{"1850291":[255]},{"1850293":[255,189,255,157,119,2,255,160,95]},{"1850303":[255,120,56,112,255,191,80,58,122,170,218,53,69,255,255,212,255,191,239,243,68,64,190,245,159,80,170]},{"1850331":[53,96,255,75,212,183,24,60,251,49,112,181,106,175,112,207,96,239,16,127,160,56,199,112,143,33,223,48,197,37,223,138,255,96,143,64,63,85]},{"1850371":[187,255]},{"1850374":[170,170,171,171,87,87,175,255,179,255,170,251,255]},{"1850389":[255]},{"1850391":[170]},{"1850393":[171]},{"1850395":[87,80,175,76,179,174]},{"1850402":[68,187]},{"1850406":[85,170,254,1,253,2,255]},{"1850414":[255]},{"1850416":[4,255,68,187]},{"1850421":[255,85,85,84,254,168,253]},{"1850429":[255]},{"1850431":[255,85,21]},{"1850435":[170,174,4,171,169,191,191,125,95,171,255,85,213,170,255,255]},{"1850453":[255,2,169]},{"1850457":[191,34,95,84,171,170,255,170,21,85,170]},{"1850469":[85,87,168,239,16,255]},{"1850476":[255]},{"1850478":[213,42]},{"1850481":[234,85,170]},{"1850485":[251,86,87,64,239,160,255]},{"1850493":[255]},{"1850495":[255,85,84,1,33,186,138,255,85,255,255,81,255,186,186,85,215,170,255,119,139,1,254,170,85]},{"1850521":[255,174,251,69,255,170,255,170,85,85,168,1,206,254,1,254,1,255]},{"1850540":[186,69,215,40]},{"1850545":[171,87,170,1,116,170,254]},{"1850553":[254]},{"1850555":[255]},{"1850557":[255]},{"1850559":[255,181,53,64,32,95,95,221,146,43,63,20,191,74,31,96,250,192,181,148,171,96,223,138,178,212,63,75,63,53,223,255,159,74,245,84,107,32,159,90,101,222,225,223,224,63,192,26,101,202,10,20,107,32,64,8,250,64,62,64,191,32,223]},{"1850623":[255,87,87,4,6,251,251,240,63,170,221,64,191,170,117,16,170]},{"1850641":[87,64,191]},{"1850645":[255,143,63,85,221,191,191,85,117,239,239,168,87,64,191]},{"1850661":[255,143,112,221,34,191,64,117,138,170,81,168,168,64,191]},{"1850677":[4,128,143]},{"1850681":[221]},{"1850683":[191]},{"1850685":[117]},{"1850687":[239,255,255,65,107,170,191,10,255,152,119,2,255,34,221]},{"1850703":[255]},{"1850705":[255]},{"1850707":[255,21,255,245,255,103,119,253,255,221,221,255,255]},{"1850721":[255]},{"1850723":[255]},{"1850725":[234,245,10,103,152,253,2,221,34,255]},{"1850739":[255]},{"1850741":[85]},{"1850743":[245]},{"1850745":[103]},{"1850747":[253]},{"1850749":[221]},{"1850751":[255,242,243,84,253,174,254,244,254,3,255,1,255,42,247,1,255,15,241,6,249,83,252,9,254,253,254,254,255,247,247,255,255,12,246,2,255,1,175,1,247,252,3,252,1,212,42,254,1,12,3,2,253]},{"1850805":[86]},{"1850807":[10]},{"1850809":[253]},{"1850811":[255]},{"1850813":[213]},{"1850815":[254,239,250,87,253,162,255,1,255,202,191,198,253,11,191,221,119,21,250,2,255,93,255,126,255,255,63,191,125,63,191,223,183,5,234]},{"1850851":[255]},{"1850853":[162,84,129,116,138,27,196,116,139,10,245,5,21]},{"1850867":[255]},{"1850869":[221]},{"1850871":[254,64,245,2,251]},{"1850877":[244,8,234,173,250,255,85,32,255,41,215,175,255,117,223,191,255,215,127,87,250,170,255,223,255,255,215,255,255,255,223,255,255,255,127,7,168]},{"1850915":[255]},{"1850917":[32,124,1,80,175,170,85,64,191,168,87,5,87]},{"1850931":[255]},{"1850933":[223,40,254]},{"1850937":[80,32,170]},{"1850941":[64,128,168,136,255,234,127,34,255,221,119,255,255,93,255,255,255,87,255,119,255,149,255,255,255,255,127,255,255,255,255,255,255,255,255,119,136]},{"1850979":[234,8,34,130,85]},{"1850985":[255,160,95]},{"1850989":[255]},{"1850991":[255]},{"1850993":[119]},{"1850995":[255]},{"1850997":[221,128,170]},{"1851003":[162]},{"1851007":[168,170,127]},{"1851011":[255,179,255,121,255,164,167,72,235,145,145,224,224,79,127,231,255,251,255,253,255,247,247,251,251,213,213,232,232,69,186,1,24]},{"1851045":[183,128,123,2,174,1,239]},{"1851053":[187]},{"1851055":[247]},{"1851057":[117]},{"1851059":[239]},{"1851061":[72]},{"1851063":[132]},{"1851065":[89]},{"1851067":[182]},{"1851069":[110]},{"1851071":[31,64,64,93,255,248,248,2,3,17,63,10,27,5,221,10,255,255,255,255,255,253,253,239,238,126,81,191,170,250,197,253,235]},{"1851105":[64,2,93,2,248,2,17,16,174,14,213,226,250,104,244]},{"1851121":[191]},{"1851123":[162]},{"1851125":[5]},{"1851127":[254]},{"1851129":[209]},{"1851131":[110]},{"1851133":[39,1,138,181,7,240,240,5,47,168,255,64,255,160,191]},{"1851149":[255,129,62,66,71,254,254,122,85,87,175,191,95,95,191,252,124,255,62,184,176]},{"1851171":[241]},{"1851173":[170]},{"1851175":[80]},{"1851177":[160,64,64,3,128,65,192,10,69]},{"1851187":[15]},{"1851189":[213,7,168,31,64,31,224,124,3,190,192,2,253,10,95,2,253,30,224,170,80,95,160,191,96,93,161,255,252,245,171,255,61,255,224,165]},{"1851226":[218,128,128,32,75,1,2,1]},{"1851235":[84,2,192,30,1,250,5,127]},{"1851244":[255]},{"1851246":[252,2,254]},{"1851250":[1,170,61]},{"1851254":[234]},{"1851257":[90,138,37]},{"1851261":[95,9,180,240,64,134,152,200,48,149,137,187,55,93,91,255,159,127,126,63,64,63,184,255]},{"1851286":[251,9,113,51,252,89,190,159,255,126,176,143,70,1,200,55,148,98,142,64,7,164,97,32]},{"1851311":[129,16,64,26,160,64]},{"1851318":[9,132,49,140,88,2,158,64,126]},{"1851328":[191,16,164,4,191,148,255,232,255,68,254,177,252,67,122,45,255,16,255,4,255,148,255,232,255,68,255,176,127,64,191,40]},{"1851361":[66,160,91]},{"1851365":[67]},{"1851367":[23]},{"1851369":[191,1,94,131,60,69,154,16]},{"1851378":[164]},{"1851380":[148]},{"1851382":[232]},{"1851384":[64,4,160,16,64,128,32,72,248]},{"1851394":[127,42,253,2,229,17,18,239,140,87,51,239,41,215,239,16,255,42,255]},{"1851414":[186,68,237,16,242,9,192,28,192,62,7,248]},{"1851427":[149,2,253,95,160,255]},{"1851434":[127,128,255]},{"1851438":[255]},{"1851442":[42]},{"1851446":[68]},{"1851448":[16]},{"1851450":[9]},{"1851452":[28]},{"1851454":[62]},{"1851456":[240,239,43,255,5,255,255,175,238,255,235,92,251,213,252,61]},{"1851473":[31]},{"1851475":[255]},{"1851477":[255]},{"1851479":[80,128,17]},{"1851483":[183,128,46]},{"1851487":[195]},{"1851491":[11]},{"1851504":[239]},{"1851506":[43]},{"1851508":[239]},{"1851510":[175]},{"1851512":[127]},{"1851514":[92]},{"1851516":[85]},{"1851518":[60]},{"1851520":[1,255,212,223,91,252,5,243,9,235,138,255,48,255,106,255]},{"1851537":[255,32,212,3,251,12,117,20,235]},{"1851547":[79]},{"1851549":[191]},{"1851551":[127]},{"1851554":[11,223,7,94,6,7]},{"1851561":[8,48,56,64,112,128,192,235]},{"1851570":[223]},{"1851572":[95,1,215]},{"1851576":[201]},{"1851578":[186]},{"1851580":[122]},{"1851582":[254]},{"1851584":[149,191,2,61,170,175,174,255,85,255,170,255,85,255,174,255,64,223,194,194,80,170]},{"1851607":[255]},{"1851609":[255]},{"1851611":[255]},{"1851613":[255]},{"1851615":[255,96,245,255,253,5,175]},{"1851623":[6]},{"1851625":[1]},{"1851627":[40]},{"1851629":[5]},{"1851631":[12,245]},{"1851634":[255,2,175]},{"1851638":[174]},{"1851640":[85]},{"1851642":[170]},{"1851644":[85]},{"1851646":[174]},{"1851648":[127,255,254]},{"1851652":[160,255,247,247,85,255,221,221,85,255,175,255]},{"1851665":[255,255,255]},{"1851669":[160,8,247]},{"1851673":[255,34,221]},{"1851677":[255]},{"1851679":[255]},{"1851681":[127,255,89,95,255]},{"1851687":[119]},{"1851689":[68]},{"1851691":[221]},{"1851693":[1]},{"1851695":[165,127]},{"1851698":[255,166,255]},{"1851702":[247]},{"1851704":[85]},{"1851706":[221]},{"1851708":[85]},{"1851710":[175]},{"1851712":[238,186,235,2,71,184,85,85,118,254,85,85,219,251,117,117,1,170,253,246,71,71,170,85,1,254,170,85,4,251,138,117,84,254,246,255,255,255]},{"1851751":[85]},{"1851753":[38]},{"1851755":[85]},{"1851757":[219]},{"1851759":[117,254]},{"1851762":[255]},{"1851764":[255]},{"1851766":[85]},{"1851768":[118]},{"1851770":[85]},{"1851772":[219]},{"1851774":[117]},{"1851776":[170,221,252,170,245,2,86,1,233,160,67,80,134,162,13,69]},{"1851793":[136,84,170,253,254,175,4,29,169,170,66,69,134,138,5,119,255,170,254,255,254,84,85,73,236,19,27,36,38,64,76,255]},{"1851826":[254,1,254,1,85,2,237,3,91,4,166,24,77,48,80,135,235,20,69,64,128,47,168,128,64]},{"1851852":[170,168,85,84,120,152,192,20,191,122,208,144,87,130,191,5,85,173,170,84,215,191,255,20,122,255,175,191,40,170,64,69,2,167,1,17,191,64,63,192,255]},{"1851894":[191]},{"1851896":[170]},{"1851898":[69]},{"1851900":[175]},{"1851902":[85]},{"1851904":[87,168,245]},{"1851908":[255,69]},{"1851911":[255]},{"1851913":[23]},{"1851915":[43]},{"1851917":[5]},{"1851919":[10,87,87]},{"1851924":[186,69]},{"1851928":[232,104,212,64,250,2,245,1,255,255,245]},{"1851940":[69,255,255,255,23,127,43,107,5,7,10,11,255]},{"1851954":[245,10,255]},{"1851958":[255]},{"1851960":[127]},{"1851962":[107]},{"1851964":[7]},{"1851966":[11]},{"1851968":[255,1,132,42,191,18,175,248]},{"1851977":[255,34,255]},{"1851981":[95]},{"1851983":[175,254,254,42]},{"1851988":[232,82,175,175]},{"1851994":[34,34,160,32,80,16,255,255,174]},{"1852004":[87,250,87,87,255,254,221,221,95,123,175,181,255]},{"1852018":[132,123,191,64,255,168,255]},{"1852026":[255,34,127]},{"1852030":[191]},{"1852032":[254,87,11,180,241,15,254,15,108,145,8,240,12,245,31,226,169,166,180,14,6,2,242,243,108,111,14,11,13,3,23,26,246,255,135,54,249,7,253,254,249,234,252,73,245,239,244,87,255]},{"1852082":[54,200,244]},{"1852086":[255,1,253,1,252]},{"1852092":[253]},{"1852094":[247,8,176,13,206,176,27,65,63,110,255,87,111,191,247,13,159,235,95,104,204,53,157,243,81,192,170,42,68,68,242,242,21,21,249,126,210,229,207,190,46,255,255,253,255,107,255,247,255,158,30,1,252,248,79,64,191,128,253]},{"1852154":[123]},{"1852156":[255]},{"1852158":[254]},{"1852160":[255,42,199,32,5,191,255,239,255,213,221,221,255,247,255,255,85,127,24,71,250,133,16]},{"1852184":[170,128]},{"1852187":[34,170,162,16,16,170,42,248,224,69,186,229,255,213,127,221,221,247,93,255,239,255]},{"1852210":[88,167,122,5,245,10,127]},{"1852218":[221,34,93]},{"1852222":[239]},{"1852224":[207,129,250,39,93,253,255,218,255,98,119,51,251,81,85,84,112,240,5,250,162,93,37,37,157,21,68,136,170,4,1,170,191,176]},{"1852259":[39,93,162,90,208,98,234,17,119,81,251,84,85,207,49,5,216,162,93,127,138,255]},{"1852282":[85,170,251,4,85,170,170,85,187,212,251,255,254,171,255,137,255,107,255,95,127,107,87,2,68,187,4,251,84,84,118,119,148,149,160,1,20,133,253]},{"1852323":[212,255]},{"1852326":[169,2,137,136,65,106,10,255,64,123,170,85,68,43]},{"1852341":[255,252,170,254,1,212,43,170,84,84,170,145,95,31,119,63,95,53,255,31,53,95,171,127,85,123,106,38,145,128,31,128,63,10,32,202,10,52,84,170,106,145,85,127,64,224,119,223,64,234,213,224,21,160,139,128,85,192,42,32,215,128,104,128,127]},{"1852407":[255,202,21,20,235,170,21,145,110,125,255,255,183,255,255,85,255,253,85,223,187,247,93,255,239,130,125]},{"1852435":[255]},{"1852437":[255,170]},{"1852440":[168,168,100,68,162,170,16,16,255]},{"1852451":[183,186,69,170,85,2,85,32,155,8,93]},{"1852463":[239]},{"1852465":[255]},{"1852467":[72]},{"1852469":[186]},{"1852471":[255,170,85,68,187,162,85,16,239,252,254,255,95,255,238,68,228,85,85,187,187,213,213,255,255,3,253]},{"1852499":[255]},{"1852501":[238,170,10]},{"1852512":[254,1]},{"1852515":[95,170,85,177,78,170,85,68,187,42,213]},{"1852527":[255]},{"1852529":[255]},{"1852531":[160]},{"1852533":[170,17,238,170,85,68,187,42,213]},{"1852543":[255,102,102,253,255,251,172,4,4,85,85,185,185,85,85,238,238,17,119,2,255,4,172,170,170]},{"1852570":[2,2]},{"1852576":[238,17]},{"1852579":[253,172,83,81,174,170,85,68,187,170,85,17,238,136,119]},{"1852595":[2]},{"1852597":[172,81,174,170,85,68,187,170,85,17,238,158,122,61,255,202,117,80,112,112,112,80,48,89,25,182,190,1,123,162,223,53,117,142,254,5,117,138,186,36,29,8,62,10,245]},{"1852643":[125,5,234,1,250,138,117,5,250,170,84,73,176]},{"1852657":[107]},{"1852659":[226]},{"1852661":[85,1,238,138,53,5,186,162,29,65,190,136,133,85,255,170,85,4]},{"1852686":[4]},{"1852688":[119,247,170,255,85,85,251,251,85,85,187,187,85,85,170,170,133,88]},{"1852707":[85,85,170]},{"1852711":[174,170,16,68,170,170,84,85,174]},{"1852721":[247]},{"1852723":[170]},{"1852725":[85]},{"1852727":[251,170,85,68,187,170,85,81,170,138,87,64,255,170,85]},{"1852743":[10]},{"1852750":[64]},{"1852752":[119,119,191,255,85,85,255,255,95,95,255,255,95,95,191,191,85,138,4,64,85,170,10,128,160]},{"1852779":[32,160,64,64,200]},{"1852785":[117]},{"1852787":[191]},{"1852789":[85]},{"1852791":[255,160,95]},{"1852795":[255,160,95]},{"1852799":[191,170,127]},{"1852803":[255,170,127,5,175,3,3]},{"1852812":[1,1]},{"1852816":[127,127,255,255,127,127,255,255,255,255,255,255,255,255,255,255,85,170]},{"1852836":[16,170,170,5]},{"1852841":[3]},{"1852845":[1]},{"1852849":[85]},{"1852851":[255]},{"1852853":[85]},{"1852855":[250]},{"1852857":[252]},{"1852859":[255]},{"1852861":[254]},{"1852863":[255,239,255]},{"1852867":[223,146,255,86,254,115,127,200,222,103,111]},{"1852879":[14,159,159,143,223,207,239,239,239,231,255,243,247,243,251,251,255]},{"1852897":[239,32,80]},{"1852901":[178,128,86]},{"1852905":[123,2,204]},{"1852909":[111]},{"1852911":[4]},{"1852913":[16]},{"1852915":[175]},{"1852917":[77]},{"1852919":[169]},{"1852921":[148]},{"1852923":[51]},{"1852925":[144]},{"1852927":[251,255,255,130,56,171,171,247,255,248,248,248,248,72,64,1]},{"1852944":[255,255,255,255,255,255,255,255,253,253,250,250,246,246,254,254]},{"1852961":[255]},{"1852963":[69]},{"1852965":[255]},{"1852967":[255]},{"1852969":[250,5,248,10,73,1,1]},{"1852979":[186]},{"1852983":[8]},{"1852985":[7]},{"1852987":[2]},{"1852989":[181]},{"1852991":[254,181,181,167,21,255,255,64,64,16,16]},{"1853005":[2,66,23,245,245,255,255,255,255,234,234,16,16,170,170,110,68,191,170]},{"1853025":[191,16,93]},{"1853029":[255,4,81,128,127]},{"1853035":[85,40,187,66,85]},{"1853041":[74]},{"1853043":[162]},{"1853047":[187]},{"1853049":[111]},{"1853051":[255]},{"1853053":[253]},{"1853055":[170]},{"1853058":[93,255,244,244,10,30]},{"1853065":[41,42,58,64,226,170,235,24,24,255,255,244,244,157,138,175]},{"1853082":[125,42,255,64,213,171,8,231,162,255]},{"1853093":[255,9,117,134,255,109,213,93,191,148,84]},{"1853105":[247]},{"1853109":[11]},{"1853111":[235]},{"1853113":[214]},{"1853115":[239]},{"1853117":[93,1,190,112,123,200,248,28,28,172,173]},{"1853129":[168,130,186]},{"1853133":[238,128,118,255,113,249,248,63,60,223,173,249]},{"1853146":[126,186,254,236,249,112,132,254,53,251,35,223,210,94,81,255,68,71,17,18,15,137,1,132]},{"1853171":[3]},{"1853173":[195,1,242]},{"1853177":[87,56,197,236,16,240,143,10,245,8,14,2,161,21,107,175,82,85,174,47,80,23,56,90,80,119,14,255,1,244,97,164,2,208,132,228,192,96,48,175]},{"1853218":[113,241,94,252,159,128,255]},{"1853226":[127]},{"1853228":[191]},{"1853230":[223,64,80,165,6,249,1,92,96,138]},{"1853241":[89,128,43,64,27,32,79,255,65,21,138,191,108,87,135,255,21,255,43,255,85,127,63,1,65,244,128,128,44,47,7,31,21,47,43,95,85,191,63,254]},{"1853282":[127,96,255]},{"1853286":[208,40,234,10,212,4,170,10,64,128,1,190,128,107]},{"1853301":[83,7,208,21,224,43,208,85,160,63,64,255,124,255,27,255,23,255,251,255,214,255,238,253,234,254,253,255,124,31,27,63,23,255,251,255,214,255,238,255,232,255,252,128,139,228,4,232,42]},{"1853351":[21]},{"1853353":[175]},{"1853355":[85,2,61,1,22,116,8,27,224,21,194,234,17,80,134,170,68,192,40,232,20,240,95,255,170,254,79,239,190,77,242,176,207,80,239,144,239,255,80,239,170,255,78,255,174,243,76,239,144,236,83,238,145,47,160,80,69,1,186,16,237,191,65,95,160,191,64,127,128,80]},{"1853426":[170,16,68,10,2,172,12,64,16,128,19,64,17,128,7,255,178,237,36,223,138,126]},{"1853449":[244,224,218,64,248,4,252,192,56,236,179,192,59]},{"1853463":[245,192,63,192,255,112,207,184,67,255]},{"1853474":[95,160,255]},{"1853478":[255]},{"1853480":[255]},{"1853482":[63,192,191,64,255]},{"1853488":[56]},{"1853490":[19,160,59]},{"1853494":[244]},{"1853496":[52]},{"1853498":[58,192,136,64,64]},{"1853504":[120,222,244,221,236,159,181,245,72,255,63,209,127,177,255,253,129,38,66,37]},{"1853525":[127,10,245]},{"1853529":[247]},{"1853531":[238,32,206]},{"1853535":[2]},{"1853539":[4]},{"1853541":[12]},{"1853543":[53]},{"1853545":[64]},{"1853552":[92]},{"1853554":[156]},{"1853556":[159]},{"1853558":[181]},{"1853560":[222]},{"1853562":[17]},{"1853564":[145]},{"1853566":[253]},{"1853568":[1,255]},{"1853571":[255]},{"1853573":[255,16,31,5,255,192,255,64,127,16,223]},{"1853585":[255]},{"1853587":[255]},{"1853589":[255,224,16]},{"1853593":[255]},{"1853595":[29]},{"1853597":[191]},{"1853599":[103]},{"1853606":[15,31]},{"1853609":[1]},{"1853616":[127]},{"1853618":[244]},{"1853620":[248]},{"1853622":[31]},{"1853624":[133]},{"1853626":[255]},{"1853628":[127]},{"1853630":[223]},{"1853632":[21,255,170,255,85,255,175,80,118,254,34,255]},{"1853645":[255,10,255]},{"1853649":[255]},{"1853651":[255]},{"1853653":[255,175,175,1,254]},{"1853659":[255]},{"1853661":[255]},{"1853663":[255]},{"1853665":[16]},{"1853667":[42]},{"1853669":[5,255,222]},{"1853673":[118]},{"1853680":[149]},{"1853682":[170]},{"1853684":[85]},{"1853686":[255,33,118]},{"1853690":[34]},{"1853692":[160]},{"1853694":[10]},{"1853696":[21,255,185,253,89,251,234]},{"1853704":[170,170,170,255,84,255,170,255]},{"1853713":[255,2,253,4,251,255,245,85,170]},{"1853723":[255]},{"1853725":[255]},{"1853727":[255]},{"1853729":[20]},{"1853731":[185]},{"1853733":[89,245,223]},{"1853737":[170]},{"1853739":[32]},{"1853741":[84]},{"1853744":[21]},{"1853746":[185]},{"1853748":[89]},{"1853750":[255,32,170]},{"1853754":[170]},{"1853756":[84]},{"1853758":[170]},{"1853760":[85,255,156,220,139,170,191,136,173,170,175,241,78,243,154,235]},{"1853777":[255,35,220,85,170,116,200,85,170,10,249,12,227,20,203]},{"1853793":[68]},{"1853795":[148]},{"1853797":[139,203,252,2,175,12,171,16,94,40,184,85]},{"1853810":[156]},{"1853812":[139]},{"1853814":[255]},{"1853816":[175]},{"1853818":[175]},{"1853820":[94]},{"1853822":[186]},{"1853824":[222,142,181,21,106,42,254,33,170,185,170,255,68,255,170,255,17,158,42,21,85,42,84,33,68,168]},{"1853851":[255]},{"1853853":[255]},{"1853855":[255,80,158,128,36]},{"1853861":[106,171,117,19,187]},{"1853872":[222,32,181,64,106,128,255]},{"1853880":[187]},{"1853882":[170]},{"1853884":[68]},{"1853886":[170]},{"1853888":[238,238,85,85,170,162,174,81]},{"1853897":[81,137,221,68,255,170,255,17,238,170,85,85,163]},{"1853911":[81,174]},{"1853914":[34,221]},{"1853917":[255]},{"1853919":[255]},{"1853921":[170]},{"1853923":[64,8,171,255,81,81,81]},{"1853936":[238]},{"1853938":[85]},{"1853940":[171]},{"1853942":[255]},{"1853944":[81]},{"1853946":[137]},{"1853948":[68]},{"1853950":[170]},{"1853952":[168,128,84]},{"1853957":[17,251]},{"1853961":[127,145,213,85,255,34,119,87,135,171]},{"1853972":[238]},{"1853976":[128]},{"1853978":[42,213]},{"1853981":[255,136,119,40,175,84,84,17,17,251]},{"1853992":[127,127]},{"1853997":[16]},{"1854000":[175]},{"1854002":[84]},{"1854004":[17]},{"1854006":[251,4,127]},{"1854010":[145]},{"1854012":[85]},{"1854014":[34]},{"1854017":[5]},{"1854019":[34]},{"1854021":[31,199,8,21,239,84,84,42,170,85,84,250,18,221,17,224,64,8]},{"1854040":[21,21,171,84,85,170,43,85,5,22,34,17,31,91,207]},{"1854056":[255,250]},{"1854061":[2,129,129,23]},{"1854066":[51]},{"1854068":[95]},{"1854070":[199,56,250]},{"1854074":[84]},{"1854076":[42]},{"1854078":[85]},{"1854080":[23,104,40,215,53,218,24,247,143,112,176,66,136,80,32,192,139,143,52,56,29,25,176,56,191,174,221,160,71,65,255]},{"1854112":[117,237,251,125,235,223,231,48,238,191,130,208,216,73]},{"1854127":[224,247]},{"1854130":[255]},{"1854132":[255]},{"1854134":[48,136,191]},{"1854138":[210,32,217,32,224]},{"1854144":[5,251,2,255,67,189]},{"1854151":[63,255,81]},{"1854155":[175]},{"1854157":[85]},{"1854160":[4,4]},{"1854164":[66,66,200]},{"1854168":[238,234,80,16,170]},{"1854174":[119]},{"1854176":[255,173,255,66,255,227,63,192,251,191,175,16,85]},{"1854190":[136,136,255]},{"1854194":[255]},{"1854196":[255]},{"1854198":[192,8,191]},{"1854202":[191]},{"1854204":[85]},{"1854208":[63,215,187,255,255,125]},{"1854215":[191,255,24]},{"1854219":[255]},{"1854221":[127]},{"1854223":[111,42,42,16,16,170,170,64]},{"1854232":[239,136]},{"1854236":[128]},{"1854238":[16]},{"1854240":[255,189,255,171,255,215,191,64,152,247,255]},{"1854252":[127]},{"1854254":[239,128,253]},{"1854258":[239]},{"1854260":[215]},{"1854262":[64]},{"1854264":[247]},{"1854266":[255]},{"1854268":[127]},{"1854270":[111]},{"1854272":[254,244,213,209,250,242,139,255,238,129,97,253]},{"1854285":[255]},{"1854287":[255,170,161,68,106,170,167]},{"1854295":[139,238,145,65,67]},{"1854304":[244,94,209,149,242,88,255]},{"1854312":[129,111,255,32,255]},{"1854318":[255]},{"1854320":[94,1,149,42,88,5]},{"1854327":[139,110,16,190,2,255]},{"1854334":[255]},{"1854336":[235,64,85,2,169,2,63,255,173,83,215,209,127,251,246,243,170,23,86,169,168,85,128,63,174,85,84,121,124,127,116,126,64,232,2,84,2,168,252,3,80,251,217,134,251]},{"1854382":[251]},{"1854384":[234,21,84,171,168,85]},{"1854391":[188,174]},{"1854394":[140,41,132,3,140,10,191,85,242,167,106,209,255,255,41,86,213,85,186,59,85,85,42,128,80,205,170,21]},{"1854423":[255,41,119,213,255,170,111,85,255,64,63,5,183,17,251,127,128,214,94,85]},{"1854444":[59,129,85]},{"1854448":[42,149,80,42,170,68]},{"1854455":[127,169]},{"1854458":[128,42,144,68]},{"1854463":[170,221,119,170,255,32,159,255,117,241,14,68,84,170,186,81,81,136,42]},{"1854483":[85,32,223]},{"1854487":[117,241,255,68,254,170,255,81,251,34,247,85,255,159,191,117,138,14,14,84,17,186,16,81,4,136,85]},{"1854515":[170,32,64]},{"1854519":[117,241]},{"1854523":[170]},{"1854525":[69]},{"1854527":[170,85,255,170,255,69,255,223,17,16,234]},{"1854539":[1,170,171]},{"1854545":[170]},{"1854547":[85]},{"1854549":[186,32,49,16,250]},{"1854555":[171,170,255]},{"1854559":[170,170,255,85,255,186,255,17,206,239,234,1,85,171,1]},{"1854575":[85]},{"1854577":[85]},{"1854579":[170]},{"1854581":[69]},{"1854583":[49,21]},{"1854587":[170]},{"1854589":[84]},{"1854591":[170,85,255,170,255,84,254,255]},{"1854601":[170]},{"1854603":[157]},{"1854605":[85]},{"1854609":[170]},{"1854611":[85]},{"1854613":[170]},{"1854617":[170]},{"1854619":[191]},{"1854621":[85]},{"1854623":[170,170,255,85,255,171,254]},{"1854631":[255,255,170,157,221,85,255]},{"1854639":[85]},{"1854641":[85]},{"1854643":[170,1,84]},{"1854648":[85]},{"1854651":[34]},{"1854655":[170,29,149,178,178,108,214,239,40,28,148,16,195,24,97,85,34,32,177,8,56,16,146,16,56]},{"1854681":[148,9,203,5,101,73,170,194,188,69,186,131,238]},{"1854695":[255,231,152,230,218,96,250,99,62,66,21,69,130,1,84]},{"1854712":[99,4,37]},{"1854716":[1,4,65,128,17,144,168,168,69,69,247,73,1]},{"1854731":[245]},{"1854733":[255,16,239]},{"1854737":[144,2,170]},{"1854741":[69,73,73]},{"1854746":[36,245,129,255,17,239,239,129,85,2,186]},{"1854759":[247,255,1,219,209,126,126,254,238,110,16,85,170,186,69]},{"1854775":[8,254]},{"1854778":[46]},{"1854780":[129]},{"1854782":[17]},{"1854784":[70]},{"1854786":[21]},{"1854788":[26]},{"1854790":[85,138,6]},{"1854794":[162,231]},{"1854797":[254]},{"1854799":[255,17,17,170,170,69,69,170,170,81,81,5,231,150,254,174,255,238,70,85,191,186,26]},{"1854823":[117,174,6,88,64,105,104,81,81,168,17,64,170,160,69]},{"1854839":[138,168,81,29,162,151]},{"1854846":[174]},{"1854848":[42]},{"1854850":[84]},{"1854852":[170]},{"1854854":[17,139,170]},{"1854858":[174,170,4,174,8,95,85,85,171,171,85,85,239,239,85,85]},{"1854875":[170,170,164,87,95,170,42,84,84,170,170]},{"1854887":[117,170,170,85,4,81,10,160]},{"1854896":[128,85]},{"1854899":[171]},{"1854901":[85]},{"1854903":[138]},{"1854905":[85,81,170,241,4,247,8,160,6,68,7,168,1,16,155,168]},{"1854922":[235,124,64,255,168,255,93,95,189,191,86,87,254,255,85,85,20,104,191,198,87,186,160,163,64,70,168,171]},{"1854951":[117,170,169,131,151]},{"1854957":[57]},{"1854959":[69]},{"1854961":[92]},{"1854963":[185]},{"1854965":[84]},{"1854967":[138]},{"1854969":[84]},{"1854971":[104,134,64,18,168,128,40,193,148,188,134,85,213,5]},{"1854986":[10,159,224,255,32,111,127,85,190,170,198,196,255,255,218,216,245,238,191,171,143,197,130,170,65,213,60,187]},{"1855015":[127,47,199]},{"1855019":[81]},{"1855021":[244,16,106]},{"1855025":[87]},{"1855027":[42]},{"1855029":[69]},{"1855031":[128]},{"1855033":[18,4,170,11]},{"1855038":[5,128]},{"1855041":[133,162,247,16,42,87,127,16,174,128,255]},{"1855053":[255]},{"1855055":[255,175]},{"1855058":[247,162,171]},{"1855062":[255,255,175]},{"1855066":[127,157,255,62,255,255,42,255,162,93,145,255,40,255,17,255]},{"1855083":[98]},{"1855085":[193]},{"1855089":[122]},{"1855091":[170]},{"1855093":[197]},{"1855097":[65,29,128,62]},{"1855102":[255]},{"1855105":[187,128,255,64,127,104,232]},{"1855113":[255,5,250,42,213,5,250,255,3,127,174,191,71,232,232,255,1,255,250,250,208,229,224,68,252]},{"1855139":[81,128,184,148,235]},{"1855145":[254,5]},{"1855148":[47]},{"1855150":[31]},{"1855152":[3,68,46,128,7,192]},{"1855159":[3,1]},{"1855162":[250]},{"1855164":[208,5,224,26,10,245,5,122,43,212]},{"1855175":[5,46,193,85,172,191,96,125,132,218,208,245,112,255,212,215,192,254,192,210,132,144,32,42,4,47]},{"1855202":[143,128,43]},{"1855206":[82,63,63,16,125,2,255]},{"1855214":[253,2,208,37,112,138,212]},{"1855223":[186,192,17,128,41]},{"1855229":[79,40,209,31,128,15,154,135,108,1,14,251,48,85,1,190,25,127,126,48]},{"1855250":[82,26,24,12,255,14,198,48,174,1,88,24,255,126,255,32,205,96,247,16,241,240,255,4,87,170,167,64,1,128]},{"1855281":[175,18,229,8,243,14,240]},{"1855289":[13]},{"1855291":[82,24,167,126]},{"1855296":[255,87,255,63,255,95,87,168,255,23,255,250,255,92,127,104,127,87,127,63,127,95,64]},{"1855320":[191,23,255,250,127,92,255,104,168,40,192,64,160,34,255]},{"1855336":[232,168]},{"1855339":[5,128,47,128,151,87,128,63,128,93,130]},{"1855351":[191,23,64,250]},{"1855356":[80,140,104,128,253,195,250,239,253,102,255,14,253,115,250,71,224,191,232,31,255,193,255,234,255,100,31,14,255,113,255,66,255,160,254,9,2,189,5,90,2,189,241,17,2,189,5,250,31,224,23,232,64,129,160,74,64,36,14,224,64,49]},{"1855419":[66]},{"1855421":[160,1,8]},{"1855425":[255,193,191]},{"1855429":[255,254,187,64,191,19,255,3,255,38,254,240,15,186,196,244,11,255,186,253,2,224,12,192,60,192,25,255]},{"1855458":[127,128,255]},{"1855462":[65,86,191,64,255]},{"1855468":[255]},{"1855470":[255]},{"1855472":[15]},{"1855474":[68,128,11]},{"1855478":[168,18,2]},{"1855482":[12]},{"1855484":[60]},{"1855486":[24]},{"1855489":[220,64,239,1,214,128,255]},{"1855497":[208,160,160]},{"1855502":[128,128,12,243,6,185]},{"1855509":[255,251,132]},{"1855513":[255]},{"1855515":[95]},{"1855517":[255]},{"1855519":[127,255]},{"1855522":[255]},{"1855524":[255]},{"1855526":[127,128,255]},{"1855530":[255]},{"1855532":[255]},{"1855534":[255]},{"1855536":[208]},{"1855538":[169]},{"1855540":[215]},{"1855542":[4,128,208]},{"1855552":[127,169,255,222,95,235,255,246,127,250,255,254,95,251,248,215,168,86,212,33,226,20,80,9,248,5,212,1,250,4]},{"1855583":[47]},{"1855600":[1]},{"1855602":[10]},{"1855604":[9]},{"1855606":[166]},{"1855608":[2]},{"1855610":[42]},{"1855612":[1]},{"1855614":[212]},{"1855616":[240,255,224,235,240,179,240,31,250,159,253,107,224,255,165,245]},{"1855633":[15]},{"1855635":[31]},{"1855637":[79]},{"1855639":[231,128,100]},{"1855643":[150]},{"1855645":[31,10,245]},{"1855663":[165,255]},{"1855666":[233]},{"1855668":[179]},{"1855670":[31]},{"1855672":[31]},{"1855674":[107]},{"1855676":[255]},{"1855678":[165]},{"1855680":[1,255,2,255]},{"1855685":[255]},{"1855687":[255]},{"1855689":[255]},{"1855691":[223]},{"1855693":[255]},{"1855695":[175]},{"1855697":[255]},{"1855699":[255]},{"1855701":[255]},{"1855703":[95]},{"1855705":[255]},{"1855707":[255]},{"1855709":[255,80]},{"1855726":[175,175,169]},{"1855730":[198]},{"1855732":[250]},{"1855734":[245]},{"1855736":[238]},{"1855738":[213]},{"1855740":[170]},{"1855742":[175]},{"1855744":[1,255,42,255,4,254,129,252,7,252,10,253,85,251,142,113]},{"1855761":[255]},{"1855763":[255,1,254,3,253,3,254,2,248,4,245,142,134]},{"1855782":[1]},{"1855784":[2,7,5,15,14,31,247,127,129]},{"1855794":[42]},{"1855796":[132]},{"1855798":[129,1,175]},{"1855802":[15]},{"1855804":[95]},{"1855806":[255,128,56,207,106,47,96,63,168,63,128,255,32,255]},{"1855821":[255,191,96,48,143,208,47,192,191,192,63]},{"1855833":[255]},{"1855835":[255]},{"1855837":[255,191,191,64,120,32,96,128,224]},{"1855847":[128]},{"1855849":[128]},{"1855854":[255,95,120]},{"1855858":[106]},{"1855860":[226]},{"1855862":[168]},{"1855864":[138]},{"1855866":[100]},{"1855870":[223,128]},{"1855873":[255,162,255]},{"1855877":[255]},{"1855879":[255]},{"1855881":[255]},{"1855883":[255]},{"1855885":[255,255]},{"1855889":[255]},{"1855891":[255]},{"1855893":[255]},{"1855895":[255]},{"1855897":[255]},{"1855899":[255]},{"1855901":[255,255,223]},{"1855918":[223,239,8]},{"1855922":[162]},{"1855924":[34]},{"1855928":[170]},{"1855930":[85]},{"1855934":[255,16,1,255,42,255]},{"1855941":[255]},{"1855943":[255]},{"1855945":[255]},{"1855947":[255]},{"1855949":[255,255]},{"1855953":[255]},{"1855955":[255]},{"1855957":[255]},{"1855959":[255]},{"1855961":[255]},{"1855963":[255]},{"1855965":[255,255,85]},{"1855982":[85,255,1]},{"1855986":[42]},{"1855988":[170]},{"1855990":[1]},{"1855992":[174]},{"1855994":[85]},{"1855998":[255]},{"1856000":[1,255,34,255]},{"1856005":[255,10,255,2,253,65,190]},{"1856013":[255,255]},{"1856017":[255]},{"1856019":[255]},{"1856021":[255]},{"1856023":[255]},{"1856025":[255]},{"1856027":[255]},{"1856029":[255,255,80]},{"1856046":[80,255,1]},{"1856050":[34]},{"1856054":[10]},{"1856056":[136]},{"1856062":[255]},{"1856064":[85,252,138,220,2,248,135,240,7,241,14,241,13,243,255]},{"1856080":[2,252,34,220,4,252,4,240,9,241,10,241,8,225,247]},{"1856096":[1]},{"1856099":[2,2,4,11,12,7]},{"1856106":[4,10,22,26,8,247,85]},{"1856114":[138,1,6,1,135]},{"1856120":[134]},{"1856122":[14]},{"1856124":[31]},{"1856126":[255]},{"1856128":[98,170,149,85,144,58]},{"1856135":[117]},{"1856137":[255,42,221]},{"1856141":[186,255]},{"1856144":[149,42,40,21,197,58,128,117]},{"1856153":[255]},{"1856155":[255,69,186,255]},{"1856160":[64,128,194,66]},{"1856165":[128,10,10]},{"1856171":[34]},{"1856175":[255,226]},{"1856178":[213]},{"1856180":[144]},{"1856186":[8]},{"1856190":[255]},{"1856192":[160,161,64,64]},{"1856197":[170,64,80]},{"1856201":[238,128,213,8,170,247,8,94,160,157,64,85,170,37,80,17,238]},{"1856219":[213,85,170,247,8,1]},{"1856226":[34,34]},{"1856230":[138,138]},{"1856234":[42,42]},{"1856238":[8,255,161]},{"1856242":[64]},{"1856246":[64]},{"1856250":[128]},{"1856252":[8]},{"1856254":[247]},{"1856257":[21]},{"1856259":[12,160,160]},{"1856265":[170]},{"1856267":[84]},{"1856270":[85,42,234]},{"1856274":[209,128,95,160,85]},{"1856280":[69,170,1,84,255]},{"1856286":[85,170,21]},{"1856290":[46,162]},{"1856294":[170,170,16,16,170,170]},{"1856302":[42,127,21]},{"1856306":[140]},{"1856308":[160]},{"1856318":[85,128]},{"1856321":[127]},{"1856323":[63]},{"1856325":[21]},{"1856327":[1]},{"1856329":[128]},{"1856334":[85,171,128]},{"1856338":[64]},{"1856340":[234]},{"1856342":[84]},{"1856344":[127,128,85]},{"1856348":[191]},{"1856350":[85,171,127]},{"1856354":[191,128,21]},{"1856358":[171,170]},{"1856362":[170,170,64,64,171,254,127]},{"1856370":[63]},{"1856372":[21]},{"1856374":[1]},{"1856382":[84]},{"1856384":[6,250,13,250,10,93,5,65,15,25,4,11,30,83,85,171,4,6,9,9,168,9,17,9,235,11,84,14,190,22,85,171,251]},{"1856418":[254]},{"1856420":[95,1,231,160,29]},{"1856426":[171,170,83,8,171,254,253,2,245]},{"1856436":[82]},{"1856438":[70,8,22]},{"1856442":[5]},{"1856444":[77]},{"1856446":[84]},{"1856448":[223,255,127,255,29,255]},{"1856455":[85]},{"1856457":[70]},{"1856460":[1,81,85,63,222,222,85,85,29,29]},{"1856472":[168]},{"1856474":[85]},{"1856476":[171,1,85,191,255]},{"1856482":[255]},{"1856484":[255]},{"1856486":[255,170,87,17,170,170,85,4,63,106,33]},{"1856498":[170]},{"1856500":[226]},{"1856502":[85]},{"1856504":[70]},{"1856508":[80]},{"1856510":[64,128,235,235,254,254,239,239,125,125,4,46,20,17,48,24]},{"1856527":[254,234,234,84,84,170,170,85,85,132,4,84,16,178,16]},{"1856543":[254,235,20,254,1,255,16,255,130,127,81,187,170,93,69,254,255,1]},{"1856562":[170]},{"1856564":[69]},{"1856566":[40]},{"1856568":[42]},{"1856570":[1]},{"1856572":[8]},{"1856576":[170,170,234,234,238,238,255,255,234,106,21,85,186,186]},{"1856591":[255,170,170,64,64,186,170,85,85,234,106,21,21,186,186]},{"1856607":[255,170,85,234,21,238,17,255]},{"1856616":[127,21,255,170,255,69,255,255]},{"1856626":[170]},{"1856628":[68]},{"1856630":[170]},{"1856634":[64]},{"1856640":[128,128,170,170,230,230,154,154,170,170,85,85,170,170]},{"1856655":[255,128,128]},{"1856660":[162,162,85,16,191,170,85,85,239,170]},{"1856671":[255,128,127,170,85,230,25,186,101,234,85,255,170,186,85,255,255]},{"1856690":[170]},{"1856692":[68]},{"1856694":[138]},{"1856704":[12,3,140,130,1,19,164,34,164,162,80,80,160,170]},{"1856719":[241]},{"1856721":[3]},{"1856723":[34,4,22,137,10,224,162,209,80,224,170]},{"1856735":[241,19,239,146,79,27,242,166,87,174,87,126,161,174,91,255,241,16]},{"1856754":[144,32,9,4,160,8,8]},{"1856762":[14]},{"1856764":[4]},{"1856766":[14]},{"1856768":[68,17,8,163,85]},{"1856774":[170]},{"1856776":[184,168,34,32,162,162]},{"1856783":[85,68,17,8,163,85]},{"1856790":[170]},{"1856792":[186,168,215]},{"1856796":[170,162,69,16,85,187,171,247,85,170,170,85,184,71,34,221,162,93,186,85,68]},{"1856818":[8]},{"1856820":[85]},{"1856822":[170]},{"1856824":[16]},{"1856826":[34]},{"1856830":[170]},{"1856833":[119,160,11,4,65,168,2,5]},{"1856842":[42]},{"1856847":[21,52,119,168,11,4,65,170,2,133]},{"1856858":[106]},{"1856862":[21]},{"1856864":[67,203,163,87,69,251,168,85,5,250,42,213]},{"1856877":[255,234,21,52]},{"1856882":[168]},{"1856884":[4]},{"1856886":[170]},{"1856888":[5]},{"1856890":[42]},{"1856894":[234]},{"1856897":[255]},{"1856899":[191,2,85,136,34,83]},{"1856906":[171]},{"1856908":[174]},{"1856910":[159]},{"1856912":[159,255,172,191,86,85,170,34,83]},{"1856922":[171]},{"1856924":[174]},{"1856928":[96,96,19,83,3,169,136,85,83,172,171,84,174,81,255,159,159]},{"1856946":[172]},{"1856948":[84]},{"1856950":[170]},{"1856952":[81]},{"1856954":[170]},{"1856956":[4]},{"1856958":[96]},{"1856961":[255]},{"1856963":[255,10,85,23,232,123]},{"1856970":[251]},{"1856972":[174,81,144,19,255,255,253,255,95,85,255,232,251]},{"1856986":[255]},{"1856988":[255,81,60,63]},{"1856994":[2,2,10,160,23]},{"1857000":[123,132,251,4,174]},{"1857006":[64,191,255]},{"1857010":[253]},{"1857012":[85]},{"1857014":[234]},{"1857016":[80]},{"1857018":[170]},{"1857020":[81]},{"1857025":[191,40,239,186,109,201,50,229,2,225,18,162,81,137,194,207,215,223,143,247,113,239,6,247,28,253,4,254,14,58,4]},{"1857057":[120,16,120,130,60,193,52,225,30,225,18,160,91,2,194,135]},{"1857074":[135]},{"1857076":[65]},{"1857078":[138]},{"1857082":[168]},{"1857084":[2]},{"1857086":[61]},{"1857088":[138,117,85,170,191,64,237,2,250,170,224,64,63,67,168,24,255,117,255,170,255,64,252]},{"1857112":[85,170,191,64,124,3,166,230,138]},{"1857122":[85]},{"1857124":[191]},{"1857126":[239,16,250,5,224,31,191,64,129,254,117]},{"1857138":[170]},{"1857140":[64]},{"1857142":[168,3,80]},{"1857146":[160]},{"1857152":[191,72,119,136,250,48,217,17,170,8,5,5,170,160,149,106,181,8,114]},{"1857172":[69,48,174,17,87,8,255,5,87,160,127,34,255]},{"1857186":[255]},{"1857188":[250,5,217,38,170,87]},{"1857195":[250,170,87,149,200]},{"1857201":[66,34,141]},{"1857205":[138,136,64]},{"1857209":[160,5]},{"1857213":[8,34]},{"1857216":[250,144,85,5,171,1,23,23,191,55,95,95,191,191,119,141,5,144,175,5,95,1,255,23,255,55,255,95,255,191,242,133,250,5,80,170,170,94]},{"1857255":[232,136,200]},{"1857259":[160]},{"1857261":[64,127]},{"1857265":[106,5,80,1,160,23]},{"1857272":[55]},{"1857274":[95]},{"1857276":[191]},{"1857278":[128,8,255,87,95,95,255,253,255,254,255,85,255,235,255,212,117,128,255,87,255,95,255,253,255,254,255,85,255,235,255,212,15]},{"1857312":[168,168]},{"1857315":[160]},{"1857317":[2]},{"1857319":[17]},{"1857321":[171]},{"1857323":[21]},{"1857325":[43,245,15,87]},{"1857330":[95]},{"1857332":[253]},{"1857334":[238,16,84,1,234,1,212]},{"1857343":[240,255,48,255,155,253,106,254,171,252,87,254,11,255,5,255,255,63,48,159,155,207,104,239,170,255,84,255,10,255,5,255,255,192,31,96,15,50,141,17,70,11,232,5,244,2,251]},{"1857392":[32,208,144,107,64,24,168,18,20,64,10]},{"1857404":[4,1,255]},{"1857408":[64,191,130,125,4,251,136,247,1,255,4,255,5,255,250,191,255]},{"1857426":[253,2,249,6,246,137,240,14,250,1,240,10,255,186,191,64,127,128,255]},{"1857446":[127,128,255]},{"1857450":[255]},{"1857452":[255]},{"1857454":[5,90]},{"1857458":[2]},{"1857460":[6]},{"1857462":[9,128,14]},{"1857466":[1]},{"1857468":[10]},{"1857470":[160,26,21,253,34,250,20,252,64,248]},{"1857481":[208,104,232,16,212,97,159]},{"1857489":[234,128,93]},{"1857493":[235]},{"1857495":[191]},{"1857497":[255]},{"1857499":[151]},{"1857501":[239,138,116,255]},{"1857506":[255]},{"1857508":[255]},{"1857510":[255]},{"1857512":[255]},{"1857514":[255]},{"1857516":[255]},{"1857518":[255]},{"1857520":[232]},{"1857522":[88]},{"1857524":[232]},{"1857526":[184]},{"1857528":[208]},{"1857530":[128]},{"1857532":[196]},{"1857534":[116]},{"1857536":[2,2]},{"1857540":[2,2,1,1,10,10,5,5,2,2,26,250,2,253]},{"1857555":[255,2,253,1,254,10,245,5,250,2,253,128,101,255]},{"1857570":[255]},{"1857572":[255]},{"1857574":[255]},{"1857576":[255]},{"1857578":[255]},{"1857580":[255]},{"1857582":[255]},{"1857598":[96]},{"1857600":[127,232,47,255,149,255,175,255,21,255,2,255,149,127,82,175,232,23,253]},{"1857620":[127]},{"1857622":[255]},{"1857624":[255]},{"1857626":[255]},{"1857628":[107]},{"1857630":[175]},{"1857650":[2]},{"1857665":[255,255,122,255,170,255,252,119,234,255,247,85,254,175,255]},{"1857681":[255,80,133,170,85,80,3,234,21,213,8,254,1,255]},{"1857712":[250]},{"1857714":[42]},{"1857718":[172]},{"1857722":[34]},{"1857728":[1,255,236,79,238,13,248,1,248,179,248,70,242,187,229,230]},{"1857745":[255]},{"1857747":[179]},{"1857749":[243]},{"1857751":[255,160,78,65,188,164,75,72,23]},{"1857761":[1]},{"1857768":[1,1,2,2]},{"1857773":[2]},{"1857775":[4,1]},{"1857778":[79]},{"1857780":[13]},{"1857784":[17]},{"1857786":[2]},{"1857788":[26]},{"1857790":[164]},{"1857792":[84,238,96,223,160,246,28,185,189,219,127,200,255]},{"1857806":[255,40,17,214,32,239]},{"1857813":[191,64,39]},{"1857817":[230]},{"1857819":[183]},{"1857821":[255]},{"1857823":[215,56,124,48,112,64,224,128,128]},{"1857833":[128]},{"1857840":[124]},{"1857842":[117]},{"1857844":[230]},{"1857846":[153]},{"1857848":[155]},{"1857850":[72]},{"1857854":[40]},{"1857856":[96,234]},{"1857859":[184,2,77,124,128,223,32,254]},{"1857868":[255]},{"1857870":[217,1,21,234]},{"1857875":[255]},{"1857877":[255]},{"1857879":[255]},{"1857881":[255]},{"1857883":[255]},{"1857885":[255,1,254]},{"1857889":[96]},{"1857904":[96]},{"1857906":[152]},{"1857908":[77]},{"1857910":[128]},{"1857912":[32]},{"1857920":[34,170]},{"1857923":[1]},{"1857925":[162,139,64,239,8,229]},{"1857932":[255,2,191,17,85,170]},{"1857939":[255]},{"1857941":[255]},{"1857943":[255,8,247]},{"1857947":[255,2,253,17,238]},{"1857953":[34]},{"1857968":[34]},{"1857970":[1]},{"1857972":[162]},{"1857974":[64]},{"1857985":[170,249]},{"1857988":[248]},{"1857990":[156]},{"1857992":[255,10,23,4,255,10,245,21,85,170]},{"1858003":[255]},{"1858005":[255]},{"1858007":[255,10,245,4,251,10,245,21,234]},{"1858048":[8,136,240,2,2]},{"1858054":[9]},{"1858056":[40,1,27,1,168,169,85,84,119,136]},{"1858067":[255]},{"1858069":[255]},{"1858071":[255]},{"1858073":[255]},{"1858075":[255,168,86,87,169]},{"1858081":[8]},{"1858092":[1,1,1,1,8]},{"1858106":[1]},{"1858108":[1]},{"1858110":[1]},{"1858112":[184,132,57,70,52,72,98,24,105,144,207]},{"1858124":[223,72,151,5,107,160,56,207,48,143,224,79,96,63,224,95,200,247,197,58,52,172,8,56,64,112,80,112,160,224,64,192,192,128]},{"1858159":[128,188]},{"1858162":[56]},{"1858164":[112]},{"1858166":[112]},{"1858168":[224]},{"1858170":[192]},{"1858172":[128]},{"1858174":[128]},{"1858178":[80,175,162,69,69,186,85]},{"1858186":[240,2,89]},{"1858190":[165]},{"1858192":[255]},{"1858195":[255]},{"1858197":[255]},{"1858199":[255]},{"1858201":[255]},{"1858203":[255]},{"1858205":[255]},{"1858207":[255]},{"1858230":[16]},{"1858242":[106,157,2,93,139,36,52,1,169,2,68]},{"1858254":[226,8,255]},{"1858259":[255]},{"1858261":[255]},{"1858263":[255]},{"1858265":[255]},{"1858267":[255]},{"1858269":[255,8,255]},{"1858275":[34]},{"1858279":[138]},{"1858283":[32]},{"1858290":[8]},{"1858305":[17,42,213,4,251,170,85,2,85,122,128,16,69,64,138,238]},{"1858323":[255]},{"1858325":[255]},{"1858327":[255]},{"1858329":[255,128,255,4,255,170,223,17]},{"1858339":[42]},{"1858341":[4]},{"1858343":[170]},{"1858347":[42]},{"1858350":[32]},{"1858352":[17]},{"1858369":[21,160,85,69,186,170,85,17,68,174,80,78,17,246,8,234]},{"1858387":[245]},{"1858389":[255]},{"1858391":[255]},{"1858393":[255]},{"1858395":[255,1,255,8,255,21]},{"1858402":[10,170]},{"1858405":[69]},{"1858407":[170]},{"1858409":[17]},{"1858411":[170]},{"1858413":[68]},{"1858415":[162,21]},{"1858432":[27,87,149,92,93,190,150,93,29,90,154,89,88,25,177,118,187,23,20,221,28,255,52,223,124,219,28,219,61,219,118,247,87,12,62,171,28,65,28,138,24,1,56,162,24,64,56,136,72]},{"1858496":[21,119,152]},{"1858500":[149,42,117]},{"1858504":[117,138,171,84,85,42,170,69,157,21,69,152,64,191,130,117]},{"1858521":[255,16,255]},{"1858525":[255,69,255,119]},{"1858530":[34,186]},{"1858533":[149,8,125]},{"1858537":[117]},{"1858539":[171]},{"1858541":[85]},{"1858543":[170,98]},{"1858560":[127,255,205]},{"1858564":[247]},{"1858566":[244]},{"1858568":[118,136,255]},{"1858572":[5,250,170,85,127,127,16,205,8,247,3,244,1,254]},{"1858587":[255,208,255,85,255,255]},{"1858594":[34,239]},{"1858597":[247,8,252]},{"1858601":[118]},{"1858603":[255]},{"1858605":[5]},{"1858607":[170,128]},{"1858624":[238,110,65]},{"1858628":[167]},{"1858630":[245]},{"1858632":[255]},{"1858634":[255]},{"1858636":[87,168,162,93,239,110,20,65,89,166]},{"1858647":[245]},{"1858649":[255]},{"1858651":[255,168,255,93,255,126,17,170,235]},{"1858661":[166,10,255]},{"1858665":[255]},{"1858667":[255]},{"1858669":[87]},{"1858671":[162]},{"1858688":[234,234,85]},{"1858692":[179]},{"1858694":[85]},{"1858696":[255]},{"1858698":[255]},{"1858700":[255]},{"1858702":[170,85,255,234,21,64,25,162]},{"1858711":[85,1,254]},{"1858715":[255]},{"1858717":[255,85,255,234,21,170,234,68,230,170,255]},{"1858729":[254]},{"1858731":[255]},{"1858733":[255]},{"1858735":[170]},{"1858752":[160,163,80,4,218,6,80,2,248]},{"1858762":[252,6,248]},{"1858766":[252]},{"1858768":[226,161,88,4,122,132,88,2,16,232,44,214,4,248,4,248,165,91,166,173,4,135,162,175]},{"1858793":[239,6,211]},{"1858797":[255]},{"1858799":[251,4]},{"1858802":[2]},{"1858816":[128,128,85,1,255,5,85]},{"1858824":[127]},{"1858826":[95]},{"1858828":[255]},{"1858830":[127]},{"1858832":[128,128,95,1,255,5,85]},{"1858840":[247,8,95]},{"1858844":[213,42,139,116,128,127,161,170,5]},{"1858854":[170,170]},{"1858857":[8,160,160]},{"1858861":[42]},{"1858863":[245]},{"1858882":[84,16,186,16,85,4,255]},{"1858890":[255]},{"1858892":[255]},{"1858894":[255]},{"1858898":[255,16,255,16,95,4,255]},{"1858906":[255]},{"1858908":[85,170,255]},{"1858913":[255,16,171,16,69,164,170]},{"1858925":[170]},{"1858927":[1]},{"1858944":[110,3,64,64,170,8,81]},{"1858952":[255]},{"1858954":[255]},{"1858956":[255]},{"1858958":[255]},{"1858960":[111]},{"1858962":[255,64,255,8,255]},{"1858968":[255]},{"1858970":[255]},{"1858972":[223,32,254,1,108,147,64,191,8,85]},{"1858983":[174]},{"1858989":[32]},{"1858991":[5]},{"1859008":[157,225]},{"1859012":[170]},{"1859014":[81]},{"1859016":[255]},{"1859018":[255,34,255]},{"1859022":[255]},{"1859024":[225,1,255]},{"1859028":[255]},{"1859030":[255]},{"1859032":[255]},{"1859034":[255,34,255]},{"1859038":[255]},{"1859040":[30,253]},{"1859043":[255]},{"1859045":[85]},{"1859047":[174]},{"1859053":[10]},{"1859055":[81]},{"1859066":[34]},{"1859072":[16,56,2,4,169]},{"1859078":[84]},{"1859080":[255,20,255,2,255]},{"1859086":[255]},{"1859088":[99,103,255,7,253,1,255,1,255,20,255,2,255]},{"1859102":[255]},{"1859104":[160,92]},{"1859107":[250,2,85]},{"1859111":[171,1]},{"1859117":[42]},{"1859119":[23,3]},{"1859122":[4]},{"1859128":[20]},{"1859130":[2]},{"1859136":[160,113,129,129,127,149,31,14,63,32,31,162,47,64,255,152,131,146,127,1,127,21,191,14,223,224,191,2,255]},{"1859166":[239,152,14,241]},{"1859171":[254,64,128,192,160,32,203,64,173,32,223,112,7]},{"1859186":[1]},{"1859188":[21]},{"1859190":[14]},{"1859194":[2]},{"1859198":[136]},{"1859200":[234,104,255,191,255,85,255,170,255]},{"1859210":[255,32,253,2,248,5,151,104,255,191,255,85,255,170,255]},{"1859226":[255,32,255]},{"1859230":[255]},{"1859232":[234,23]},{"1859237":[34]},{"1859239":[17]},{"1859241":[255]},{"1859243":[223,2,253,7,248]},{"1859250":[191]},{"1859252":[85]},{"1859254":[170]},{"1859258":[32]},{"1859264":[171,1,255,170,255,64,255,128,245,10,250,5,84,171,136,87,255,1,255,170,255,64,255,128,255]},{"1859290":[255]},{"1859292":[255]},{"1859294":[255]},{"1859296":[170,254]},{"1859299":[85]},{"1859301":[191]},{"1859303":[127,10,245,5,250,171,84,119,136,1]},{"1859314":[170]},{"1859316":[64]},{"1859318":[128]},{"1859328":[255,84,234,21,212,107,232,23]},{"1859337":[255]},{"1859339":[127,42,191,5,127,255,84,255]},{"1859348":[255,64,255]},{"1859352":[255]},{"1859354":[255]},{"1859356":[213]},{"1859358":[248,2,128,171,21,234,43,212,23,232,255]},{"1859370":[255]},{"1859372":[255]},{"1859374":[255]},{"1859376":[84]},{"1859381":[64]},{"1859390":[2]},{"1859392":[253,23]},{"1859395":[255]},{"1859397":[255,5,255,237,255,28,255,185,253,70,254,255,21,255]},{"1859412":[245,10,234,16,16,2,160,67,64,6,128,57,2,252,255]},{"1859428":[255]},{"1859430":[255]},{"1859432":[255]},{"1859434":[255]},{"1859436":[255]},{"1859438":[255]},{"1859440":[1,20]},{"1859444":[10]},{"1859446":[16]},{"1859448":[2]},{"1859450":[67]},{"1859452":[4]},{"1859454":[56]},{"1859456":[198,63,192,250,68,180,32,216,68,124,244,252,80,94,173,175,240,9,224,223,224,27,240,15,24,163,8,3,4,171,2,80,63,192,63,192,191,64,223,32,255]},{"1859498":[255]},{"1859500":[255]},{"1859502":[255]},{"1859504":[9]},{"1859506":[26,192,16]},{"1859510":[8]},{"1859512":[32]},{"1859516":[10]},{"1859520":[80,240]},{"1859524":[2,2,129,129,10,10,5,5,43,43,23,23]},{"1859537":[175]},{"1859539":[255,2,253,1,126,10,245,5,250,43,212,23,232,255]},{"1859554":[255]},{"1859556":[255]},{"1859558":[255]},{"1859560":[255]},{"1859562":[255]},{"1859564":[255]},{"1859566":[255]},{"1859568":[160]},{"1859584":[10,10,85,85,191,191,87,87,191,191,95,95,255,255,126,127,10,245,85,170,191,64,87,168,191,64,95,160,255]},{"1859614":[126,129,255]},{"1859618":[255]},{"1859620":[255]},{"1859622":[255]},{"1859624":[255]},{"1859626":[255]},{"1859628":[255]},{"1859630":[255]},{"1859648":[1]},{"1859650":[2]},{"1859652":[3]},{"1859654":[4]},{"1859656":[5]},{"1859658":[6]},{"1859660":[7]},{"1859662":[8]},{"1859664":[9]},{"1859666":[10]},{"1859668":[11]},{"1859670":[12]},{"1859672":[13]},{"1859674":[14]},{"1859676":[15]},{"1859678":[16]},{"1859680":[17]},{"1859682":[18]},{"1859684":[19]},{"1859686":[20]},{"1859688":[21]},{"1859690":[22]},{"1859692":[23]},{"1859694":[24]},{"1859696":[25]},{"1859698":[26]},{"1859700":[27]},{"1859702":[28]},{"1859704":[29]},{"1859706":[30]},{"1859708":[31]},{"1859710":[32]},{"1859712":[33]},{"1859714":[34]},{"1859716":[35]},{"1859718":[36]},{"1859720":[37]},{"1859722":[38]},{"1859724":[39]},{"1859726":[40]},{"1859728":[41]},{"1859730":[42]},{"1859732":[43]},{"1859734":[44]},{"1859736":[45]},{"1859738":[46]},{"1859740":[47]},{"1859742":[48]},{"1859744":[49]},{"1859746":[50]},{"1859748":[51]},{"1859750":[52]},{"1859752":[53]},{"1859754":[54]},{"1859756":[55]},{"1859758":[56]},{"1859760":[57]},{"1859762":[58]},{"1859764":[59]},{"1859766":[60]},{"1859768":[61]},{"1859770":[62]},{"1859772":[63]},{"1859774":[64]},{"1859776":[65]},{"1859778":[66]},{"1859780":[67]},{"1859782":[68]},{"1859784":[69]},{"1859786":[70]},{"1859788":[71]},{"1859790":[72]},{"1859792":[73]},{"1859794":[74]},{"1859796":[75]},{"1859798":[76]},{"1859800":[77]},{"1859802":[78]},{"1859804":[79]},{"1859806":[80]},{"1859808":[81]},{"1859810":[82]},{"1859812":[83]},{"1859814":[84]},{"1859816":[85]},{"1859818":[86]},{"1859820":[87]},{"1859822":[88]},{"1859824":[89]},{"1859826":[90]},{"1859828":[91]},{"1859830":[92]},{"1859832":[93]},{"1859834":[94]},{"1859836":[95]},{"1859838":[96]},{"1859840":[97]},{"1859842":[98]},{"1859844":[99]},{"1859846":[100]},{"1859848":[101]},{"1859850":[102]},{"1859852":[103]},{"1859854":[104]},{"1859856":[105]},{"1859858":[106]},{"1859860":[107]},{"1859862":[108]},{"1859864":[109]},{"1859866":[110]},{"1859868":[111]},{"1859870":[112]},{"1859872":[113]},{"1859874":[114]},{"1859876":[115]},{"1859878":[116]},{"1859880":[117]},{"1859882":[118]},{"1859884":[119]},{"1859886":[120]},{"1859888":[121]},{"1859890":[122]},{"1859892":[123]},{"1859894":[124]},{"1859896":[125]},{"1859898":[126]},{"1859900":[127]},{"1859902":[128]},{"1859904":[129]},{"1859906":[130]},{"1859908":[131]},{"1859910":[132]},{"1859912":[133]},{"1859914":[134]},{"1859916":[135]},{"1859918":[136]},{"1859920":[137]},{"1859922":[138]},{"1859924":[139]},{"1859926":[140]},{"1859928":[141]},{"1859930":[142]},{"1859932":[143]},{"1859934":[144]},{"1859936":[145]},{"1859938":[146]},{"1859940":[147]},{"1859942":[148]},{"1859944":[149]},{"1859946":[150]},{"1859948":[151]},{"1859950":[152]},{"1859952":[153]},{"1859954":[154]},{"1859956":[155]},{"1859958":[156]},{"1859960":[157]},{"1859962":[158]},{"1859964":[159]},{"1859966":[160]},{"1859968":[161]},{"1859970":[162]},{"1859972":[163]},{"1859974":[164]},{"1859976":[165]},{"1859978":[166]},{"1859980":[167]},{"1859982":[168]},{"1859984":[169]},{"1859986":[170]},{"1859988":[171]},{"1859990":[172]},{"1859992":[173]},{"1859994":[174]},{"1859996":[175]},{"1859998":[176]},{"1860000":[177]},{"1860002":[178]},{"1860004":[179]},{"1860006":[180]},{"1860008":[181]},{"1860010":[182]},{"1860012":[183]},{"1860014":[184]},{"1860016":[185]},{"1860018":[186]},{"1860020":[187]},{"1860022":[188]},{"1860024":[189]},{"1860026":[190]},{"1860028":[191]},{"1860030":[192]},{"1860032":[193]},{"1860034":[194]},{"1860036":[195]},{"1860038":[196]},{"1860040":[197]},{"1860042":[198]},{"1860044":[199]},{"1860046":[200]},{"1860048":[201]},{"1860050":[202]},{"1860052":[203]},{"1860054":[204]},{"1860056":[205]},{"1860058":[206]},{"1860060":[207]},{"1860062":[208]},{"1860064":[209]},{"1860066":[210]},{"1860068":[211]},{"1860070":[212]},{"1860072":[213]},{"1860074":[214]},{"1860076":[215]},{"1860078":[216]},{"1860080":[217]},{"1860082":[218]},{"1860084":[219]},{"1860086":[220]},{"1860088":[221]},{"1860090":[222]},{"1860092":[223]},{"1860094":[224]},{"1860096":[225]},{"1860098":[226]},{"1860100":[227]},{"1860102":[228]},{"1860104":[229]},{"1860106":[230]},{"1860108":[231]},{"1860110":[232]},{"1860112":[233]},{"1860114":[234]},{"1860116":[235]},{"1860118":[236]},{"1860120":[237]},{"1860122":[238]},{"1860124":[239]},{"1860126":[240]},{"1860128":[241]},{"1860130":[242]},{"1860132":[243]},{"1860134":[244]},{"1860136":[245]},{"1860138":[246]},{"1860140":[247]},{"1860142":[248]},{"1860144":[249]},{"1860146":[250]},{"1860148":[251]},{"1860150":[252]},{"1860152":[253]},{"1860154":[254]},{"1860156":[255]},{"1860159":[1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,45,1,46,1,47,1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55,1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63,1,64,1,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95,1,96,1,97,1,98,1,99,1,100,1,101,1,102,1,103,1,104,1,105,1,106,1,107,1,108,1,109,1,110,1,111,1,112,1,113,1,114,1,115,1,116,1,117,1,118,1,119,1,120,1,121,1,122,1,123,1,124,1,125,1,126,1,127,1,128,1,129,1,130,1,131,1,132,1,133,1,134,1,135,1,136,1,137,1,138,1,139,1,140,1,141,1,142,1,143,1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151,1,152,1,153,1,154,1,155,1,156,1,157,1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165,1,166,1,167,1,168,1,169,1,170,1,171,1,172,1,173,1,174,1,175,1,176,1,177,1,178,1,179,1,180,1,181,1,182,1,183,1,184,1,185,1,186,1,187,1,188,1,189,1,190,1,191,1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199,1,200,1,201,1,202,1,203,1,204,1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212,1,213,1,214,1,215,1,216,1,217,1,218,1,219,1,220,1,221,1,222,1,223,1,224,1,225,1,226,1,227,1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235,1,236,1,237,1,238,1,239,1,240,1,241,1,242,1,243,1,244,1,245,1,246,1,247,1,248,1,249,1,250,1,251,1,252,1,253,1,254,1,255,1]},{"1860671":[2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59,2,60,2,61,2,62,2,63,2,64,2,65,2,66,2,67,2,68,2,69,2,70,2,71,2,72,2,73,2,74,2,75,2,76,2,77,2,78,2,79,2,80,2,81,2,82,2,83,2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91,2,92,2,93,2,94,2,95,2,96,2,97,2,98,2,99,2,100,2,101,2,102,2,103,2,104,2,105,2,106,2,107,2,108,2,109,2,110,2,111,2,112,2,113,2,114,2,115,2,116,2,117,2,118,2,119,2,120,2,121,2,122,2,123,2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131,2,132,2,133,2,134,2,135,2,136,2,137,2,138,2,139,2,140,2,141,2,142,2,143,2,144,2,145,2,146,2,147,2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155,2,156,2,157,2,158,2,159,2,160,2,161,2,162,2,163,2,164,2,165,2,166,2,167,2,168,2,169,2,170,2,171,2,172,2,173,2,174,2,175,2,176,2,177,2,178,2,179,2,180,2,181,2,182,2,183,2,184,2,185,2,186,2,187,2,188,2,189,2,190,2,191,2,192,2,193,2,194,2,195,2,196,2,197,2,198,2,199,2,200,2,201,2,202,2,203,2,204,2,205,2,206,2,207,2,208,2,209,2,210,2,211,2,212,2,213,2,214,2,215,2,216,2,217,2,218,2,219,2,220,2,221,2,222,2,223,2,224,2,225,2,226,2,227,2,228,2,229,2,230,2,231,2,232,2,233,2,234,2,235,2,236,2,237,2,238,2,239,2,240,2,241,2,242,2,243,2,244,2,245,2,246,2,247,2,248,2,249,2,250,2,251,2,252,2,253,2,254,2,255,2]},{"1861183":[3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,3,27,3,28,3,29,3,30,3,31,3,32,3,33,3,34,3,35,3,36,3,37,3,38,3,39,3,40,3,41,3,42,3,43,3,44,3,45,3,46,3,47,3,48,3,49,3,50,3,51,3,52,3,53,3,54,3,55,3,56,3,57,3,58,3,59,3,60,3,61,3,62,3,63,3,64,3,65,3,66,3,67,3,68,3,69,3,70,3,71,3,72,3,73,3,74,3,75,3,76,3,77,3,78,3,79,3,80,3,81,3,82,3,83,3,84,3,85,3,86,3,87,3,88,3,89,3,90,3,91,3,92,3,93,3,94,3,95,3,96,3,97,3,98,3,99,3,100,3,101,3,102,3,103,3,104,3,105,3,106,3,107,3,108,3,109,3,110,3,111,3,112,3,113,3,114,3,115,3,116,3,117,3,118,3,119,3,120,3,121,3,122,3,123,3,124,3,125,3,126,3,127,3,128,3,129,3,130,3,131,3,132,3,133,3,134,3,135,3,136,3,137,3,138,3,139,3,140,3,141,3,142,3,143,3,144,3,145,3,146,3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154,3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,162,3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,170,3,171,3,172,3,173,3,174,3,175,3,176,3,177,3,178,3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,194,3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,202,3,203,3,204,3,205,3,206,3,207,3,208,3,209,3,210,3,211,3,212,3,213,3,214,3,215,3,216,3,217,3,218,3,219,3,220,3,221,3,222,3,223,3,224,3,225,3,226,3,227,3,228,3,229,3,230,3,231,3,232,3,233,3,234,3,235,3,236,3,237,3,238,3,239,3,240,3,241,3,242,3,243,3,244,3,245,3,246,3,247,3,248,3,249,3,250,3,251,3,252,3,253,3,254,3,255,3]},{"1861695":[4]},{"1861698":[35,12,33,8,35,16,103,32,132,32,36,12,36,20,69,20,37,24,70,24,166,24,49,90,174,57,100,28,99,20,7,49,50,74,202,52,98,24,99,32,197,40,130,28,65,16,97,24,33,16,65,12,196,36,6,45,99,12,42,41,135,36,166,40,233,56,139,61,106,65,164,40,131,32,230,44,199,32,208,69,100,32,73,65,234,64,41,57,206,69,77,57,7,57,101,44,231,48,50,102,86,102,108,69,195,36,57,107,255,127,222,119,23,95,167,48,186,123,91,111,78,102,71,61,215,94,25,103,181,94,70,20,38,20,139,73,206,97,125,123,57,123,147,94,181,106,38,24,39,32,213,94,169,48,197,48,163,40,200,48,170,48,103,40,102,48,12,65,165,48,178,89,216,94,186,101,129,32,129,28,221,118,61,118,188,105,213,80,46,73,92,110,190,113,62,109,156,104,172,56,137,40,204,52,89,106,126,113,217,92,49,73,40,28,40,40,84,78,118,85,14,65,123,113,40,36,104,36,105,48,110,77,144,61,114,85,80,81,181,89,79,69,108,52,106,48,106,40,105,40,237,56,89,101,172,48,239,64,22,85,52,77,240,68,174,60,188,110,54,89,135,56,236,64,180,76,197,56,231,56,39,73,41,65,174,89,106,73,195,40,195,52,241,72,117,85,206,56,170,60,163,48,176,68,51,85,238,72,202,56,172,64,178,72,232,64,229,64,5,57,52,85,83,89,168,56,88,93,72,73,237,72,76,73,235,72,77,85,43,73,42,65,199,64,41,73,6,65,161,40,108,56,113,89,45,73,74,85,5,49,118,89,116,89,180,101,52,89,170,89,218,113,48,81,107,56,110,60,241,80,242,76,246,96,51,89,48,89,71,69,81,114,117,86,218,122,213,118,85,123,86,114,176,72,238,80,235,80,7,81,178,106,41,48,171,64,173,72,175,72,137,64,174,68,233,72,210,118,165,56,104,56,231,72,150,94,71,77,42,52,106,36,76,44,113,68,178,68,227,64,195,56,5,65,30,123,3,61,111,68,30,119,90,114,217,106,26,107,5,73,191,127,157,123,3,65,89,103,24,95,92,111,190,119,157,119,220,127,125,119,221,119,60,119,94,119,61,123,150,86,126,123,149,86,33,4,26,103,107,64]},{"2064384":[8,226,32,175,205,80,127,240,16,24,105,41,197,188,240,9,133,188,156,16,7,34,48,128,191,40,107,175,205,80,127,208,34,169,16,133,188,194,33,175,91,243,126,34,255,237,27,107,226,48,175,205,80,127,208,11,194,48,175,84,243,126,34,33,238,27,107,218,90,72,139,75,171,194,32,175,91,243,126,41,255]},{"2064466":[170,191,6,236,27,41,255]},{"2064474":[10,105]},{"2064477":[240,133]},{"2064480":[194,16,169,226,1,162,14]},{"2064488":[155,170,165,188,41,255]},{"2064495":[133,2,167]},{"2064499":[159]},{"2064501":[195,126,159]},{"2064505":[197,126,230]},{"2064509":[230]},{"2064511":[232,232,136,16,237,226,48,171,230,21,104,122,250,107]}] \ No newline at end of file diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js deleted file mode 100644 index 43d3d679b..000000000 --- a/resources/assets/js/app.js +++ /dev/null @@ -1,75 +0,0 @@ - -/** - * First we will load all of this project's JavaScript dependencies which - * include Vue and Vue Resource. This gives a great starting point for - * building robust, powerful web applications using Vue and Laravel. - */ -if (process.env.MIX_SENTRY_DSN_PUBLIC) { - var Raven = require('raven-js'); - Raven.config(process.env.MIX_SENTRY_DSN_PUBLIC, { - ignoreUrls: [ - // Chrome extensions - /extensions\//i, - /^chrome:\/\//i, - // Firefox extensions - /^moz-extension:\/\//i, - // AdSense - /pagead2\.googlesyndication\.com/i, - ], - }).install(); -} - -require('./polyfill'); -require('./bootstrap'); - -window.Vue = require('vue'); -window.Multiselect = require('vue-multiselect'); -window.path = require('path'); -window.cStore = require('./store/customizer').default; - -import VTooltip from 'v-tooltip'; -import ToggleButton from 'vue-js-toggle-button'; -import VueTimeago from 'vue-timeago'; -//import Vuex from 'vuex'; -//Vue.use(Vuex); - -window.VueInternationalization = require('vue-i18n').default; -window.Locale = require('./vue-i18n-locales.generated').default; -Vue.use(VueInternationalization); - -window.i18n = new VueInternationalization({ - locale: document.documentElement.lang, - fallbackLocale: 'en', - messages: Locale, -}); - -Vue.use(VTooltip); -Vue.use(ToggleButton); -Vue.use(VueTimeago, { - locale: 'en', // Default locale - locales: { - 'fr': require('date-fns/locale/fr'), - 'de': require('date-fns/locale/de'), - 'es': require('date-fns/locale/es'), - } -}); -Vue.component('vt-rom-info', require('./components/VTRomInfo.vue')); -Vue.component('vt-rom-loader', require('./components/VTRomLoader.vue')); -Vue.component('vt-rom-settings', require('./components/VTRomSettings.vue')); -Vue.component('vt-select', require('./components/VTSelect.vue')); -Vue.component('vt-spoiler', require('./components/VTSpoiler.vue')); -Vue.component('vt-sprite-select', require('./components/VTSpriteSelect.vue')); -Vue.component('vt-text', require('./components/VTText.vue')); -Vue.component('vt-toggle', require('./components/VTToggle.vue')); -Vue.component('Streams', require('./components/Streams')); - -// Views -Vue.component('vt-customizer', require('./views/Customizer.vue')); -Vue.component('vt-enemizer', require('./views/Enemizer.vue')); -Vue.component('vt-entrance-randomizer', require('./views/EntranceRandomizer.vue')); -Vue.component('vt-hash-loader', require('./views/HashLoader.vue')); -Vue.component('vt-item-randomizer', require('./views/ItemRandomizer.vue')); -Vue.component('sprites', require('./views/Sprites.vue')); - -// ignore adsense -Vue.config.ignoredElements = ['ins']; diff --git a/resources/assets/js/components/Customizer/EquipmentSelect.vue b/resources/assets/js/components/Customizer/EquipmentSelect.vue deleted file mode 100644 index 87d3ff558..000000000 --- a/resources/assets/js/components/Customizer/EquipmentSelect.vue +++ /dev/null @@ -1,740 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/Customizer/ItemPool.vue b/resources/assets/js/components/Customizer/ItemPool.vue deleted file mode 100644 index 38e0cafd9..000000000 --- a/resources/assets/js/components/Customizer/ItemPool.vue +++ /dev/null @@ -1,121 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/Customizer/Locations.vue b/resources/assets/js/components/Customizer/Locations.vue deleted file mode 100644 index c7fb67877..000000000 --- a/resources/assets/js/components/Customizer/Locations.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/Customizer/PrizePackPool.vue b/resources/assets/js/components/Customizer/PrizePackPool.vue deleted file mode 100644 index a03dea653..000000000 --- a/resources/assets/js/components/Customizer/PrizePackPool.vue +++ /dev/null @@ -1,112 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/Customizer/PrizePacks.vue b/resources/assets/js/components/Customizer/PrizePacks.vue deleted file mode 100644 index 49b39a1d0..000000000 --- a/resources/assets/js/components/Customizer/PrizePacks.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/Customizer/Settings.vue b/resources/assets/js/components/Customizer/Settings.vue deleted file mode 100644 index 292f5f79d..000000000 --- a/resources/assets/js/components/Customizer/Settings.vue +++ /dev/null @@ -1,242 +0,0 @@ - - - diff --git a/resources/assets/js/components/Select.vue b/resources/assets/js/components/Select.vue deleted file mode 100644 index d54fd94b3..000000000 --- a/resources/assets/js/components/Select.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/Streams.vue b/resources/assets/js/components/Streams.vue deleted file mode 100644 index 7497c7bb1..000000000 --- a/resources/assets/js/components/Streams.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - - diff --git a/resources/assets/js/components/TextField.vue b/resources/assets/js/components/TextField.vue deleted file mode 100644 index acf05d137..000000000 --- a/resources/assets/js/components/TextField.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/Toggle.vue b/resources/assets/js/components/Toggle.vue deleted file mode 100644 index 45a9046c0..000000000 --- a/resources/assets/js/components/Toggle.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/VTRomInfo.vue b/resources/assets/js/components/VTRomInfo.vue deleted file mode 100644 index b93d4c985..000000000 --- a/resources/assets/js/components/VTRomInfo.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - - diff --git a/resources/assets/js/components/VTRomLoader.vue b/resources/assets/js/components/VTRomLoader.vue deleted file mode 100644 index f7dfa2f3b..000000000 --- a/resources/assets/js/components/VTRomLoader.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - diff --git a/resources/assets/js/components/VTRomSettings.vue b/resources/assets/js/components/VTRomSettings.vue deleted file mode 100644 index 6532de232..000000000 --- a/resources/assets/js/components/VTRomSettings.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - - diff --git a/resources/assets/js/components/VTSelect.vue b/resources/assets/js/components/VTSelect.vue deleted file mode 100644 index 0cb44d96b..000000000 --- a/resources/assets/js/components/VTSelect.vue +++ /dev/null @@ -1,111 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/VTSpoiler.vue b/resources/assets/js/components/VTSpoiler.vue deleted file mode 100644 index 32c4c361e..000000000 --- a/resources/assets/js/components/VTSpoiler.vue +++ /dev/null @@ -1,257 +0,0 @@ - - - diff --git a/resources/assets/js/components/VTSpriteSelect.vue b/resources/assets/js/components/VTSpriteSelect.vue deleted file mode 100644 index 7adf0da9b..000000000 --- a/resources/assets/js/components/VTSpriteSelect.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - diff --git a/resources/assets/js/components/VTTab.vue b/resources/assets/js/components/VTTab.vue deleted file mode 100644 index af7f8cd33..000000000 --- a/resources/assets/js/components/VTTab.vue +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/resources/assets/js/components/VTTabs.vue b/resources/assets/js/components/VTTabs.vue deleted file mode 100644 index 67093016d..000000000 --- a/resources/assets/js/components/VTTabs.vue +++ /dev/null @@ -1,72 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/VTText.vue b/resources/assets/js/components/VTText.vue deleted file mode 100644 index 975b58759..000000000 --- a/resources/assets/js/components/VTText.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/VTTextarea.vue b/resources/assets/js/components/VTTextarea.vue deleted file mode 100644 index 691c5a8c4..000000000 --- a/resources/assets/js/components/VTTextarea.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - - - diff --git a/resources/assets/js/components/VTToggle.vue b/resources/assets/js/components/VTToggle.vue deleted file mode 100644 index 5ffaf70fa..000000000 --- a/resources/assets/js/components/VTToggle.vue +++ /dev/null @@ -1,68 +0,0 @@ - - - - - diff --git a/resources/assets/js/polyfill/NodeList.prototype.forEach.js b/resources/assets/js/polyfill/NodeList.prototype.forEach.js deleted file mode 100644 index 0702db780..000000000 --- a/resources/assets/js/polyfill/NodeList.prototype.forEach.js +++ /dev/null @@ -1,8 +0,0 @@ -if (window.NodeList && !NodeList.prototype.forEach) { - NodeList.prototype.forEach = function (callback, thisArg) { - thisArg = thisArg || window; - for (var i = 0; i < this.length; i++) { - callback.call(thisArg, this[i], i, this); - } - }; -} diff --git a/resources/assets/js/polyfill/Promise.prototype.finally.js b/resources/assets/js/polyfill/Promise.prototype.finally.js deleted file mode 100644 index bfa6c82c5..000000000 --- a/resources/assets/js/polyfill/Promise.prototype.finally.js +++ /dev/null @@ -1,46 +0,0 @@ -// from on https://github.com/tc39/proposal-promise-finally/blob/master/polyfill.js -if (typeof Promise !== 'function') { - throw new TypeError('A global Promise is required'); -} - -if (typeof Promise.prototype.finally !== 'function') { - var speciesConstructor = function (O, defaultConstructor) { - if (!O || (typeof O !== 'object' && typeof O !== 'function')) { - throw new TypeError('Assertion failed: Type(O) is not Object'); - } - var C = O.constructor; - if (typeof C === 'undefined') { - return defaultConstructor; - } - if (!C || (typeof C !== 'object' && typeof C !== 'function')) { - throw new TypeError('O.constructor is not an Object'); - } - var S = typeof Symbol === 'function' && typeof Symbol.species === 'symbol' ? C[Symbol.species] : undefined; - if (S == null) { - return defaultConstructor; - } - if (typeof S === 'function' && S.prototype) { - return S; - } - throw new TypeError('no constructor found'); - }; - - var shim = { - finally(onFinally) { - var promise = this; - if (typeof promise !== 'object' || promise === null) { - throw new TypeError('"this" value is not an Object'); - } - var C = speciesConstructor(promise, Promise); // throws if SpeciesConstructor throws - if (typeof onFinally !== 'function') { - return Promise.prototype.then.call(promise, onFinally, onFinally); - } - return Promise.prototype.then.call( - promise, - x => new C(resolve => resolve(onFinally())).then(() => x), - e => new C(resolve => resolve(onFinally())).then(() => { throw e; }) - ); - } - }; - Object.defineProperty(Promise.prototype, 'finally', { configurable: true, writable: true, value: shim.finally }); -} diff --git a/resources/assets/js/polyfill/index.js b/resources/assets/js/polyfill/index.js deleted file mode 100644 index 19c55f969..000000000 --- a/resources/assets/js/polyfill/index.js +++ /dev/null @@ -1,3 +0,0 @@ -require('es6-promise').polyfill(); -require('./NodeList.prototype.forEach'); -require('./Promise.prototype.finally'); diff --git a/resources/assets/js/rom.js b/resources/assets/js/rom.js deleted file mode 100644 index 24db7da60..000000000 --- a/resources/assets/js/rom.js +++ /dev/null @@ -1,377 +0,0 @@ -const SparkMD5 = require('spark-md5'); -const FileSaver = require('file-saver'); - -var ROM = (function(blob, loaded_callback, error_callback) { - var u_array = []; - var arrayBuffer; - var base_patch; - var original_data; - var size = 2; // mb - - var music = { - 0x00:[0xD373B,0xD375B,0xD90F8], - 0x14:[0xDA710,0xDA7A4,0xDA7BB,0xDA7D2], - 0x3C:[0xD5954,0xD653B,0xDA736,0xDA752,0xDA772,0xDA792], - 0x50:[0xD5B47,0xD5B5E], - 0x5A:[0xD4306], - 0x64:[0xD6878,0xD6883,0xD6E48,0xD6E76,0xD6EFB,0xD6F2D,0xDA211,0xDA35B,0xDA37B,0xDA38E, - 0xDA39F,0xDA5C3,0xDA691,0xDA6A8,0xDA6DF], - 0x78:[0xD2349,0xD3F45,0xD42EB,0xD48B9,0xD48FF,0xD543F,0xD5817,0xD5957,0xD5ACB,0xD5AE8, - 0xD5B4A,0xDA5DE,0xDA608,0xDA635,0xDA662,0xDA71F,0xDA7AF,0xDA7C6,0xDA7DD], - 0x82:[0xD2F00,0xDA3D5], - 0xA0:[0xD249C,0xD24CD,0xD2C09,0xD2C53,0xD2CAF,0xD2CEB,0xD2D91,0xD2EE6,0xD38ED,0xD3C91, - 0xD3CD3,0xD3CE8,0xD3F0C,0xD3F82,0xD405F,0xD4139,0xD4198,0xD41D5,0xD41F6,0xD422B,0xD4270, - 0xD42B1,0xD4334,0xD4371,0xD43A6,0xD43DB,0xD441E,0xD4597,0xD4B3C,0xD4BAB,0xD4C03,0xD4C53, - 0xD4C7F,0xD4D9C,0xD5424,0xD65D2,0xD664F,0xD6698,0xD66FF,0xD6985,0xD6C5C,0xD6C6F,0xD6C8E, - 0xD6CB4,0xD6D7D,0xD827D,0xD960C,0xD9828,0xDA233,0xDA3A2,0xDA49E,0xDA72B,0xDA745,0xDA765, - 0xDA785,0xDABF6,0xDAC0D,0xDAEBE,0xDAFAC], - 0xAA:[0xD9A02,0xD9BD6], - 0xB4:[0xD21CD,0xD2279,0xD2E66,0xD2E70,0xD2EAB,0xD3B97,0xD3BAC,0xD3BE8,0xD3C0D,0xD3C39, - 0xD3C68,0xD3C9F,0xD3CBC,0xD401E,0xD4290,0xD443E,0xD456F,0xD47D3,0xD4D43,0xD4DCC,0xD4EBA, - 0xD4F0B,0xD4FE5,0xD5012,0xD54BC,0xD54D5,0xD54F0,0xD5509,0xD57D8,0xD59B9,0xD5A2F,0xD5AEB, - 0xD5E5E,0xD5FE9,0xD658F,0xD674A,0xD6827,0xD69D6,0xD69F5,0xD6A05,0xD6AE9,0xD6DCF,0xD6E20, - 0xD6ECB,0xD71D4,0xD71E6,0xD7203,0xD721E,0xD8724,0xD8732,0xD9652,0xD9698,0xD9CBC,0xD9DC0, - 0xD9E49,0xDAA68,0xDAA77,0xDAA88,0xDAA99,0xDAF04], - 0x8C:[0xD1D28,0xD1D41,0xD1D5C,0xD1D77,0xD1EEE,0xD311D,0xD31D1,0xD4148,0xD5543,0xD5B6F, - 0xD65B3,0xD6760,0xD6B6B,0xD6DF6,0xD6E0D,0xD73A1,0xD814C,0xD825D,0xD82BE,0xD8340,0xD8394, - 0xD842C,0xD8796,0xD8903,0xD892A,0xD91E8,0xD922B,0xD92E0,0xD937E,0xD93C1,0xDA958,0xDA971, - 0xDA98C,0xDA9A7], - 0xC8:[0xD1D92,0xD1DBD,0xD1DEB,0xD1F5D,0xD1F9F,0xD1FBD,0xD1FDC,0xD1FEA,0xD20CA,0xD21BB, - 0xD22C9,0xD2754,0xD284C,0xD2866,0xD2887,0xD28A0,0xD28BA,0xD28DB,0xD28F4,0xD293E,0xD2BF3, - 0xD2C1F,0xD2C69,0xD2CA1,0xD2CC5,0xD2D05,0xD2D73,0xD2DAF,0xD2E3D,0xD2F36,0xD2F46,0xD2F6F, - 0xD2FCF,0xD2FDF,0xD302B,0xD3086,0xD3099,0xD30A5,0xD30CD,0xD30F6,0xD3154,0xD3184,0xD333A, - 0xD33D9,0xD349F,0xD354A,0xD35E5,0xD3624,0xD363C,0xD3672,0xD3691,0xD36B4,0xD36C6,0xD3724, - 0xD3767,0xD38CB,0xD3B1D,0xD3B2F,0xD3B55,0xD3B70,0xD3B81,0xD3BBF,0xD3F65,0xD3FA6,0xD404F, - 0xD4087,0xD417A,0xD41A0,0xD425C,0xD4319,0xD433C,0xD43EF,0xD440C,0xD4452,0xD4494,0xD44B5, - 0xD4512,0xD45D1,0xD45EF,0xD4682,0xD46C3,0xD483C,0xD4848,0xD4855,0xD4862,0xD486F,0xD487C, - 0xD4A1C,0xD4A3B,0xD4A60,0xD4B27,0xD4C7A,0xD4D12,0xD4D81,0xD4E90,0xD4ED6,0xD4EE2,0xD5005, - 0xD502E,0xD503C,0xD5081,0xD51B1,0xD51C7,0xD51CF,0xD51EF,0xD520C,0xD5214,0xD5231,0xD5257, - 0xD526D,0xD5275,0xD52AF,0xD52BD,0xD52CD,0xD52DB,0xD549C,0xD5801,0xD58A4,0xD5A68,0xD5A7F, - 0xD5C12,0xD5D71,0xD5E10,0xD5E9A,0xD5F8B,0xD5FA4,0xD651A,0xD6542,0xD65ED,0xD661D,0xD66D7, - 0xD6776,0xD68BD,0xD68E5,0xD6956,0xD6973,0xD69A8,0xD6A51,0xD6A86,0xD6B96,0xD6C3E,0xD6D4A, - 0xD6E9C,0xD6F80,0xD717E,0xD7190,0xD71B9,0xD811D,0xD8139,0xD816B,0xD818A,0xD819E,0xD81BE, - 0xD829C,0xD82E1,0xD8306,0xD830E,0xD835E,0xD83AB,0xD83CA,0xD83F0,0xD83F8,0xD844B,0xD8479, - 0xD849E,0xD84CB,0xD84EB,0xD84F3,0xD854A,0xD8573,0xD859D,0xD85B4,0xD85CE,0xD862A,0xD8681, - 0xD87E3,0xD87FF,0xD887B,0xD88C6,0xD88E3,0xD8944,0xD897B,0xD8C97,0xD8CA4,0xD8CB3,0xD8CC2, - 0xD8CD1,0xD8D01,0xD917B,0xD918C,0xD919A,0xD91B5,0xD91D0,0xD91DD,0xD9220,0xD9273,0xD9284, - 0xD9292,0xD92AD,0xD92C8,0xD92D5,0xD9311,0xD9322,0xD9330,0xD934B,0xD9366,0xD9373,0xD93B6, - 0xD97A6,0xD97C2,0xD97DC,0xD97FB,0xD9811,0xD98FF,0xD996F,0xD99A8,0xD99D5,0xD9A30,0xD9A4E, - 0xD9A6B,0xD9A88,0xD9AF7,0xD9B1D,0xD9B43,0xD9B7C,0xD9BA9,0xD9C84,0xD9C8D,0xD9CAC,0xD9CE8, - 0xD9CF3,0xD9CFD,0xD9D46,0xDA35E,0xDA37E,0xDA391,0xDA478,0xDA4C3,0xDA4D7,0xDA4F6,0xDA515, - 0xDA6E2,0xDA9C2,0xDA9ED,0xDAA1B,0xDAA57,0xDABAF,0xDABC9,0xDABE2,0xDAC28,0xDAC46,0xDAC63, - 0xDACB8,0xDACEC,0xDAD08,0xDAD25,0xDAD42,0xDAD5F,0xDAE17,0xDAE34,0xDAE51,0xDAF2E,0xDAF55, - 0xDAF6B,0xDAF81,0xDB14F,0xDB16B,0xDB180,0xDB195,0xDB1AA], - 0xD2:[0xD2B88,0xD364A,0xD369F,0xD3747], - 0xDC:[0xD213F,0xD2174,0xD229E,0xD2426,0xD4731,0xD4753,0xD4774,0xD4795,0xD47B6,0xD4AA5, - 0xD4AE4,0xD4B96,0xD4CA5,0xD5477,0xD5A3D,0xD6566,0xD672C,0xD67C0,0xD69B8,0xD6AB1,0xD6C05, - 0xD6DB3,0xD71AB,0xD8E2D,0xD8F0D,0xD94E0,0xD9544,0xD95A8,0xD9982,0xD9B56,0xDA694,0xDA6AB, - 0xDAE88,0xDAEC8,0xDAEE6,0xDB1BF], - 0xE6:[0xD210A,0xD22DC,0xD2447,0xD5A4D,0xD5DDC,0xDA251,0xDA26C], - 0xF0:[0xD945E,0xD967D,0xD96C2,0xD9C95,0xD9EE6,0xDA5C6], - 0xFA:[0xD2047,0xD24C2,0xD24EC,0xD25A4,0xD51A8,0xD51E6,0xD524E,0xD529E,0xD6045,0xD81DE, - 0xD821E,0xD94AA,0xD9A9E,0xD9AE4,0xDA289], - 0xFF:[0xD2085,0xD21C5,0xD5F28] - }; - - var fileReader = new FileReader(); - - fileReader.onload = function() { - arrayBuffer = this.result; - }; - - fileReader.onloadend = function() { - if (typeof arrayBuffer === 'undefined') { - if (error_callback) error_callback(); - return; - } - // Check rom for header and cut it out - if (arrayBuffer.byteLength % 0x400 == 0x200) { - arrayBuffer = arrayBuffer.slice(0x200, arrayBuffer.byteLength); - } - - original_data = arrayBuffer.slice(0); - this.resize(size); - - u_array = new Uint8Array(arrayBuffer); - - if (loaded_callback) loaded_callback(this); - }.bind(this); - - fileReader.readAsArrayBuffer(blob); - - this.checkMD5 = function() { - return SparkMD5.ArrayBuffer.hash(arrayBuffer); - }; - - this.getArrayBuffer = function() { - return arrayBuffer; - }; - - this.getOriginalArrayBuffer = function() { - return original_data; - }; - - this.write = function(seek, bytes) { - if (!Array.isArray(bytes)) { - u_array[seek] = bytes; - return; - } - for (var i = 0; i < bytes.length; i++) { - u_array[seek + i] = bytes[i]; - } - }; - - this.updateChecksum = function() { - return new Promise(function(resolve, reject) { - var sum = u_array.reduce(function(sum, mbyte, i) { - if (i >= 0x7FDC && i < 0x7FE0) { - return sum; - } - return sum + mbyte; - }); - var checksum = (sum + 0x1FE) & 0xFFFF; - var inverse = checksum ^ 0xFFFF; - this.write(0x7FDC, [inverse & 0xFF, inverse >> 8, checksum & 0xFF, checksum >> 8]); - resolve(this); - }.bind(this)); - }.bind(this); - - this.save = function(filename) { - this.updateChecksum().then(function() { - FileSaver.saveAs(new Blob([u_array]), filename); - }); - }; - - this.parseSprGfx = function(spr) { - if ('ZSPR' == String.fromCharCode(spr[0]) + String.fromCharCode(spr[1]) + String.fromCharCode(spr[2]) + String.fromCharCode(spr[3])) { - return this.parseZsprGfx(spr); - } - return new Promise(function(resolve, reject) { - for (var i = 0; i < 0x7000; i++) { - u_array[0x80000 + i] = spr[i]; - } - for (var i = 0; i < 120; i++) { - u_array[0xDD308 + i] = spr[0x7000 + i]; - } - // gloves color - u_array[0xDEDF5] = spr[0x7036]; - u_array[0xDEDF6] = spr[0x7037]; - u_array[0xDEDF7] = spr[0x7054]; - u_array[0xDEDF8] = spr[0x7055]; - resolve(this); - }.bind(this)); - }.bind(this); - - this.parseZsprGfx = function(zspr) { - // we are going to just hope that it's in the proper format O.o - return new Promise(function(resolve, reject) { - var gfx_offset = zspr[12] << 24 | zspr[11] << 16 | zspr[10] << 8 | zspr[9]; - var palette_offset = zspr[18] << 24 | zspr[17] << 16 | zspr[16] << 8 | zspr[15]; - // GFX - for (var i = 0; i < 0x7000; i++) { - u_array[0x80000 + i] = zspr[gfx_offset + i]; - } - // Palettes - for (var i = 0; i < 120; i++) { - u_array[0xDD308 + i] = zspr[palette_offset + i]; - } - // Gloves - for (var i = 0; i < 4; ++i) { - u_array[0xDEDF5 + i] = zspr[palette_offset + 120 + i]; - } - resolve(this); - }.bind(this)); - }.bind(this); - - this.setQuickswap = function(enable) { - return new Promise(function(resolve, reject) { - this.write(0x18004B, enable ? 0x01 : 0x00); - resolve(this); - }.bind(this)); - }.bind(this); - - this.setMusicVolume = function(enable) { - return new Promise(function(resolve, reject) { - for (volume in music) { - for (var i = 0; i < music[volume].length; i++) { - u_array[music[volume][i]] = enable ? volume : 0; - } - } - resolve(this); - }.bind(this)); - }.bind(this); - - this.setMenuSpeed = function(speed) { - return new Promise(function(resolve, reject) { - var fast = false; - switch (speed) { - case 'instant': - this.write(0x180048, 0xE8); - fast = true; - break; - case 'fast': - this.write(0x180048, 0x10); - break; - case 'normal': - default: - this.write(0x180048, 0x08); - break; - case 'slow': - this.write(0x180048, 0x04); - break; - } - this.write(0x6DD9A, fast ? 0x20 : 0x11); - this.write(0x6DF2A, fast ? 0x20 : 0x12); - this.write(0x6E0E9, fast ? 0x20 : 0x12); - resolve(this); - }.bind(this)); - }.bind(this); - - this.setHeartColor = function(color_on) { - return new Promise(function(resolve, reject) { - switch (color_on) { - case 'blue': - byte = 0x2C; - file_byte = 0x0D; - break; - case 'green': - byte = 0x3C; - file_byte = 0x19; - break; - case 'yellow': - byte = 0x28; - file_byte = 0x09; - break; - case 'red': - default: - byte = 0x24; - file_byte = 0x05; - } - this.write(0x6FA1E, byte); - this.write(0x6FA20, byte); - this.write(0x6FA22, byte); - this.write(0x6FA24, byte); - this.write(0x6FA26, byte); - this.write(0x6FA28, byte); - this.write(0x6FA2A, byte); - this.write(0x6FA2C, byte); - this.write(0x6FA2E, byte); - this.write(0x6FA30, byte); - this.write(0x65561, file_byte); - resolve(this); - }.bind(this)); - }.bind(this); - - this.setHeartSpeed = function(speed) { - return new Promise(function(resolve, reject) { - var sbyte = 0x20; - switch (speed) { - case 'off': sbyte = 0x00; break; - case 'half': sbyte = 0x40; break; - case 'quarter': sbyte = 0x80; break; - case 'double': sbyte = 0x10; break; - } - this.write(0x180033, sbyte); - resolve(this); - }.bind(this)); - }.bind(this); - - this.parsePatch = function(data, progressCallback) { - return new Promise(function(resolve, reject) { - this.difficulty = data.difficulty; - this.seed = data.seed; - this.spoiler = data.spoiler; - this.hash = data.hash; - this.generated = data.generated; - if (data.size) { - this.resize(data.size); - } - if (data.spoiler && data.spoiler.meta) { - this.build = data.spoiler.meta.build; - this.goal = data.spoiler.meta.goal; - this.logic = data.spoiler.meta.logic; - this.mode = data.spoiler.meta.mode; - this.name = data.spoiler.meta.name; - this.variation = data.spoiler.meta.variation; - this.weapons = data.spoiler.meta.weapons; - this.shuffle = data.spoiler.meta.shuffle; - this.difficulty_mode = data.spoiler.meta.difficulty_mode; - this.notes = data.spoiler.meta.notes; - this.tournament = data.spoiler.meta.tournament; - this.special = data.spoiler.meta.special; - } - if (data.patch && data.patch.length) { - data.patch.forEach(function(value, index, array) { - if (progressCallback) progressCallback(index / data.patch.length, this); - for (address in value) { - this.write(Number(address), value[address]); - } - }.bind(this)); - } - resolve(this); - }.bind(this)); - }; - - this.setBasePatch = function(patch) { - this.base_patch = patch; - }; - - this.resizeUint8 = function(baseArrayBuffer, newByteSize) { - var resizedArrayBuffer = new ArrayBuffer(newByteSize), - len = baseArrayBuffer.byteLength, - resizeLen = (len > newByteSize)? newByteSize : len; - - (new Uint8Array(resizedArrayBuffer, 0, resizeLen)).set(new Uint8Array(baseArrayBuffer, 0, resizeLen)); - - return resizedArrayBuffer; - }; - - this.resize = function(size) { - switch (size) { - case 4: - arrayBuffer = this.resizeUint8(arrayBuffer, 4194304); - break; - case 2: - arrayBuffer = this.resizeUint8(arrayBuffer, 2097152); - break; - case 1: - default: - size = 1; - arrayBuffer = this.resizeUint8(arrayBuffer, 1048576); - } - u_array = new Uint8Array(arrayBuffer); - this.size = size; - }; - - this.downloadFilename = function() { - return this.name - || 'ALttP - VT_' + this.logic - + '_' + this.difficulty - + '-' + this.mode - + (this.weapons ? '_' + this.weapons : '') - + '-' + this.goal - + (this.variation == 'none' ? '' : '_' + this.variation) - + '_' + this.hash - + (this.special ? '_special' : ''); - }; - - this.reset = function(size) { - return new Promise((resolve, reject) => { - arrayBuffer = original_data.slice(0); - // always reset to 2mb so we can verify MD5 later - this.resize(2); - - if (!this.base_patch) { - reject('base patch not set'); - } - this.parsePatch({patch: this.base_patch}).then((rom) => { - resolve(rom); - }).catch((error) => { - console.log(error, ":("); - reject('sadness'); - }); - }); - }; -}); - -module.exports = ROM; diff --git a/resources/assets/js/store/customizer.js b/resources/assets/js/store/customizer.js deleted file mode 100644 index 792659901..000000000 --- a/resources/assets/js/store/customizer.js +++ /dev/null @@ -1,111 +0,0 @@ -import axios from 'axios'; -import prizePacks from './modules/prizePacks'; -import itemLocations from './modules/itemLocations'; -import context from './modules/context'; -import Vuex from 'vuex'; - -export default new Vuex.Store({ - strict: process.env.NODE_ENV !== 'production', - state: { - settings: { - droppables: [], - items: [], - prizes: [], - }, - randomizer_settings: {}, - sprites: [], - loading: false, - }, - modules: { - prizePacks, - itemLocations, - context, - }, - getters: { - droppableLookup: state => { - // determine if prizePacks is source of truth here. - return state.settings.droppables.reduce((map, obj) => { - map[obj.value] = obj; - return map; - }, {}); - }, - itemLookup: state => { - // determine if itemLocations is source of truth here. - return state.settings.items.concat(state.settings.prizes).reduce((map, obj) => { - map[obj.value] = obj; - return map; - }, {}); - }, - locationLookup: state => { - return state.itemLocations.locations.reduce((map, obj) => { - map[obj.hash] = obj; - return map; - }, {}); - }, - }, - actions: { - nukeStore({commit, dispatch}) { - return Promise.all([ - dispatch('prizePacks/clearStorage'), - dispatch('itemLocations/clearStorage'), - dispatch('context/clearStorage'), - localforage.removeItem('vt.custom.equipment'), - ]); - }, - resetStore({commit, dispatch}) { - commit('setLoading', true); - commit('prizePacks/setPool', this.state.settings.droppables); - commit('itemLocations/setItemPool', this.state.settings); - commit('itemLocations/setLocations', this.state.settings.locations); - - return Promise.all([ - dispatch('prizePacks/initalize', this.state.settings.prizepacks), - dispatch('itemLocations/initalize', this.state.settings.locations), - dispatch('context/initalize'), - ]).then(() => { - console.log('loaded!'); - commit('setLoading', false); - }); - }, - getSprites({commit, dispatch}) { - return axios.get(`/sprites`).then(response => { - var sprites = response.data; - sprites.push({ - author: "none", - file: null, - name: "Random", - }); - commit('updateSprites', sprites); - }); - }, - getItemSettings({commit, dispatch}) { - commit('setLoading', true); - return axios.get(`/randomizer/settings`).then(response => { - commit('updateItemSettings', response.data); - }).then(() => { - commit('setLoading', false); - }); - }, - getSettings({commit, dispatch}) { - commit('setLoading', true); - return axios.get(`/customizer/settings`).then(response => { - commit('updateSettings', response.data); - return dispatch('resetStore'); - }); - }, - }, - mutations: { - updateSettings(state, settings) { - state.settings = settings; - }, - updateItemSettings(state, settings) { - state.randomizer_settings = settings; - }, - updateSprites(state, sprites) { - state.sprites = sprites; - }, - setLoading(state, loading) { - state.loading = loading; - }, - }, -}); diff --git a/resources/assets/js/store/modules/context.js b/resources/assets/js/store/modules/context.js deleted file mode 100644 index 70700eda1..000000000 --- a/resources/assets/js/store/modules/context.js +++ /dev/null @@ -1,78 +0,0 @@ -import localforage from 'localforage'; - -export default { - namespaced: true, - state: { - settings: { - 'item.Goal.Required': '', - 'item.require.Lamp': false, - 'item.value.BlueClock': '', - 'item.value.GreenClock': '', - 'item.value.RedClock': '', - 'item.value.Rupoor': '', - 'prize.crossWorld': true, - 'prize.shuffleCrystals': true, - 'prize.shufflePendants': true, - 'region.bossNormalLocation': true, - 'region.wildBigKeys': false, - 'region.wildCompasses': false, - 'region.wildKeys': false, - 'region.wildMaps': false, - 'rom.compassOnPickup': false, - 'rom.freeItemMenu': false, - 'rom.freeItemText': false, - 'rom.mapOnPickup': false, - 'rom.timerMode': 'off', - 'rom.timerStart': '', - 'rom.rupeeBow': false, - 'rom.genericKeys': false, - 'spoil.BootsLocation': false, - 'spoil.Hints': true, - 'sprite.shuffleOverworldBonkPrizes': false, - }, - initializing: true, - }, - actions: { - clearStorage({commit, dispatch, state}) { - return localforage.removeItem('vt.custom.settings'); - }, - initalize({commit, dispatch, state, rootState, rootGetters}, packs) { - return localforage.getItem('vt.custom.settings').then(value => { - if (value === null) { - localforage.setItem('vt.custom.settings', state.settings); - return; - } - Object.keys(value).forEach(name => { - dispatch('setSetting', { - key: name, - value: value[name], - save: false, - }); - }); - }).then(() => { - return commit('setInitalizing', false); - }); - }, - setSetting({commit, state, getters}, data) { - data = { - save: true, - ...data, - }; - commit('setSetting', data); - if (data.save) { - localforage.setItem('vt.custom.settings', state.settings); - } - }, - }, - mutations: { - setSetting(state, data) { - state.settings[data.key] = data.value; - }, - setSettings(state, settings) { - state.settings = settings; - }, - setInitalizing(state, init) { - state.initializing = init; - }, - }, -}; diff --git a/resources/assets/js/store/modules/itemLocations.js b/resources/assets/js/store/modules/itemLocations.js deleted file mode 100644 index 4d49af8e8..000000000 --- a/resources/assets/js/store/modules/itemLocations.js +++ /dev/null @@ -1,190 +0,0 @@ -import localforage from 'localforage'; - -export default { - namespaced: true, - state: { - pool: { - items: [], - prizes: [], - bottles: [], - medallions: [], - }, - locations: [], - initializing: true, - }, - getters: { - flatItemPool: state => { - return state.pool.items.reduce((map, obj) => { - if (obj.value == 'auto_fill') return map; - map[obj.value] = Number(obj.count); - return map; - }, {}); - }, - flatLocations: state => { - return state.locations.reduce((map, location) => { - if (!location.item || location.item.value == 'auto_fill') return map; - map[location.hash] = location.item.value; - return map; - }, {}); - } - }, - actions: { - clearStorage({commit, dispatch, state}) { - return Promise.all([ - localforage.removeItem('vt.custom.locations'), - localforage.removeItem('vt.custom.items'), - ]); - }, - initalize({commit, dispatch, state, rootState, rootGetters}, locations) { - var commit_locations = []; - state.locations.forEach(location => { - commit_locations.push({ - ...location, - item: rootGetters.itemLookup['auto_fill'], - }); - }); - commit('setLocations', commit_locations); - - return localforage.getItem('vt.custom.locations').then(value => { - if (value === null) { - return; - } - Object.keys(value).forEach(hash => { - dispatch('setLocation', { - item: value[hash], - location: rootGetters.locationLookup[hash], - save: false, - }); - }); - }).then(() => { - return localforage.getItem('vt.custom.items').then(value => { - if (value === null) { - return; - } - - Object.keys(value).forEach(name => { - if (rootGetters.itemLookup[name]) { - // TODO: v3 compat, remove in v5 - var lookupName = name.replace(/^item-count-/); - dispatch('setItemCount', { - item: rootGetters.itemLookup[lookupName], - count: value[name], - save: false, - }); - } - }); - }); - }).then(() => { - return commit('setInitalizing', false); - }); - }, - setLocation({commit, state, rootState, getters, rootGetters}, data) { - data = { - save: true, - lookup: rootGetters.itemLookup, - ...data, - }; - if (rootGetters.itemLookup[data.item]) { - data.item = rootGetters.itemLookup[data.item]; - } - commit('setLocation', data); - if (data.save) { - localforage.setItem('vt.custom.locations', getters.flatLocations); - // setLocation can side affect counts - localforage.setItem('vt.custom.items', getters.flatItemPool); - } - }, - setItemCount({commit, state, getters}, data) { - data = { - save: true, - ...data, - }; - commit('setItemCount', data); - if (data.save) { - localforage.setItem('vt.custom.items', getters.flatItemPool); - } - }, - }, - mutations: { - setLocation(state, data) { - for (var i = 0; i < state.locations.length; ++i) { - if (state.locations[i] == data.location) { - var previous = state.locations[i].item; - break; - } - } - data.location.item = data.item; - - if (data.location.class == 'prizes') { - previous.$isDisabled = false; - data.item.$isDisabled = true; - } - - // we only pool the item type locations - if (data.location.class != 'items') { - return; - } - - previous.placed--; - if (previous.value.indexOf('Bottle') !== -1) { - previous = data.lookup['BottleWithRandom']; - } - if (previous.value.indexOf('Shield') !== -1) { - previous = data.lookup['ProgressiveShield']; - } - if (previous.value.indexOf('Sword') !== -1) { - previous = data.lookup['ProgressiveSword']; - } - if (previous.value.indexOf('Mail') !== -1) { - previous = data.lookup['ProgressiveArmor']; - } - if (previous.hasOwnProperty('count')) { - if (previous.neg_count < 0) { - previous.neg_count++; - } else { - previous.count++; - } - } - - data.item.placed++; - if (data.item.value.indexOf('Bottle') !== -1) { - data.item = data.lookup['BottleWithRandom']; - } - if (data.item.value.indexOf('Shield') !== -1) { - data.item = data.lookup['ProgressiveShield']; - } - if (data.item.value.indexOf('Sword') !== -1) { - data.item = data.lookup['ProgressiveSword']; - } - if (data.item.value.indexOf('Mail') !== -1) { - data.item = data.lookup['ProgressiveArmor']; - } - if (data.item.hasOwnProperty('count')) { - if (data.item.count > 0) { - data.item.count--; - } else { - data.item.neg_count = data.item.neg_count ? data.item.neg_count - 1 : -1; - } - } - }, - setItemCount(state, data) { - state.pool.items.forEach(item => { - if (item === data.item) { - item.count = data.count; - } - }); - }, - setItemPool(state, pool) { - state.pool.items = pool.items; - state.pool.prizes = pool.prizes; - state.pool.bottles = pool.bottles; - state.pool.medallions = pool.medallions; - }, - setLocations(state, locations) { - state.locations = locations; - }, - setInitalizing(state, init) { - state.initializing = init; - }, - }, -}; diff --git a/resources/assets/js/store/modules/prizePacks.js b/resources/assets/js/store/modules/prizePacks.js deleted file mode 100644 index cef58c0aa..000000000 --- a/resources/assets/js/store/modules/prizePacks.js +++ /dev/null @@ -1,141 +0,0 @@ -import localforage from 'localforage'; - -export default { - namespaced: true, - state: { - pool: [], - packs: {}, - flatpacks: {}, - initializing: true, - }, - getters: { - flatPool: state => { - return state.pool.reduce((map, obj) => { - if (obj.value == 'auto_fill') return map; - map[obj.value] = Number(obj.count); - return map; - }, {}); - }, - }, - actions: { - clearStorage({commit, dispatch, state}) { - return Promise.all([ - localforage.removeItem('vt.custom.prizepacks'), - localforage.removeItem('vt.custom.drops'), - ]); - }, - initalize({commit, dispatch, state, rootState, getters, rootGetters}, packs) { - var commit_packs = {}; - var commit_flatpacks = {}; - for (var i = 0; i < packs.length; ++i) { - commit_packs[packs[i].name] = Array(packs[i].slots).fill(rootGetters.droppableLookup['auto_fill']); - commit_flatpacks[packs[i].name] = Array(packs[i].slots).fill('auto_fill'); - } - commit('setPacks', commit_packs); - commit('setFlatPacks', commit_flatpacks); - - return localforage.getItem('vt.custom.prizepacks').then(value => { - if (value === null) { - return; - } - Object.keys(value).forEach(pack => { - value[pack].forEach((item, slot) => { - dispatch('setDrop', { - pack: pack, - slot: slot, - drop: item, - save: false, - }); - }); - }); - }).then(() => { - return localforage.getItem('vt.custom.drops').then(value => { - if (value === null) { - return; - } - - Object.keys(value).forEach(name => { - if (rootGetters.droppableLookup[name]) { - dispatch('setDropCount', { - drop: rootGetters.droppableLookup[name], - count: value[name], - save: false, - }) - } - }); - }) - }).then(() => { - return commit('setInitalizing', false); - }); - }, - setDrop({commit, state, rootState, getters, rootGetters}, data) { - data = { - save: true, - ...data, - }; - if (rootGetters.droppableLookup[data.drop]) { - data.drop = rootGetters.droppableLookup[data.drop]; - } - commit('setDrop', data); - if (data.save) { - localforage.setItem('vt.custom.prizepacks', state.flatpacks); - // setDrop can side affect counts - localforage.setItem('vt.custom.drops', getters.flatPool); - } - }, - setDropCount({commit, state, getters}, data) { - data = { - save: true, - ...data, - }; - commit('setDropCount', data); - if (data.save) { - localforage.setItem('vt.custom.drops', getters.flatPool); - } - }, - }, - mutations: { - setDrop(state, data) { - var previous = state.packs[data.pack][data.slot]; - state.packs[data.pack][data.slot] = data.drop; - state.flatpacks[data.pack][data.slot] = data.drop.value; - - previous.placed--; - if (previous.hasOwnProperty('count')) { - if (previous.neg_count < 0) { - previous.neg_count++; - } else { - previous.count++; - } - } - - data.drop.placed++; - if (data.drop.hasOwnProperty('count')) { - if (data.drop.count > 0) { - data.drop.count--; - } else { - data.drop.neg_count = data.drop.neg_count ? data.drop.neg_count - 1 : -1; - } - } - }, - setDropCount(state, data) { - state.pool.forEach(item => { - if (item === data.drop) { - item.count = data.count; - } - }); - }, - setPool(state, pool) { - state.pool = pool; - }, - setPacks(state, packs) { - state.packs = packs; - }, - setFlatPacks(state, packs) { - state.flatpacks = packs; - }, - setInitalizing(state, init) { - state.initializing = init; - }, - }, -}; diff --git a/resources/assets/js/views/Customizer.vue b/resources/assets/js/views/Customizer.vue deleted file mode 100644 index efe03a9e1..000000000 --- a/resources/assets/js/views/Customizer.vue +++ /dev/null @@ -1,488 +0,0 @@ - - - - - diff --git a/resources/assets/js/views/Enemizer.vue b/resources/assets/js/views/Enemizer.vue deleted file mode 100644 index ca1d3c477..000000000 --- a/resources/assets/js/views/Enemizer.vue +++ /dev/null @@ -1,97 +0,0 @@ - - - diff --git a/resources/assets/js/views/EntranceRandomizer.vue b/resources/assets/js/views/EntranceRandomizer.vue deleted file mode 100644 index 4b2595f58..000000000 --- a/resources/assets/js/views/EntranceRandomizer.vue +++ /dev/null @@ -1,308 +0,0 @@ - - - diff --git a/resources/assets/js/views/HashLoader.vue b/resources/assets/js/views/HashLoader.vue deleted file mode 100644 index a0af778f5..000000000 --- a/resources/assets/js/views/HashLoader.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - diff --git a/resources/assets/js/views/ItemRandomizer.vue b/resources/assets/js/views/ItemRandomizer.vue deleted file mode 100644 index 075f03282..000000000 --- a/resources/assets/js/views/ItemRandomizer.vue +++ /dev/null @@ -1,324 +0,0 @@ - - - diff --git a/resources/assets/js/views/Sprites.vue b/resources/assets/js/views/Sprites.vue deleted file mode 100644 index 460c623b0..000000000 --- a/resources/assets/js/views/Sprites.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - diff --git a/resources/assets/sass/_bootstrap4fixes.scss b/resources/assets/sass/_bootstrap4fixes.scss deleted file mode 100644 index 152dc11dd..000000000 --- a/resources/assets/sass/_bootstrap4fixes.scss +++ /dev/null @@ -1,12 +0,0 @@ -/* Bootstrap Toggle v2.2.2 corrections for Bootsrtap 4*/ -.toggle-off { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.toggle.off { - border-color: rgba(0, 0, 0, .25); -} - -.toggle-handle.btn { - background-color: white; - border: thin rgba(0, 0, 0, .25) solid; -} diff --git a/resources/assets/sass/_loading.scss b/resources/assets/sass/_loading.scss deleted file mode 100644 index dc5287982..000000000 --- a/resources/assets/sass/_loading.scss +++ /dev/null @@ -1,6 +0,0 @@ -.loading { - margin: 0 auto; - width: 250px; - height: 270px; - background-image: url(data:image/gif;base64,R0lGODlh+gAOAfQAAPj4+DiQaPjIILhoIFCQEOhgsIjQ+PCgaHi4IDg4OPDYQPh4AIhYKHiQ+PhwMEDYcOCQUMAYIGiIuCgoyMgwEICA8CgoKP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkI1Q0M0OUE0QjQyNDExRTFBQkUxQzIwMjAzNzczRjRGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkI1Q0M0OUE1QjQyNDExRTFBQkUxQzIwMjAzNzczRjRGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjVDQzQ5QTJCNDI0MTFFMUFCRTFDMjAyMDM3NzNGNEYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjVDQzQ5QTNCNDI0MTFFMUFCRTFDMjAyMDM3NzNGNEYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQJMgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW67e5Z4nECv2xF4vJ0g78vfgFN+e3t5hoeIenZ+gY02fgeRkX4FlZV+fguam5ydnZh9e5CSB4yOpyJ+A6urpKV9lrGys7S1tKOSrKumqI6qupSxoMPExZiyv6y8vcwkybqsANLSuK6TfdPS0NDLzd4pxdCu1dbk3MTf3wnr69kA7PDx8u3Z8efDAfn6+34M/v7d0qmJ526CwYMIEyZ0F++Bw4cQI+4LUAyCRYsBBaIhmC1hhY8gQy6sB0/ixJP6/P9cXHkxo0YzHKd5DElz5LR4CnLq3IkypbE/L1HFlKYQIUN4PVEWi8CUqcugAuex+0m1qgWoWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLbmL16eAzgwjVScT4kKg+h6N0K9ZJ8WJDez6FWoQuMhBywWwJKyxHdLFxkD3reDYAdWnRsGPPMgcstWo4fe7FgebO3TZdvbPptjD8NpJwulzHsUaKtrLOxos0hDiRdTzm2IdPjGg4uoyhwcOLlxbPz3bq/Pr8W/+vu/cV4IvKt0m+ZMT7D6sTY+n+fYr4CNFUk1EksbOTAn4ceKD/fnLwZ5t/NgAo31HsJHXSUk1F0B+EOoBH4TqkyZFhBJoNw2EVIf504oostujiizDGKOOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeVWKV515Q9ZbrnaZpY5xpmJXoIDpmKNpYnAY0A1ORkxlVlGgJh1lDjHmKAACRosow3jyZ9/FsPmcs09eOOer1lCGaCMaiIonhYop2WOiMYh2yUpmkaMpDuyJumloMLm3C6G2shaaJhmGSIyudXWZo+nthqNeL/NGt5wxREZqxy80VrrAOPh6mocSrLW6zTkSOrbrxsGiRwrkmJ3jRyuDNfs/47T5Zcer7pcJ221w1pw3kPXwgieVOiy82EC1vZhYT/rlXviuemiu267cryrXryl1ujheADfBI95+5jkkxzssScvhxLON2GB6+AnMYOgOPjqjQ1PIKBIBArMjsEW5qMSSystDGHGG4NE3zvwHJiggjpRbIHFxOqIcsoVrIzTTi/DrIDMNE+K480p69yyzz8nZVWRGRtdYcgHgzKiydjCM155KY5oJyZUpqtqil56/TVpZZo5NtVlp6322my37fbbcMct99x012333XjnrffefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+v/opJdu+umopx54l4Oz3ndiYWIGKdpSwo6m7HUUU7fthNBJh+5v816ImowNKnSZwt9BfCLGP/mmn5zIOSfudGxtPO0uPg9KnLHnkRknvAM/pPaYcH+793ZYP3u/lPbxaZ/bN8roo7m7X+jFptovCaoFLCp/oMQwHqd0VCkLgCpLmhrGANtHrftZ6lIItMVpHHi8/DVwf3ySTQRrMUEM4q9GnqJgqEZ4C/1FIlcM3E1yREjCFqaKULkIV6dkRapEvfBsP2EVt57zQRrt6oGKwmFVdKhCHtYshcQJFxGFWIwlohBWNBwAa4L1KyoaMYlXLNIPsbgKK/7Gi1KMIvZkZCz/4GQjWRRcVq3GaMEifvGMJiwHNoTDLPYdqYy2okYclUXHNdrRSM9qBQW/NaowkslNxBDHIKVVSPEdKVsOkRk0vPWtGF5xXA5h44og+QBJdgselSSFdgoGEU3Oyz7aihoXB0DJUI5SH9z5o43oVa953CtcBOsJvNojS3NZDWK1/KXH1oGvOOgLYfzq4Yz+FTCAYS1fpEylyPaVMID08kXMbKZ4nmnMaEZyW3GoJi+VKaNsajM43BSXNzsJTguI05rkjFHTHNax+nxMYveR2chack0XzZOeBlkXPvPZzn1ipJ8tItrGnBYx9ECNIn0gWckQyiKFCoihCQBZyAxKMlNGz8aiAzqIQB0KNY4GrWrq6kiAcIZRl/UBaUlT5UltJkyirLRo9WSZgXj2UqQBbaLx9GVKZXLTheZ0Zz47pop+BFKOiRSYMFWqMYDUVJUd9WhJVVpVmFZTADhsXQ+d5jCmRlGaDtWmDxtmAsIK0bFmyKPl7Oq6sqQ18EGHSeZMp1XquglHLimvA8tahrYG11mii4lUCdthETvV4DFWb4ytIN0iq7rKWvaymM2sZjfL2c569rOgDa1oR0va0pr2tKhNrWpXy9rWuva1sI2tbJkRAgAh+QQJBgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6CdgzW6n33BZew6I23eWvH7P5w/pbneCNnwEhoeICIqKiAR9ezmAbIODfiSPeguamo2Ni4yIm5qFiJh5CaiokmuUgnwHsLB8BbS1tremuRa3uKaxsntzEsPDqaitaXwDy8u/B7O80dLT06+/zMt8xNvExgnIdsrY4syrANjoA+bo5Nmm4PAr7elz1s6xfHPp43sQ/v6W4gksweeBQYPz7ilUyM4Ug4cQIwYcSDFXxIsYcwXYuPGgQY4bc1EcCYMPRon9/v+pBLgHpMsAE0nKRMFHgc2bOF+C1AgSp08FLmPOlMlHJ8efSJPmNArz3dCnfCJIldpQl9WreZ5qTYHVwtavYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHkw4yZzCZc0h/mru8GIipDoZ+oSgkUgcih8PiSyZsufPoA4JTdE4kOYW9oDp6YVJlOvXrnNZ3uMs36rTM1I/20ONddc81HLVDtaGmzfcqPdUBW7rt/NHvi0st+DtOHId89DVo71wtx59+9zpWTn6upCEv3QP1+Ns+sXL5oMU3Yk1vPhHQfe8hxTfiMWTJ/HEkUcP5IdJf0vUhFP/VyuR1xJTPpWH4HkPGqXUhT8x1dSBEyLRlYYg0ofJVFJJ2OEPfLhG4ooRPPfIiVt0BeOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGapZQuObdlEZl4yAWaYRZQ2CZlGmMlKky56JcSYSnLWCWWzcXgDnETK6QlofIZmiIklqFlHjjHl4ppkh9AZiihy5uINnoTyN4KhoiA62SeNxLZHnY88eluk7KXHW3OmwGaqpphwasF6eUA6o27Q9EZLm8H5Iup3xW1j3avKYcPqLrIGK6xu03FjnDE1zhPrrG26GN101SELah7TRdcs/1bP8qNHtKn8qGyv5axinzriakutuX04mR0224W6kG1sjMuHg3pMiR4+3L2bLyzuoWTnkgV5dG93C01nEoAMADpkwAcNTPA9BuuHsMJCzsdRV/KaYmAe+9Ur5X8I+4sfSARunK6XBwM4b4P/WKwTxVAqeBODLLOkh4YRSlqlzDbRXLPLL+XssZU8Z8iUgBtdaDKWQLuE4dM2aQjfzliFaHUuK8Ic5x4rRnytLmFGRaLXXzu1ZYqisEhi2W6iKQ9Wbsct99x012333XjnrffefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+v/opJdu+umop666kV1y3vrmr1fuquSzR1475Lc/nnvigsquprou/vFplG0KL4m9wb85PMCbWqqoaGbbsHuQeiaCaSnR1zD9jtUn2iefqr7QO5LdX/r9Z+G7MP6R5RNwPmjpc/n7tG2LQOkmlrp//SGo5qEqH546no8KVapKOW9/huifBf63hwACQkewGlUt7ncqU8kGe+5STauWZ6MIroZUrangqS4IvQx6Z4MCxJEHmTPBAooQNiT8075OaIHtmWeFwAoWraphK3zhig3H6haNcCisAuxQGsK5FQrXEMRjDBFczVBiDotIRV4QC13G0pW0eKUHdPyqimCMTnuwmMX/YmwRRg5bVhireEVmaKOMEtgVGqE4ADWyrSvZcmMDufUN+lULhHfURR7vQx0+eouO81iHfRSpxy6iS2sQRCQdGbkPStZRkv8q0rccGS5JjMuSm3wRm+ionTaoR4rgCc/KWqazrXGykqac4a9SuY9V2iwrH6PjrwjWRkJ2TJTE06UUeTnDfkFkak9KoyyHeQ10/fJkTGIYQoT5MIY8UmIqa2WSpPkAh1UzFmSzQMggOcAKhaQ+9kHahjgmsvol05zr1EXGMGGyZyLvZiKyyjxHdjFsPoScFXNIyNoJtJLlE5pUw8RACQpPg/Yzk0zzZ0ZS8jN4Li1uKQsQRVnWtIPKzy2jEx1PzSDQ0Yfi8mx7EJpVRkpSi/ZkQdrMpR5UqguWljRpMB1aQvOgtKNp7KVJuSjRUqoUqf30KEX16JWK5hOj0hOoSBHqTi2AM6hhyKnAnGpVrZpUoyDznlaxWoiwtraYBvMqYgURWacCUCN9KK0+HVFZdUolsU0lnIGka0T10LVr5rWtrsyDitRWorLdDW2bIGxhv3bYPQyWsGzjm4woN9nVWfaymM2sZjfL2c569rOgDa1oR0va0pr2tKhNrWpXy9rWuva1sI2tbDEXAgAh+QQJBAAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDpxjmiUQqWqqlRp9Mnten9ah2BMLoe/6LSaFi67Bee1fC4PYyklgF5/j9P/gER+LHuFeyWDgYqLSIaOhYyRkk2Ph5OXmEOVj5mdmBagoaKjBKWlCKipqqaspqMJsLCjnrRNpKyqCK25vL2oC8DBwqMHxcWztck+xMYHt62mwtLTo6MF19jZ2sjK3TmjA+Hhzc7Vodro6enmoeLh3N7xNODu9dbqBez67e6G9qLyAvagV08cOXKGmB08po+BQ4fwBEqEsa+gxXAJRZG7+E7UQ4gAJ4pUMeqBSZOjPv+qXLlvFISXMGNGHEkzxqgAOHHuW8mTZ8uQNYNSFJWzqNGcP9kZ3Se0aYqbRRVInUr1aNFRVLMqWKrPqdcS+6zm1EqWrFidXb+qHRWhrdu3/5LKraa2rou5dvPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLVpEoR+XJIu8YChPG0B3Me9u8IXMZtFPNhThr8YzFdM3SJzYBQKTFdV/Zthfjzk14N2+nc+fGgvX70rNTq3D5Wv5rWjCFDEMVRzMXmvVSzrPfw8Z0ui2NzfZJm4uvfL603pcQHBden/n31yq6m5levSiOA+SLk12P3Pr8QNXnhX74YVQIdAfgl9L/R/QJiERJJz0wV4HzNcRggA4qARVSHvXkoU+ixCQiBA1m+MSGaLHz4Yd4mcgFVlUVFeGMD5xlYwBZcSWdiyfqY2NZQE5lY3c8fhfKWxGEdaNYwWFYpBOjSIMkkk3u+KRxcl2p5ZZcdunll2CGKeaYZJZp5plopqnmmmy26eabjsFWg5xwCqLFZyn0UVudXdjRWp5Y0MmnEajtoZoUrFUxaBqijQbHnouu0ehogkZ6RKF6HBpFolZYygSmAGjqAKd4eLqEn4qSQGqlploGKSGb0CZFq2j4Risdshly6xq5QrIrrrH+OoetwqbRqyXFClHlT8MlkOwyy+7T7LMzVKec/y/XlfLKcCXuehwBuezC3HLZAYNgt5Zamy0r5VIjyjbomXquKOu2O5578J1npbzgGfNtK/YOgy986MI5Lzv3JpUvOkTyy49B7bGzcHkEArivp//FBQrFy9bjT4UX35oxyOZ4vEl/EYOisQXJjixOxfy54999JLNMrQgus7fQARmFsnN05qhU8KIV49czKBtxtOBDQw8K4UkTUtiRiheGTOvTKHW4IkhJjSiTk8ViLaHWW8/lNUxNY0zUVWRv7aFLZ5MI9s0oBrCT2yxlebMJdQ+5rI7m7H0BjELKSONJS4qVI9tWC0u4VEYdjnjiRy3OYeO/1h2k36FsznjgeyupeP+QQHIOOt2iUOkj5YAHJzhbU7q1crQNCz546rG3NTvt7Nj+lChS5p7ksr7f0GLxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx37/334Icv/vjkl2/++egDxioM6yffvgvvFx8/C/Mrj2qnKOg5a/j3l5p/oK/yHqhERSrxDVBTBQzfAQ+VwPJN6g31w94D3RDB603QDAE83wVJk0HzbXAMFYzeAlXTwO+NkDMl9F7/8lAI/W2Bf3f60whW1cHtrVBVLQTg/mxYw9gEawQhpNb6iBVE6hErfSg4IhJNoMQl4vBYTmQhFKOYxB9SUYqcuCITrahFETSRil+M4rH00MX/Mc5Gi2YUH+/YMS3urdEcbYyeupCDrWxtKxZpE5lcxFXH69xRFnOj1hzBtZx1/TEBeYzUt8J1rXHxol0HA0XL6NVIXVTSkamAZL+AZjPH7XFd7AqYud6VjdrpMSmgDKUotxOfeHnrk6kkgChHeY5SujJdmyxHKOo1y30sLJFqiqQFeLnKgb0HmGkSZpQEprCJceeWisyleJj5E2c+s3dXk6Y+ElZNa+rrdA5TmcxSVg1vMkwfKzulOCHmL2Oa85vVSGc2H2YRVp6zSibbgzxblTOLbQwf0cqnHvYZTgsoiJTqCGg/CkHQV9KzIDA72Tjb+VBktqmfEa0Eyii6zqlJ/zJ0NLvIz3h2oFzOjGpMC6TaHrrRhRzNAiO9W0oxt9KOFmSkL42phWb6UU+yQ2oG2gOCDhoKoakUlz8Fak6bQVRQGJWmSAXFjKImNZlyraeCFMVU5QJUf1bjqVh9ltioSiGrMsCibBpr21gkl7jJDarzlGqElla2tsYNrQZb2+Wcije2hsKteH1T3eja17z99a5HjasFWlfYt4UIsXD1KShaR9i+Hs93g91pYy9ru76dJVqUTaxkF0s50H6OLsjzLJP+dtrAuulxWzGc5FhnFMulKKyT7FyMciI5k9A2Kru9bSezGoralu6zovDcXlGLuuICtyyms4Byhevai+oVJ5HTPQpsbWs3aI5WtdglHXSRi83mmuNH4jULecEpVty5RXS/jdbr3NsW+NJWviA90lvsyzr8mtcCwovA7t4o2szRd0oDJjBuUws8YQTYv9VbZjAeTLzrSRgYFK5S9zjrRA538cMgDrGIR0ziEpv4xChOsYpXzOIWu/jFMI6xjGdM4xrb+MY4zrGOd8zjHvu4KSEAACH5BAkGABcALAAAAAD6AA4BQAX/4CWOZGmeaKqubOu+cCzPdG3feK7vfO//wKCQQiwaj46kcslkHp9GoXRKrb6OgGwWuRR4v+Bw2GnUbqPWtHq94yrD5rh8Th8vj+y8fn9yJ+F0gYKDAHZKeHyJilJ+DoCEkJCGSYiLlpc+jY+RkmBkRZihojxQRWJgnHGnX6VEo6+wOK1PTbW1s5Wxurt8gry/wJacwcTFLBbIycrLBM3NCNDR0s7UzssJ2NjLxtyYzNTSCNXh5OXQC+jp6ssH7e3b3fFV7O4H39XO6vr7y8sF/wADCoQnr2CQZQMSJqxnr18ygRAjRnSYTGFCggYz8kBosaM/iQUoiqxoMY5HZRpT/1Lh2FEhQ4Zx6L18J5KBTZsYVerEMbKlz4QxlTH8eVHZTZwodyqVseyBU6fLjkqdOnIZhKtYs+ZcyjXHsgBgwY6cSpZs1aRd0/JUFrat27BnKbodqbZujK9tFejdy/dt22V8AyuYK9Ku4RYj/YYVzJixYrGFD0tGsSyC5cuYT8bd3G+yZxqcP4seTbq06dOoU6tezbq169ewY8ueTbu27dsZcbXC7RmLGU2rgnv5RCROLt7GZglPZUb4LOTEgH9hTl2VpztooMOS7qW690LXD2XXPoq7gO/VJzk4Tn57q+Xpgz9vH73MbyNMhAsnTsH4ePpL6VZKHADa5kuBpXHGWf822CBY0D3PTAOOORSes086MtGUjIOvcIbPh81cKOJHANHF4SIZNkSRPpyB5GJIkZ2YCEsL1TPSizj+05NFW8k4ozJEDbCjQoJ0xBCNQqLloyhDBgmUGSkGGdVRPS6pR1NPPcCZkzzWRKWSVvKBF1xGlWWmWcpkpSYEVYZ5yZiQUXTmmaG56Y0ygbmV5Z4PPOZnAHn+BaadP8r1WGOI7uWniYSiqAxmEST2p2IKDtqoo8noAymklW54qUF1firqqKSWauqpqKaq6qqsturqq7DGKisfAkIxazy1PnGrKLna4qt4Au46hH1amKdfeJQQewYowrbxXnDeObdbszqYh17/Hciu9x+1NVh7rRzqscetC95+G0m4246LQrnmEoIus+quwG67grzrSrzy4tcFKvS6m624+JIwb79z2EtBwFfo+wa//RqM8AzKQRvfKvM9DINvxSr8x7Gn8OcfvBZDXOuvv+YacrUjk2yLySdbkSvGWbQMzIEy7zJMzWp0ehaDCeA8hc5V8eyzV5uNQyGIzVzDYJtDQ0hAOEZXaI6I6KTI9MkeIl0N1fwoM1CMMlutjNZcsyhSjjpaarHYyZBdNoZno301vmw7ZHZcaEPEaNhAWnRk3HlL1GSSntaMpGbIuAh0RyZ1WfjQFxzuuEOMB2KkjX0rNPfamfs0eJF+Y06S/+ZqQy65SzO1E1QyqWvokFSbPzx4kKsjMxRRU94UO8JYPrUll0XJ+eXjTSuzZ+5zMsDZmlqVXnwyx5eZvPKbMY/V7lizJWgy0ydvlfVsOg/5CHAGMFb3sG82/jHaT2q+zoRRtL4JgPXVFp9Zuu9XoGQSP3/9irof/pyiv7fwL07ImF8JypeoReEJUfFziAJJICnFJKqBj9mbAiuDmQoWEIEKmiD5HrWpyyAOaFUR4Qk4WMIInBCFYFPhCpWhqRZGSmcyJFpccsjDHvrwh0AMohCHSMQiGvGISEyiEpfIxCY68YlQjKIUp0jFIb4sXVU0wRVB9sReqewWtSKiF7/In/+KBXGMZASWbn4IMwAYi2MC8Nh9uDi/Nr6RY3LMGB3XF7FVREs+0xJhH0/xR4oFcoKDFEMhT2FGBQ7sWw5T4SOvFcnxTZJgWqikzC6JSfB8gT8+4yQmNdkyURKMlCczZcP+hcWHqZJeqAzZK9sVS4vN0ly1dKXGHMGwToKLlXu05S434cvmAPNelhxmL2l5zINJUpnTOWUzZXjLc03zmaWAD3WkVQpqPsuPE2PkIR2pLDdCE46fxE4RPoZMRJbzjsfK47LaSc51zpEI+UFnM9npzB6iMY3aCpYVUwbQZAk0ilssjhmy2IeEEoihJUhofxYK0RnQrKIwuChGXXCzjar/oKMeRQFIqQhDighNiiV1yEmPmDVnVEhrSssG9nDW0giZA6bK4NlMDVe0Cd0UaTHVhvhoOjafQiNqUiMH1+pmgf8V1aUSgmpSlUo1pjo1Llrb2tuq5rWAaNBnNc3qVrn6EK/GEKw9zWqIxkqitMmPqKwTHTLcttUbyW2o8WIqXd9m1xztVFhMXcbdzhI4s76Vp3F1x0gGW5XCluisIQssDdexGce6VYJwRcblFAs4yz6WIidE6+hqxFmKePZroJ1cUzNrASl1VXA6q5wWQsta15YVtp2SbRZoi1jN4u61E4ltSczAW9N1riWfs1zoSutb0vmvtr9NLZGUizrmtla1/zI8HWlnUjsLtE5FrxteAten3QF8t7vfPZ/u8Cq7426Wu1ASSuvUi5Tn9rYfwHuSFqIUXWSkz758ky6X0FsP2/pXvKsdX++gspn8Ei686wXw85ARvbg4mL7Uk7BoKZyl3wEPw38d14K1JD3vVQ98IQ7YiJE3p+WhmL0tKx+L0fdfZIAvfBpmbQQtQGMzfc96KaZb+0DY47L8mHlB5lwydjzj7oWKhzL2UpGfnMPyObBTTIbxhi1QQKBlOccKHvKfvLw9zIoQgHrR0wD79MHF2K9/4z3zAwMYljWzuc2AejMIsytmDFJqzo4pc2dUyEAIZhDQgvlynCdY6MZcGRl+Bo9hktXlQQNe0NGHPiyjReKnS2P6z5reIAkvU+ku45DQo7ZMqfUHND4ng1OcxvP7OuVqZNjQhapN6aB7yMISvlDXWibvZNNx61Y3UbDqKPapmYhsYtvQ2FGkckgXqL5pW/va2M62trfN7W57+9vgDre4x03ucpv73OhOt7rXze52u/vd8I63vOdN73rb20ohAAAh+QQJAwAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8AgrkEkAo7HIrGkbBiez2YTGlUylcikVcjter+kKVWqpJrPZnIxvQW733CdmmjO2u/4PFsd7/v/LGJQeYSFhkd7S4CLjH6CT4eRkgCJDY2XmF5zTlSTk5VNmaKjPI8GdnWeSKmrY22ksLErTXahYWWuapVXRbWvssDBXYXCxcaXk8fKyywWzs/Q0QTT0wjW19jU2tTRCd7e0czimdLa2Ajb5+rr1gvu7/DRB/Pz4eP3X/L0B+Xb1PAAA0aLVqCgwYMI7eFbGCTagIcP9/Eb+AyhxYsXKT6D+FAhw488HHIcSRBjAY0oN/9ytEMSGsiXXkSOhChRoh19NeuhZMCTp0eYQHGknEn04U1oEot2hNbTp8ugUGVEe0CVarSmWLOmjAahq9evP6OKzREtgFmzKbOqVbv16di3QqGdnUv3bFuNdFPC3Ruj7FwFgAMLrjs3muDDCvKi5Mu4RUrCZxFLlgwZ7eLGmFFEi8C5s+eWd0MPzEyahujSqFOrXs26tevXsGPLnk27tu3buHPr3s279yhbLYCfED7rl29mpjahWQ4KFxTix5eZQtVJFaLqrZ4bjw7MFCvr4JkbgM5d1nTw6HeVL+YdO3pV4smvJ3U+O6Tw7inlUjT/WPI54sUH4H6W9OffdijIJwL/LVmooKCBmBED4WqiifaNNxMu1E812ZjDzoftBPQOTjo9kyEsovmj4jQitliSQXqd2AiJE2kEkGgm5XjSZTIuIlNE+6Sk45AFDcVRWD36CI1SAxgJUSEjSfRjk24lOYqTTBqVBY1MXtUUklb6MVVVD4iW5ZE7fVllmID4ZRdTa8XJFjRf1QkBmGxi4qZlGskp52l5kgPNYXSRaegDlSUaAKGFrRmoknhVNtmkgSUa46MzQuNZBI8pClmFjmKa6TMAbbopqCaKyhCgqrbq6quwxirrrLTWauutuOaq66689rrDg7zwNxyCwxbh6w/A3mJsCsmO0OyxgWCRBXH/6UJg/7AN+LIstDZUS0aAzCl3Lbe/OneffafgN0gW6pGbg7jrvodHc9u6ewO858pLnXZ82DtDe/HqK4mA9fr7Qn0CR9KuwTQgnLAhCzMcnLlnPDxwuMRKvCDF31lMCMHCalyctQE/TG/IIrvgcMef5BdxyhOvQSDA4OI7XsYwb9zLtL94K0XEDCLxrL9Ba1Gwzz5jqy3KOWN7cMZFA+Agzk2DIWHVwiSDNRyotnVhAlvH1HVKX4etQ4oesrPiNN1ciKfZF2xIwDnpgPhhi+7Q+HbTaK+tDd4CQZMQj1jrDY3fgN+IEpFFhgqz4c8gnviIizO+t8SQU6T4XYxbdGnhS3IkZf/lnWOEJZWpbj0laM7kOPZILKGZOtxxh17U6VCKHqTtS80O9+qyUwQ7IVHurhJEl6vO+0w50XPUM82XSBFWyad8OpPPO5OUUl72VL3IY1Zl5pm9T6+m72aHbxWcfjp1l51gOU67+mWy375o8Hv1Pd9yNfpM+wDkSv7uJD/akWBPAUgLALUSGgM2o3+eSmDXFKMRB5rAMIOZy6HIFEHCMOpN6HMgBiulwQ1SpYN1+SCfnGHBEiCQUpYa1KQoSJEWHhAliaIUDCvzuRZuxjOdQiEIQWXDEfzQVJxh3di2UsQTHBGJSlwi4ZroRGiUComcGRsVydLALXrxi2AMoxjHSMb/MprxjGhMoxrXyMY2uvGNcIyjHOdIxzracWtDe1AeqYZHPuqMac7y4wWGprGoUYtiNjvkzoQmSHsZsmeIHBC/QvbIgjWtkpSMJMmqcDRpMdKSYUMax8DFyW+Nq4iilBkpT8aJSRYIlRTbV7480bGXOXBl+WlZyWxpQFyWTJez5CXtbOax67iSkDkjZjFZaUGapauYH8MYKGHmTGgWAmSvxFo1rakHaQJSm7Hk5rxOaUOHidOYpcxmC815TmHCjZ3idKfZ4MlNeSZzlL9spzfVeUl8zvKc+lkOMhmmTI8xs4kFtdhBYbnJZyp0Zo28pyqDmcuL7ZKc6wwnutLjMow2/1OTplwlRCd6s2kOE6Q/E+lI6eDRW6LUmdhMmksXabRMkjSRkKQpAAbKLUyqM5UsdaXSeGbSqu2xqFGbWlHnKUg9evIISv3mO5sKtadKjVkRdePV7kiDrXJVBlr7qgvCKlYWkNWOUtRI2eiYVoqsNY1945Da1ta2b+wvbHGd24f8VldwFNCCeQURX6Hxtbs+7nBps0bd7LYOwGXOAoBFLDXolljGYsOxSDEeC0UYGr9tY3KUq8hBepi+znr2H6BdwIsaV0HO3uW0qAXtanfUWuVBT7MWkJxsSTckw3LrsbqdnJAs91fMZZYeKdlcW0o32iny77bIRYlyt8JcGDk3Z/+PjcZ0h1td0mJ3eaPTSHUzghIllvZ4QIqueMc7OI2YF6/LU6LrujY8JLzXts7okuBM8rqVZOG+oEPvTGbbXlDV9wgA/l18gzeQA9+heOrNL4MjK+AoLi93NMFtgiks4aJE7wDZs8CHFei94h62wrprXohHnKYShxC/FmDSh1ccPRK7b7MGvJ5SaEwP/f7vfDieX3nJNwAez8PHzqCeia0HDUONj3w2ZoBvwddkMj35TFGessbod+UsZXnJVH6Gk+3nJ/wNUMvGFbOVyfyn0AyQgC8W8jNoaIEFlplOZwbzc51BZzu3+RlvRjPDENg9PzMQ0HmOsw8huMKBGNrFbQnuI6FbbGhWeRGBMUQVnQXN5Dl3cGyb1jN8PR1BUPuvhk0cIWAKZUJECTEyGRwiZFMtQxKepdWufvWiYt1oKr5whjysNWVOPRpak9osO/yUsBETakWfl89/Abayn5HsRnPaX0H0oA4nk2lUFzHbKdz2sKftbRs+kVM41LUEUeVrTQEx3brWorGdcSp4v1re33Y3Fi3cVlHDGItJZHC/r71nC1wRi/huo3bhAXB0s/uNC39HwxMeR0uXVQUWv7jGN87xjnv84yAPuchHTvKSm/zkKE+5ylfO8pa7/OUwj7nMZ07zmtv85jjPuc53roIQAAAh+QQJBAAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8AgrkEkAo7HIrGkbBiez2YTGlUylcikVcjter+kKVWqpJrPZnIxvQW733CdmmjO2u/4PFsd7/v/LGJQeYSFhkd7S4CLjH6CT4eRkgCJDY2XmF5zTlSTk5VNmaKjPI8GdnWeSKmrY22ksLErTXahYWWuapVXRbWvssDBwjiFw8bHi8XIy38Wzs/Q0dFcyszWb9EE2tvcCN7e3ATS0DnV1+cw0yTjzwvu7uHh3+Dc7+7Z3OzOCfz85ugAV0Q7QJBgtAIIEypcqK+hhYUM9RU0CM2OhIsX+/ELyNFEtAEgQU48cBCiyZMoUf8OnBgSZDSMMDFqTNCx5omPLXGGLNSy5wCeOaH1bGiz6A2dPn9mWTmyYDQ7SUNGg0CVqjqjWGNEe8CVK9IBTcOGHaqPgdmzaK9mXcuiIdq3cBsGmDu3K1e6c4my3ZsjGty00KoKrhoNr+EAavkqlhFNgePHkA/jlYsXsmUFhhMv3oyisOS5l0OLjvwZsT7OqFNEi8CaNVmHsGM7S037hWwLtXPr3s27t+/fwIMLH068uPHjyJMrX868uXNgtlpEPzF91q/nzExtQsMdFC4o1bEvM4WqkypE5luBvy4e+nc05+OrRxO+vSzy8uPvsj/MFKv8nnRnQH38kYLffKfolx7/eusVUeB47w04h4ACbpeLIg8aQyB17I2woQkf0mBHhs39Q6Jwk5y4CD7xaDMPAuHodYOJKmIDTYvbvKjjjvRso1kKKdbYFzQjlZRQQ/YkqWSSDcVI5ERPESKkD0xR9ExKEd12pUoSQVlRFjHNNCUOXxmJkJZojpOlM6/tM5NGY37xVU92VNlUlEhE5VJggv0Ypx9fFfmkWHa2acFbMv4Zh2d03abnAJQ1Cg2i5CjKiFt//RVpXXZldpqlmTQG2W2DDcaoZJb5CSqg0JQWwGiwXuZqoquuKJuruE6mT2usqVorHNEkyeuwEaQ5zq/X3Ibsssw26+yz0EYr7bTUVmvt/7XYZqvttkKEeIuDKXjrYYfc3iCuCB+ee4G65apASxbVaTfhhZZ8awS85Lb7gry6UMidhQ1iqG8OBzIIiYKDZLHfwATPmzCAd3gHLsNDOHwwxOUFLAXFNPi3IMaHVJgvx+FGCPIn9JJsrsknR7Kwyi54/HDLhYg8McwoyHwxzYTYLDDO1vU788kS/wx0zCwjKN9/lKR8dAz8kuHvvxZLePPTOWOB79VRS/HyulojwS7D74r9S9dd83Kv2VdjDeLI9tabddsl0z1jFm4fQ2PesOzNdyNB/j1K4Hwbi5sQfgPNYosvOslOOVJivXg8PFb+jeOzuUB4tokhaQ+OLs4TDv+TN+ajz0yJY9u5PkmCTkDj9dgzeUOoR76tnWYW4PmSvL/TpOnPCPpM6tLiDg2WChmeUkPCO2MRTGJeG6iXWyJvvfWFBvVMTGHCKb1Q2juzpuFajm/om97fDr5UxydPfprmh28B+v1QXOb6IAEVlf57PmOorzibU0vqNKiw4OkIj5pKnyoluHXgDyzUc4ZYrCRBlsiPUo8T3FbsMr0JTvB/k8oUAwAIsw12pYMeHIv8/CJCEqrsVKaJTQL14alnYDBzDRwBpkQIGHYYxi4PqOGxctgCFmZKgaWySqtK40IiiuoxpEqiEp/hqlQxkIgleKJjoihFGBrGis/A4k2gAav/WdGwMqMR4uHE6EAqliZWcHSMGTPIRh3eKle5asiwmpi31fAKhO9zSB1VA41hATKQnxqkR6AhLGK1BpFrVOQMlCXJSlrykpjMpCY3yclOevKToAylKEdJylKa8pSoTKUqV8nKVrqyY3Abl93QFUtazjKH6kpXLcF2S7eVTQtcixDAqhDMXmzNaFj7JQDiJcyqMdOYbEPm05T5TDrQK21x80Uvk9lMoU3tmt2UJhHRFqFvWk1qTlNkwZo2NJQN7WtsXCfT3LkzdhJTnLhMmsESdB6mwVOMw+Rny4omt0EGlGf2POfGAFrOjyE0Y/TZJcV0JtCHQvQMYxsYRS2qh+5k/5Rk6+ToPj8KtJCK9J9YNClHUTpOfYp0pBLl5hocetJ0tnSm3HnpRVla0oa2s6ZU2+Y0q4ZQglbyoDwzqiSRSjOlqtOl85SEP21aR3nS1GUf42kDyYlTc97Ta1SNZzjB6tWvYvOpXVUoRX1G1q+KFZrA/BlXrakxtTVAm/jEGTXPNtaz2nJtcS1oPoX6V8HadV8xbcGIrpXLfDWWsDBYrLUei0/KGpYYeHvl3fKg2c3iobM2IB5ogWS70cZAtKa9wOZSi4LVSs5Y1ChtDg0XW86KkbaIk63bJicP0QFviJ69QwN52w3f+iiRodVtCUuHI8tZDnORXIFrX8hcxjmXR//QfcF0SUbcHF13R9nVnCTKtTp2tA50sNsG6Z4B3WjUzrYDK+84zttc42pjvc5oLzTe+1luGa96Z2Jd7wb8u+MGL4IWQO2z/is+95l3wL0rsDYYnGDlWovC4wsWhHknYXEUkCRfgq+2MHw95XGJHc2rMBK6V7/vHdgp7cOesZbXJRgPD0zQS1+1UAhiAF/vxybJHvu2xz2Z6JhaPM4dkJcc4BcTxFBFNnKLL/zAFDP5ykf6MJSjLIHoUdl/8sswJPURvyG7iX7kfWDuxiybMvfvzOizn5ofyD+f1Pl+dDwantk0QEI86s5zzrPiAs3nnfhZT4AGs5mlMdwH0mkpH07/MVT0hMQp4rBwju4zEuwk6SzM8BmmuuJsq4xgDwr5zYfqIXCdSGobV5BQWr6gqhl921ZT0AKmjvWib0jrv5nQK7ZO4UgOmeojinq30AAij4VdEGLzkI9ydqOkZEjpM07bGbxmIwwdVW0f6sqGs9b2Eq/tkE+PQ43ZrjU7eMhrGAJRjdB+7brZfZZNBeDd3161JY2oKT51cdySiTcW+R0XfyfRi/mOriYJzmspWtoCc7z0vsk4Ktk4HAIIpwsYJS7uZ2zcIRfPOGgqHkZJalFWTLT2yEWjxkqe3DIRl8YX05hwl1Oc5Sn3tsZpTm6bSxtVcYxVzAWuZ4AfJuhCz7m+fzsOGzzmcVe8IvqgY+N0XOkx6sdWd9OrrnRp7DHrAy/kH1fI5qWbXOytIXbZOX72dtjDkY9EJCk1/A6490ruo6S7O+xeLLyfkpKsVQHgA0/4whv+8IhPvOIXz/jGO/7xkI+85CdP+cpb/vKYz7zmN8/5znv+86APvehHT3pShgAAIfkECQQAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94rqdC36u+325ILBqPx6AAGVMyn9CodEqtWq/YrHbL7cKc3hk4TC6zxuYWOs1uu9/w+GudpsvvZvtVj+/7T3wXgX+EhYaHiGUWi4sEjo+QCJKSkASMl4yJmneYlZWToKGilJCYm6dMmAerq5gFr6+YmAu0tba3t7KXlaqsB6aowS6YA8XFvr+XsMvMzc7Pzr2sxsXAUgDY2drb28JGxNSuy7rk5eayzODG1iIJ7u/wKtzz9PXeWerUxtvSyK2X2/TpY2cCXgIJCBHWWwjgXiFz+pD18zdxYDkVBhNq3JjQoENOlxiIFIkpgMmTKCH/Clx3jtHIlzBHEizh8eMhczBLotz5oKfPn0CB7hyashyEo0dtKr2ACelRTAqiRiVKlWdQn1UDSI1KcObSjy0ZZd1KtizZrOa+qn2BKYJbt+ayoi33Fu6ltXhhhN3Ll1zev4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLlyySUDBKj2Qfmz6CXbuYyOrSV0mxQm2aiOk+Q1aRfF2oN+wnt07Jr6959p7NnIr6F8BadG1Dx4Yr73kWOt5OnR6Oih+K1nLmbruVuPYcOqlKuXaUuWr8yURy0ccoXnTcnsfr4J/kGtGd0vr79aJeQWcw0haG9yvHFt9BK+9Sz3yIHWkAT/zwcaeTfg928x1Q5Efky0XyL6BeOeChk1GCDNUk4zCVCFcVIhf6kqCFLLsUkk3sFMahRiCKygImLL4qFUoknxbXjTzvd+FJTTtWYSjk5XZLVVUzyKFcA5jgFgZFIEImUTieZJRVUWirApZZBwkjlFm3V5eOTQ5lTVwRejYmFObesmd4ia37nl5t4zHkOnnz26eefgAYq6KCEFmrooYgmquiijAJ3XAm3NRpFcEs46pukVFBahKaYIhHppo92Kupin05R6qiopsroqVuwCqirWcDqp6x7hCoqrbj9pqogtsqB667AvvErqLoGa2xew3JW7LEuJCuDs51yOoS0zJraK/+vy1arrXV6bmtGt96SCd5204V3Z7hFOEeudOxSxx+6KWBHjnbbEVDuI3Y2Yq4u2panDHrz4iIwLua4m6GFYo7qL30A6zLww7UUvK8FGCoI7MLq3VeAnuuVU3Gw8VWs8cj1VbThu1FAyE1kAf4Li54cN2xBggsa9I48KkMYWssnUjMggQP8zCKCJy9SszsfKpTzg8zxTHSB9AAdtIFFz1z10QclvTTTEsanDz/5qZgMIwEB3WY7Mia0NTaEqmRMxWKPffA0VZ99gYdJzxjPoJg4CeUlKMadYoI4kpTwCHgjRCOgQua4yFzkSM1X4THZvXjbIQ2pZFVurzQ55ZqjHOP/zYg27iKWJvl9ZupAmrhIkoxICTKSoT9eVZO4P4CmSVEWefElUn451e5WMTnWVvIa/XvsTqGuVZfClxX9Wa5bHK6VT22eJfSXdOll912GKTq8fB3vPZiccwjvCWW+tTrxf5Mj5+HrTxhwLfOnV6ctadVvI8wAlIX/YhDAAo5vgDQwoN0QyMAGOvCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHaJtrQcuCgThhBVN4rQ9SSwcvXGFwiNUZGWYLCypEVA7V0EJ07fAMPSShEIeYqSC2yoip+mENlOgmJipLOESMohRpWClCOHE4V9xBFnezxRx0sTZfvEEYVzPG/yUiMVFlpEEaQbPGZ51Rh28sQxsxM8cvxNFQdZzDHafIxz76EQp5zMweJRXIERTyj4hMZBTLeEjrMHKQ1YohDiQ5QUrawJIRxKQaZ7hIE0JShCy8oSJHScpSegNcprSfckiprufcyxH9I2IrPfFKS6hPiLP8RHcmtsAM5jIS7JKOwazHwV9yJ5ijGCYEkycLeq1rEt7h37hgect+wQhOtqiXvXaJL2kyYpi93BUzZ5HNetUyXxYAJ/1ShTELpCM7EHuYxB7RztkxQmQyI2c8BTZPat4TYQcUVTtHFrNnsAegyhNn2FhhHvsUFD/k+Njy5vYPht3noc04KEPXKamQIf/UnSQLaUYXugqa9WdtLAMcNfAp0pZujKQHMOk1UAoZp4H0ZQoMyzt7NjRi3s1mpEPB2hhiGZvuNKfmOKrVeoq1y5FgqAspqkp7qlSk6kKpMkUbUBOAM6jOY2dTrUZYpxY1oAlNrDxFa0K1ijStefWryLHp16hGoLMOwKZYy9tb4foer/lMGxf6aNkIZLm0KW1rmEurQMD2TxVhYrCeW2fiJDDUxD5tJYylKEUAog3JSdawlKWpoDonn4/GzWQ9Lew78rYRp46WQis1rdhQq1YBpmCyeXMtn/rWuh6NVXBiI1zhVNvWjuztULzFSvUCB1xfCBdHxM2acYNqqOT2RHz/ly1tc1dUW8pFt7XHDZTpGOA87MrCs2EBXe18irVEjbe81fNrammnXvJ+lrqFGi/sbHcS1ZWjeNet3n4tILuJWsC72mOdcn1LDgDrTsDrLbBCWwTdBAfAvw3+0YJ5lznHEdh3E9bFgJeUO+PtrndIsaeI10viEgeFeChOioGDBz6pwE/DVzEfV67J0UZhDwLRu3F/m6Tj74kunIv6cZCFfGEiV4UszFTxh69kYe9ND3k1Not5yQe85lWZe4ywcpbLsuUBlu/J50MfVWJZvzNTJc1qJgqb1+dmosBZy+k7VwPbZ5cMC1lNZurx9S6RP10wOX66KDR7zQxP/AVaf3VBXSeSt4VNR7tvTvuLWDUZfT9aKJovmabFnJdpVVResNSmBmGp/7hqP7Y6lbCOtaxnTeta2/rWuM61rnfN6177+tfADrawh03sYhv72MhOtrKXzexmO/vZ0I62tGkQAgAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvtHgVgMGA8DoO96DTRLCixyXAym62u22PvuH6vn5vvgIEyeXJ/goeILX6LiY0wFpCQBJOUlQiXl5UEkZyRjp9ZnZqamKWmp5mVnaCsPJ0HsLCdBbS0nZ0Lubq7vLy3nJqvsQerrcYonQPKysPEnLXQ0dLT1NPCscvKxcfcI8nZs9C/4+Tlt9Hfy9vd7Mic2fADcdfNspxx8eCc7fwx5fDN6NUTCK9cv4PeODFYuLBTgIcQI/7Lp81cJIYYMzJch9BRuYwOI4p8QLKkyZMnRf+qlEgOgkuXKhLIlNkxTaeXLjsp2Llzpc+RKEv+DMBzJ0eOM2VKWLo0aYKaaCxGGlq0qtWqQw2mcMp0KZ+vZKCG4hShbNlyQ7OSM3t239akXeNKAEv3q1gnUvPqHXelLp+7gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEMjWeRHNEI6JAjtId3GNDfWfuuidm0M9tfZInDT7qcagO7dOva6Bc5N1ChKqJKbCjac+JSj5HgdR15Kky9gqsg5NyIwXDVxwiF9Lxew+XZX77KVj/S9vXtrnJoVNH/+R7qKkeCBpahsv778/0FSXxMTLbMeJPUMQ1D/gLcMyEQnKbEEoIEJVjjMfBdptBF9Du7QiYYbThVRhBChNaJJIn2I0U04deghOSBxMlRQNJKYVgDl4ARBTEm5uAKLL4UE0VU86USkAkYSmSKHI3Al15MSOOWjCp2wFYGJN6pUjpUcleAklLGFCQBw5fDCZXgWWHkdXy44JWUKYsZWH5rmTGnnnXjmqeeefPbp55+ABirooIQWauihiCaq6KKMNuroo5BGKumklFZqKQ2s/XZpFJkasukTvWn66Rqe5mYGWKyNCoRtcfZRqqo29NZqGaTBmoOss6ZqKw+srvaqqLv6EOqrwRbRaRiN0llsEsouK4Rx0y2XHZvO+oNd/7TKZcucJ8VCN4500xEgLSVrSjLtL5J29wx43/bibi/lbIuggkwWqi577P7y7r66xHuuBQdakGx89OL7Hp3jkRPwwBMyU7B470Xs3oLq1EvofQN4ZwudaKKTXsXcQooxxv5RVDJ+kGAooKUjf9zfV/zJAzODKgusKsb6wSFQwPjw1+XN5AD0MMAWUoxyg0BHYiOOLg9g4dMH1AxiQxYjqmKIkKg1Tsx6Ta3Rz4ZeTbWIPhWYT9der1i1oGJ/LeOJQkn4C1Bxl6iQ2pHoyPAvMZK9Uo2AP5DlQzm2+NZMfgKZEydYDU53UFQV5e3KTcLV1Zt3Kg6BkA8diSTjRyZ51f+SIZ/wJZSX9+ii5pwTFTroRIpuFemUm2456qkjjqdekXuu5E9aoXD6XLPmWSVbWDpO+FrIWzx8XLPSRWZ0u5wZnpq7BM+Cm6qjED1YonEsPrpWRN/Z+OiXPoX5u6UPdrXwxy///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfIwAY68IEQjKAEJ0jBClrwghjMoAY3yMEOevCD+jvWGTIowtZMcFjIIuGp4ACsCKJwhA7UDa4KwYgCynCFfNAVAXv1vRbej4fR86H9gJgrYu1vhnHSof+QKCYlCpCINIShqVK4Q9Kg6ldG/B8UaUXFKUqRgS804QXDWMH/EmrQjCo81t72UsFmORBaxxnXJLQnQDiOQo6b0E4B7UiK6vzrffjjoyWypRx52Ux/gqQOIVFhyGVN7hbgwhYmrJO9a81Rj5V6JC52ES5x+ZFclYyEIQG5xhKUiZPhwmO5LDDKtYWNYLHQWAFOya93+YsS96pdonJpAY+1q5buuuUlI7EwRvFSYgirBnmGtsaAIbNjylQYM40JS3sYbGLQpMYyY+lKQGHMmRILpzarGTUGrVFo3LymONc5S3LW7JwM8qX7zCFPC7yTmg3L2LpqMU+p1POei2qZOvtpkX+aM1ICTVk2ThYPhib0kJR6aM74EDOHNo2UCG3aRMews6H1/4wiGM2kRheqM3LyDA5c6+akcEZSMnQ0nZD46NlUmq6gqWdoTzOaPqm1K7M5DadFcyeDQvooCKFIbva8KdQSJLWpEXWXnFjaN5fKVAZ57alWi+pR7ZZPqlYVZJC4Kk3ZdjesWUBrv0ipVNKGN11mNUNmRest1GoRtpp1jWL1WwCkSo7HCQ6pfYOE3vAZVqe+DSJ8HYdfaWeBwFpgsAEtq4Zal9i5wY0kjHUsZBX1kbae9SeBq5HjCvcSHumOT52NK2hDC7nBkRYmh6NJn1gHu54oD7Gi/UlVHuml2zWle3aibSQad9u95tYnuzUPUnwbJeBOSbiQIO5tAdc7oyjXPPjDw1xwOaGj1nlOdskd7pEYa1ql4C53su0QdD87pNeJN3a1nR1Sy5uA86L3KbvLS3V9J10tYdJ2M4Fe8VanX93yd3TA+68Jhsc+9RYYuQeWb9kU3NsAd6XB242E9Sxb3C01T30VNi+YvveX9pHlwxy+rYfNAsjnXZjEe5jeL3Ox4b1gr18Ujq2bVADjGHOGljRGsY3Zssqncu+0J+ixHs5HPV3UWC83zgUd6atdEyg5DuEjqBupgOHMaHnL6xswbbS8QDIr0MwgTLOa18zmNrv5zXCOs5znTOc62/nOeM6znvfM5z77+c+ADrSgB03oQhv60IhO9GFCAAAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9iszcHlar/g8ElAJovP6GSXW26XAXC42712pO94oDvP7/tFc4Fmf4SFKm5xcm2GaRaOjgSRkpMIlZWTBI+aj1KCZImgoaJxe4xLm5iYlqusrZeTm02Io7SingKmN5sHvLybBcDAm5sLxcbHyMjDmpi7vQexTLOki7k/mwPZ2c/QmsHf4OHi4+LOvdrZ0dbrKdjov9/L8vP0w+Du2urs+y746NqgzHHzpQnUv3/6+CmcQe8fN4EDISKct7BiO00MMmbcFKCjx48ND+ar90ijyZMaE/9azEXvJMePMB/InEmzZk2YOEHOg8CTp4oEQIGuxLOpJ89NCpImzck0ps2ZTQMoTZowYVCgErJmvZpg6B2Sj6JOHUt2bFR6P69qzVqrllcwmyLIlUsv6tl5c+lqSht0rV8JbQOLehsFrOHD8q4IHky4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXY6rBplznFqhbdWZXLqU7dO7ewGHc4h2cBOK9X4hfmGbLU2tUqSS5ms6qGfIlzBc3F5S56jxk0aWvwqSMGSyKR2zTUq78MUR45OIddxSf3sPrRYbLBu1vwP1H8QUoYDmacDMRJ8Uh0V//f7WIBBAtBzoSoQUJShGSNv85MtAzEr2DXoVPbHKTTo84tOGJz0yIkkkqgQjEJiumpIlTUJG4DI0ywQQji5oYBYGLL87j0oxNPWXkiHZ1RI+PfAkF5AtFGfWSR2UphVSVClxZpY74mcDVX2BuddWTUGqSVwR1JZkTPWe2OMKXYQKm3WIJ0oNMm/NZcGZ5ibnAFVcqzEknkHnWQ+ahiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmoqZr+dykd7qqLBaqtivAprE7V5cpsnqc4ahay6ZsFrr1f8CmwVuQ7rmH5lGPtEdsIGVygY7LVRyy115gnt/37LSbuec7NBF1515/UJhXqChtLsZt5GR926CFiHIHbalnsrd5h5Jw944REAriR8QhLuMkiQu90gI5xb0XveyHdvMgwnQ4+7GnLYZcDxKpJsZwgDqPAyDXdszMP/WpAhhdJUDIDB7hUoscYDFlrfPCNTjOxo/Y084M0tq3yOh++CumDCwRTq8sYWTKjqzyWi06CDAyw9UtJPO9Ir0hIqDSHTTqejidHK9vdPQDpvuIlBTLs57IXbrBzxiR1GPYyyF4hIE5dQp40iiirGyIDZn+4oY1hNoX3QYXqjxHemfm9EJFOCT9hS4Tz23DdGek/ZEZJKzoPjA3Q7MuQjTIr6+P/fjkR15OmcqxnAkkY12dWkUfak5VKqb445TmPZKzUJcGoFqKOxH7V4R1hmqUnxs5PVOcko9B6n72MmGjwElkuFZfK5H4/l8q4/79fvjR4mVvHbB/7hCc7LWe6jceWVZu0esen+xLyrFae8bVW7sDF4zrfnMWjx05+CEij80UI3QksgwKyAv+co8IG7q0IDiwPBw8HtghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIsKgWEY8ARKTWIIlMrFg2HoiCVAmRCoG0YpAxCIMayWIeQXCiSzkYiC8OAf/MOpQiz5EYw/VyEM27tCNOjQjE+WYRDpK8QfIIlgR84iLKpoMji9kVhT9+IZEAPI0z0oOtrJDxkNyJpFaiFYhR0GtbpnnW+MJmQWNIDADOjIy6UrFviIRwHHZyoDUuNhqQqmKTEqilMs6JSpPNsjQsJIS7JoOxJinBEbKq5KmuaV4ctmKXcrCZPgDpmV0Nwx8YdIS5AHgJUl5PiJ0kowl+CQjmEmMY+RLX66MRL8ssMtN7uCahlxkLUHZJTt5M1+jJMA4y0m/IKAzlXrMlirZ+QibEa2bHmsYyF4Ztm5ITmafSOc+NZMx+vxTEwHt2ECp2U+18TIJglxodwoKHwEN/20c9rEoQodDM44CzaN5epk8YpaePJa0or3oaIA+SqCVirSlMxNNzSyKs56So21aO2indhrTk/r0qAUA6gDMWSmqWeAeFQQLVOu21HpuyqlTjSo9slo0nkXQZ1vz6lMfqlWZOvVoYXXb167moKxVlapM9ZRT1zoKpjWNrUGtmtvg5jWrxQEiIyObg+J6qr4+6K8FDWwi7EpYUxk2G2CDqdgKstiyWRVYghvZ3ZQKywtm1qKbLajjLovWR9yOqHfbUN5i1NirauK0abVbagey2hW1VlNyq1H8Yuuf2apWrIW7LaUSt7fh4aRxYh0d5IorVE4Rt3rLe+xbSbJc0l1Urv+UY61xYSuPzS3vc44IXaiIC14LeNdGwzjvbksSufC2TnTZte1254be6nHXc+21gHjBKo/ymg51Rqod63riuuEKKb//BbBNBLyT9zYvepKaXvLg95HTjc9K7exS+sDHKAlrTykU9oiFm5I9yVnFftAjIPB6JKUP0y7EI2ZKib8aNw2jWEwqDh+LZWdc5LmYLNibCvdSkL7ncZhMHgYcla734xlboHhDfnBfvJdiJ+kYLBcmn/LMJy703Vh9glKU+Eis5bLcpcte+vIEETVmGZd5y4yrZgnSt+YOm2l+3Q3x6vCCZxrP+ct+mSVjnHXnubyPwvIz9GWLvBZBh0J/HDt8Rv+O87+PyZnIA7TyCRwNCgfurxiTRkyli9FZ1x25BJxOhKcjzb8+izov42RqpjVtglTHAYFlhSQV6pyaXOt6CrzGtVZzmGtil/WOyE62spfN7GY7+9nQjra0p03talv72tjOtra3ze1ue/vb4A63uMdN7nKb+9zoZmEIAAAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9gsq8Hlar9gbZdrKJcBaLS5PG6E3/Do2hCv2+/4vN4+3/v/PX2AgxaFhQSIiYoIjI2OhpCGYIKDcJGRC5mam4oEjp+gnZFXlJVTkQWpqqusmJuvr52yipGdn6OmuTiXkKy+v6m8hgfExLWzs7eQTXNpamu6RJED1NTCvK2QxdvF1xbIiMqSQqUXzc7oc+XRL5Hc3JHoqKvT1fbW1yW4S+fo/v/p1JlhN6NeNW734EG6d2+eqn1ZBJoB+GwgiXUETxjEZyiAR4/evH0c+REiH4nqMv8CETnygUuXkRjInEkz0kuYy1Tq9BFJgU+fkUjGpEnU20+gOXcqzRF0ZCQIUKNKndq0ZL6lWGOE3FpoKlWuIbOKdQHWAqxNEdKmTcCWrYS3cOPKbct2rF0kdBNQ9He3r5O8e/0KphJ4sGElhQ8rRkxxsWMk6B5Lnky5suXLmDNr3sy5s+fPoEOLHk26NGaMpjWjTo25DevXPlzD5rx6NoyyJqW0QWkgoETZpL2d1WQLlHEEopJSqW3aYTBIwzOB83QcVNkmwFk7BwZMePRj0xNVR5CbCW/mhr1xX1/Am0JD4Rc9Up6kX8UynN1ti+dsu/5iDYGV3DhG8LbXgc6gt9T/RgMgZM97hTBkj3/0kYLSXuUoSNB/xlwj4YcBcjWIfQBo6FdVHt30AElCXUOSiuXZ9gZLH8EICVFFQWIjgTLWgWIARynwlFdEQtDTUS3y2KMWuF1TJFRNCrMkFmWplVaUheSlJV0xTjkjWHnJJRc6c9HlJVaAIYjGmY6puSabiiUG52BuAjDnYXLeiaczevbp55+ABirooIQWauihiCaq6KKMNuroo5BGKumke2RH6YjQXGqKiZpSsdsavrExRqcnWUTqH5aequqqrGaVaqtxcAprFbKyiaUFV3wqUajqvNrjrbmOYWCCKPmqHSTTjefNJJnaek10CxQ3XiMDFmKh/6kyUmgItMlO28h1TBgr2nbruQItcfEhAl448ylJKrncmXtutOkSsC5131bYKbzsPScMtPd2e1yX9Z2H7WTq9fuLe/shW6841poHKrEHX8ZgWdkM80431wjMCME5ZDgxQLxJxuEB/KWhbSEOVlNWtbgeMWydJDcr2Mkpo7GyBS1ztBXMSMxMsz+1mnIyhBbI0ws9C4G4LAkgkzPy0LwWzQ6DPTfYsCEgDrAzs7tSJHLFWOHsYddOg4XpRBTj99jFkCTZJItO6QuHwWQ7BndHdUdJt1Xuxoo3HZv9qOLfILnY0k1Rz7oCjSkyfiOOM9kkeeCOtwNJkD8ORTkDRh3VeP/mI/zIOSRPenXkT3LHTHoLpouOeupSre5T668XFHffXdEeVedX5f74rbMXSbzduVdp5a1bNj/662VBa2UEYYppvQR5Cc9C9NFNX/31ZbalfQ1lfW89mXFlP/4Raaq5fhTt//N+FXXO/0T99kuRZ/5N7M//Evj7nxP8J0DINKaA/TsgAqEQmQU68IEQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrqwB+J6YQliKMMR0LCG5rAZDlFgNRDq6gxtM8ANO/jD3gRxiBwsIq+QWMIeptCJKGSiC6XYQiru8IpYfIMVV7hFFXbxiTrM4gigeEL/MprQjE0M46CAZYUikog3X/wMG6vgxqmVqFijWlLA5DOw4EVEjX3ao3iq8zQtoLE0gmRXH6X0hUNqxjvDkZa3gGYFR2YGkmeR5LQoSStAHssQGSsEt8DhrXyJKFx5/NXSHgKd6HhsWuBaQhwvuUp/idKVpCwledSGyi7Mhl8La+W86JWue0HMdaoCpi/kda562cthgzRlxFalzHI96zvQjI+ykFcwvJmslgpj5b+wCZ+HEZKbQRvcN0EZzlBeAmDZDM82MaeEwRGuMglrpzh5gTRnHpMZdrTkTvKpz/Zco5/mlCYyuwnENAhUJ3vbijs3xjFhvPJ5NBhbQ/9Rsrc1/81lYJkoRVHWsVwqdAgaNWLNJLLOCE0opEzTGEW9cVF04iClGEJJS3m2tUIojZ375CmAXsoVThZBaFRzqCfFYjZD/LQQIh0qSItKC5vyAKlJvWPelHK0niatP+BkUIh4oQ+rAoFEWe2oXbpaUZ+CFai2tEDXCikCjAbCjmnV6V3Y2iGnvhWqMXXph+h6AbteFa9JVevNPkqNrCFtrmE1qxOwGsQSPDQPWNtGQrwKWbgalJ5ToKxSD3ZZS2jDq2JF21S3sraNatVtejttWy+h2sHy8g9vXGpfmsqL2kooln7I7VZPxFiv7Q5wc0OcYZejTstE1AKtKwviArDc0Db3kf/HjdxLpgu5AOxomg403E24q7gaXQ68CxTvdpVbXu3iBLT56+53LfA5mVjuJdUlnXzPS9/63ve96EWg7YSUXepO7nOh+0l+WTVg4BmivqC7xungq70GF9hzlEswUigsvNgpuHi+GzDuCujhDffOd0baHJJ4t1ABXxjEtHMwWSEoYwugGEovZuQDa3zjFPMNuZdw8fFs/KQhB7jCRk6dkVuMZK5Mj3nN09KCNaU8tUA5ylySbKuqfCUsYTkvU04mWKRnJfOB7y3qEyD3huM9upw5fHWpYPncDD70wSXNE5xzW85sZzSbSc5govP1+oy9P6Mwfgd6IaIJyMJF82mHjk5KwxUj/SYxBrCGl8Yio2W46Rd22oWfbmGoWZhpT7vpiqXe4ahXuGoVtjqFr0ZhrEn9aDGWoIG2zrWud83rXvv618AOtrCHTexDhQAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC77HGi0ec22pdGCeBxAp8vjb0d7z2/dBX2BJxaEhASHiIkIi4yNhY+FgpJQkJALl5iZiQSNnZ6bkJOiPZAFpqeoqZaZrKybr4mQm52hVnmjRpWPqby9prqFB8LCsrCwtI9Sf7hFkAPPz8C6qo/D1sPSFsaHyJFCeX9/dXbhcrfML5DX15DjAKWoztDz0dIltVrL6ELy0Nf07B7RowfvFL4x5/bt6FevUICHD7Nlg0gR4kGFGGtMpPigY0dIDEKKHAnJ48dkYMT/jdOXkdQjBTBhQqoIcqTNbDFlooTCUoRKd3XKyWmZYyZFSBCSKl3K1KhFe1F+Ap1KFYDQOERdSNxKiGlTrhKVXa1q9U6Jnlm1gm2VKYJbtwnixpVAt67du3LjXrkaLq2XvAnIuvNL2AlgsoUTU0GsuLESxo4jP64quTKSwZYza97MubPnz6BDix5NurTp06hTq17NOjPm1rBjy55N24/Z2pXB3XH3JyFuGmArcfH9u0U2tphmeVqOANTO4loK/nqE/NI2Tsw9BYfeRLovX8erF7uOKDuCi03Qjs72vX2BbAELkVfk6LkT9aLVWWs3zrv+YQSB5Zw3VeAXGkMD/DNP/3yEDDSPf/aFQZxn/xEjjYMYBsgVd2A49ZBJD1REkzQVgYheSnzddiCJHJlUk00ileRihFtIVdZQp3kYQE4KIOXVjxBAwuOIBD7Bl2BIkoNjZcFlA2RSTULF01hVoWVgYsG95VaUhQDmZV4nFrjbSirGFhxgd93lDl55cYjRYUkC4KZkcco5p2OQ3ZlYnXo2lmeffo4D6KCEFmrooYgmquiijDbq6KOQRirppJRWaumlmGaqaWuvbbpHp56GKuqopIo6YakSvoGqGVeuKoVucvB2x6muTtGqo1wSMpyql+Zqwa5pTDreMdllU+tC0lS3gHLmMTKgrsems0s81FV3Xf+z9W14rHftraJscvMdMix2jIT5BK2bcfudt98uGy4B43YDbRXoaqaue9MBo+y41xZL4xK3dsYevr3At98j75K7iLlJBMwZgsFRE8w62EjTb7n/7gBrObIKVS9hFR7AXx0QTgzggwLGkvF9ZZIW8sh0lEyIgtAE9+yvVjgsWcgMWuCOzBZkOICxJDAs1pKlIUjzMz0LDbQZH1v28oVCZ7hdtGoVoiEhREYp4lErY120QCg7BDaXXz9VpNhZc92iR2lHxCJEJoZdY4pIf7YR3TMWAiNJj9S9Nhc26mzvSznp+OLfOCVutxFWjkkVXxQ+UhGPPj65lJA5dY3zlELVSZb/4S3piPkjmn9VyJBnz2sklaJPRbpfiqOeulK1A3P0HLHLflVmvmb+Y/CPF3FklS3PjlGWWvr65fNGRyW5kljluFZ1WkaAZprcSwDYXnhXv1pwyma/ffdsygV++NCdmRf6Eqxp1/dsJwFnkvVPcf9U+V/BZ/9Q+B8Ap/CnAT6hgAZsggATeEDKMDCADnygExAoQQUKqoIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ536ChQ8TAFPvyhEIdIxCIa8YhITGKioiZEJv5QeTiE4g2lyMKNCaBjeOAVDa2IRQE4UYZUrGEYaTjG/z75Clhq6FWu0KgHSfGLPswhmgrfWB5/6W6FdOSGHXUhwvAgh1nYulkH/cgWQDZLkBUEmrIuhq2rsU2R1toGtjCmrUdOyyDV+qMkJ3kesETrXgXLZLsSFq9suW4KX3QMKHnBrm+REmFwXFjxkpDKxqyyW8kSDyzDZZ7oQa5llSsEwUKpL13K5129nOUQykiUW64rl8jJ4yuSOTgmMBNk0hgmK6XRs4TJ63Ovy9t6sqlNagGjm8g0JThZJs78kK1mYJHYzChmIWAwspPV5IEVC3eVWi7vnQ3ZijwtQM966uKevnTDG44XlH5qcWcAHVo8zTlPemYDocqcwT6nd6Ny+P9TIVMrxM8uma+KCmNrEkGkmNq5IpMZ1Gf9Iel7qmENlF5UZfkMp/hAw7ODiTSmwqRo0KwmJREklJ071RtNLfqIkQYVk1oj6h1HcNT0AFNgS6UYzN4hUwTZ1D5VteZVW9qgBdXUrBWLKoaeVoaPRkZpZ/WHT8u61q5mlF4PVapLRUa1qjnIkQ8MqS78WtdKBjarfAUGYf/qyURGNHdei1tYawUxy7WuSXELwGTFpiMQZXZvH+rbKcMQvqQG0218g5tk5xZaj2zWVqUdp9lS25HPsjYAghstitjnTmCUSLQW+FuMAgdc0nL0mrS7bW6DK1wGyMi1d9XpFcnEUp4iLib/kGWucBuH3ej+IHKxQp5QTmuB081Wbn5rLnd1ktOGJY+jXUQuLjjX3fNq9hHNda40zKtbgL03vJP7HVbty18L3A5314WJ53YXjt75rrqFMZ3jCnFgKCVYAQuWXugc3EXyeq7CQbKs2vioYd5xuKHjHTBq0duVCmf3tT6wEYcpp2ILfNjFImaxcEo83RNTry9SI16LgSTk/iqBoQ9OqnwDUWQDP6nJDJYxdZU8ViyBJXvOe56XYHwEfkIYeFduXq60vGXvIsHLpq1xNrA8ZjKDycxdPm6V9bqV8mnpfPCjC/1WirfWkA97d35fnuuyZyqUFhDFcZ9c4Cc/QrcphIqeagv6Gq3nR4Mw0glg9DjSp5ca7k8wO/w0BXEo6gsKsdR1ICKq6ZDEBfLQ1UQc9asjaERZ79DWOsR1DmGd6zjF2tdI1DUOhX1DYtvQ2DVE9q5NrcQLBLHZ0I62tKdN7Wpb+9rYzra2t92ZEAAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC7nAGi0ec1uu9/weNxCpxPu+Dxiz+/X/3VyglCAgAuHiIl5BH2NjouAg5I9gAWWl5iZhomcnIufeYCLjZFRAqenk0uFf5mur5asdQe0tKKgoKR/TaipqkmAA8LCsqyaf7XJtcUWuHe6gUwO09O/RIDKyoBpaJWYwcPhxMUlpdbnLODDyuLaf+Li3pfm6PXp7+GAAfv7zMz8APnRW0Otmj0f/wA+WLgQEIOHECMCYthwl5teAg4i/KOgY0d9AB1GHMnM40eLVQr/OsCIkRsAlr1UapwBUuAfCDhz6txZsx+5Mhhn8vBHlM5OnkX9hZEptEaCp08lSJ1KtSrUp50SRdjKtWtSC7xgwmyaxKVZblcThAlKouVZNGJ9kQ3yFk1aM3EF1N1rlu1cG3ut5d3rV0ThvzMCN3Wb5jBiwHUfSy7LbbLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55N+8nXgbXnFMuKaJSj3wggocytRV6sP7wPOWME3NHXK0xNG4cFi1nyBbeW42mOAHcPlYzhxiw4mhn18wWYuaujXY+f4Ukcn8aWbBu36fRrxUsqPBrxVfisk0w79QUIzwD4wfdf/xT52VLMgRDuV9SCX/QUAEUPBBRQQvxg6B0Z8oXG4T4e/jESSX+U6B8bIYJmoUkKAHLUjDgBAuOGCoLR4me3FUNjjT2yshR5p6Vl5FVdRRDkkitSuERaVblUlVVXMSlFeC/14uQFfKF11VpattULYXG11mUab2B55ll5oaaYUFjuONqaAByUl5ynvbnlXy7t6eefgAYq6KCEFmrooYgmquiijDbq6KOQRirppJRWaumlmGaq6aacdpppn56aAWqopJZq6qlBWIkqg0uuykR2uTTHjKs3WJecb9zx0R8dtN5TxzF1XLdcru9NaEV0pU133ibX9dbeHbAyx8eHSuDJmf+y1DHb7ALPQvsHrntQG1+Y0rWCXnW7JRftsLLmyAN4Y3KDEbI8FnMuurKsZ0e30PDKhLUuGohgUsDSkU2BsrA7rbtF0ItagwfYl0aCswyYD3+hMLwpxBJ3Y+48yFg8zFe7guUpxPpa4BLFdEQ4sCzlaByqOsKwE07KLrNscq8kcPygyxE+x3MKNL9MB45BahiSzGA43FnRFjKptE1NmuG0iH8EhOHUPsmiNUXigonKw8V8zZBIJz40EdhMfwGwZjaaFLWJaatdDIxhS1PQYPLGdfVfL8p9049I1XHj0lXrSG6yWQOE9+CE5xS3R0j7C+Liqc1dR+Q6aS4kUJiXxyT/5DOO3jYVf3925OpJmh4kz1BOKbsEaV2XZOtJhXWnXK/FPjuVUNl+O1dCL7H72LH5LpWUv6elKhRxhp4bnXcpjvwIavYtlmx7VX+5WHSSeX1pdKYZb/hslpnnmuajgv5bba7/lmBxic/7BW9npqdG0Y+fWvn2ON79zBSZoVVhfwaEAgIT6IRRMfCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+hBSDvzhCIIoxCIa8YhITKISlyjD59HQiS5cl3uAM6sTSnE77YKZFb/lDO5UkYO24g24clWy/wyGMStj5E4ZJ6gzYXWRWOHK3bGItJo23uqNcCwe6uioGjuKEY/E0uMUUucZbOGLDtty1rOi1a+dPSF/mDHkK7TVrG4RgJHFstwjpYe1X93LFWfsxBVjRcXT1QBe7tPeKQj5GEmiJ5ScGOUnvGhKGqDyFC6ZFx/h9rFPgkwW15FlGjPpyB/cUi+qFAArL2MeX36jGCmzZCN1N8D52MuZv2RFNPlFTGpmhDVQI9gzK3awiBVDYXFMnBGWGbA6SIgoBbNAOR2UMEB2p5bf2SXZ3HmxosRznuasJy6mqTdqtMZndVhZL9MTMv30kyhrNBVC6aBQT2ZTniIbR1EiyimUIf+MovdZaNHeWYiYqbOjDT1YxwCgs5z9ZAR5w5RHl/GHitIhni7VIkzxKVOB2UxANOUnhHRGwaL9tGYftUBObzpOTQ5tooUAWtDkKEGojlSqGiVKUVMaUFZg9UCCfGA461C523AtADH1AjsnM9ajIa5HZ01rF9aaGQttjWsjuhDbTioGSDKzcR2iSFzLppC9OhUvnGynWwPLkMF6rbBn42kW/GqZvKqIDnWzWx0uW0zE+k90j2VsReqQWQasLbJ8FVs1O0mHx5H1rRYobUkEl9qCToNvjfGbPlvJEdoutmuYzexsPSJXJByzfzChqz0md5LXUi24dRtucw8bheOeTzz/YlFuPQJHXNJFjrkKKKtnV6tYCwTEtUbhHJAMZxLxgu6z1nQucC2g3vX+Fq0vHQNleSlf/G6uvp4r6XvJS5oA1xcCAS6uFfYrGdell0YO7uwWtFtZBxMuwkMyaJFWZyTcRdhYCeRwh73yYRAbUMRp8XCJv+gq5f1OKrVLzvCIR9VqCVA2Ln5xjHkz462E9QgC/CZsXMy82TmvVaa4bpbgO+SrRIkbOq4SkqGnZAaLhshQbp6UX5fkVOaWybSh3pesd7/sfXkssREzVFQrZMMoOZfqg033xvw9mLwvfWAmzZzXPGCW3LkvidVzXbyn3/r9OZluYt9F3nzn+JkGgG0waDP6HE2+AqoCt3guc6A9s0A5YBrQ/rMyYjodh0/DOdSb7gypz4HcNrtm1fTzMnYJPCdF1yPI3LM1OnCdZl2z+sa9np8QYW1DYtfQ2DRE9gyJOOzKMPHZ0I62tKdN7Wpb+9rYzra2URMCACH5BAkCABcALAAAAAD6AA4BQAX/4CWOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrt7lnicQK/bEfi8Xs6Xv/9OfX0LhIWGdgR6iouIfVwAkJCATH0FlpeYmYOGnJyIn3Z9iIqOk6YugnyZq6yWqXIHsbGioKCkfKe5Jn0Dvb2vqZp8ssSywBa1dLd+uqZ9xcV9kZCVmLy+2L/AJaXN3ijXvsXZ0XzZ2dWX3d/s4ObYfQHy8sfH8/fz62cG/PztcMDwPRg4sA+DgwgT9iFYEJeafv7+7eijoGLFePcMJtx4zOJFh2QaiBQpEQjGfHwg/6hcybLlSXrbSsrkVq+mhZYubdab+S2BT58SggodSvSnz06GIihdylSnhSsQDfA0Mq2qVaMJ1owUGTVq1a4QtzaYasPqNKwyo5L9YTZSGLBwc4hd66OtpC1ep6mlq8UuAKhwDfgdrBci3yVV3wb2u3dE48OQX+SN9Diy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewOzvVF7vNMaSFRi3ajaARyCyJW6dzxQc3oWSJeC9yWjuQqlbQib8yvoAW8jrKEdBuLuRY9OjHysm5fmfPb+5DnhGTNm14AfWy0On0zQx9knC9xmETH+ccvOfqnGffE/DNAox/CMpnk/9WW5H2UgAMPYAPPvbcE+F2Wog1GSRRzZVZhfNcyMdGHPEhYn1oVPbZgx4p0AdOMKpEkUcUCjigFLMBE6OMOaZyoxRYBWkUUxH0aCSKTnjIGlZEVUVUUUYdqVg/zREWCVpqaLhYYXApyZmVd02lImp+cbEhAGP+yAKYf0VR2ZlfBaYmCmVaASebXII1pwjBfRGYYHa9adiea/yZJqGIJqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeghirqqKSWauqpqKaq6qqNSskqgUa+qoR1tih3jKw13GacbtnlQV8cj0zjmnub4IZcr+YtmKp74BVH3SHk0UFrcnlg2Cn/s9AV++wC0UrLB694WMsptt9Jlwp10x5rq42eelcuK+Gt9223ywBLKn4DOCUMLNAYA4y61bJ77TDyylEVsQTH959Nvz61bMIGGtwegOZaoJ8vTjVcaoHQsBcJwnIkmG9MI4i78TviEENOwf0lCLK9uJYM8QHHiCwyc1k26Bm+Dx45YUYCi3GoZTzzUWOPP6OEpBlDa/ZghEnD9IpADJlshZb9xNmPl0QHZGHVI5KI0EJgL11G0x/y0WLPYYvNQEceWZ2hzqKxGHdKO+YkR4tHwxzzLkbfszbeea80o0V9O/z3CmzLUThLjfu4OOBHOr5j5UGrKuTmRGLeoxRcp8bk/5OkS4AVdUR2rhNgVLY2eulQ/oR66kvhXAXaor0elJOwY+Wqn4PGxiaWaWANltZghe6ZX8T/g3tobK71PGjRkzX9Z3UCb2hENyh/WvZZnHn9ntVDIWjWgcq5KPhT/Iln+q3Pyb4U7r9v1visze8mRPbfr778wgJD/dpyPu5NLgjiC94Bi7C9+C0wCQ004AMnSMEKWvCCGMygBjfIwQ568IMgDKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEOd8jDHvrwh0AMohCHSMQiGvGISPzR72q4xBemqzy8uRUKn4iddb0ihVRUhhUl10FdGQuKyNLYFvoEG/8vIgVcvRJjXwLImpdZgDoAQ5btWOVGOCYDWQFT1qvquKs74lE7q3uYHN5VsW3lplvTqpfiREUueDnLkN0iQCKT5bdQNfI7ZuxEFj+RHblN6pLNmo5xNolGRYIKlNkCBrrmFa1OZk5T7iKkNYDBH2TQi5KLtCQwZLmvVNQykqa8F8q0YZNeWqxfEUtFHAFptnYNc2TFnCW/kHmMZXryUkWLZoCm2a9q+jGPlTzlzDxGDYq9Z2YKqokaT8UxcgLAjRcjpjpD8cpMcayWBzMnvtIpCJo0k5Ezw+fEBinNliFIijL7py652TE+5JOg2zSofxAqgmuKM2T7UVlG/YXRg+r/s550fGY8B1DLm31Uoapq54Fs5lE9osF7l1HpK1ja0powaCQrGudKacpPip4Bpl3rqDwtkDinRC0AFsWLAjeTzTgUVSdHTaoW8MeXpzEkql4LUdnCuQXjAYoyYaFbTAOnVYJgdWpfI4hUn+BV5BkAqGuxqlmjBiJ5nIircxtJArcm1qCmgmpqbZvYyBZYlApwqTlFa1kbIge3HYSwjMXrGKhKl8N9RA6Jc+zbgDE4w+aVJKOxrIvIKrU4aBZuFlnrFOCatr3dDbNAa6xjUXtZyXaBtZixW2oJ9zjRJq6Cuq3tTR7HI9ciLra2PWDkhkvc5ao2paRFKm8L51yQxmy5/8QtrlOR208Kei4OeftuLnEl3vB+94CbE5LqxOvSJPXVNekN0nrZu5Mo4NY08cXKfOlLMra+FzW6g11QTmcc2tUukLdDLICNIuDYHaXABi4SgqlAWc0EmHel812sDutA1Vx4GgLW8Oc4LEHRMXgoGCadiHM0pRK3ZnhGuSlXtgTWLv23MzD+iYwbMEAOBea+lmFejEtS4eXZpXntKDKOjzxkiSj5MuXjyZODDCbpKfh7dmmxoeRyY9Pob6oR5DJOX5xlEm8ZB0DGXpnBjL4au5hSX6Yw//IklUpF2QkF/Kr/4rK+Ku+vw3dyc1cYdecm5Jkx/0tUnPFM4/4JmlCLNlR0ox2NpiujJ9JMCPT7/gTpNcu5zZSuNJ8B2BbW8SPUgp4yacjYhR5bJc+ddouZNS1qCao6g3t9cw1zXecd8hqHEey1DoOdxGIb+9jITrayl32GEAAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu3GWuHxOqNvvePx8b3n7iXsle3l3CIaHiImKiHpzgo5/kSt7B5WVfHSFjIR1mHKchJSWB4GSpiJ7A6qrrHsLr6+DmouKALa2jZ6sA6Wnkqm7rZ4WsLGZnLSGuXHBwnK+0Cd7BdTV1tfDFqAEidPWvdHhKtnX5d/HhN3ZkF+3tuI0ewzz9PX2ewH5+ev8cfr7c+zdYwcPS4KDByUoVIjwYAkIECNKxPevosV/DzJq3MiR40V92QpqaZhgocmTC0n/9oujoGXLjzA/eoTpsiU4kUbc6dzJsydKkyRfUPxYs6jRojFv4vzRs6nTWypIBnWxkk/MpFUJTnHAletSJFnDhpXSlauAs2d1oj1b1sHXt0rawp1Lt64XuXbzHlkrQC88vmrX0mjLF7C7wmvx+v2CGO3Tx7b40pC82I1hyE4bnx1ctrLIy5EFex7NQnNh0qhTq17NurXr17Bjy55Nu7bt27hz697Nu7fvLWLj/D5zUxayZMgTLetDQulwIaIsZcOTfNM2TtlGkdL6vAewVa6KGe+E7vryYgu+q3LeXYf6YOFhjedW3ZDO5e/Zt/c+DFtw6sks598z+zVBjjnmzAfg/yFVhaETa/IIRM+BCM6njicDEVigDFOhIBEEEU44R0wdlWjiRhWFKKF+G5J0UocifPjhUFdZdOKND2DlyYYkYLbTiw2NM+I/R7lUI1FFKpAid7D56GNUUiEkVHBHXhQcc1UoloWT7kiRTQRghinmlWKWGUFIVlDG4wVXokmGmmvOpWWcdNZZA5x2RmEanjnwmecPeIK2k2l9ivanEKZx2ZOfLTB6KBCJNhWooY+KsSellWaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMYq66y01mrrrbjmqisWV+66RK++/jCdeaEME6wJxZW3YH0B3pGshqxGd8kwyyZHbP+xnmjHIqjSbudJtdsMS2y3235KLrWzKAOKuOadC62p+c2B3nwKXhufMXLsUq6n7+krr3jlMYvAfc4O4++7pfbrDCbzKpuuIss1Ax6TqFJIzZXVKlewHAMKN6vFBWD8sMZ2eFPNvtHOgWCC6B7HoMrnIIwryCuH7LAdF/LjYJerqSgQzTHHUW02GXrcqs8SiijHkm368w/S9aDMKdRJ0xhA00s/HVDSDEhdIIwmzLi10k7LhOPZOWotB9ddU8yji0AFSYKMEw1ZJUZod6QjJofC/RNKKq2E1N0wzYSkS17/pqgtQEqZgtVJKkm4PpEzbbSdiwPQuEOP251P5ZN/nqT/5Vj2lrlTfzMkdwtWVxQ56B8lrtrpTUEZZQJTihU6QGJdMecVmXs5jJljBkd8mG5S4ehtWDcv8xKErRUYWr/D5rzzZJUlKF/V53a9210sf2wT3Y9v/vno21p++kmIH+ylaPng/q3bY/pC9I1Nj9j6qtYf/wz4Q4z+CsO/T03KMZLSTKH+Rz/N0O4W8ztBBFclqMwRCoCdeZ8DE8hAEUyQfSSI1KIw9UEQlkZ6h7GfCXUAv82s8IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFrfIxS568YtgDKPwesdE/2AFkV3XIs+OcIjGNCavhm20l7HQ9yyhgUJgyFnOI56XsnfVC2d4pIUemwO+hM1BWy2rg8DSiJ9DjkJ2lXIXJjLWLEaqEROI5GOoJMkHSgrSkpfkQyYvBy9HSieR9DlEuFC5SjmMsnSldOUjUUkybE1SjrI8pSa5NYeDxaFhn9iYHUF5r/T0cmGwNGS+kAnMYYYSlKFspgV8mUxSxUsO0lwONAlQzGuSUpnMkBgv/iWfgDGLYCUzGDJVpbCJYRNgwQRkfdAZSm9Wc1TtXM8wsnnHSoZSnOPcpbmOKbFs8NNli4iYOCH5qHwGlGHwdGYe8ijMaS60kNbsT9Cy4kl1pf+TYxulFchEJs+EVrRj94yVyWp2MVY+bKU2E6isYFqzOJYUATBlKDthxtKWfqufLwPpyTA6U432NKYSHdpKdgYV6xm1p39UJCIaBIYH9WxsK3pqOSw01WEULaWroto8gDbUeEo1qJj4qkix+jOtolSpGIoaUUUl1rZmDSTNIx3bdPqnun6VdFfSK9f46huwPaRua5PrXS+SNxwJtmpzbdHqTiC2xJLNAiRq7Ikem1WZvm2yYUNsHP5aOM2aiLN2/Wac/KY6x42AbhFpXZVMq5G98WFTrJUA2GALEdkeibYZsS1hcZPb1Om2IVUZ3O7wVlua1GS4vClu6gLXD+UuNx//hrtIUaC7G+n+jbr8sO51s2uR7UZ2OJnbHO46t9gAwG5y773aeRW3OPUKqb3xvVt8uTuaB/LEuIZlb9m0+7oi2bZA/v3RdEF73wGXt8BHOfB+EqwTADNYwJh1LoTFS7rdUJhnKLgd51hHpd2ZkQoFrMKHmxpiEecuLMs98VYyqIXgReFLxzuT8XL8RimUcAk2hgKOj0cmHs+xCj9WQpCfMGTiFZnIR1aeCr33vaZlryv+YwuNZ1NlK0chgAIYYIq53GUzJJl5ZS7DmW3TZbByYc1HHLMT5SzGOtv5znimFZ2ZuOcl9lmJcDZioGPVwr70YNCwKrT8pmw+RR+a0brKfrKhZQBmSXNvy4lGIQQhrYJKazo0jfnzow6YFg4iZoEubGAHL1DBFDYG1ZO2FanDbOrT4ADRoBIh7c6MawNu8IG85rSrWq2oC1Ia07QiNpeMHQNRl0rZTmI2DJydKl0PioTClqG1B1iCXptQ0lIEdxTFvURHQ9HceU63un0RAgAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW67cZa4fE6o2+94/HxvefuJeyV7eXcIhoeIiYqIenOCjn+RK3sHlZV8dIWMhHWYcpyElJYHgZKmInsDqqusewuvr4Oai4oAtraNnqwDpaeSqbutnhawsZmctIa5ccHCcr7QJ3sF1NXW18MWoASJ09a90eEq2dfl38eE3dmQ4tF7DPDx8vN7Afb26/lx9/hz8/Ts2mFJQJCghIMHCxIsAaGhw4f1+EmcyO+BxYsYM2akeC+bQC0KEyAcSRJhSH1xFP+oVMmxJceNLVeqBPfRyK2bOHPqxFlyZMgXETnKHEp0qEuaNX/sXMr0loqQP12g5OPy6NSAU3AmRXK1a9etYMOKHUu2rEABaNGafZK2rdu0ZhzIlesWp9u5ctfWcFui7tK3bX3gdYBksF4ffpsqBgwXB9/DbhijZfp4ROUTgyULsCvZMOQxmi8TEf259A3PplOrXs26tevXsGPLnk27tu3buHPr3s27t+/fVLzGAX6GpixkyZInWtaHBFLiQkRZyoZH+aZtnLKNIoUVeg9gq1wVO94JHXbmxRaAV/Xcu471wcTDIs/NuiGczOG3d/99GDbh1SXD3H/P8NcEOeaYQ1//gIdMZeCB/vwTD4IJ0qeOJwAV+GAMUaHwEATvyBMURRqVaCJGEoUoIQP7PRgSSR2K8OGHI1Yl0Yk4PmCVJxuOoNhOMCo0zhwSFbWSjUIZqUCK3cX245NOpQCVkFIJhyRFwjVXhVZbQMklFNlEIOaYZGZJ5pkReNRjF1mqueabcH6GWpyhBVZGZm1xltacvSVmC2lvAKqbZl7+ZecNgsaZg5+F3qTZoocqygSjiepQqaS+8Inpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWauutuOaq6668ypZlrxB6BWx0w5yX3TDDomCceQzaJ+Ady2oIq3SXFDuL/3XGhjLMdi2SSi13njSLwDbUZfttt6Oea60dy4FSrrHqSquqfnOkR9+C5tY73hy7oCsqfP3qO595ziKAH7TDBCxvqgA7g4m9zF6rCHPNhNckqxRSk6W47drhTTX+rppxARtL3HF5chA4HK8fJ3hOuKBcGIfKWg47ssskR8wuIg6yHOGKN78ch7jZZLhyrCquKCKR/LTJdEc/SxgyqEkrDU+NTsvBpBxWT21gjCbQGDWLT5OY49k6Nj220TXD+aJPVI4wI0RlX2kP2iXuiAmmb/dU0kkoGWV3SzAluZLXwDVqS5AFDak1P0ouOfg9kW99dJyKA8D4QinUWPnk9nwO9f/Cu2XOlN8Jxc1CjUVGrqTebd9m+lJPTcl5C1mC3o+wVnyZReZShInmmGYOL6abyTqX9fKXJy8N88s7TwP0F0tv/fXYx6Bp9kxsz70Sl/JXZ2Nk4JmWnmh5nxulkf4Rfm2iMYr+W4LhVZj9wMWfp6GM1T/X/f/Ln2Rmd4v3scCAqpKf4h7lmPbhilD8UwsJKmU+wMzvLvizFfvIBwQEPnB/BXRgDzwoq/FJ0Agk/N4P1KfCFrrwhTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIxSpa8YpYzKIWt8jFLnrxi+H41RLFCMT/d2XLY8i6oRnPSADk0XCNZ3Sj86I1tJgV7FlolBfiTkVHbdjxjotgziNIh7E5cGtddSgYGxHmiUMS0lTxwgTH8LhI7Yxij5yKJB8mSYtF5hETjmwewwx5SUTW5xDkMmUq5RDK2KFKkxa6jrZgBi9STqd6paKXHCD2CUbW0ZPyMYYcFCbKV/LLYcTYVy8/6UdgCkyYzECmq3QZB17+EmXXZGMw1XNMiz0yl91sxjZjaZ+DMZOaruRjOOPzTG4uM5HOMic2+UDMdEJynfUcp87g2UlfWqBi7MGlt/CJTH2+Mw/JoRhAMbmphnnzYcrMJieV4U+A8kKgxvQEzaYy0XH5/5NmuBpZyXbWT2aC1Gcpw5nQNvlHQ7QsZ98M6RxUulJ8kdSlM13pHHNKU5hKsqUIeClDp+mfnvq0mengGUp2qlGj2pSfONVHr6rGtpfSjGjDYJtMuaa0oIGMYErF0NJi2iqqjhUTOCNnVDGhVVmZFWh1Y57lLNA1jP5rbV2N6/LmWley9ghsDKEbVydUtxvhDUd8zatfNwRYEohtsFcrbEUOe6LEwnWxLlJd2AQbB7a5hLKVVRtk/zHU3fQtdY1z7NwawrorgfYisCvtb04rAbCtlrWSRdJrLRJbu3qHtqirrUKmIjjdTRa2MZGJbH0DXNQBTh/FNe7dUJTcw/k2s/8FCe7mEkBcmUj3uLyt7kyuS5zMbddx+4Dc63Qnut0Vs0fmhVtqlVW39g7OvstNDQF1EtzG0vdxhnMdUWBnoP3mpL+aRa8FXCJgIxGYPwbmiXMT3Lnchq7BA25JfvUS4ZvUznZAsZLuyEgF33Whw1FCge1utzoRg47EWfFwlxQXvGEY73jCuXGa0ggb4EVBeMYrXpB5/Bofg8nGNxby8OSYPOplzYVOdhoOo2zPHFJZiFcGo5a3zOUue7kHLIximKGYwiSWGYln5o0JBRAXvGwwfRn0zprbPJc3C2DM8APhn0QYGT7LWc8ASDMYBJ3n8znKz2wgtGr0Z+idMJAHeN6JQaRnw+jJRJB+YI4zESYtGwgSUNEXAPWnPD07UIvaU6Q2nakR7SoFNurRNjh1p1xdKFjvhdUlHOCl+4LoCr7lgm3hNKp17ej2UdDNxN4zY4Q962TnpNJsToGv7YzBAGoQ0LI+QbYTiG1cI8rbtZrzEbZNKnGjENy0MncRyM1DZifR3V+Ot7zDEAIAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6j41o9EmtWq+GbPbK7Xpp0qh2rAWYzWRyuPFtu98kMnxOr4/W9rx+z+/7/4CBgoOEhScWiImKBIyNjo+PipIWhpVIkiWSkI4InZ6foKGfkYqZpZaoL5IHrKyTi5yjm4yvibObq60HmKk8Z7/AwWaXigPGx8iSC8vLmrGiocCktcgDvL0/wtrbwSoJ3+DhponV1bWIzM2ws9Cd04jlyafYX9zcEvj44QkqkgX/AAMKPGfhFgFQ/gJeo9dnX76HEPPt63dOoEWF6zYhJDiPoaGJKSQxGEmypElJAVL/puTIEpHKlYpMnuzoERWEmzhzonzJs+fLB0CDCh061KdKgjWTtkSkoGlTo1CNFoXqtOnCpFhd7DRatavXrlGvZh0bcunWqD7NiiXLloTat2/b0klDd4vcu0bIAJODt2+PulnsCUYzxq/hFXoH2wNs4LBjG4nP8OWBh0nlx1knA1kTmbCWy5jtcAa8FzBoHZpDe0ytuvWO065jy55Nu7bt27hz647Berfv3r51Aw+OGzbx48iTK1/OPDZcRM0LXXXGrp11UO8ouaUZnVgiXbvOPbouy+AsguDXdgciyZyidAuo08poPjv89vISyVbc7Qj+eNa8l458B5HXiTSOEOSe/37I8cdfRA+BNAJBAz03XjvZVcjgejA4BCGEEh5S0UUXEXihJ2ZxuIOHEolTViIylUQhiQUQuFEtM22oohE5QSCSjIpERdSQRArF048xMqDejjv02ONZaPFU5JQPhHUOk1VA+ZVTUXK1pQJHcoflE89Z0GVaz43JBUERtOnmm2W+KWcESKmpR5l12nkDY8Pp+UdqnQXD2G3AyBWog78M6mcgjHEDaGGLFsInpEH0OYSlkSKB6Q2jlZHoGMZlWimlSoQqahKmnqrqqqy26uqrsMYq66y01mpra6neOkiuujJKaq+VbApsF53SVVpdvA7bhbDK6sFss3Y8Cy0dyU5r7f+12Gar7bbcdmttmd6umWa43r1S33lXkqsVTSY+YyCGCbIrJrS5tELQieSdi8s56c2ra72uiOcuAgbdqy/A4emoLMIGN4LdLQ3Xx7C/t/5njDID0tfuuRgzY3GACoeG6BnlWgDgxQJ6TN+7CCDYiIL5QWfbyIJ5s4+LExZzMkH30YdvKNmdDLLMx9Fsz4f64CzCjACV+fPDLyuiIdHLGX0P0iFewPQ/Tg8M9XyJTK3dokZDlPU4iNBoUcSQ3Jg2RiGvyiLSLYJDUS1qi22Q2xzZOrcEZ28HY5JKjkiijZ8QlCPVsgae8+CEA5lImHi69BKSMS4pquNLxxS55JYfVXn/6DBBnjnFtj7pOUlQSknl61VevvrpcffqpE5Bnuk67FMZlSe2ZoGlO1S9+9SV5uRq+eXwL30Jpuy1q6t17io5z3z1y0PPuPQotN6889n7jjr308N1felxkY/2JHPC+Vz7bv6uvgmj1x/9/OvbDy7+Nug//quT0gL/lBAoaQ1wBo/ylDYUVZtCtSWBgdkGA2njQLY0ymqS+dUBX3Aomk1wgzS44AJ/ZUAQcnAMx7ILZcLQhGoxqYAaxIELfTDD5gRQhUAoIWpiyD8dvqBYBkihAWr4KiDCEFks/AsP8edDGSbRhE3k1BNBGEUT9oCIVsyiFrfIxS568YtgDKMYx0jG/zKa8YxoTKMa19gtLLKRBW58owqqKMcS0LGOI7gjHi+gRzz2EYxGROGnkCiFNwZSgZ6hSxyteMgIZpCQU9jjHJcoSRj8UY6XfGMm2bjJNS6ykiL4JChHScpSmvKUqEylKlfJyla68pWwZM+4ULk/PLJNXwSQ3xhvebB0mZGXHPMlCKfjM6+xrDxgYxzypkVMW9zimPCKmsKW2auJ1eJp0cRlMifRr/vZyprmMiY0tBmvWnRze8AC5ySwOU5yblOd31LEOdc5sIIJLJjf0QU1Z6VOxHnCntfsZT7t9T9+6uwYHVOHM6WJCHdus2fkiNnYmvWxhMZHY8XEJzoyFlGEFv9UVhVNmUIbWk6SutOiIfWmX4xWMqGhdGXvctk7D4oylfaFpf6haTleulBGsEymuTzHgtDpGgxqw2Y3+8b6XHoOiJpUI9kMakfjsc/DGFUYSE3qUnfWVI4+tW1R/dhQJzqbq/YHBUm1m+DgwdVaOLUgzwyrTseaHLMCg25Z21qNLCROd5TUAmKLjl1/gVelle8VYjMLO/3KUMDCjahYKluEDLu+vD2WntVBkdQuyyrJ1k2pL3qbZfca0Mx2IiFN++iOPJs0tXZvs6MFpk8TB1uuqVZNfyusa0WEt9GS9qs/SxGscos1yq51Er79LVxNiwDh0upvnDusBSKnV70NTHH/oCMrq6Br3MchgrqGKxFMNYuj7MaKu7ul3+xkUt3LBvcci9PucLvbOdN9Dkr2o9x3CVdVO0UXc/elHvrwpN/p8ve2r1Kdfb2nEt5RqcDgtemsFLxf1gm4Jw6eEoQPLGFZUdjAFp4c8TJMpA0nqb+wuh1OGBwlEgfFSrXYlopvwmK0uBgoMH7FtoJXlfNh2EhUqQqKq7kU4fm4wUD2klOG/K8i9/jISH5xkJeMYOBd2Hrnw7LoOrzjK4ePeVoecBZrDL4v94TJ6iJzmb+SY/maUM1rNjKauByuMvm4lviz8/nwPD82wY9O7/uzLsnnZ/jFSdDC7PM5/gxouDB60Pzz3d/ovCjpyqGx0m5WI6YluWlg3bAxrvy0Ko+Iw1WSGtStPHUpIRhECQKGUL8wFAkFOcK6wJpkDyTNVTvZLRFikNfc8rXVgL2tDo7sg2M0NqKQfUZhC9GOlEy2rmtdamKHy9mDrHa0OUnrRKL6NVNEVbgzpeorjhsK5x6TqIVgbRS0uzXrHpUAmfBu1cQ7h9uWd6kPCGwgClGUt+p3GE4N8Ew1stWPVGS6IZPvZh1ciGpYeA3qbaeHZzsNBY9Dw9VFcRJkHFodv4PE1RdyMJb8iyf34sfruPJYuvzlrgoBACH5BAkCABcALAAAAAD6AA4BQAX/4CWOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHTKNFit1Kx2W2t4vVcrYDwOG75ernrNLqEb7bh8Tq/b7/i8fs/v+/+AfhaDhIUEh4iJioqFjRaBkEiNJY2LiQiYmZqbnJqMhZSgkaMvjQenp46Gl56Wh6qErpamqAeTpDxkuru8Y5KFA8HCw40LxsaVrJ2cu5+wwwO3uD+91da8Kgna29yhhNDQsIPHyKuuy5jOg+DEotNb19cS8/PcCSqNBfr7/P3iFrIIbMrHT9o7PPboKVxIzx4+cf0iFjRnaeA/dwcDOUzRiIHHjyBDNgpAkuTFk4NK/5osFFIkxoyjIMicSXOkyps4VT7YybOnT585S/6DSRTlIAVIkQZdGhTo0qRIDRLlIaBq1V1Wq7axGRSq169emUqdWiOrgBJmr5k128SoI6Zi3b4k+yJtvLsA1mZtK7evXLpH7JJhC7gwE72IDSvO6KBx48WQqRCOTPmH48aIr+rKLOCygz+7KkuZXIS0aMWefXgWPMZs6tOwe7yOTbu27du4c+vezbu379993gAfrsIM8eMmjCNfzry58+fQo0vv7XfQ9D9Sk51Dx32Tukckxl43QgvVP0XdWwV09a+WrbnjgTQKV4jcAu2vKK7/bn9+O0K54dXLL9+wE0wx5OAnUP96mDSTyD/0AdicgBQCwJBCG43wjz/VoYfOdxxKGN8LCV14YYYnbCiRRAp6mIlbI+pQYkPdcMRSSx+puKKCFsHikogxFkETBB2BxFVOPyWpZE83FYkjA+IFucOQQx4J101LZvlAXLAcx5lpfBFyE1hJXdkVmQo0CR9sprHGC2dh9mVmTtWBdxtnFVoDphD/RODnn4DWCeigEQzVG5567kXCnlDUaaiUF7jJKKSUVqrYpJZeqmimomGq2mWcquFpD6OGOlWppqaq6qqsturqq7DGKuustNZq66245qqrHcLtOopyvuLxhhm7mNFrsHcAi+wfyi4bHBrORivttNRWa+3/tdhmqy0gdW4rRbfekifOfuyJE24L2ennIoMfPvhSlMiWl8q4yqRH7iziuAcvrvK+B8u6CAR03r397ntrwfQi4p0sA5OLMJDB+icMgsco2CLB9SUIzH/W4ZYnGQSuY2A0GVesH7sIOIgIhBzbudvHd2VjT40abmzgP/2pWy8n341MMsTHwRyPifXQLIKO+tQJ8MIrFxJix9EJLQ/RKF6AdAFK78x0foQ87bKlQi9UtTeDrMhiwhVpQtA+Boc6I9E0bvMQLGZHdLHCaht169sSjB3ejU9e7TXA//wINa1+10zIkzha6Wghai7OeNucJn404IznCLlKj4vJOeYtUU5r/5WgW4mllqhv+bnkga+ZK5U1bT6nTqn/xKUq1roV1uxLOXVmUqLr9uWmT1iJZpq8l3R85IcjN7xV38pO0vLJT48m81/7JinxXJiu0vHUBxV8ZW1mpVZmccpV/Up+5Yao1K1xP0SfhP4paP1+Pmqbm0LDyUTnAAQabvgHM/8tIYAB9FJmzge9RckvCgh03XW218BzNeF5WrGgBjfIQSDMpoNaQBUIlSDCEeZgNQvcTGY+uIfQjAiFiMHKCkHlBxeuqoQ4YKEJHVjB0jxwhxfQYQ4vQ8GqCBGIQ8AhEoWgxCV6kIZOjKIUp0jFKlrxiljMoha3yMUuevGLYAyjGMdIxv8ymvGMNzgWGm2gxjXSoI1ulEGz4hiDOdLRDWggli6MBS06DisMxQoDHM/4xysE8gqDvOMI7KhIFjCykSpIJCRTIMlJnqCSlsykJjfJyU568pOgDKUoR0nKUprylNsCFyRVWcaG3atpXeqiK19JAP1pcZavtOUI0xULWaCMO98hW/aqxctBBOSX7YJl88Znq4epYmnJpGUt81ULZsLKmY6A5jKkqUxH6EuCByvEN/+ltWjSsj3VBGczxZlOcuItEwJD23qwGS1s8kg9+HLnfujpLIkdqGTl6GU3ucm1cWisQBNTZ638+TODmkygBQUIQSkWUJElVIC6YihF76Ofu+3/E6AcReg/MXoaoYXMAj7b6D0ZpLKIalShkDHpERgaIYdWVKLvTE9Lp/mMlvkGftWQ2cy0IcyUiiNnEF0EMN0lUnBYM6ZAxUYKhiq3vzW1po5AqjF9aU6a+rQ3UZUqCqhKVKtalB04O+hWt7NNpp7VqTDVTVh3AbeqXS1rOeWZWy3gtenMVRd1NZrVIDIRv2gzHXvta6jChiHBCrNuXvPogl7ktMI2z1SMjVtZUbA2yGJNnoSrLNviGqPMFq2qnBWtZ3G5s85+lqSp4ltgUZsiwnr2tWtNG2VRIivZUs2xZnXEbZOms7zCyFZ8s9xgWdc4254tqT1SheGGuarkAldx/4PInOAsi9NDRNcR0+0tN8R23csxN3TOtdvJ8uYjI5HWbeVdbnYz517PCQWA2NPueyGlXCfRF0rSC0AA8zu5/b6KdOf1XklqpyUCtw62t0LwfDVnXyQxeEkObi6EbSVhC0yXKRfG8OomrOHL7gp2M1HwlULMk9s5wloolomK4cLinbj4qbPSHVTWhxPf5cQrOA4nSnbH4wUz6SlQCfI6h7zjIhu5xUgGnoFrg8GzQDDA4UtelgU8ZdpUOXoVDsCWZ7dlJUemiFZew4zBd72lmPk0aN5KgMfEZrC42DlxZsOa6/yVOx+KewQcDPr+Vx0es5LKgDZfohJDaL8YujruS+chUJtYA/rh736XNtcAJQ0/StPA0vXDdKg1fSdOS83TMwA1oUS9alLvT9GTHvQBI/g47cG607JWAq1rTZz39aJ8PZzCrqm7HF+/KdHBBnMEp2NsGQYb1UEYdqXyvElqN/LLnMR2tTGIym57WwhH/GS4PTnuTkLbjedeY7rRuO4ztvuKMNSLs/VSbjrYcDzxXsu811LvOdw7Ve9mQb85GPAVDHyDBVfBwTWY8BQ0fFkPP0HEg7VwF+R73xWnVsYFTsRb5yUrG5dWyBXecatgHIqanLgXVd7FkdPR5XGE+bdnTvOa29w2IQAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodMoEWK3UrHbL7Xq/4LB4TLtiyeh01MwGqN/wZNscr9t38+t9z7/lrRaBgoMIhYaHBImKi4MWfY9UbI2LBIeWl5QLmpucjY2QoDyNlpSTlKeKnKqrjQWur7Cxn6G0KKOIqKiNB7y8noOxwcKuv4K1xyq3hrmJxYG90L2tsM6eA9fXs8g9At3e3+Bb2iLV2ObY06+NkoPR0ePbMOBs4XDpxIPn57vQ59H7g+K5ADfvj0F638A0CsCwocNq1RwGaATQmEAWBL8ZrDeCY5dGD0KGbMSgpMmTIEX/PpBY7eKOglc8hmmkoGbNaidzMlj4cJDNmwFdCn0RsacgCEiTKl3KsyG8oVBPQJwaaClTqhCjFpEpDmuEr2DDruqEVasOB2jRZvSGcG1atGbjHuEqty6Ttw7s6t3Lt68Pun4Dc0t4hI1grXgPK17MuLHjx5AjS55MubLly5gzbzOsubNnZJw/SzYo2vFBOqUZk069+LSeFFg9sQbFThClS7gLZRqrqeXsj1hz42ZGgHdvYNSC/kaibDhxRoOML6g2rLo65cuDNEfwHLqgd86sW/edfYkpRbH9QbtXYJ0ZftKwC4ZpBbAY9hT1oWvXz9w/c09pJRN9bazVDRrp6acg/4DOgGdRVAS6NoeBAig0iEorGfWLRBJhyJJ8elG4EWEdkQicIBiSpJNJKYn0YTGMUWjfTINI9JMCjVilI1I0/fRiIOVpEVs1O/I4JIylJSbkkUwOElYEsaU2o4VNOpMaXiKaQaGSQQ41ZZdghnkYl2IOhaVGWn5DZpkufclDaGzGKeecdNZp55145qnnnnz26eefgAYq6KCEFhoZnIYmquiijDbqqA+IPvrGapKiQWmlY1yKaRgSurFppn98CmoeoorRaTJNlqrDqbClqmoPBlUjHHfMBPhqDLUFctusuKRiHHm3lhAbr72iIh1+IFa6XSmDdOerdJuwN16yiy7rnf+uzhYHbbTIiYfPg4puR0q2jRwbnrfC2Dqotc7C58u56MpipbKEFHtKNe6s1+23U1UEZKnnNYOVevEJIq8guVrg4L+iBkxAgtgsbMHBgSQscWQymjgFPOUsiCzC7/GX7wHqxkWgmycGQrEFCw7g7gEE8+KvI3YNiGYeFCI4cMseN6gvuF4a2OmI3lAZCIcaDvkjywwCLVSWQ0+ocVeCIO1Uk0vPbFaEUddnoNEWeJh0U0iLfbXTNQv9h81Ff9HiSIOsyOKFKi1dcmAnT+22Tz/hJPdONSZ9491pZ1yhPYE3NPggRVrVo01Lx2j44W+QHcDiRzWu1OM1RR7sCkWdXZX/5klZTniwVeZYZOrUYramFKwz+WSUpaHsRGxPPmkuVdnZ3gTuuYO1+1S96z1G7L9c+RbUXrv11udO+A49E9JPr0T11iPxevbc57l991BgD/4Q4o9/w5lspenN9+YLUf4MkbbPfvv012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIxgJFAjQRnEr4IYzKAGN8jBDnrwg7+5IAhFIMIRagqEJ/xgCj24wg62kIOsYqGEUDjDEY7ghRvEoQZ1mEEeYtCHFYyhVFzFPyGaoEoDjJUzZkWc041PicVgYq1aVz8o/kKKuXAi+BK2K2LR6lljAdYWQ2ab/0V4UTeLGJ5suDesMxJHjSuDXhu9+MZf7as9VMTUHIlVR958jGGfYpfAyuisbXHLYPHSYqAE+bBmZcuQx0EkuhS5J3HZq4nRsWMx4hUMSurJkssgVyb9CC9O8otm1apXbrLVSEGoUVqJzCOgGInJ7/zsF6ZMDpIkRcsp2rJguMzlKT3pp16ix2cj+yNEtEYvQYwri8jMlzI7th+0pdKZl7yWJ0b2LkkO0xnMbJgjj0mVmJHsju65wsuIKSiHQewaEluZxW6JSsdMjnJU4Bg4e+ZNPIJMnSKTpizrck+qAfIC1NSPMueZzIHKpaBLAlpC9bFQMj6Dm+zcRt7aVjl05v+DnxfthTnDeZiNHghx/cyPgl420qYddGsa41pMvkaGd/JsZut0KC3Y1g2iZURn5bypQqN5TmsKhKcC8ClBgNovoVKUqBndA/O6NlOOpswCVmNIlbLm0noGbS1ULZDx8pk4pG01aST9ak/Dqr6f7g1FdRtbWTlkNq3qVKM3YysAcvbWQNR1Is7IagD+GlVIyDRqfPXC2zIkOk8IlrB3bZPacBbTsW6MbiJRkdwWa7fIXmSqbTlpiazKhcVqdkWclatR55PXvVrWoBbA3C/+BriqCa5vnn1oa99nHr7ZxG+bnSvncJRbk+32tRENhGw9QVvT+RYoqw3R5OJgueWSrnTxz1WA5xQD0Y7aVnG4zdx1h7vd8YXOruIlnXOjy8bAJu26Rvouel/avvMCNr2aWy99s4c8CzSuv93r73+Rp7y0wLa/1ZhdWZL0vOQiOMFhoZ1o5ve7B09FwbyrHXKhALzgReCV8/oNb4vQ4eCBeJezGfHtLOzVMKm4whaW04uZwOIWawZ9GQktQSjcPxwTRMfg4PECZzzkDXeQyApEcgKVjEAhd9DJHISyDadMZS5IWYNXzmCWMcjkA3aZfz7W8Zb/F+a2CmDM/itzVbuBZi8beVUUtN+XT1DC7rUZgnd+YJ6rzOc++/nPgA60oAdNaP2FAAAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gEmA8DpvPT7KajG67jev1e07HxdX1vM7A7/v/V3dkFoSFhgiIiYoEjI2OhhZ6Vn9rgFtrkI4EipydmgugoaKQkJJBf5SCqneWQZCcmpmas42itreQBbq7vL2lpnuofautIsU6r4u0tJAHzs6khr3T1LrRhcBJqWTHQ8mJy4zXhM/lz7m846QD7Oy/2fA27yLq7fbt6LuQmIbm5vPxAtbIZ83QvXvNyt0zh9CQwB8NIkbMBimAxYsY1anDGABSQ2wPcXSrA+mBSZOQGP+oXMmy5MkHHNWFdCExorBham7yqdmACyQFQIGqY0mUQcWMhoIKdThzx0g0G5EWgkC1qtWrRy8CbLqDpxuNYAldxRpWI9ezMMpaiMC2rdtbo8qiteJ1rt0tT+/qhZJ3r98ldf8KhidnsOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+c6hT9bXiVa8qrQpR2TTv34NJ4Uarem3jamrxR+hTR12o3oE1xQMh0fox1Hp4EmannvDkfgN3Bp6ZgiJu5akHEf35Yzf2TI+QJ11cLrk37YODE/JWzPyI5gO/dC/8aJFx9csnH1RmQ1UruwHMEC+6iR0DnksdbFfx4dhE//PwrZw5A9shnoBX8KVgjhOPGB1Bh+Z7h0UkzjcMTRSzBJRQhlHJrhIUqGFNWSISSCeA2K6JFkCEdKKQDJWDxS9ZNSMp44WWAdxnZNjz4aGY2EWijpZCFuRaAWk3M8WR+VMhCJ5V48EfeHllveBWaYZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWWiZqhraxWqJhLMroF44+2kV1ZUgKqSqWXipIpl5QCoAKT3Kqg6egOmnmfTVWsYo6yrUXToSbeZlqFrgRolurytTi3JWLDefHeTchVxauudLiHYIFDmaep6qkSAN7sRjinq7ehfIf/33J3rUss6zM+gO079k6bXPVWgvdfAVp6Bd13NamE3aHKDcuAZAcKx+61MC617bd9pGetzmAO+2A0NyLry/jZCarv0cIzAyG/hBYCMJhfSSkfajyIYV+4pTVn8SEUExIrRZkeHFkGWscBcf0euygf+emO7KADIIciagkAFSPhcgWQnLENuMMW8wAGsRzzc58nPSF6grtAoUWHn2NyTc3NiYdWYnYkZNBWmBx1YxdXeWNWlv0ZNdfP+YsGCuWqFWIZQcQo4lgQ7b2F22n5KJKbXet71ld6lSJTmJP8WNQQ+1tFNlvF5Lj34ndnUXWATxuCJJjHQ5U1zQyjDXjFlk+Ff/mVmmuAOeTSY5FVI2LRXpVlENudU1fWTl6j7Y37TQ9uccW5ZS7lxpWlFHaG1bwL6hF/Fu7yoX8Db2TUmfhz/MFcPVJBI4TN35Qj30O2vMxeB/ef3/K9eY/UX767EuIaPtOvA///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfIwAY68IEQjKAEJ0jBClrwghjMoAY3yMEOJlB+HQQhByOlQRJm0IQYROEFVWhBUp2QUiWEoQdZWEEaUtCGE8ShBHUYQReiIFT78+EJgEimlB3HCqsaR6uYI7tYpSwQqmCVvF6VrdIYEYqCkCJvmFhFJ27PXZ6jFc1y4wj/YoHDEcZbEmYWpjItkOxWZvTNb3ilGF99sTjvYkJyzOiqZaTRAiKrm7K8xS7uBUuPw+Ijc/4YyDoS8lfNyuMS9hjHcDAyOroTDL/aZcg2AsFhLSPjtMplrokdrIkh2SQnAaC65MXrjPuR1rhI+RxT4guVDykkt67TA/bAYlz1at41DjYNXApEl8ziJQ98WaztBHOOBiOmzASpLUiuspOogFchlgjM7ggzGtLE5MkMo8qcPDKMyHhlb7oJH5gNM5zTNKZdyonNf6EzYOrso3sIdgDwwLNoM1qjNcHoSSKAMlpTA1o/iQY1d3TRbgNlJfo+mU8uJhRoPQNL2gR6x1au/6eiVLxoxDKqkY1iLGMbk2UsK/YymwXyZ+4cp9qeuDKVdoyl7aDaS8dIjphSM1M6G0fUSApTjD6UUEG9xlAZaoiijvSog0pqNJZqy2k61R/yNBRJqdrTZyjtACZN31al1tWl5bRBC8ok+xoatYOog2rwY2tbmRYNuLZPrnN1qEgXqtbDrE9FoBPR2egW1sX8NQyU81tZ0EbXn5Znom/oG90Si5G5tc6xvYJs7QphWbPBrWyd3VpfM3tPG3H2JYotRNzkhlq6da6gechbixQn2ctmdV+abYNsC6G4xZ32Q5OFalPCh4rxCeOwiHScUhK3t9glZbnCnQlx2YgK5E7yueyIG0dvnavc7I4WcDXZpHGsqwTTMddF3CWE6GQqnNziLbDrtcDrYIfdzbk2de6dEHyhe7vXmQ51J4Wtbj/r2f6SLr2YnWlpoUJg0bpuvghWWH4P1OAdzRcCEcYMeQ3XO8xFjzIbTmnuPNy770VPeW4BXvVOXJbfOW/FLAaLi4931xYvjy1/pGONh3fjCOQ4YQCMMXsJKOQEB1nI06OdB0sQ4gd61IFPbmCUBUhc4xqgyfqrsjnJp2QMTnmBX1ZgmBOI5QaWecloTrOakSDCDbZ5zXCOs5znTOc62/nOeM6znvfM5z77+c+AfkwIAAAh+QQJBAAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter89gXhMLoOJgHT6LDWTyuq4uuxm2+Ryn2G/t7fgeIGCc3RjfiyDADQNjIx8j3xykJCNjIcXhWOJdSKclyaJQ5CfM5mFUhapqqsIra6vBLGys6sWCbe3oUeVDaS+JbWzBK/ExcILyMnKtbV5v0gO0dFctcTCwcLZssrc3bUF4OHi47XPQ56orLDa2rUH7+/Mq+P09eDyquY40tGmAnL++DlAUm0dO3yp4CmE900cQmYDIkYsp68Iui0URzyUyFFiw3DN4rhbqDBjxR4Cn/99vLeqY8eR8DoufLnqpM0ktQLo3Mnz4UOeAWrRzHez6I9aD5ImrcWgqdOnSJU+APrQaJGUh2op2Lr14dOvDHL2XMW1a02rOQQCIjQGq5afY1VBmEu3rl2xO02iJXLxrc+/FuzeBexzr2EbhC1EWMy4cbdlhA9Lnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3N/vpWdkZ7bRrdlHXx4GXTX6LjcYBfQq5Gz6PiZJgj92dTeAxekx5Jyr6H+EnfAJQzSay3hHRFQkbdvoFNVrH3rY49RvaQ9/orieG/ZxdrPv15Dq2Cyy2nibdEQfDxl03/Lf4t8JA9EIJ0VmkGKoFgfArSsspCD0YIYVWrVehEe7EkJlNJAEqoihwwxTNham6RslIBQrnk0YYKnRgTR+Xdx4aJNgbJI0IcvuijF1EpRRVCQAEl1VRxpXLkJUkutQpYUK3y5JL4xCYifqsAVZYCtQhm5lxalcWllLB9GQV5CJ2JJpzyxBZjF3TmqUpjESQ25S96gvjnoISmYF+hiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqz+RGRmeHehldcq9yZp0O3lXkCXgAmTLZrTmop2utI/BKaya/DuIcH9Blct4mxOpz3rJ9fDfr/7OBUHcSsC5gx50B23GXqx3GDbJrtOZwy4OwlYHnphF6qjBtes9d5i666dApr3Si1HuYq4a8iZB+CChYy4AJqAvEuJKSOAzBBvXnX31xsNpCfhC7omCDMx484Gl3gqmKNRqqkuEsDXIzY4Q9ghayFRcWXHIqJ2+TcjIrf2ikaO8WETPJNTM4MUIe6kwUhfgKPHLEGbZ4QIdF0yOoZmqZ0msmLwcRs8FEksRQiiwBNhSbqvWM0yrXEKaji6qQswqLOH59dGpmE4T2zD6t/TTYNL4tUtxsk0130n7NfcFGQnbstxpOF2m4aFnbobgqQg7gtN5jW2DxDkBWHuRDjgu+ef8MeDUZVJ5rWpD56DSU3qSeqa/OugxVQpkXk6brtGWUms+OmJZSMYVlU7Wn3jKM/FBJVlleDR9WmLyPeTxqdSudipjMryKnYGlylbqsAfvhuvTab19X91t9b1rVmhwrRuRTwHW7XObT5fr0rFV/YKD0n8n/46uBn8j+Rxg++cl3MEgMn/jEscggsHUFXCBjGgiYB/qAgMywoAY3uJpYcfAKHvygCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIRYsATACwqpiProhFW2mxN9f6DeF2o6z/HjAMLfcKn2YUVoMzWiWNYsiiIHzgRl+cq32C0NZh2EgDdpnjjmKAFrIkw8cZ+LFVVsNWtsb4iXmty1/6KJcirxbHbfGrB4f8hSQnyZZKVsSRO8ikHcPIyfD4ypJznIG3uBOu7NQxC8ZSpB6lVUYZrDI7rZzEK7uwSTwAsoufrCUQRBnJROYRXfrLQiFvQMw/GnORasQEI5cjzB80E42kTOZR8rQv5vSLWfbK5jTHw01DXTII17QWwPIlD4JxTRUIW+YOdtksV7GTGe7kj8dwIU9cVWIyXLznz5iWNngOqJ85oOeiHJYxjaFsaPgI4QgZ2lCZ2Ww+FGsOBzHW0I1B/zQVbjMoLh7I0Yx5FKN82yeBEFhSiJ30MZNLBcJAljyMqMOhsnDYS1OWM3vgjzMCtJ4FgFaiu9XsZjjjG8t2FhptXvCm+6kZAYSGUnxErR4/xc0497e0BEmVqjAl2lVDKjqebdVCUDXGV1dBQXmMlay9Q1o070nUpgFub1Z9q4rqFKKznq2rGAraXaGm16llhn2FoCQdgsqDremza17DK0gDJLYhAdAyiKWDYsvAWM6l9Z3yiGzgLABXxN3ospXJLBwXW1N4ffax+BCtZElL2b/Irmx+bYLDOheR0NF2rxaAmyp8m7/cktNkeDNtb1HUttoG92/DZW5ZTePUI+hFuf8uielzGXdX4lLXuFC4LkIqp13hJkS0WdVMdV1rOOxmDq7mtYBs03vY1soopS1J3F0xZ9nplqazeMIv5fQb3R1JZCb9jWsLeeu5zDmNviRVW4NtBDrpKviEDJ7wRCA72hW6zniEiV2CPQy93MGOd7dFYfF492Ge7G5+/lUx8JTE4hKb7sU6gfBGZ5wUEKsid7qTivpcWDvhDW/FMM7gC4t8JechOccIsZN9f7Q8rjTvyDY+nSrIh1rUAHiAFuCyPJz3vB9HL3tdpqk0lLdlNI/ZyVlGH5mYitu5gmF8bg5M/ebUZu/xDnyelFyWxaznPct5yKTJrGK/fFx5pG7PfL6e3p8DyI/VMpqrjuYdpCFwPzonutLibMuUwdzp/tWv1DFuzXp9RsDtYRDQwERSq+X0athc+gkYVGBjDviaW48o14AxoAN7PWqbAtsnwq6gCnUtwQi0tTBLjmCzn23YGh471Tq89oV/qO0qevvb4A73DyVKRXKL+9zoTre6183udrv73fCOt7znTe962/ve+M63vvfN7377+98AD/gPQgAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6cYZoFEClSqPPrHb7u3oN1bB4TPZyz2hcY73OecnwOOB7TdvvL/PxHdbj/39sa3RSYoRRgg00h1+Ajo95dZCTlJWWQnKXmptEmZxQkp8nFqSlpqenQ56iMIl8VV6JlacEtba3CLm5twSopjmrrGqCdqkkvqULysq8vLq7t8vKtLfIpAnY2MHC3KOmB+DgpwXk5ebn1ukW5+jW4eKmYhLz89nY3fgipwP8/O8H49gJHEiQ4Kl//fidoseQnr0E+SKO2JeQYj85CTMOwFjRVMZ0EoGF4WRR48YwB///vTslxmS/UxBixjQWsuaLUw9y5iw5QKVPnx+tMRhKtChNm0hVpCvKtGm6AFCh6swZFSrIpFhvnGpq1JTMrzJPVR0b4GjWszBOKVjLti3Zqk+rtp2rYKxZtHhNiH0Lla7fv275lrWWt7C3UhESJw6qrrFjUoYjt3hsQbLly5gza97MubPnz6BDix5NurTp06hTq17NurXr1xEZ+YEtefaFV2UO0S7MSI7vPqF2o7Ht5pAc28SFC3FlHDghWTNkB1deKTn10tBFi1Gx/brlbXizex/xu0pS5oWcIyJGiVqzWs8Q8Lp6A3xk65Dcv4/Pvz80W3elUB4V4+WQUjgBlZOO/zQMNshgOvN9s1I8cRTYw4HwlFJQO5RpaJA7E5YiD0MPWaiVRx15qGCHLKLCISmMXfOQPZJ1pwlPGYmBoUosheGSQl59FaCJTfD0z45HShhOjBYwRR+RS+wVFWU/DhDXlKY4+QuUWizFFVdXSjWVXYRxiYZabVEGFlhSvjXXkGYWaYpgAQBmJ110PhlnFpTR6Sdc1iiWGJx7KnEKg4ImGkGLvhRK0mOORirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qlJSScFqtVdYch0rFKC2xywxnoGcq7GwYitT/Q24HG18kqCeDXM+uurhAirAn7FNgcHrqsqiwKzizibW/+0I1DLq7Y8zMptqejRgSwdxEaiqrQ3fIvuH+que0e77qZRrmc2nlBvvE3Yh+8d+mY173W/SvYvdQHfF6wojFaGSYVohQuGegYMfId+zcQXITIiwaEZvGea8p4t/oWsy8WQuVAwZhLLWUoJC0rzMXzP8PKgx9VY81C/lqXMhFktL/MyARZHIw3F6dzMcKg7JkhOzw42PY01JFuQpIhHg5q0KRuak3BB6UxNyogO0dipkSGSkvXZaBewI5MNNVTi2Ci+hLXWCTP6ogVMzig20nEDqeLSdbd4d95633MqTzxx5JLifsOYYqP0jrQJjgnpqKRPPVZRJUxCbrkvy333VLb/1D8BdPkBTGqJ8ec4TUV26aUzudWXDBAqbOs6vQ47UI+jQnvtnuPb5mCObW4NmaWoXvLnxwj1e1fIjDXVA8hDzvxkWdLO+ZozzSmY7ddPZMqbj3Eflvd8kb9y+IeRon5j5ndfCp3vK8w+6KXYmefxcgFWvf33E9/8BHOnAq5lf6sLoAAb86cGpiNR4NvXKRIlu8A1RoEpmKCgKmhBPWFwgRZAlKIU00EAflAGlDmhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISlzgEVWGBictyIhSjeK4pZitXsDjYFL2lxSFCawq60o0Qv/iw/2eJMYhkBFayxmitY43LAD70lRvHwDFwsSddWJwjxOpIKp21wFh63NXn/MgCQM5RkPviIxXFFUZsiUCRooLktNr4xhJIElSXhAEXHanATJoLjFnkZAA96YJNPhFdDjPlFwhpAifCcZCCkKMVDsFKS0rRhaQ0Yi6LuEsi9tKLXbTiCWoZmXuVwJijIaZhkEkeyZ1GmYVhpgikSUScCXOaVbumvbKpzWNys5vN1FhkoKmakxWGnKkxZ15+2SVGqeKbhmEnn9y5MHFiRp5PSNg77emvWOaRVlJA585o9rGgAahM9YFnTRz2RoFGiaD7iVnNEmgDa6IFn0SgmDNEFrKovf9AnbUJ5h80iguO+sejJhvQxkSKB5KCzKT9QWkLQDrOO56BZ9Zg0M8MWouZlSJqpzAaPzfjUCDgFBk6fRlPCeBTUgDVFEIlw6iu9je15dRpWIXQREnhNQtY9FJUNRvdkIpVp2n1oKXo6lctFdZ1jNUXZTUr1LZKOgRRaKieamvatvYhZKg1DG7b26b0ija+DqRrowNbPQSrKd2Zrqppi+xb6woOtrUtbNnIa+i6KtnO3g0hvbssZg3HKccqzbOSXVtoRSuBt5U2dKctIWUG17vCkdZqsJ3bimTbGNrKrRS2hcjhcluKHMWhSoyzEnGtJy3EhS65xoUDkzi4vOYuF2//lTvuj5LrXIpuhpqOoNxFUHK6v2ruR9uTX3W/68xLiJcflktr6TJHBeOVgk3Bu55pyzs60P6WFMpDRQD3K9+fqPa/TYIec/W72f7O93SpU7CAWWeK6Tl2d++gboK/FMFY4W4nDcawSjT8uw6zanhUQi//sJQ8CQ8YfVZ5jH198b8Av3iALG7MjFFRYxffz0vPG0qYAjC9/5nYXUAO8pCLDCjvqnB2HA6S+Yb3PxpCGUxS5h6Vm7zeF17ZKVle05ZzbMInjy9N5YvfmPuC5vV9EE1sUZOaYUyW+pk5f/773orZ/JcqnxDOfkEgjfvXZy6X+cdnLjRfhqw/Q9+ZFPQzi+CdBD3hN9N5LJKetJ6djGjHNPBPDxTUkdfVp09TWoMkzO+NGWjqTfsCgqruNCko2DvectrSiNlgrW1daRYeShojTLUFc/jrZQR7UB0ktilEGOwS+jCF4NQHpKJN7Wpb+9rYzra2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93wjre85x2rEAAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6Z45otCmoWq/Yp3abzPa8IyxgTC5jwdy0OiWNnq9lwNvadrzm1bh+v0ev/4Apfj54AnxjfoOBiyt1SI5MYmZXjJUtdZJkWJCWnZ5cnJ9bhwCipqdNpKirTRaur7CxsUOqrD5xtiWxBLy9vgjAwL4EsrA5tbnJL7Mkxa8L0NDDw8HCvtHQu77Orgne3sjK4iqxB+bmsQXq6+zt3O8W7e7c5+iwcRL5+d/e4/7NsAYIFFjvQDp5CBMqVFiu3kCBsfRJ1Mcvwb+LugI+jPVwAKmOHT9u1DjwHcaTNTj/ghwYp2HBc7HirCwJC4JNm8xQ6lwG64FPnyoHvhw6tOM7BkiTKs25syk5bkqjSn0XoGrVnz6tVjXptOuNWFKX1rxJFicsrWgDMPXKFkYsBXDjyk2rlapWuXgVoF3btq+JWHSt5h1MeG5gtdz8Kj4RK4Jjx0bhSZ78arHlFpQtXN7MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7ZtcYqCZEJE6bap3DYSwTlUyDcg4DV2k1pe3PiIUESgI1GO3HmY3jsLVbduYvtpXLKlow7HPfTyMpfBK9M2jVc1BMO43iBfHgn79u/z67fWi2+K82TUh4NL9rwyjzPYJKhg/4LvxAdLQTEdIiAPBBoEy0IHZubKQu9AeE8ZE1U0oQ1BQXQhOxqmWEyGFkT2SkUijjhEiSC19CBRFr4i00wDxFKWfzIuQaOHr+CYoysFuehKVPIFmQRgdVHGY4/c7AULk8Y4+cRRYYVll1VYPWClM1qq8ZZcmZX141mH4QVkmUKyGVhhdOZ1GGJkwrlFZnf2GaUzjzn2pp72wZJgoIhGoGIxhK6SWaOQRirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmpiWeEdtih6oKqRbBqhasweLcDda3SWmuuOQhnBSnNjYoJHnEUAmt3xALIHK+u2rrrr8oCi4euJDh7x/9w0fIRLLXWzlCItLNWy6xtx/pQrhC4hqtlt6vIWoWMw0KryRXnUptEvHlMQkcb9nrCrnnohcdva/T1a0nBBq8RbcKVLMywCItqJgTCiqmXzH3TvOdgnvNJ2C/G1OwnMn+8DFqCw56u9U6C7fWi8TXYYPxORRRzqjI3LLdMwMu9MAjLxsXQ7HHKN8J04jorL6h0zNwAbQGRrtRsaYUHYahOxBzSU0+EZITIz6ZDbn201WRbXaGSFkzk9Tdgk2SigShGvCiLaMP49ac0Vn213CrSPdKLdvdDat5ue3TIlCLR9AraJrtKY0hlVAi1BTvO5CNZjdsbttFF4nj230uKxTH/w7GEubmRRYEuS5dIZX5q6VidjnqSqoPFuuumQmlVZlN+udWVorvyMGNQsY6lM2iFOSajw/P0ivGXq2nWK3fi3vyZcaUp/fSu3Olmls2jgD1c2m+vO13fVxa++LDQWX2VdxW2vMTr/yUn+nXmr9dhTdY/Ap9+8tM7EGW9j8ECUYzjm2T8t4LGBCqBCuwfAzPyDGwkKlARpN8EU0KZDXrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEBNWLyC4SwAMLOIPjsjAfyUHW7xR1wadSIN0veuDVPQWFOUwrvVlEQW+ype2pjW8/y+eIIyGIA4ZhdWGb+nrDUp0Y7b60MVL4esMxcJDHJM1Rz2YMUh3tOIZ9jiHPtJRirr6YwmUY0guzsFgihSXvBoZxTdAso694uMhr3gdRNIqkmDUpB9zBcpJlRJZhVQjIk/5GSXmwJVf2CIrUQPLG9TyVrLEJHdmuQYmQoqXavBlo4CZBmEK6I553JcUhojMNwrgljokplMs9hppNoWarrHmTrDZGmimZ2iw8aZlpDZEEpCznCI4JzrV+UOUofNkyrreomgBzvBFjJ58YOA9J1bPbwZIHCD7RTWcVkAUsHOaAVvPz3TGs5IlBgcHxdtCWzaykTntBe7UVUBdVtH9XP/UBRml1Ubd01H9fLQFIdXUzRCEDZ3tbKAwi4bMuCG0fA4OfBDDWUsZCtOeMe0VBIVFTfcAKqqNrQBJW9rSGrSNohUoav1UqVOPFI+4sVSpSmNqf6bKNaJKtHOc25BVi4HVpTatqWB9KuWimimjwo1sWGOI1sK61q5JJEZt5epRs9Y3uTpjcvi4693yuriHTK5siMXQ5xTnCrUJlm1SLaxQxPbWxFp2rE9ziOocS5HBYkp2ervsZRf7tsZyVgJ4/WzhQpvBzPiNsRYInOCIJtnSVhVprZ3Ma20rW4vctLZUAm7iVjLc4LoCgsIzIHBpVFzI8QFtyNWgRldbuOY+pLj/hBtdwh533chNFbBl6N1YblJQUXGXJd5N60u6CgDxvmJN6qsfaL9LWSRpFrbHY558Czc5I5HWuBbIryz0yd/6ZpYo/7VdUiSoXFeYrsCze0l0oYfT7fYkdhCO8H1tq2AvVdhg58OTZNxbjPkJmMDU+9OIeeQ7EQc4eNKVZ4p3JyUWw4/Gz4MxiothPAGHWHkqHvAHudTj1t34KliZX3ktnOMuRU96IZ6fCjs8lfFC+X5pWbKMQ+dkK6spykEu4fgUUL4rzxh/2fuw/8Zc5i9jGS3pS64Hx4yX9yEvfoSR8pDbJz/+HTkA7gvznl8R6MC0uNC/i+8GwSwY/dXJzvpdiPSb8ezoPPtZuzuGRwAFyA0Cqnm/k9l0nwaIwU+vD4CiNnSnS63oCTrwMdHNbatB+GrI1E7WQh5hLA51QUFF8IW7tmCvFfVrFwY7GsMmtgJp+Kh32m8yzo62tKdN7Wpb+9rYzra2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93wjrcRQgAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6nyyHVAqtWqFTKlPA5V6/4GPX28s6xmgBYL1Oj83huPyFbtaFaHZ7PO/74EyAN3cjeXqHbl1+RIeLcYaHkZKIiQKOl5g9k3tdlIqZoKGaepVpoqdDFqqrrK2tQ5sAqLNJrQS3uLkIu7u5BK6sObG0xDGvJMCrC8vLvr68vbnMy7a5yaoJ2dnDxd0srQfh4a0F5ebn6NfqFujp1+LjrIcS9PTa2d75yKwD/f3wB8i1G0iwYEFw8Pz1a1WvYb17CfRJLNFK4YCKCmNZtKhRIUZ/6iaKrPFx44BDCAH/imt1yCRIVhBixjw2suaLVg9y5iw5QKVPnxbVMRhKtCjNLw2SJrVZRGjRp0/VBZg6VWdOqlNDZjLAlSvTWqygGoUps+xMVljTBjh6RWnSrnC7Hoob122DrzRaKdjLt69arFKx9h2sIC3bRXHxCmn1lyrhx5D9Nl57DZRdxUFaRdi8Oei6z6BXYR59I7QF0qhTq17NurXr17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvDgNQsZpCVKCPLkfM5A4cVn+o/mQUtadr6COhPuM5tEjldKOulSs86T4kB9tfhN49esVxwqfPT5e9GzsP6nm7BY0BL5odQM3+jHBX3//Jahg/zS4HJYCfmsUmENK8aziTjLTZKhhhuoEyApALG0iYQ8UBsSKQReapopB6oAojx4OQTRiafx4dOI5KuYITIoWeLYKRDLOSARPHOlRoourtOTSRWTJ5KCQBtboD5Kq/FRhlQnZuEpUlUEZ5SqGhbYkk8mEueVYovmRGHFOiQVVYFRZ9YCZwICy5nB69WWaWWYxNtlgT85xp3B+NhbZoYRNRlkylrlVnGmKRgrYNZxtFqiXTbSSYaWcRqBjnZgSY1qopJZq6qmopqrqqqy26uqrsMYq66y01mrrrbjmquuuvPbmXa/d/AosMfUNW4OwRBRr7Hfw7QBdJZ64gWyuz3aSXv8X0+KgrA/YNbtetVxEK0C2g3h7XbdkhLotHub2QF+7oZILhLwrvGftJOMt60R7ELoHb02N/BZev+KuK1HAvg1MMBv56rsFtP5+Usi/DjMScbjXplvxFQVXsjEY/X58ScgiU/QpLCKWvM8q/eHyn4eM4kDgxgc6s+DNvMCsygsk38qWOhm27B80vnDIis6uQDSzrj9fE7TQL0szTc3qKJ2yzx/CI5A5QG/o9dTXIE2lBUvTWuLWKBbwKTsHvaP1i2zEeI/ZUv7ztoVp5613iT6q4pDc2tC9St9sc732pzwSDuTcuPKEttqH65i4ltgsjk+vjtd90iZjdvTS4JS7ovL/yqp0bmTWP4XIxpit9BnM6CfwNLaVJq4CEOFcxgw7TlbJTruVhLfi5lCXNnEZm6zI6fvvQIUu/PDFM3E8nmhNChrr19BpQe47qwnXo9cM/2b2WMmpffRgDGrc8262zqeT1TeGvhJ20QXXXPZzNf1sefK15/tnAdOf9PQ6TKgPOP3by/8AWKi/AKqAlzjgbxKYqMnAaSqH0p6dvoc8ARoKUSAsjAW7hIn9BQdSkpKUOjg1P5VpplLBi9xnYGcMVnAqhjIUEA1boKlpdKpSOTzNDkkUmiEa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFrfIxS568YtgDKMYx0jG/zKa8YxoTKMa18jGEtCrjSl4IxxPYLA5pqCOdqQjxZIoRx7gcYd93MEfaTjIFoArDR3DVhZ2WMgoZIFf0klDIHXVyO08EmIMq8QkX3VIcW3SBZU8DrosoZ9OZmxci2SXxIowSlKqa4+q1Fh1xiAuVYVSW7As170iactcAuGWLXjXKk31yRsUUwT2whi+PCakYx4rlbqUpcIymYgzQnJhpxTjNbHJyzBuk5vAFAXCejPNhTVMPnoATjkJds4xfpOa0vRlFt/ZzYkNU5uYlEQyXUnG+dAym3b05y4BEM4sJtINeSzBQU2R0BEstKBY7FlDFQqhHa4NZZNI4kWFUDYabv80CB39WM2eQTRrkNAGIaXZ0aBW0gadtAYpHdZIdYGzmyGNZxUV2UxdVtMF3dQFEq3YTofW0wT9tAVBFVz3RtA1ZgiNAFHDhdFYZtJkWC2jmIPgBZraDJbmTGrMoNo1riqJXJ3tRobD0NfW2qGqYmklcCtr41B3pcKVg6tr1VBbXWq7u6kipq86K97SCoy8fm2vtxDsX69mK8XaFUVrY5Hb4JokGDUkSLJyrN4gJ7m2JWNs87gs4zKrubFt9rSefWs4CPc30QZuVsurK2pny6Pbha61DxltrGJbuxXR9rd8uy1uJYDZ3WrucUE0zeQ+VznLmfW4aL1rckGz3IWwwnL/l+NV5kDnD8+ZxLtkKp3ztOqw7Yq3u5xbEnjNKzqdQpe7/QBvkSZBOBwudXREysjp+pq6uAIAe6twXZp2p7n5ruFIfiWbHgCsCgHfd4i8RTBlVXsA3KEJVEeMMF1VElzmbu/C7c1waRNMuw5b90xE0aELk9e7ETNPJfb9cPvIWwUTIpDFOuHti1c7XhSLpYVIsPEE45cVMS3pgotSBfeE2AcJ+qaBSV4Hg12hvSUjhoPU82CRr3dk8lGFfcSjcfqwTKjwiQ/EUDaf9TAcQTKf0MxnDnOZymeV84lZUG4Gn4/HF2AAQgDKGgxD/fJnAPzlT8i0ATOfG+xnQK+ZyUhx+QuhC62HSSOaf2GBXpPe5+gv39kJg86foe136dZQcIGcJrJaHjjgNndFz6pg9Wf8/GdVp0XWkHaEk3tDwcEoCskZfPQGX93BWEfm117G4LGFvZU8D3kVwZZfsgMQ7S0/+MrEzrIqFBVCECJbd5co9W46rexuL1va4HaEuHWDwhR+Gxgs/LRFQ+PuSK0QiPL2KL3rPcJkxLvVSnwhZ2I8XYA7UeCd6XHB8y1iZfjwh5bKYRd7yAyIR1yGE2fFpiweRDGOaqIm+DjIR07ykpv85ChPucpXzvKWu/zlMI+5zGdO85rb/OY4z7nOd87znvv850APutCHToQQAAAh+QQJBAAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0ShUZrteqdsuNNb5f7BVAJosN4K8v3ei63zo28gyv25/s87ls1mPld4GCRXSDhodLfIoAOX6OiJB1i3w0e3yFkZkWm5ydnp5Dk2UvjmOip5OYmVKeBK6vsAiysrAEn505qKRiqL2XpatAoCS3nAvHx7W1s7SwyMetsMWbCdXVukKWZarBwp0H4OCeBeTl5ufT6Rbn6NPh4p2KEvPz1tXd+MSdA/z87wfj2AkcSJCgp3/9+Hmix5CevQT5IpbwlHAAxYSoKlbMmPBiv3QSQ9bwqHGAooP/3v95UlTyYycIMGEOE0nzhacHOHGSHJCyZ8+K6RgIHUp0Zs2jKoISXbo0XYCnT3PihPoUZCBuSId4Ylr0ZcyvMjtRHRvAKJc8vH79SZMVhycFcOPKJUvVKVW5eBWMNQsHUNsfnuhCzUu48FzBZaf9XdzCU4THj4Gqm0yZE+PLMypbwMy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buCH5zX0bK+9Bipr4DjL8d2i0jhSVQsPW+OnizluzCR79NbYby6FX7+JrVApu2lIB2x5NmStmCGpZvXGdRfjuopbfLm8evf37zV7xTQGf0YzlqIAnxmgohRNQOek8o+D/ggqmo943KsVzig/ZDRhbgfBwUlA7mmlokDsRciIPQw9tp8NOB5LT4Yq3cLiJZJw8VKKJR+y0ER8YprQSHy0p5FVM+9H4xE7/5FgkhOHAuElTigk5pFh1VdajRdPs1QmTlr2x22xKccWUXVBJ9YCVxQiiHWtvyaUZWGAFhhheQXZx5mpuCmbYnXkhlliZTnKhmZ6ARlkMZI/F2eeTxjxD6KIRsHjLod1oBumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6qtbvtrNnLKelcZ7Z8SKg66ZUrcErToAe6ivSgiLg7G1wsArEMgmywRyfihXyrLOUtFs/7VcXIutFtpuS8V0lHgL3ITHVpiFuLmQKwOuFqLLHnwqCIhFgOO5y0J/8bZrRVrx1Suko5sJ0d4KAPZ3Srem0acMeg/y+a4ou8xrcL+P2KbwMvhlnJ8rhpaA73+l0ItFCQjTZFaCz5j3CsPOPKNwOg8NTCG/fYx8IS76FKOgyucxU0uDnTR8S8zqMkszACVnlWOKBaDM4NPIOCgNkhluInO55sq2dCcbmgNwQekcKSIfDc04KpEhbtL12mw3TfUBSlrQUNn2lIoi114D7KiLFsQtY92p3u0hgnqzyLfff9/jquAvYnTKlBy5xEncHTtro+NlGJm2BSz16EmbONtrAv/aBr4t9iYIdXRlVw7be5NUpPskO+Wre1l5sq/nFLvsP6lejJdC3V5rnVVJ6XmVgi7J+iZ9NVdbl8APBWZUUpH56FX64rYV8J+zCSSUggnvBLQGSLsWGK2lGdea3ofFiZ5whm5H0p6pDxf77RNPVvxZ3kF/Z/bLE2KmF4A7WS9gd6BW+sBHFzw5EC56Wo/oUvCnQAUqHYsSH7ocQyjaFU4dE4QBByHjwQ82KYSN6YSCGEUoEyIQhSeqDAxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIxSpa8YpYzKIWt6gCBXKxi877ohfCKMb/iJ2rjDD4HxPJZ74reFEGb7QXG9XiRjLmII7umuM2xIDHF/SxT8RKghrdk71NBXIOhcxGInv4R+wskoeNtMEgsRXJGkySiORjlyMq+cNMHm05nGziJaU4yiiWEoqnfGIqnQgu76ARjGA45CtL0EoyzFIFV1uXuQxAxFzGYJe8HKIvCfbJRwJxmPmS2B5tdkRkfqeYzAzix1AgL1NQzA86nOYJqlm+g/mLRgALRdGImZyJiSeazgmnwMaZzGiZcxGrBKCjxAkxFxTsnXQMJm8uFgufTa11NXDmCN6DT/n8hp8r86d+TmgDge5LmfisGTYtFjSeaUxjQnvhCrSZxpB5/xOd8awJQnt20ftk9AUcNaMeRHbGh7aUSxVVWUnxc1IXpNSeHr2mPl26U9KcbBo7s6hCXQE0TmTUE0SrJ3Gg+dIF9k8ETkuGUGfxM5fFlGPTSOokhqDJpp5ma4NTEVChRlapLZQTp+McO7FWIa29jWlRJeuCzIpVtG7OoR3N2s3sWrqwuk1ncn0aXW3xVgkpdQfAdCtfq7YOtn3tQ8VI64gcArizFdavYNsbZG8hWbKRqLKi2h3T2kbavC0Wbr7bxNw+aw277SMhaS2tbPmWOsmpdrX1AG2oRIu32c42R3HDbW5bSyrGNZZwLqTM4VJrgcQpDlXG5Vtyp7Fc2zbXuf+vMu6NRAG5xzG3hBqtlnYxN4nucve7zNVg4F5r3e2Wt0eR89Hk0is/d12uHycx3V15dDxOgO6p9mVvSfJ72s6WYUrd+x6AQ8jbAm+utvJVnvQYisIGo052wGUulq43QwtbgHcZtu6GP8HgTohpd7yDMJV+x736btDEsBMwT1LsE/BGT72t0p9mEIw8qGxvwgvWQihDo2PjtYSAPw6ei4Vsx71u4oDp4HExDjji5qGPoiyOHpBvMRYxQXnJbgipyaah5eV9osvVSx6JsYfO+dSOKwn2nv4OaOUwMJU5V4ZNkr/0IzkzkCw4VoIeJYpnNTjZAjfuM5vmrOY6N6CrhW7dA5o6wb/JtM99T36TmsAsJ2M6dROVVselIcDowWw6yGH29KQ5YcAB9vgprfYxp22VZ9oEEC8RfHUBDUPnQAwZNLc+TPh0HevioboLv/5MqWH9QDzlGqA1XPaum81rV0ObhhW04LNvkcFZl5gy2gYUBlvo7QlmO9x0GTdkAo2tEUaGvtNdcw/dHQHwxpt5PvTECllYKBMmUd+K4nej/I1EgCND4AP/oBMldcsRMLzhEI+4xCdO8Ypb/OIYz7jGN87xjnv84yAPuchHTvKSm/zkKE+5ylfO8pa7/OVDDAEAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC77HGi0ec1mAd7weBotqNfjAHt97mj7yXh4KnoCf4YuFomKi4yMQ4Fxh5I5jASWl5gImpqYBI2LOZBwk6QXjiSfigurq52dm5yYrKuVmKmJCbm5om9NfKU9jAfDw4wFx8jJyrfMFsrLt8TFi3gS1ta6uUiEwDyMA+Dg0gfGz+bn6OjC0uHgjNfw19kJOXyEhHj3er/dMN/t/8LxAtCu4ICBBQO6u3WFW78hCg3iWTeOGCM8BgEugsCR46kq/B4GYfSgZMmIFVP/pkx4i4HLlzA/ipyJqiXMmzeZBdi502RJnjuZNdSTTw/NIoxwxtzYsanHRUCjBpDpxOEIfLz02Tlag5GCr2DDSgWqE2jYswqiUt1GdKBbOFrrcH3BaCxPtHjzirU7lWGUuAIGWhUxeK4KRhESJ2bZrLHjRFwAFzbs7THly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt22wE4d7Nu7dv2LpRTP49c6C9tnD3zSF+6O2oFCGZ36jlyhIsBJ2E4hgoHQn16tfDi491aW0K5726y6A4TRG0VLPiy4/PLPuicRd5NRkOmj25Rem895h76kQjTX5wxDMP/1tbmRZROcgMKOEtAlrAGC7zZLOfUbBFVNBE96n0nyIYZbSQIk6ZB0V0sqF0YIgq+XehBTn5pV4SdZH1mIknfqLWIjUqMpRkcq3GjFJIlsWTTw/8mMqQd8TBX2pehTWgUylCxddZKhYBGHpuTZlZjnbpZSZafPX15F9xCcbhVW9+NmCadOqYimKJdTkFVsk1qBoj8eEpaAQTrnmjGQMequiijDbq6KOQRirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmopqoqCsGtWkarrsYq66y0QspirV3ciisTsJYg5q5CGDcHn28QoiuwOnCXwq/IJoueCsc2ywOY0C4nav+hkAWrX63fuXKdfYbaoOyq3b4y3rnkWaJnCdR2ShUz8VV3ybeyzNItM/OMq0S0o717S7zyEkDvJfQtAu4n+W67BL+d+QfhMfDOJ7G9txxsAX7UKKwEs5s5DGCAEWKbDjMYkxiHghoewbFmLlr0McgwwyyjRorEg7Iu9QzbppRxMdzPgy9DjO3QFc6YYcpLrDzmIjNWOPSARdOM4dH0MKF0w0xLbWE7CPHYdThAh7tnnK15yHUc/pWcSIkmMpKlkFb4/GfW4ah9sYgzgw3kUmLHSpJPLYuo0oxJIcnAuqf+bVLggldE+N5JgsKtljwNyOMASgYFuUuIJ01kkXOnYjj/TpkHwKSTn0AZGM9+zlZ45Chi2RGZY3XuJdnEBgLYaVWCdaXsTymSJpeSe64VmG627lnvX/0OPO1SEQ+38fognxXZWCtiZpqlb29nttSvbr3ucYkGfVRnpv8V9zY+8eX1yl991Jx11smMoLZXhVyx2Du4iKCPe1pjIvO5QnTof3gKoAC1o4UCGvA1gJrFoPC0QPBJywaJuqAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISZ9CrJY6giU6MohSnSMUqWvGKWAyN3I64xRtCkTD98+EXLyA//xqOsYwuFFYacmcsa5mRF8exQ1Hs0MUT6ssEaGzhHX0VRhzukQR5tOOzoONGPw4SBXWc1NAeobFdLVJbopDWI4PwR3IZLGADU1f7alBJVZUrE7CwWP5U0ElSfXJe6DqXxV7QLksqImACS+V4VumCVnrykvKS5SxtUTw3HHJT/oLPLGCZSQIU7JW8TEXCIsmERHasl6b41zAxGcp6seJet1gmJHxRyH7BqD2JcNoiJkbOBdQnmYmwWymHEMj5fXNE4UxGxMo5n3OW550I2qbV+rg8fAatAPOk5zE/YTF1NpJBoCONxwgkM5EVKBUGTRA8FqQyfmYvnS9iKMiI9tBPRP/0DTfTRkWVZz66iSOj8YyZSjt6N2LMyGYTRZoN4lg91unDmYdg3MNWytOQKWIcL4UpNmRaA5reY4437SZXdPrPnvI0bz2ygFCHijMcGJWNPVOqOxXRNHlWEGpe5arWqCbS8PHOpJj751fB6tNEGI2sGyKp/8SqN7qC42sZwWta7brX1FmhnZQJm1vPJorL6VWwjVAdaxD7IV4Y1rFaU6AFFHtAvjYWDmlDqQXYlhG3NWWUR8BpPy1L2Ddk1mUmg8PlPDs7aEpBtCXlq90EB9W+0ohvfkUWU3+Kt3fOKEi5BdZuMRoj32oNuImdnCKYxLjGsUNrr1MKaEOluJOg1bn/g4Pu5kjnWldBz3I8Kl10D9ddKDhwsZTTnGNWewvU3fYl073d59ArvO81g72pcC9yVbc7I9lkdPBtL1BOZ9/4EgGrcg3dJwCM20ZEhcCV26QUEJzQFm0XucALXiLYNz334W5/5NMKfRMxOtbK7nz2nfCH5Qg/fYz4vdJlyvPSKxUD+6AwuUPqPc6qPSs9JsMQQPFdfNzhJLxvfDqObSKk1xggC3knTJ7sPo+H5CSHhnlo4kv39OLeuEapyn1y8ZUX4T27bDkvXZ7yl8Gch/KNucdo1rKAhxznCBcZoeJjc3/7Q2P0qe9MHA6u/qgsChxb9DJPDsCfAS3nvqn5qC1+kCAYE8yyx9TPfrfAX3mpQGFJo4Z+l270JzR957+CGLCGAXWoa5dpCm56bCwOs6d5nAgAanetguavmyGIQMVIFtelrsJ5K5uIQE0wTxVkYQRZcWxkL1DZ45Rgs78awwwi0dpZzLa2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93wjre8503vetv73i4IAQAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLucAaLR5zW673/B43EKnE+74PGK/zxPqgHVyg1WBfn58iYqLfXmBhJA4gQeUlIEFmJiBgQudnp+goJuAfpOVB49RBqurkUGBA7Gxp6iAmbe4ubq7uqaVsrGpUKytrj+wwJe3o8zNzpu4yLLCTw3W1sZJ0sCyaWi+tJaA3gDc3NTZ6S/O3LTg4e/nzer0JQn39+T4+/z9+d785DELQLCgwUAMEiZEJ+Uatno0+JGbQLGixYsX9e17wLGjx48GAziDQJIkQ1XEIP9G3DfRYoWXMGNmBLjRY8ibBwGV3FnyZBCHDYgJNUBuKDGgKklI9HYxptMKM9PwU0C1qlWcBZ8B4iI06Y2laTBa1IgPK05nEdKm9ZkFqdcf/vBpnUvXQhOjeN/q/dGVhFByRfEa2EvYhmCigBMrTtO3sGMYhxcDaCyC8mOVbm/89Wb5suPOnkMLAS26dA/SplOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH66yLlvic0gdwsOouaJSW5FbQecM1HLmifyIUo7H2ZXMrt8p47XMeB3yztxFNwJ0M+OjDktvG6D+PPn7+HPFS7b+CerW880nmTnADMhfHQLRIV3/FOwAUx8d4Zyy3zTzLPgEPyDlhCAw/EToYYIWhPTRcRbuAJZkKALGTyAi2qQhHQrFqBCJTPz32IkAiKVjVGhg+NGPHYU00k40LmGjYzg29RRMPAIwlVWBWCWlAkLqRGR/UxwZWpI7knWPWTehpVYERVIBnmw4epmAeXWMGcF2zJQoBptaSeEeGlrKyYZldwJ2mJ5u9JmiYn8CamZ8OPSZp6HDpDTDYYsySkR7ggWG15mSEhJppq5gyumnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWauutuOaq6660ksMrGb7+KuywxBY7A512GesEsspqw91yzzlSYbM3GHId/wHOZYsAdIJQOwJ1zVh3bbR4wGmHtHFa4alq4tlSHjOhxBuvM9xCKCGWdzn6Wrv2ZVKdvAB3Qi+69lZSJhGbFsYvHflpQid6zTyYLHsOKQrfNfIB0s69/Tbs8S4TBoNvjfqGp/GBDL+LrHnRnExht1Csa/KGL9PBjYEEDoCzyDTzrKCwAbocy87mEB00zMXOd7M370hMTs4+T+xtg7JI7KE4ddAC4sG1+hjkixZw0+HVWqMcokEjjjwrjnG1jY+aWwMCJkIxcn2EzJex7XbbcJvNoll0z6h2NYiqluagKK4oN9ouZgWIjDLabUTCSXG5Y5c04QPk5lUyw5PkRVCukv/lFC3J5FiZ35MhmI7XwdPng/9AKV6WGoV3NqRPYPpLTT5ZVZRTVtU5HbAjnWXJpuW+O1SoS7WPlMAHTyXYxf9chegQKb97789LPz1WdXGFPGu5c18W662P4iboTty+2uHOy0Wnm+Zu4i0Kbq9MZ76QFmNh/vozD//6F6oAjsJOxKjdYO6HMOQJijOCYaAOIoM4yWCPgQ+s4HvyIsFHJVCDhIpgBzVTqcXwaXwMdF8LLMaKEa4QhS/s3wJd+IIL0vA0MLzhDmZnFAUKRYU6rIENg5iDIRLxBkA8IhCSqMQmOvGJUIyiFKdIxSpa8YpYzKIWt8jFLnrxi2AMoxjHSMb/MprxjGhMoxrXyMY2uvGNcIyjHOdIxzra8Y4pCNYd9YjHPvrxj4AMpCAHObX9pZFZZLTWdch1B+9oUZHQyg7B7PfIZx2CkX+Y1hQheUltNadeUmsiJxHhSUaAUoLggtcnroUtSZbrE5x0ZBWYKJpUjkJci3TlHeoHSvYNgZahseUmcBlJPmgHlpaU5aEwBpuFWaBlqgyYvAbWHUBIDIEtbKY1OZYyf4VLmtNsBiiviZJs7mubBnNXfpAFMWaQk2LXYOEqgKkOZ3qMnbxIDzdD+cuKfXCD8yycZ+zZMHyCLGL7RAIPEQNQA9AzHfOR2Mcm2gt0UgJE2PTfzGzmoH1S//Sj3szaKTBaTo0CSGgDGI/DDEgXaHK0ZvxkwkP1crRurpSlWnFp2MzWEIGetGcpVedNceoMnZI0Zj6NTU132o3FQE1nTjXbUXm11KUp5qlGQ6kvX6W0AjHNovAYhzeeutVZdbWpaWjaPp8GtbLK6qxD+6pIPRQItubMrbGi2iz2SbaQBTVd99Mrffh6Nb8qk1he48jwmBqLsZHtF2ZrUUfwaqrEPmCxYtvHY0caWcZNNnZdq8nX0sfYATh2syCSLEcoCyq97c0ffYPp38D3uLqBVqZJFY1rX7vbBMStDnOrreCM11NmGo4lIEyR4oDrWcWCDXK2JW5JZ5ga+CU3df9rWlxBVkeQwEGXtTwwIu6Qe93FLJcOqr3sc6G7kNsaKYd5Iy8aLnc5NW0OSIsNRPVi2ihzVle+OaKvjux7X+6KpBn7vYJ4jaE905lPdY1Dn35f1xP37tCftIPgpXJLjwYv6cEJMHBwXUdhk1hYBwuV51Bm6gYPPwXEIgaclUoMXhak+J94EgyL2+Bip4AYeoDw3ve6O2MTS7e/Ji1Nj2XSvB5173dB9t5iE2yFBbtiyaeriJqEPOI6bcHKkcAy75rspCcHr8vPEJ9/kwdgJTmYzL47s4znouYkv6/NmIvfl9BHZGas78TFfchrygfnffC5z+obU40nxWHXWLfM8mPcE/2QCVhvPfq8xpm0Jw7brEvvA1maFpgmOwhAoqaZZDKUU6lNPWokyNDOhmI1f5WgYlPJOqMMzfGaC8hqXCuwjCdkhQVFmMVgr2LYHCx2CcvbUCtSkNm6hrUTnw1tMBMrgyAsFBWxrUFtY5HafnIgfKMI7l/7ZdxQLLeGTWptWO24MjieDLpd+O4L1Drd8z7Bq6krRdHt29n5NsG/q9huLRaciDcW9rpX3GgpJvzYC/9hw6P48FzLe8PGPePBvx1wNW78ih8H+K7nWG8wlpyQKE+5ylfO8pa7XAUhAAAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0SgU6rtcXNpvaOrTbqnh88wLOZ2/JK2i3vWy3QE0yowF0sn7PirvvAHICgISFZ4KAgnl8jI0ncFuIhpOUh3KQWI6amxd+bZWgoXeKYZymVZ6Cg6KslKqXpaeyUJhXkq2gpJizvBcWv78EwsPECMbGxATAy8BgWLqQr9LQcNS9m8zJycfc3d7IxMxrW4CLnZGwmNZ15Hfm10HMB/PzzAX398zMC/z9/v//9C1LJo/eAXHwEtpgNqBhQ4MHl+GbSLGixYsWC9Jz2BChwo8xGHK0N1GgyZMo9f9RFOnQI8iXC5dxnDkAkEaI9ZYBojlyGcyfP1DOhHgTZ9GZKIEqjZGgaVNATqNKnfr0jlSkJwNo3cqVGYOvX10uXSoV0ISzaNOqVQs16oO3cOPK5RoAJYS7d8WOBVr2jtoKgAMLZmvVbVy6iLsuw8sYr969MPui+Su4MmE0UhVo3sw58daUPiGLNiH5zNq0bZ16TowygmvXj0fLXkHVKejbuC3M3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr387dGZcW79hlchG++55UtRxMWz+n1jrzjtLfwuUqHST459FJo88fzfry+EWRSn/9vRcgKvq9QiD/f//FcuAJucUWw4CjyFGghRW6AaB52WgzzDcgdkNQaCPYgYY56Lln3xfiXVGOg8+JhdI/Hn7ITTIBDRTOSRuOMx4KPbbIYnRFkYRRSRECcyRKRJH4IBEsPWSQkUdWaSWSwECEVTNPKhHlAF9SwpNDYvYEzJa/dEmFUBw1mSVO9BxlpkBqTiHVXIqdyZFUcPaJpgV0ySVhnT+UtmBhti0T6GF5/gLWo2ANSigOhp5m6WVn3CnXpnDRZRdjkk5qQ6VpVWYZaog2xZkCzKy6qqeLgeqkqEGQamlqTa2GWGuvRRAqrUcYimsCSQLTawQ5mgQsJ8WCtuyz0EYr7bTUVmvt/7XYZqvtttx26+234IYr7rjklmvuueimq+667LbbB4wqbBhkifC6a4KJacCYojor+uiiO/XaKyQ1qbC34r7fCfzuMwcnaHDDDGsYsML3OpwIhvTNF0i/FC8cDcaHZvhGLR0/4rDGIVfS4I8l0xvxJymLYmDLFb+8Ssy5cEyzyTbjHMrMLRcMss+GrJwwzfINnTLBExParG44UOif0jIPDTStT+cgtSV/MGi1zpN2WKOIOypLnsNJP8y0zfNqJ7aHIcaNwIhcuvzvifqiraLELJ+DxYt9OyfjSTTWSADZwyQbTNkCte330f4O6bHkMS7j5i8rEQ7Q5gChRPcvl0Odbv+REmEpEOeo9+M54xaEvi7pSl5ZwNNLnuS6ul+GLvvuVcrZ0qzmfknl7E83m7mev9fdrvAycVTmmM931HzyaZbMPPINRU+T9tdXv7Mv0/Nkk+V9RgTMTmOCCfz34Js01JTk9+m79GZ/r2mnjVowE5/lazknoFwR1PrSZajaGNApw/oTM3TllUf9ylsFPKABE/i/Ba6mgZEa4LiEFTKpWHArePrMMiAFqQd2y1aXulWqEsCpFsLKJI0xIbdQOAFTDQZVmDEM/nQlQmA0JoYaFBcNbRgYTAEgM5xplas288JfAFF55xoiEStgRCRuRolLVEATLfBE76FLikSsYlSyqBn/BuKmZTQUo2p42EOBHEuG9uJgDhNVrGMpTh/so40Bi9esPL7ggHwslh9xEEg6DfKQiEykIhfJyEY68pGQjKQkJ0nJSlrykpjMpCY3yclOevKToAylKEdJylKa8pSoTKUqV8nKVrrylbCMpSyl4zh5NS1yiaxl03QZuJLhCw95Y9veRta3XzrOXMYMpi0gtky+HS2ZvXQXNJ+pN345k3LTpFzQqvkxtTFTPWDzI8Kq4c1vXu17W9tY1zL2tWvm0mIiuxkuNHbOnaUTZVVbJ9eICTn2pQ1mPltbP9E5THnGTKDa9OXJqEa0eNaTXULTZ0MJYbSESnOhEp2oQ8O5zZ5p/7QQD+1oMwH60Xge017pLKk6+WlRe8JTpVNzJyJTWtKQohSjJIVpRUUKzv3ANKavOGm6/mnQpX3zndbMqVGvKdR2EbWhCJVW1qL20n0WNZ85tWmXplqGqq70qj9rJ0uB9TZtIE4YSTmbMJNaTqI2NTtl3caNWGfCcUbUYG69ZYDiWoy5DiOt4OEmOcvJ0nHWia82kts3Pic6EWQzcgid2WP3qqOxKXaxrIsc4Ki51m6OVUibbalyBmeSwln2GDjyR1lRwsuBOlavdhOt4GY1I38Y7nB+FcYdGcuM1orWt9gh7elsa7izEmC3dF0GcLsA29dGczmww5zp9JG61K3ur//xywkUg5dd80kXH7Wt7uaui9buwlFb0bXA7miHESbBb7vlSu96jdde273Xi+eSr+zYexH3ximI4crdfdXLuwJXZH7qgy+5BPzf2Bn4wcR700b+97rwJfi7+Shkbo73iz9VGHsXJjB4NYwbDuuPwriz8PBIXOLpethe3TsxmSaRvprQ+H8v7liMZ6I9Ht+YejKmH35b9iUfo6EooUPfmM67PAsb+QxIHrCSecJkdhXZeXeIcoN/MWWaVPnDAnnflltXPgQDdpBsckjo+mfmk+Txfm/Z4v6i0j//AXlRcPkyuOD8ADnvic51nvCdAxgXPX+Lz352CP8CfYA/4fkths7/VgQlSBUKAvmDrBmhAwG856gMi9IIXKECFXVBTWdQwRv0NNE8SGoQMqqNFiDhplEtRFX7jNXAeHSf8yfrUw+5XHJcEK5/oest9josnD60rU2TwksNq4Wc2iIzutjYKC4bAM129gqhvSlpx8oxyYbgtSkTRhxmSodxZqNWpv1DcNM6XGC0oRqbEkI2srvdEIj0tOJtqnmz8NX2/na79S0tfp8KLcNaFRaXuEVqr8vgN0T4ChW+DDJqMX8OVxfEi2juI46RjGa8jcA2Dhh/WzzkzorjuEs1RZODvNQiL1kaOy4Vda/7JG8MN7tmLvE55srmvHoNwYF97WE9zY6qdTMiW4PtcTomCemqU/ohmT7sCEGdH2dWJCBZnPJIbp3rWcck2KstyrGf0uyzTLva1872trv97XCPu9znTve62/3ueM+73vfO9777/e+AD7zgB0/4whv+8IhPvOKjFQIAIfkECQQAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7TIF4LB47C2bk2OAWk0+u9+6cXpNr9vtbbh+b5KL72t5IoJ8hYYlc4Fih4wrFo+PBJKTlAiWlpQEkJuQjZ5ZnJmZl6SlppiUnJ+rPJwHr6+cBbOznJwLuLm6u7u2m5musAeqrMUonAPJycLDm7TP0NHS09LBsMrJxMbbI8jYss++4uPkttDeytrc68eb2O8DddbMsZt18N+b7Psx5O/M8+gFfEeOn8ERCRImrKOwocOHC+k4JDgugMWLGDkx2LhR3cFGDutMGEmypEmTDBv/PljJsqVLjAHIQZg50+PHQyHpmKzAs6dPlBJVtoRJNOMmmkhp2rxZKOeanT6jAl3jUIHVq1iLXiynjyk7p2pOlkypUGtRchHSpl3q1StEhVzjyrXQtq7du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5jxJmKzKPNNQpvx+AHj2VhoQKgVjS5dbDSY1KA7s5Yxl20R13Jm4wglatKp36WAddU9xSO5Xb19k8rU61eqccSLBARHLVxtSNXJARwevZU7bNuxVx9PPtrAfJ26C0GX7buy1Pjeo6YIif4j9Uz8gRcWMPwjZvbZgt8SDr1kVH3YOETP/4KvBAiTS7YNeANYqVVIVkKcPDjUgY9w5CFHEUoIA4VilTiVGgW6pCJLMMmEVIgiukBiSVFJNVZQCmGlACc66tjiUS9yF2MOM5Z4YQJmEYWWWhHAOOQPFB55HSRMRtCcOE+CMmU5WXbp5ZdghinmmGSWaeaZaKap5ppstunmm3DGKeecdNZp55145qnnnnz26eefU+BGCKBIhDYooUHEFgZsriHKA24WRnqooy9AGmmFk1LawmmX1oGbpjlYCoiipIGa6B90ZDrmlnR9IWgYcbLaxKuwrslbcsE9h6Wp/TiHK3DACpeeo8aNg1xyBOQ6yZWR6OqLndM5Y504vFRbLf85wv7Hn5BsRiseLcdZKy4u2DprgX+tvuntI+XVsmV246Abq3vLbPttu/hOc1463NpK7wDUucvqlOf862Sa7AH8L3zxxTMfeo8EuGfCCTMcn8XtIcjvsH0m/I48mzBYDyT3NHzwnfopg67IzUACIMQC/pkiixxa8I6CLAvjIEYQ9vsmhW8FrdCRAWZolkYeniwm0EIHTTTMRmuFNIg+pxllp6g5FLVFBm61yYcfKh1mkSYaiWNCK6b9ozhJiQ0m2RPU+NONVAlFc5JeQ5JU21WjCbfcPZ0IQFVY8djjVWs/wjfHbf4NeAWCE36V4YcrkLgFi98Hp+OAR95Q5VYlOdf/nnB7XhbeeftSpdtzXl03XFtWyWzMvAo98Ja8nmD77dflDgPvz/ou/PDEF2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/778Mcv//yH0Frq+fYLkH7+5Bsqm/n+q1X3SCUARq2GegQ0oB+ql0DUfAqBrsGaA//HPFFJ0FMUXB6nLvhA521Qgh1s3gexFsLoWVA0AhxEBp93Qgym8AKqYiCqVHM/AM6QMy/s3w0BEMMwycpVtJrXlGZlv275qjfKkkRBqHcrJC7HXKwTXhNFkURNQOd5UxwFsICTrXQhL4uV2OJvuqip/2JRSxfIStYTl6WLKS4xT2b0xbF+dQnmtPGIVtwVHIUUrlyksYqz62IUxbQuCxTsjOOyVrkmUUghagsWAStAHxPJi0UqMWT20py6MAlJaZWHVfASh7zgVEh8gZIa2smkF9tUynadUl/xUqUjbbafTt4rX7gEFycbBLNZ/kOVuQymLl2ms16S0mCeFBjw4nLIiBlzkxrLGLumtUyuNJOWG9OkmyiWTElWk5nUxKY0V+lLmH3sYRdD5zglpiduRtNhgGgYPO8QIHb6yWPYABkxGcSJksVnkMd85znX0B9V+hMfAIWmM9NJ0F0KxB50kGdCtzmOX9rykQva1zgnysqK1v9yZBh96D55mU3a9WlmK7nczRqSs2KWVEMs4ejS7JbSmq1UIS29BsxguhKZjo2mD1Bpglia0wPs7CI9Y1ycmNY0iDytpFtT0teS1rczMbWpV01A0TYhuqlSTalrct0Fz5aAqHbNIlMDGwN8OiCxjhVFDTHrhlJnAbV+VZuNa8hbU6M1rvJsrmj1qlrZip/SlY1ucFVI2lZ0OU5kjpxh1atODmu216FtsWeNyTgeu1TJPoVGjzPdZe+GOsfuTSlVNRPn5CbaBGS2q3o7bU1SW6bV1qi1rz0akGRLWPXY1kYkOZKOKHe4y3F2c54NC2g7h9jBfa5wmwCd5Wp23J8lFwCfUGFucMkqXdhyxU6/ndt2LZuA7uo2LuC9bnZZ21zJFfe839WTYceb2ISgjq6cWB1tW6deEx3pvoEVh37B6ie39nVKsrujHhFl4LjGjkmz661VryulB6slwvvl0+6+yaXibZjDV3QeiCE7vRFrz8T0S7GKV8ziFrv4xTCOsYxnTOMa2/jGOM6xjnfM4x77+MdADrKQh0zkIhv5yEieXggAACH5BAkEABcALAAAAAD6AA4BQAX/4CWOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwu0wRotHnNBqbV7bjc5qjX5/iYZb8n+P+ACIKCgAR8h3x5ilWIhYWDkJGShICIi5c4iAebm4gFn5+IiAukpaanp6KHhZqcB5aYsSSIA7W1rq+HoLu8vb6/vq2ctrWwsrK0xJ67qs3Oz6K8ybbGx9Ym08S2ANzcwridh93c2trV1+grz9q43+Du5s7p8xcJ9vbjAPf7/P344/ziNQtAsKBBRAwSJjxHLw6/fBMiSpxIkWI+fg8yatzI0WCAZxBChmTYkM3DcRQr/6hcydIiwH0dPcosiEikTZEkS5o52S0ly58uu/FTQLSo0Zk0oSXSeYwnt4oTL+5DOvNZhKtXczJt6O+e0q9gLWwdS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIpdi5k7jsYgdvBOSL/Lhx2ciWjYTVmrlNI0d/JomOxOpQ5ynnnp0CHRpSoVSrKsk7LcTdMmDMNvPB/aydado8sg3wvRu38eO94Cn7DfyHcOH58pUjFn2cwD3XxTZPso4Y8T3gXCmnNnv7EYwbPQrnF759do8cOZun4bS6/fvc+CGCn/7gIYUAKiTffC3UB9WBQeUHE/9HDGqknjM3DUjgCgZO9BNQUb10j1EKIMIhhw/yESFzE+JQ4YFS3UOVTFZhFYGEJfJQX4r26MaHixHA1kyMV9ioFI9ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phkqlVZmVdghqYVaq6pxGORTfbGmW4m0WadUdBJpY/a4Vmbj3768BlrpMm2Y6AtDAraaIwiUNpSZKbmzGqsEVDoHzr2YagqV9qmS27NoCKqqM88Cp54JDrpaXGgqDbqq6SUuqkF3/X55Kp7IBeKj7w5U6uUwtWq67DGjVdMqk0+92mrfPIKKnbLQbrnIdlpg9//dNvcV220e3CpLB/WaovtANdya0F2YQoXbjfu1CrduDBi2Z0ttbYXDh+4ZBevlOg56B+4xLBnb77m8qfRvkfW19XC99CYgL6HrIgQgAgHqTDDCzsMMR8S/0cxskzOiN/IQu2zn0ExJcVHgAFWDOSJCKKooT0N1hyiKiNK6yTME1zYUoYl35PyigTVdJNNLvPIs88rJajPPhx6+GFRN1uQc7dRLs10BU4PZZTUUytQ9dW27rwPRBZu3TXUYYtNVVhc8ry2ikSrrAqOSfN79n36+YhjpqL4yXCzgCIqwuCE62Y4C4lzuvjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy76/+ikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AHL/zwxNOlJ+7H35687Xfi3nzrcL4hZxrLhx59GtOjUT3o16ORvQDbp/4882/wHr7s58ee/pJ8tt7+6Yo6cqkfz3ge/yOuzZo3nvcHkv8f9cNc/1rTqEmYqmyPG6AfCiiaA6JJUqEyRaUs9T8/AO6A+zMSBFVBKUJVkAAX1B/IqrRBUXRwUR8MIQDLMy18oYpVu4ogrEYlqxW6kBMZJBCuLCCNSc2Qhs444K+itMNh8alXzRgilIqoqyMCozcvxNoSDyGsJjrrF1DE4QiVFKwo8pBYYEwOFV2BLv8iUss7XgyjGpl1w02UcYoAIw8MC9C4zfQwjsfSWbLOKMdcPauO0LgjtPqIQCZ9y49sBGQg//jGFg4yj48kl7iwVS5CNlJefITkuagzyelUUpOX9FYmy5GPdnnxXdjKoapGuS5vjLE9iEDldFS5RzySchym1CIfZFkOWhrSGezw4sCMNYAARgqYaNTlqWD5Sjeay5dG6ldGqqYNgQ1sGAVD2Uag+bIF+ctum7SFNa95gPdo82BbnJI0H0DNgO2DnNgkpMEyws35XAxj/tDYMyP2No8JKJ1Iuic+BfqwfXKsnyv7mB5DtjeSOTRoNeJnQYb2EX+yjAH1PI3IHso3k0n/lCAUndhFMQrQhDWUoyTr20En2h9wjnQhJY3mSQEQs5g5rGYNqprRcBLTIsmtphK5KU5DCiGk9ZRIWmPa3GjW0rrt9GgQyGhnkuqzpSaAoh0TEVRHctQhUfVCVsUqQvewVa4udElfxVBQZ5aAqB2ibW4DJ9n01jCUpE2pQFPQhr721raNzahnVVJaf7ZWiLbVr2OFxpUG27S8Pm2vYcvqj6zEWJVYFa6SVeyWflpYvdqjbuBEBN66mrWZ2pStoC2aM0Yb2C5t1LMJ4NPfTGHMMb32sRG10WxLUVsx3ValutltrFi4JsQpUrOGM+5xiUu55RaSc84dXXSLR93qWve6KNjNrna3y93ueve74A2veMdL3vKa97zoTa9618ve9rr3vfCNr3xlFwIAOw==); -} diff --git a/resources/assets/sass/_sprites.scss b/resources/assets/sass/_sprites.scss deleted file mode 100644 index 769690a80..000000000 --- a/resources/assets/sass/_sprites.scss +++ /dev/null @@ -1,224 +0,0 @@ -// montage *.spr.png -tile x1 -background none -geometry +0+0 sprites.1.png -[class^="icon-custom-"], -[class*=" icon-custom-"] { - width: 16px; - height: 24px; - vertical-align: bottom; - background-image: url("https://s3.us-east-2.amazonaws.com/alttpr/sprites.30.5.png"); -} - -.icon-custom-Random {background-position: 0 0} -.icon-custom-Link {background-position: percentage((1 - 215)/ 214) 0} -.icon-custom-FourSwordsLink {background-position: percentage((2 - 215)/ 214) 0} -.icon-custom-Toadette {background-position: percentage((3 - 215)/ 214) 0} -.icon-custom-Abigail {background-position: percentage((4 - 215)/ 214) 0} -.icon-custom-Alice {background-position: percentage((5 - 215)/ 214) 0} -.icon-custom-Arrghus {background-position: percentage((6 - 215)/ 214) 0} -.icon-custom-Bandit {background-position: percentage((7 - 215)/ 214) 0} -.icon-custom-Batman {background-position: percentage((8 - 215)/ 214) 0} -.icon-custom-Beau {background-position: percentage((9 - 215)/ 214) 0} -.icon-custom-Bewp {background-position: percentage((10 - 215)/ 214) 0} -.icon-custom-BigKey {background-position: percentage((11 - 215)/ 214) 0} -.icon-custom-Birb {background-position: percentage((12 - 215)/ 214) 0} -.icon-custom-BlackMage {background-position: percentage((13 - 215)/ 214) 0} -.icon-custom-BlacksmithLink {background-position: percentage((14 - 215)/ 214) 0} -.icon-custom-Blossom {background-position: percentage((15 - 215)/ 214) 0} -.icon-custom-Bob {background-position: percentage((16 - 215)/ 214) 0} -.icon-custom-Boo2 {background-position: percentage((17 - 215)/ 214) 0} -.icon-custom-Boo {background-position: percentage((18 - 215)/ 214) 0} -.icon-custom-BottleoGoo {background-position: percentage((19 - 215)/ 214) 0} -.icon-custom-Bowser {background-position: percentage((20 - 215)/ 214) 0} -.icon-custom-Branch {background-position: percentage((21 - 215)/ 214) 0} -.icon-custom-Broccoli {background-position: percentage((22 - 215)/ 214) 0} -.icon-custom-Bronzor {background-position: percentage((23 - 215)/ 214) 0} -.icon-custom-BSBoy {background-position: percentage((24 - 215)/ 214) 0} -.icon-custom-BSGirl {background-position: percentage((25 - 215)/ 214) 0} -.icon-custom-Bubbles {background-position: percentage((26 - 215)/ 214) 0} -.icon-custom-BulletBill {background-position: percentage((27 - 215)/ 214) 0} -.icon-custom-Buttercup {background-position: percentage((28 - 215)/ 214) 0} -.icon-custom-Cactuar {background-position: percentage((29 - 215)/ 214) 0} -.icon-custom-CasualZelda {background-position: percentage((30 - 215)/ 214) 0} -.icon-custom-MarvintheCat {background-position: percentage((31 - 215)/ 214) 0} -.icon-custom-CatBoo {background-position: percentage((32 - 215)/ 214) 0} -.icon-custom-CD-iLink {background-position: percentage((33 - 215)/ 214) 0} -.icon-custom-Celes {background-position: percentage((34 - 215)/ 214) 0} -.icon-custom-CheepCheep {background-position: percentage((35 - 215)/ 214) 0} -.icon-custom-Cirno {background-position: percentage((36 - 215)/ 214) 0} -.icon-custom-Clifford {background-position: percentage((37 - 215)/ 214) 0} -.icon-custom-Clyde {background-position: percentage((38 - 215)/ 214) 0} -.icon-custom-Conker {background-position: percentage((39 - 215)/ 214) 0} -.icon-custom-Cucco {background-position: percentage((40 - 215)/ 214) 0} -.icon-custom-Cursor {background-position: percentage((41 - 215)/ 214) 0} -.icon-custom-DarkBoy {background-position: percentage((42 - 215)/ 214) 0} -.icon-custom-DarkGirl {background-position: percentage((43 - 215)/ 214) 0} -.icon-custom-DarkLinkTunic {background-position: percentage((44 - 215)/ 214) 0} -.icon-custom-DarkLink {background-position: percentage((45 - 215)/ 214) 0} -.icon-custom-DarkSwatchy {background-position: percentage((46 - 215)/ 214) 0} -.icon-custom-DarkZelda {background-position: percentage((47 - 215)/ 214) 0} -.icon-custom-DarkZora {background-position: percentage((48 - 215)/ 214) 0} -.icon-custom-Deadrock {background-position: percentage((49 - 215)/ 214) 0} -.icon-custom-Decidueye {background-position: percentage((50 - 215)/ 214) 0} -.icon-custom-DemonLink {background-position: percentage((51 - 215)/ 214) 0} -.icon-custom-Dragonite {background-position: percentage((52 - 215)/ 214) 0} -.icon-custom-DrakeTheDragon {background-position: percentage((53 - 215)/ 214) 0} -.icon-custom-Eggplant {background-position: percentage((54 - 215)/ 214) 0} -.icon-custom-EmoSaru {background-position: percentage((55 - 215)/ 214) 0} -.icon-custom-Ezlo {background-position: percentage((56 - 215)/ 214) 0} -.icon-custom-FinnyBear {background-position: percentage((57 - 215)/ 214) 0} -.icon-custom-FloodgateFish {background-position: percentage((58 - 215)/ 214) 0} -.icon-custom-FoxLink {background-position: percentage((59 - 215)/ 214) 0} -.icon-custom-Frisk {background-position: percentage((60 - 215)/ 214) 0} -.icon-custom-FrogLink {background-position: percentage((61 - 215)/ 214) 0} -.icon-custom-Gamer {background-position: percentage((62 - 215)/ 214) 0} -.icon-custom-Ganondorf {background-position: percentage((63 - 215)/ 214) 0} -.icon-custom-Garfield {background-position: percentage((64 - 215)/ 214) 0} -.icon-custom-Garnet {background-position: percentage((65 - 215)/ 214) 0} -.icon-custom-GaroMaster {background-position: percentage((66 - 215)/ 214) 0} -.icon-custom-Gobli {background-position: percentage((67 - 215)/ 214) 0} -.icon-custom-Goomba {background-position: percentage((68 - 215)/ 214) 0} -.icon-custom-GrandPOOBear {background-position: percentage((69 - 215)/ 214) 0} -.icon-custom-GruncleStan {background-position: percentage((70 - 215)/ 214) 0} -.icon-custom-HardhatBeetle {background-position: percentage((71 - 215)/ 214) 0} -.icon-custom-HeadlessLink {background-position: percentage((72 - 215)/ 214) 0} -.icon-custom-HelloKitty {background-position: percentage((73 - 215)/ 214) 0} -.icon-custom-HintTile {background-position: percentage((74 - 215)/ 214) 0} -.icon-custom-HoarderBush {background-position: percentage((75 - 215)/ 214) 0} -.icon-custom-HoarderPot {background-position: percentage((76 - 215)/ 214) 0} -.icon-custom-HoarderRock {background-position: percentage((77 - 215)/ 214) 0} -.icon-custom-HomerSimpson {background-position: percentage((78 - 215)/ 214) 0} -.icon-custom-HyruleKnight {background-position: percentage((79 - 215)/ 214) 0} -.icon-custom-iBazly {background-position: percentage((80 - 215)/ 214) 0} -.icon-custom-Ignignokt {background-position: percentage((81 - 215)/ 214) 0} -.icon-custom-InformantWoman {background-position: percentage((82 - 215)/ 214) 0} -.icon-custom-Inkling {background-position: percentage((83 - 215)/ 214) 0} -.icon-custom-InvisibleLink {background-position: percentage((84 - 215)/ 214) 0} -.icon-custom-JasonFrudnick {background-position: percentage((85 - 215)/ 214) 0} -.icon-custom-Jogurt {background-position: percentage((86 - 215)/ 214) 0} -.icon-custom-Kecleon {background-position: percentage((87 - 215)/ 214) 0} -.icon-custom-KennyMcCormick {background-position: percentage((88 - 215)/ 214) 0} -.icon-custom-Kholdstare {background-position: percentage((89 - 215)/ 214) 0} -.icon-custom-KingGothalion {background-position: percentage((90 - 215)/ 214) 0} -.icon-custom-Kirby {background-position: percentage((91 - 215)/ 214) 0} -.icon-custom-Kore8 {background-position: percentage((92 - 215)/ 214) 0} -.icon-custom-Lakitu {background-position: percentage((93 - 215)/ 214) 0} -.icon-custom-Lily {background-position: percentage((94 - 215)/ 214) 0} -.icon-custom-HatColorLink {background-position: percentage((95 - 215)/ 214) 0} -.icon-custom-TunicColorLink {background-position: percentage((96 - 215)/ 214) 0} -.icon-custom-Pony {background-position: percentage((97 - 215)/ 214) 0} -.icon-custom-FigaroMerchant {background-position: percentage((98 - 215)/ 214) 0} -.icon-custom-Lucario {background-position: percentage((99 - 215)/ 214) 0} -.icon-custom-Luigi {background-position: percentage((100 - 215)/ 214) 0} -.icon-custom-Magus {background-position: percentage((101 - 215)/ 214) 0} -.icon-custom-Maiden {background-position: percentage((102 - 215)/ 214) 0} -.icon-custom-MangaLink {background-position: percentage((103 - 215)/ 214) 0} -.icon-custom-MapleQueen {background-position: percentage((104 - 215)/ 214) 0} -.icon-custom-Marin {background-position: percentage((105 - 215)/ 214) 0} -.icon-custom-MarioClassic {background-position: percentage((106 - 215)/ 214) 0} -.icon-custom-TanookiMario {background-position: percentage((107 - 215)/ 214) 0} -.icon-custom-MarioandCappy {background-position: percentage((108 - 215)/ 214) 0} -.icon-custom-MarisaKirisame {background-position: percentage((109 - 215)/ 214) 0} -.icon-custom-Meatwad {background-position: percentage((110 - 215)/ 214) 0} -.icon-custom-Medallions {background-position: percentage((111 - 215)/ 214) 0} -.icon-custom-Medli {background-position: percentage((112 - 215)/ 214) 0} -.icon-custom-MegamanX {background-position: percentage((113 - 215)/ 214) 0} -.icon-custom-MikeJones {background-position: percentage((114 - 215)/ 214) 0} -.icon-custom-MikeJones {background-position: percentage((115 - 215)/ 214) 0} -.icon-custom-MinishLink {background-position: percentage((116 - 215)/ 214) 0} -.icon-custom-MinishCapLink {background-position: percentage((117 - 215)/ 214) 0} -.icon-custom-missingno {background-position: percentage((118 - 215)/ 214) 0} -.icon-custom-ModernLink {background-position: percentage((119 - 215)/ 214) 0} -.icon-custom-Mog {background-position: percentage((120 - 215)/ 214) 0} -.icon-custom-Moosh {background-position: percentage((121 - 215)/ 214) 0} -.icon-custom-Mouse {background-position: percentage((122 - 215)/ 214) 0} -.icon-custom-PowerUpwithPrideMushroom {background-position: percentage((123 - 215)/ 214) 0} -.icon-custom-NatureLink {background-position: percentage((124 - 215)/ 214) 0} -.icon-custom-Navi {background-position: percentage((125 - 215)/ 214) 0} -.icon-custom-NegativeLink {background-position: percentage((126 - 215)/ 214) 0} -.icon-custom-NESLink {background-position: percentage((127 - 215)/ 214) 0} -.icon-custom-NessEarthbound {background-position: percentage((128 - 215)/ 214) 0} -.icon-custom-Nia {background-position: percentage((129 - 215)/ 214) 0} -.icon-custom-OldMan {background-position: percentage((130 - 215)/ 214) 0} -.icon-custom-Ori {background-position: percentage((131 - 215)/ 214) 0} -.icon-custom-OutlineLink {background-position: percentage((132 - 215)/ 214) 0} -.icon-custom-ParallelWorldsLink {background-position: percentage((133 - 215)/ 214) 0} -.icon-custom-Paula {background-position: percentage((134 - 215)/ 214) 0} -.icon-custom-PrincessPeach {background-position: percentage((135 - 215)/ 214) 0} -.icon-custom-PenguinLink {background-position: percentage((136 - 215)/ 214) 0} -.icon-custom-PeteHarvestMoon {background-position: percentage((137 - 215)/ 214) 0} -.icon-custom-PhoenixWright {background-position: percentage((138 - 215)/ 214) 0} -.icon-custom-Pikachu {background-position: percentage((139 - 215)/ 214) 0} -.icon-custom-PinkRibbonLink {background-position: percentage((140 - 215)/ 214) 0} -.icon-custom-PlagueKnight {background-position: percentage((141 - 215)/ 214) 0} -.icon-custom-Pokey {background-position: percentage((142 - 215)/ 214) 0} -.icon-custom-Popoi {background-position: percentage((143 - 215)/ 214) 0} -.icon-custom-Poppy {background-position: percentage((144 - 215)/ 214) 0} -.icon-custom-PowerpuffGirl {background-position: percentage((145 - 215)/ 214) 0} -.icon-custom-PrideLink {background-position: percentage((146 - 215)/ 214) 0} -.icon-custom-Primm {background-position: percentage((147 - 215)/ 214) 0} -.icon-custom-Psyduck {background-position: percentage((148 - 215)/ 214) 0} -.icon-custom-ThePug {background-position: percentage((149 - 215)/ 214) 0} -.icon-custom-PurpleChest {background-position: percentage((150 - 215)/ 214) 0} -.icon-custom-RainbowLink {background-position: percentage((151 - 215)/ 214) 0} -.icon-custom-RickRedacted {background-position: percentage((152 - 215)/ 214) 0} -.icon-custom-Robo-Link9000 {background-position: percentage((153 - 215)/ 214) 0} -.icon-custom-Rocko {background-position: percentage((154 - 215)/ 214) 0} -.icon-custom-Rottytops {background-position: percentage((155 - 215)/ 214) 0} -.icon-custom-RoyKoopa {background-position: percentage((156 - 215)/ 214) 0} -.icon-custom-Rumia {background-position: percentage((157 - 215)/ 214) 0} -.icon-custom-Ryu {background-position: percentage((158 - 215)/ 214) 0} -.icon-custom-SailorMoon {background-position: percentage((159 - 215)/ 214) 0} -.icon-custom-Samus {background-position: percentage((160 - 215)/ 214) 0} -.icon-custom-SamusClassic {background-position: percentage((161 - 215)/ 214) 0} -.icon-custom-SantaLink {background-position: percentage((162 - 215)/ 214) 0} -.icon-custom-Scholar {background-position: percentage((163 - 215)/ 214) 0} -.icon-custom-SevenS1ns {background-position: percentage((164 - 215)/ 214) 0} -.icon-custom-Shadow {background-position: percentage((165 - 215)/ 214) 0} -.icon-custom-ShadowSakura {background-position: percentage((166 - 215)/ 214) 0} -.icon-custom-Shantae {background-position: percentage((167 - 215)/ 214) 0} -.icon-custom-Shuppet {background-position: percentage((168 - 215)/ 214) 0} -.icon-custom-ShyGuy {background-position: percentage((169 - 215)/ 214) 0} -.icon-custom-SNESController {background-position: percentage((170 - 215)/ 214) 0} -.icon-custom-SodaCan {background-position: percentage((171 - 215)/ 214) 0} -.icon-custom-SolaireofAstora {background-position: percentage((172 - 215)/ 214) 0} -.icon-custom-HyruleSoldier {background-position: percentage((173 - 215)/ 214) 0} -.icon-custom-SonictheHedgehog {background-position: percentage((174 - 215)/ 214) 0} -.icon-custom-Sora {background-position: percentage((175 - 215)/ 214) 0} -.icon-custom-SoraKH1 {background-position: percentage((176 - 215)/ 214) 0} -.icon-custom-Squirtle {background-position: percentage((177 - 215)/ 214) 0} -.icon-custom-Stalfos {background-position: percentage((178 - 215)/ 214) 0} -.icon-custom-StaticLink {background-position: percentage((179 - 215)/ 214) 0} -.icon-custom-StickMan {background-position: percentage((180 - 215)/ 214) 0} -.icon-custom-SuperBomb {background-position: percentage((181 - 215)/ 214) 0} -.icon-custom-SuperBunny {background-position: percentage((182 - 215)/ 214) 0} -.icon-custom-SuperMeatBoy {background-position: percentage((183 - 215)/ 214) 0} -.icon-custom-Swatchy {background-position: percentage((184 - 215)/ 214) 0} -.icon-custom-TeaTime {background-position: percentage((185 - 215)/ 214) 0} -.icon-custom-TerraEsper {background-position: percentage((186 - 215)/ 214) 0} -.icon-custom-TetraSheet {background-position: percentage((187 - 215)/ 214) 0} -.icon-custom-Thief {background-position: percentage((188 - 215)/ 214) 0} -.icon-custom-Tile {background-position: percentage((189 - 215)/ 214) 0} -.icon-custom-Tingle {background-position: percentage((190 - 215)/ 214) 0} -.icon-custom-TMNT {background-position: percentage((191 - 215)/ 214) 0} -.icon-custom-Toad {background-position: percentage((192 - 215)/ 214) 0} -.icon-custom-CaptainToadette {background-position: percentage((193 - 215)/ 214) 0} -.icon-custom-TotemLinks {background-position: percentage((194 - 215)/ 214) 0} -.icon-custom-TrogdortheBurninator {background-position: percentage((195 - 215)/ 214) 0} -.icon-custom-TPZelda {background-position: percentage((196 - 215)/ 214) 0} -.icon-custom-TwoFaced {background-position: percentage((197 - 215)/ 214) 0} -.icon-custom-Ultros {background-position: percentage((198 - 215)/ 214) 0} -.icon-custom-Valeera {background-position: percentage((199 - 215)/ 214) 0} -.icon-custom-VanillaLink {background-position: percentage((200 - 215)/ 214) 0} -.icon-custom-Vitreous {background-position: percentage((201 - 215)/ 214) 0} -.icon-custom-Vivi {background-position: percentage((202 - 215)/ 214) 0} -.icon-custom-Vivian {background-position: percentage((203 - 215)/ 214) 0} -.icon-custom-Wario {background-position: percentage((204 - 215)/ 214) 0} -.icon-custom-Will {background-position: percentage((205 - 215)/ 214) 0} -.icon-custom-wixB {background-position: percentage((206 - 215)/ 214) 0} -.icon-custom-Wizzrobe {background-position: percentage((207 - 215)/ 214) 0} -.icon-custom-Yoshi {background-position: percentage((208 - 215)/ 214) 0} -.icon-custom-YunicaTovah {background-position: percentage((209 - 215)/ 214) 0} -.icon-custom-Zandra {background-position: percentage((210 - 215)/ 214) 0} -.icon-custom-ZebraUnicorn {background-position: percentage((211 - 215)/ 214) 0} -.icon-custom-Zelda {background-position: percentage((212 - 215)/ 214) 0} -.icon-custom-ZeroSuitSamus {background-position: percentage((213 - 215)/ 214) 0} -.icon-custom-Zora {background-position: percentage((214 - 215)/ 214) 0} diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss deleted file mode 100644 index e0dda57e5..000000000 --- a/resources/assets/sass/app.scss +++ /dev/null @@ -1,397 +0,0 @@ - -// Fonts -@import url('https://fonts.googleapis.com/css?family=Cabin|Schoolbell:300,400,600'); - -// Variables -@import 'variables'; - -@import 'sprites'; - -@import 'bootstrap4fixes'; - -// Bootstrap -@import '~bootstrap/scss/bootstrap'; -@import '~vue-multiselect/dist/vue-multiselect.min'; -@import 'vue-multiselect'; -@import 'v-tooltip'; -@import 'loading'; -@import '~flag-icon-css/sass/variables'; -@import "~flag-icon-css/sass/flag-icon-base"; -@include flag-icon(us); -@include flag-icon(fr); -@include flag-icon(de); -@include flag-icon(es); - -body { - background-color: #EEEEEE; -} - -h4, .h4, h5, .h5 { - font-weight: bold; -} - -.nav-tabs-sticky { - position: sticky; - top: 53px; - z-index: 990; -} - -.panel-heading-sticky, .card-heading-sticky { - position: sticky; - top: 93px; - z-index: 990; -} - -.panel-sticky, .card-sticky { - position: sticky; - top: 0; - z-index: 990; -} - -.navbar { - padding: 0.1rem 2rem; -} - -.navbar-brand { - padding: 0; -} - -.no-resize { - resize: none; -} - -.btn-secondary { - background-color: #FF0000; - border-color: #FF0000; - border-image: none; - color: #FFFFFF; -} - -ins.adsbygoogle { - margin-top: 10px; -} - -.btn-secondary:hover { - background-color: #C10B0B; - border-color: #C10B0B; - color: #FFFFFF; -} - -.btn-outline-secondary { - background-color: transparent; - border-color: #868E96; - border-image: none; - color: #868E96; -} - -.btn-outline-secondary:hover { - background-color: #868E96; - border-color: #868E96; - color: #FFFFFF; -} - -.btn-wrapper { - display: flex; - justify-content: stretch; - padding: 0 140px; -} - -.btn-cta { - flex: 1 0 0px; -} - -.btn-cta .btn, .btn-cal .btn { - width: 100%; -} - -.btn-cal { - flex: 1 0 0px; - padding: 4px; -} - -.btn-xl { - width: 33%; -} - -.btn-flex { - align-content: stretch; - align-items: stretch; - display: flex; -} - -.btn-flex .btn:first-child { - flex-grow: 1; - text-align: left; -} - -.btn-file { - overflow: hidden; - position: relative; -} -.btn-file input[type=file] { - background: white; - cursor: inherit; - display: block; - filter: alpha(opacity=0); - font-size: 100px; - min-height: 100%; - min-width: 100%; - opacity: 0; - outline: none; - position: absolute; - right: 0; - text-align: right; - top: 0; -} - -.card-header { - padding: 0.5rem 1.25rem; -} -.card-title { - margin-top: 0.2rem; - margin-bottom: 0; -} - -.cust-tooltip { - color: #3097D1; - padding-left: 2px; -} - -.options-tooltip { - color: #3097D1; - padding-left: 5px; -} - -.input-group-addon .cust-tooltip { - padding-left: 5px; -} - -.panel-heading-btn h3 { - line-height: normal; - overflow: hidden; - padding-top: 8px; - text-overflow: ellipsis; - white-space: nowrap; -} - -.spoiler { - border: 1px solid #808080; - border-radius: 5px; - margin-bottom: 5px; - margin-top: 5px; -} -.spoiler-toggle { - color: #808080; - cursor: default; - font-size: 10px; - font-weight: bold; - padding: 5px; -} -.spoiler-text { - padding: 5px; -} -.pulse { - animation: pulse 4s infinite; - border-radius: 50%; -} -.pulse:hover { - animation: none; -} -.pb-5 { - padding-bottom: 15px; -} - -.handwritten { - font-family: "Schoolbell", serif; -} -.prose { - font-size: 16px; - font-weight: 600; - background-color: #f8f5de; - background-image: linear-gradient(to right, rgba(255,210,0,0.4), rgba(200, 160, 0, 0.1) 11%, rgba(0,0,0,0) 35%, rgba(200, 160, 0, 0.1) 65%); - box-shadow: inset 0 0 75px rgba(255,210,0,0.3), inset 0 0 20px rgba(255,210,0,0.4), inset 0 0 30px rgba(220,120,0,0.8); - color: rgba(0,0,0,0.75); - letter-spacing: 0.05em; - line-height: 1.8; - padding: 25px; -} - -.alternate-color span { - font-weight: bold; - text-shadow: - -1px -1px 0 #000, - 1px -1px 0 #000, - -1px 1px 0 #000, - 1px 1px 0 #000; -} -.alternate-color span:nth-of-type(4n) { - color: #e1f7d5; -} -.alternate-color span:nth-of-type(4n + 1) { - color: #ffbdbd; -} -.alternate-color span:nth-of-type(4n + 2) { - color: #c9c9ff; -} -.alternate-color span:nth-of-type(4n + 3) { - color: #f1cbff; -} - -@-webkit-keyframes pulse { - 0% { - -webkit-box-shadow: 0 0 0 0 rgba(200, 200, 200, 0.4); - } - 70% { - -webkit-box-shadow: 0 0 0 10px rgba(200, 200, 200, 0); - } - 100% { - -webkit-box-shadow: 0 0 0 0 rgba(200, 200, 200, 0); - } -} -@keyframes pulse { - 0% { - -moz-box-shadow: 0 0 0 0 rgba(200, 200, 200, 0.4); - box-shadow: 0 0 0 0 rgba(200, 200, 200, 0.4); - } - 70% { - -moz-box-shadow: 0 0 0 10px rgba(200, 200, 200, 0); - box-shadow: 0 0 0 10px rgba(200, 200, 200, 0); - } - 100% { - -moz-box-shadow: 0 0 0 0 rgba(200, 200, 200, 0); - box-shadow: 0 0 0 0 rgba(200, 200, 200, 0); - } -} - -input[readonly].custom-placed, input[readonly].custom-drops-placed { - background-color:transparent; - border: 0; - font-size: 1em; -} - -.running-now { - color: red; - font-weight: bold; -} - -.tbody-striped { - > tbody { - > tr { - background-color: $table-bg-accent; - } - > tr:nth-of-type(odd) { - background-color: inherit; - } - } - > tbody:nth-of-type(odd){ - > tr { - background-color: inherit; - } - > tr:nth-of-type(odd) { - background-color: $table-bg-accent; - } - } -} - -.table-secondary { - background-color: #EEEEEE; -} - -.table-hover>tbody>tr:hover { - background-color: #D6D8DB; -} - -.center { - text-align: center; -} - -.btn-cal1 { - background-color: #AD2D2D; - color: #FFFFFF; -} - -.btn-cal2 { - background-color: #668CD9; - color: #FFFFFF; -} - -.btn-cal3 { - background-color: #CF9911; - color: #FFFFFF; -} - -.btn-cal4 { - background-color: #8CBF40; - color: #FFFFFF; -} - -.btn-cal5 { - background-color: #737373; - color: #FFFFFF; - margin: 4px; -} - -.btn-cal1:hover { - background-color: #941414; - color: #FFFFFF; -} - -.btn-cal2:hover { - background-color: #4D73C0; - color: #FFFFFF; -} - -.btn-cal3:hover { - background-color: #B68000; - color: #FFFFFF; -} - -.btn-cal4:hover { - background-color: #73A627; - color: #FFFFFF; -} - -.btn-cal5:hover { - background-color: #737373; - color: #FFFFFF; - cursor: auto; -} - -// invert dropdown on right nav items -.ml-auto .dropdown-menu { - left: auto !important; - right: 0px; -} - -.w-10 { - width: 10% !important; -} - -.w-20 { - width: 20% !important; -} - -.w-33 { - width: 33.33% !important; -} - -.w-40 { - width: 40% !important; -} - -.w-60 { - width: 60% !important; -} - -.w-80 { - width: 80% !important; -} - -.led-green { - display: inline-table; - width: 12px; - height: 12px; - background-color: #66FF00; - border-radius: 50%; - box-shadow: #000000 0 -1px 7px 1px, inset #55AA00 0 -1px 9px, #77DD00 0 2px 12px; -} diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 000000000..e7c5e9196 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1,70 @@ +import * as Sentry from "@sentry/browser"; +import VTooltip from "v-tooltip"; +import VueTimeago from "vue-timeago"; + +if (process.env.MIX_SENTRY_DSN_PUBLIC) { + Sentry.init({ + dsn: process.env.MIX_SENTRY_DSN_PUBLIC, + blacklistUrls: [ + // Chrome extensions + /extensions\//i, + /^chrome:\/\//i, + // Firefox extensions + /^moz-extension:\/\//i, + // AdSense + /pagead2\.googlesyndication\.com/i + ] + }); +} + +require("./polyfill"); +require("./bootstrap"); + +const Vue = require("vue"); +window.Vue = Vue; +window.cStore = require("./store/customizer").default; + +import VueInternationalization from "vue-i18n"; +import Locale from "./vue-i18n-locales.generated"; + +Vue.use(VueInternationalization); + +window.i18n = new VueInternationalization({ + locale: document.documentElement.lang, + fallbackLocale: "en", + silentFallbackWarn: true, + silentTranslationWarn: true, + messages: Locale +}); + +Vue.use(VTooltip); +Vue.use(VueTimeago, { + locale: "en", // Default locale + locales: { + fr: require("date-fns/locale/fr"), + de: require("date-fns/locale/de"), + es: require("date-fns/locale/es") + } +}); +Vue.component("vt-rom-info", require("./components/VTRomInfo.vue").default); +Vue.component( + "vt-rom-settings", + require("./components/VTRomSettings.vue").default +); +Vue.component("vt-select", require("./components/VTSelect.vue").default); +Vue.component("vt-spoiler", require("./components/VTSpoiler.vue").default); +Vue.component( + "vt-sprite-select", + require("./components/VTSpriteSelect.vue").default +); +Vue.component("vt-text", require("./components/VTText.vue").default); +Vue.component("Streams", require("./components/Streams").default); + +// Views +Vue.component("Customizer", require("./views/Customizer.vue").default); +Vue.component("Hashloader", require("./views/HashLoader.vue").default); +Vue.component("Randomizer", require("./views/Randomizer.vue").default); +Vue.component("Sprites", require("./views/Sprites.vue").default); + +// ignore adsense +Vue.config.ignoredElements = ["ins"]; diff --git a/resources/assets/js/bootstrap.js b/resources/js/bootstrap.js similarity index 51% rename from resources/assets/js/bootstrap.js rename to resources/js/bootstrap.js index 3f0c3c1fc..b3c22e8af 100644 --- a/resources/assets/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -1,5 +1,4 @@ - -window.Popper = require('popper.js').default; +window.Popper = require("popper.js").default; /** * We'll load jQuery and the Bootstrap jQuery plugin which provides support @@ -8,10 +7,12 @@ window.Popper = require('popper.js').default; */ try { - window.$ = window.jQuery = require('jquery'); + window.$ = window.jQuery = require("jquery"); - require('bootstrap'); -} catch (e) {} + require("bootstrap"); +} catch (e) { + // continue regardless of error +} /** * We'll load the axios HTTP library which allows us to easily issue requests @@ -19,10 +20,9 @@ try { * CSRF token as a header based on the value of the "XSRF" token cookie. */ -window.axios = require('axios'); +window.axios = require("axios"); -// enabling the next line enables CORS and that fails... WHY?!? -//window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; +window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; /** * Next we will register the CSRF Token as a common header with Axios so that @@ -30,13 +30,15 @@ window.axios = require('axios'); * a simple convenience so we don't have to attach every token manually. */ -//let token = document.head.querySelector('meta[name="csrf-token"]'); -// -//if (token) { -// window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; -//} else { -// console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); -//} +let token = document.head.querySelector('meta[name="csrf-token"]'); + +if (token) { + window.axios.defaults.headers.common["X-CSRF-TOKEN"] = token.content; +} else { + console.error( + "CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token" + ); +} -window.localforage = require('localforage'); -window.ROM = require('./rom.js'); +window.localforage = require("localforage"); +window.ROM = require("./rom.js"); diff --git a/resources/js/components/Customizer/EquipmentSelect.vue b/resources/js/components/Customizer/EquipmentSelect.vue new file mode 100644 index 000000000..392c68c7d --- /dev/null +++ b/resources/js/components/Customizer/EquipmentSelect.vue @@ -0,0 +1,1048 @@ + + + + + diff --git a/resources/js/components/Customizer/Glitches.vue b/resources/js/components/Customizer/Glitches.vue new file mode 100644 index 000000000..2fbdf99dd --- /dev/null +++ b/resources/js/components/Customizer/Glitches.vue @@ -0,0 +1,62 @@ + + + diff --git a/resources/js/components/Customizer/ItemPool.vue b/resources/js/components/Customizer/ItemPool.vue new file mode 100644 index 000000000..8a4fc76e7 --- /dev/null +++ b/resources/js/components/Customizer/ItemPool.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/resources/js/components/Customizer/Locations.vue b/resources/js/components/Customizer/Locations.vue new file mode 100644 index 000000000..d6947fc0f --- /dev/null +++ b/resources/js/components/Customizer/Locations.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/resources/js/components/Customizer/PrizePackPool.vue b/resources/js/components/Customizer/PrizePackPool.vue new file mode 100644 index 000000000..77c348d5b --- /dev/null +++ b/resources/js/components/Customizer/PrizePackPool.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/resources/js/components/Customizer/PrizePacks.vue b/resources/js/components/Customizer/PrizePacks.vue new file mode 100644 index 000000000..2c83cef97 --- /dev/null +++ b/resources/js/components/Customizer/PrizePacks.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/resources/js/components/Customizer/Settings.vue b/resources/js/components/Customizer/Settings.vue new file mode 100644 index 000000000..0525496cb --- /dev/null +++ b/resources/js/components/Customizer/Settings.vue @@ -0,0 +1,365 @@ + + + diff --git a/resources/js/components/Select.vue b/resources/js/components/Select.vue new file mode 100644 index 000000000..d11defb97 --- /dev/null +++ b/resources/js/components/Select.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/resources/js/components/Streams.vue b/resources/js/components/Streams.vue new file mode 100644 index 000000000..c9149f67c --- /dev/null +++ b/resources/js/components/Streams.vue @@ -0,0 +1,89 @@ + + + diff --git a/resources/js/components/TextField.vue b/resources/js/components/TextField.vue new file mode 100644 index 000000000..48cec80d7 --- /dev/null +++ b/resources/js/components/TextField.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/resources/js/components/Toggle.vue b/resources/js/components/Toggle.vue new file mode 100644 index 000000000..465bd94bc --- /dev/null +++ b/resources/js/components/Toggle.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/resources/js/components/VTRomInfo.vue b/resources/js/components/VTRomInfo.vue new file mode 100644 index 000000000..e6b09f245 --- /dev/null +++ b/resources/js/components/VTRomInfo.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/resources/js/components/VTRomLoader.vue b/resources/js/components/VTRomLoader.vue new file mode 100644 index 000000000..bf5de53e3 --- /dev/null +++ b/resources/js/components/VTRomLoader.vue @@ -0,0 +1,181 @@ + + + diff --git a/resources/js/components/VTRomSettings.vue b/resources/js/components/VTRomSettings.vue new file mode 100644 index 000000000..d60c432a3 --- /dev/null +++ b/resources/js/components/VTRomSettings.vue @@ -0,0 +1,174 @@ + + + diff --git a/resources/js/components/VTSelect.vue b/resources/js/components/VTSelect.vue new file mode 100644 index 000000000..96ce9d29f --- /dev/null +++ b/resources/js/components/VTSelect.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/resources/js/components/VTSpoiler.vue b/resources/js/components/VTSpoiler.vue new file mode 100644 index 000000000..202891f03 --- /dev/null +++ b/resources/js/components/VTSpoiler.vue @@ -0,0 +1,427 @@ + + + diff --git a/resources/js/components/VTSpriteSelect.vue b/resources/js/components/VTSpriteSelect.vue new file mode 100644 index 000000000..81cd9267c --- /dev/null +++ b/resources/js/components/VTSpriteSelect.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/resources/js/components/VTTab.vue b/resources/js/components/VTTab.vue new file mode 100644 index 000000000..9ef6d1b59 --- /dev/null +++ b/resources/js/components/VTTab.vue @@ -0,0 +1,28 @@ + + + diff --git a/resources/js/components/VTTabs.vue b/resources/js/components/VTTabs.vue new file mode 100644 index 000000000..1563c6fa1 --- /dev/null +++ b/resources/js/components/VTTabs.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/resources/js/components/VTText.vue b/resources/js/components/VTText.vue new file mode 100644 index 000000000..340ba47bf --- /dev/null +++ b/resources/js/components/VTText.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/resources/js/components/VTTextarea.vue b/resources/js/components/VTTextarea.vue new file mode 100644 index 000000000..9b685c653 --- /dev/null +++ b/resources/js/components/VTTextarea.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/resources/js/components/VTToggle.vue b/resources/js/components/VTToggle.vue new file mode 100644 index 000000000..d053b3585 --- /dev/null +++ b/resources/js/components/VTToggle.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/resources/assets/js/core/event-bus.js b/resources/js/core/event-bus.js similarity index 70% rename from resources/assets/js/core/event-bus.js rename to resources/js/core/event-bus.js index 4bfd2905f..a30aa3764 100644 --- a/resources/assets/js/core/event-bus.js +++ b/resources/js/core/event-bus.js @@ -1,4 +1,4 @@ -import Vue from 'vue'; +import Vue from "vue"; const EventBus = new Vue(); diff --git a/resources/js/polyfill/NodeList.prototype.forEach.js b/resources/js/polyfill/NodeList.prototype.forEach.js new file mode 100644 index 000000000..a4511d825 --- /dev/null +++ b/resources/js/polyfill/NodeList.prototype.forEach.js @@ -0,0 +1,8 @@ +if (window.NodeList && !NodeList.prototype.forEach) { + NodeList.prototype.forEach = function(callback, thisArg) { + thisArg = thisArg || window; + for (var i = 0; i < this.length; i++) { + callback.call(thisArg, this[i], i, this); + } + }; +} diff --git a/resources/js/polyfill/Promise.prototype.finally.js b/resources/js/polyfill/Promise.prototype.finally.js new file mode 100644 index 000000000..02fb1b0ad --- /dev/null +++ b/resources/js/polyfill/Promise.prototype.finally.js @@ -0,0 +1,56 @@ +// from on https://github.com/tc39/proposal-promise-finally/blob/master/polyfill.js +if (typeof Promise !== "function") { + throw new TypeError("A global Promise is required"); +} + +if (typeof Promise.prototype.finally !== "function") { + var speciesConstructor = function(O, defaultConstructor) { + if (!O || (typeof O !== "object" && typeof O !== "function")) { + throw new TypeError("Assertion failed: Type(O) is not Object"); + } + var C = O.constructor; + if (typeof C === "undefined") { + return defaultConstructor; + } + if (!C || (typeof C !== "object" && typeof C !== "function")) { + throw new TypeError("O.constructor is not an Object"); + } + var S = + typeof Symbol === "function" && typeof Symbol.species === "symbol" + ? C[Symbol.species] + : undefined; + if (S == null) { + return defaultConstructor; + } + if (typeof S === "function" && S.prototype) { + return S; + } + throw new TypeError("no constructor found"); + }; + + var shim = { + finally(onFinally) { + var promise = this; + if (typeof promise !== "object" || promise === null) { + throw new TypeError('"this" value is not an Object'); + } + var C = speciesConstructor(promise, Promise); // throws if SpeciesConstructor throws + if (typeof onFinally !== "function") { + return Promise.prototype.then.call(promise, onFinally, onFinally); + } + return Promise.prototype.then.call( + promise, + x => new C(resolve => resolve(onFinally())).then(() => x), + e => + new C(resolve => resolve(onFinally())).then(() => { + throw e; + }) + ); + } + }; + Object.defineProperty(Promise.prototype, "finally", { + configurable: true, + writable: true, + value: shim.finally + }); +} diff --git a/resources/js/polyfill/index.js b/resources/js/polyfill/index.js new file mode 100644 index 000000000..6dae19aa2 --- /dev/null +++ b/resources/js/polyfill/index.js @@ -0,0 +1,3 @@ +require("es6-promise").polyfill(); +require("./NodeList.prototype.forEach"); +require("./Promise.prototype.finally"); diff --git a/resources/js/potdata.js b/resources/js/potdata.js new file mode 100644 index 000000000..9c1ebd59c --- /dev/null +++ b/resources/js/potdata.js @@ -0,0 +1,794 @@ +// this is all the pot data for the game +// [room, X, Y, item, [allowed item, ...]] +export default [ + [4, 0x26, 0x27, 10, []], + [4, 0x38, 0x27, 10, []], + [4, 0x0c, 0x2d, null, []], + [4, 0x11, 0x2d, null, []], + [4, 0x0c, 0x33, null, []], + [4, 0x11, 0x33, null, []], + [9, 0x0c, 0x04, 1, ["S01"]], + [9, 0x30, 0x04, 11, ["S01"]], + [9, 0x0c, 0x0c, "S01", ["S01"]], + [10, 0x60, 0x08, 11, ["S02"]], + [10, 0x68, 0x08, 11, ["S02"]], + [10, 0xcc, 0x0b, "S02", ["S02"]], + [10, 0x9c, 0x11, 10, ["S02"]], + [10, 0xa0, 0x11, 9, ["S02"]], + [10, 0x64, 0x07, null, ["S02"]], + [10, 0x64, 0x09, null, ["S02"]], + [11, 0xca, 0x03, 10, []], + [11, 0xca, 0x0c, 10, []], + [17, 0x90, 0x0f, 11, []], + [17, 0xa0, 0x0f, 11, []], + [17, 0x90, 0x13, 11, []], + [17, 0xa0, 0x13, 11, []], + [17, 0x98, 0x0f, null, []], + [17, 0x98, 0x13, null, []], + [21, 0x60, 0x04, 10, []], + [21, 0x64, 0x04, 12, []], + [21, 0x68, 0x04, 11, []], + [21, 0x6c, 0x04, 12, []], + [21, 0x70, 0x04, 9, []], + [21, 0x0c, 0x06, 1, []], + [21, 0x10, 0x06, 9, []], + [21, 0x14, 0x06, 7, []], + [21, 0x46, 0x0b, 13, []], + [22, 0xbc, 0x03, 11, ["K01"]], + [22, 0xc0, 0x03, 11, ["K01"]], + [22, 0xbc, 0x04, 12, ["K01"]], + [22, 0xc0, 0x04, 12, ["K01"]], + [22, 0xbc, 0x05, 9, ["K01"]], + [22, 0xc0, 0x05, 9, ["K01"]], + [22, 0xbc, 0x06, 10, ["K01"]], + [22, 0xc0, 0x06, 10, ["K01"]], + [22, 0xf0, 0x13, "K01", ["K01"]], + [23, 0x64, 0x0d, 11, []], + [23, 0x64, 0x0e, 11, []], + [23, 0x64, 0x0f, 11, []], + [23, 0x64, 0x10, 11, []], + [23, 0x64, 0x11, 11, []], + [23, 0x64, 0x12, 11, []], + [23, 0x68, 0x0d, 11, []], + [23, 0x68, 0x0e, 11, []], + [23, 0x68, 0x0f, 11, []], + [23, 0x68, 0x10, 11, []], + [23, 0x68, 0x11, 11, []], + [23, 0x68, 0x12, 11, []], + [26, 0x1c, 0x05, 10, []], + [26, 0x20, 0x05, 10, []], + [26, 0x1c, 0x1b, 10, []], + [26, 0x20, 0x1b, 10, []], + [26, 0xd4, 0x13, null, []], + [26, 0xe8, 0x13, null, []], + [27, 0x14, 0x17, 9, []], + [27, 0x28, 0x17, 9, []], + [30, 0x54, 0x09, 10, []], + [31, 0x1c, 0x19, "S03", ["S03", "K05"]], + [31, 0x56, 0x1a, null, ["K05"]], + [31, 0x56, 0x1b, null, ["K05"]], + [31, 0x1c, 0x17, "S03", ["S03", "K05"]], + [33, 0xa8, 0x18, 12, []], + [33, 0x30, 0x1c, 11, []], + [33, 0x52, 0x1c, 12, []], + [33, 0xa0, 0x14, null, []], + [33, 0x64, 0x1c, null, []], + [33, 0x68, 0x1c, null, []], + [35, 0x56, 0x1a, 1, []], + [35, 0x5a, 0x1a, 11, []], + [35, 0x5e, 0x1a, 1, []], + [35, 0x62, 0x1a, 10, []], + [35, 0x66, 0x1a, 1, []], + [36, 0x0c, 0x04, 7, []], + [36, 0x30, 0x04, 11, []], + [36, 0x0c, 0x0c, 12, []], + [36, 0x30, 0x0c, 1, []], + [38, 0x1c, 0x04, 10, []], + [38, 0x0c, 0x08, 12, []], + [38, 0x96, 0x13, "S04", ["S04"]], + [38, 0x16, 0x1a, 7, ["S04"]], + [38, 0xdc, 0x1a, 9, []], + [39, 0xa6, 0x14, 10, []], + [39, 0xd6, 0x15, 11, []], + [39, 0x28, 0x1c, 1, []], + [39, 0x2c, 0x1c, 1, []], + [39, 0x50, 0x1c, 7, []], + [39, 0x54, 0x1c, 7, []], + [39, 0xa0, 0x0c, null, []], + [39, 0xa6, 0x13, null, []], + [39, 0xa6, 0x15, null, []], + [39, 0xd6, 0x13, null, []], + [39, 0xd6, 0x14, null, []], + [39, 0x62, 0x11, null, []], + [39, 0x66, 0x11, null, []], + [39, 0x6a, 0x11, null, []], + [39, 0x5c, 0x0c, null, []], + [42, 0x50, 0x0c, 1, []], + [42, 0x50, 0x13, 11, []], + [43, 0x10, 0x05, 11, []], + [43, 0x2c, 0x05, "S05", ["S05"]], + [43, 0x10, 0x06, 11, []], + [43, 0x2c, 0x06, 10, ["S05"]], + [43, 0x10, 0x07, 11, []], + [43, 0x2c, 0x07, 10, ["S05"]], + [43, 0x92, 0x15, 10, []], + [43, 0xaa, 0x15, 9, []], + [43, 0x92, 0x16, 10, []], + [43, 0xaa, 0x16, 9, []], + [44, 0x6c, 0x18, 11, []], + [44, 0x70, 0x18, 11, []], + [47, 0x1c, 0x07, 11, []], + [47, 0x20, 0x07, 11, []], + [47, 0x1c, 0x09, 7, []], + [47, 0x20, 0x09, 7, []], + [47, 0xac, 0x13, 7, [null]], + [47, 0xb4, 0x13, 7, []], + [47, 0x68, 0x1b, 11, []], + [47, 0x68, 0x1c, 11, []], + [49, 0x5c, 0x1c, 10, []], + [49, 0x60, 0x1c, null, []], + [50, 0x1c, 0x0d, 12, []], + [52, 0x4e, 0x08, 7, []], + [52, 0x5c, 0x08, 7, []], + [53, 0x3c, 0x06, "K02", ["K02"]], + [53, 0x14, 0x08, 7, ["K02"]], + [53, 0x18, 0x08, 7, ["K02"]], + [53, 0x1c, 0x08, 7, ["K02"]], + [53, 0x20, 0x08, 7, ["K02"]], + [53, 0x24, 0x08, 7, ["K02"]], + [53, 0x30, 0x14, 11, []], + [53, 0xf0, 0x16, 11, ["K02"]], + [53, 0x4c, 0x1c, 11, ["K02"]], + [53, 0x58, 0x17, null, ["K02"]], + [53, 0x4c, 0x17, null, ["K02"]], + [53, 0x64, 0x1b, null, ["K02"]], + [53, 0xf2, 0x1c, null, ["K02"]], + [54, 0x6c, 0x04, 10, ["K03"]], + [54, 0x70, 0x04, 7, ["K03"]], + [54, 0x0a, 0x10, 11, ["K03"]], + [54, 0x72, 0x10, "K03", ["K03"]], + [54, 0xde, 0x0f, null, ["K03"]], + [54, 0xc0, 0x05, null, ["K03"]], + [54, 0xbc, 0x05, null, ["K03"]], + [54, 0x9a, 0x0f, null, ["K03"]], + [55, 0x3c, 0x06, "K04", ["K04"]], + [55, 0x30, 0x14, null, ["K04"]], + [57, 0x0c, 0x14, 11, []], + [57, 0x64, 0x16, 12, []], + [57, 0x64, 0x1a, 9, []], + [57, 0x30, 0x1c, 9, []], + [60, 0x18, 0x08, 12, []], + [60, 0x40, 0x0c, 7, []], + [60, 0x14, 0x0e, 1, []], + [60, 0x44, 0x12, 7, []], + [60, 0x60, 0x13, 11, []], + [60, 0x40, 0x14, 7, []], + [60, 0x40, 0x1a, 7, []], + [61, 0x4c, 0x0c, 10, []], + [61, 0x70, 0x0c, 10, []], + [61, 0x18, 0x16, 11, []], + [61, 0x28, 0x16, 9, []], + [61, 0x20, 0x18, 11, []], + [61, 0x14, 0x1a, 7, []], + [61, 0x24, 0x1a, 13, []], + [62, 0x60, 0x06, 10, []], + [62, 0x64, 0x06, 12, []], + [62, 0x58, 0x0a, 11, []], + [62, 0x5c, 0x0a, 12, []], + [63, 0x0c, 0x19, 1, ["K05", "S06"]], + [63, 0x14, 0x19, 1, ["K05", "S06"]], + [63, 0x0c, 0x1a, 10, ["K05", "S06"]], + [63, 0x14, 0x1a, 10, ["K05", "S06"]], + [63, 0x0c, 0x1b, "S06", ["K05", "S06"]], + [63, 0x14, 0x1b, 11, ["K05", "S06"]], + [63, 0x1c, 0x17, "K05", ["K05"]], + [65, 0x64, 0x0a, 11, []], + [65, 0x34, 0x0f, 1, []], + [65, 0x34, 0x10, 12, []], + [65, 0x94, 0x16, 12, []], + [67, 0x42, 0x04, 9, []], + [67, 0x4e, 0x04, 12, []], + [67, 0x42, 0x09, 11, []], + [67, 0x4e, 0x09, 11, []], + [67, 0x70, 0x14, "K06", ["K06"]], + [67, 0x4c, 0x14, null, ["K06"]], + [67, 0x4c, 0x1c, null, ["K06"]], + [67, 0x70, 0x1c, null, ["K06"]], + [69, 0x0c, 0x04, 9, []], + [69, 0x6c, 0x0b, 11, []], + [69, 0x30, 0x0c, 9, []], + [69, 0xdc, 0x10, 12, []], + [69, 0xec, 0x10, 11, []], + [70, 0x60, 0x05, 11, ["K03"]], + [70, 0x1c, 0x1b, 11, ["K03"]], + [73, 0x68, 0x0f, 12, []], + [73, 0x68, 0x10, 12, []], + [73, 0x90, 0x13, 12, []], + [73, 0xac, 0x14, 11, []], + [73, 0x90, 0x1b, 11, []], + [73, 0xac, 0x1c, 12, []], + [73, 0x90, 0x14, null, []], + [73, 0xac, 0x17, null, []], + [73, 0xac, 0x18, null, []], + [73, 0xa0, 0x1b, null, []], + [73, 0x9c, 0x1b, null, []], + [74, 0x0e, 0x05, "S07", ["S07"]], + [74, 0x20, 0x05, 10, ["S07"]], + [74, 0x5c, 0x05, 10, []], + [74, 0x6e, 0x05, 10, []], + [74, 0x38, 0x08, 10, []], + [74, 0x0e, 0x0b, 11, ["S07"]], + [74, 0x20, 0x0b, 1, ["S07"]], + [74, 0x5c, 0x0b, 1, []], + [74, 0x6e, 0x0b, 11, []], + [74, 0x44, 0x08, null, []], + [75, 0x14, 0x06, 9, []], + [75, 0x28, 0x06, 11, []], + [78, 0x8c, 0x0b, "S08", ["S08"]], + [78, 0x1c, 0x0c, 11, ["S08"]], + [78, 0x70, 0x0c, 12, []], + [78, 0x8c, 0x07, null, ["S08"]], + [78, 0x30, 0x0a, null, ["S08"]], + [80, 0x60, 0x06, 11, []], + [80, 0x64, 0x06, 11, []], + [82, 0x8a, 0x03, 11, []], + [82, 0xc2, 0x1a, 11, []], + [83, 0x5c, 0x0b, 11, ["K07"]], + [83, 0x60, 0x0b, 12, ["K07"]], + [83, 0x64, 0x0b, "K07", ["K07"]], + [83, 0x68, 0x0b, 11, ["K07"]], + [84, 0xba, 0x19, 7, []], + [84, 0xba, 0x1a, 11, []], + [84, 0xba, 0x1b, 11, []], + [84, 0xba, 0x1c, 11, []], + [85, 0xe6, 0x18, 12, []], + [85, 0xe6, 0x19, 12, []], + [86, 0x14, 0x06, 12, []], + [86, 0x28, 0x06, 12, []], + [86, 0x18, 0x07, 12, []], + [86, 0x24, 0x07, 12, []], + [86, 0x0c, 0x08, 11, []], + [86, 0x30, 0x08, 11, []], + [86, 0x18, 0x09, 12, []], + [86, 0x24, 0x09, 12, []], + [86, 0x14, 0x0a, 7, []], + [86, 0x28, 0x0a, 7, []], + [86, 0x0c, 0x14, "K08", ["K08"]], + [86, 0x5c, 0x0a, null, ["K08"]], + [86, 0x60, 0x0a, null, ["K08"]], + [86, 0x64, 0x06, null, ["K08"]], + [86, 0x30, 0x14, null, ["K08"]], + [87, 0x5c, 0x07, 13, ["K08"]], + [87, 0x0c, 0x14, 12, ["S09", "K08"]], + [87, 0x5c, 0x17, 10, ["K08"]], + [87, 0x64, 0x17, 12, ["K08"]], + [87, 0x54, 0x19, 7, ["K08"]], + [87, 0x4c, 0x1b, 11, ["K08"]], + [87, 0x30, 0x14, 12, ["S09", "K08"]], + [87, 0x1e, 0x16, "S09", ["K08"]], + [88, 0x60, 0x05, 10, ["K08"]], + [88, 0x64, 0x05, 12, ["K08"]], + [88, 0x0c, 0x07, 12, ["K08"]], + [88, 0x5c, 0x07, 11, ["K08"]], + [88, 0x6c, 0x07, 11, ["K08"]], + [88, 0x10, 0x08, 12, ["K08"]], + [88, 0x64, 0x09, 12, ["K08"]], + [88, 0x68, 0x09, 10, ["K08"]], + [88, 0x10, 0x07, null, ["K08"]], + [88, 0x0c, 0x0c, null, ["K08"]], + [88, 0x5c, 0x06, null, ["K08"]], + [88, 0x5c, 0x08, null, ["K08"]], + [88, 0x60, 0x09, null, ["K08"]], + [88, 0x6c, 0x08, null, ["K08"]], + [88, 0x6c, 0x06, null, ["K08"]], + [88, 0x68, 0x05, null, ["K08"]], + [89, 0x1a, 0x2b, 11, ["K08"]], + [89, 0x4c, 0x1c, null, ["K08"]], + [89, 0x70, 0x1c, null, ["K08"]], + [91, 0xde, 0x25, "S10", ["S10"]], // added fill value + [91, 0xda, 0x25, null, ["S10"]], + [91, 0xe2, 0x25, null, ["S10"]], + [92, 0x5e, 0x16, 10, []], + [92, 0x5e, 0x1a, 13, []], + [92, 0xd8, 0x16, null, []], + [92, 0x54, 0x18, null, []], + [92, 0xd8, 0x19, null, []], + [92, 0xe4, 0x19, null, []], + [92, 0x68, 0x18, null, []], + [92, 0xe4, 0x16, null, []], + [93, 0x10, 0x05, 10, []], + [93, 0x2c, 0x05, 7, []], + [93, 0x10, 0x0b, 1, []], + [93, 0x2c, 0x0b, 9, []], + [93, 0x0c, 0x14, 9, []], + [93, 0x30, 0x14, 10, []], + [93, 0x0c, 0x1c, 12, []], + [93, 0x30, 0x1c, 10, []], + [94, 0x5c, 0x04, 12, []], + [94, 0x60, 0x04, 12, []], + [94, 0x4c, 0x08, 11, []], + [94, 0x70, 0x08, 11, []], + [95, 0x2c, 0x1b, "S11", ["S11"]], + [96, 0x4c, 0x04, 11, []], + [96, 0x70, 0x04, 11, []], + [98, 0xd0, 0x15, 11, []], + [99, 0x30, 0x08, 11, ["K09"]], + [99, 0x0c, 0x0c, "K09", ["K09"]], + [99, 0x0c, 0x08, null, ["K09"]], + [99, 0x0c, 0x04, null, ["K09"]], + [99, 0x30, 0x04, null, ["K09"]], + [99, 0x30, 0x0c, null, ["K09"]], + [100, 0x0c, 0x16, 10, ["S12"]], + [100, 0x10, 0x16, 10, ["S12"]], + [100, 0x14, 0x16, 10, ["S12"]], + [100, 0x24, 0x1c, 10, ["S12"]], + [100, 0x28, 0x1c, 12, ["S12"]], + [100, 0x2c, 0x1c, 12, ["S12"]], + [100, 0x30, 0x1c, "S12", ["S12"]], // added fill value + [101, 0x64, 0x1c, 10, []], + [101, 0x68, 0x1c, 10, []], + [102, 0x30, 0x25, 9, ["K01"]], + [102, 0x34, 0x25, 10, ["K01"]], + [102, 0x38, 0x25, 7, ["K01"]], + [102, 0x54, 0x05, 11, ["K01"]], + [102, 0x68, 0x05, 9, ["K01"]], + [102, 0x30, 0x26, 9, ["K01"]], + [102, 0x34, 0x26, 10, ["K01"]], + [102, 0x38, 0x26, 7, ["K01"]], + [102, 0x54, 0x06, 11, ["K01"]], + [102, 0x68, 0x06, 10, ["K01"]], + [103, 0x0c, 0x07, 9, ["K08"]], + [103, 0x30, 0x07, 12, ["K08"]], + [103, 0x60, 0x13, 11, ["K08"]], + [103, 0x4a, 0x14, 12, ["K08"]], + [103, 0x12, 0x17, 12, ["K08"]], + [103, 0x12, 0x1a, 11, ["K08"]], + [103, 0x68, 0x1c, 11, ["K08"]], + [103, 0x5c, 0x09, null, ["K08"]], + [103, 0x54, 0x1c, null, ["K08"]], + [103, 0x16, 0x1a, null, ["K08"]], + [104, 0x40, 0x07, 11, ["K08"]], + [104, 0x58, 0x07, 12, ["K08"]], + [104, 0x40, 0x10, 11, ["K08"]], + [104, 0x40, 0x18, 12, ["K08"]], + [104, 0x40, 0x19, 11, ["K08"]], + [104, 0x58, 0x04, null, ["K08"]], + [104, 0x58, 0x05, null, ["K08"]], + [104, 0x58, 0x06, null, ["K08"]], + [104, 0x58, 0x0c, null, ["K08"]], + [104, 0x54, 0x0d, null, ["K08"]], + [104, 0x54, 0x0e, null, ["K08"]], + [104, 0x40, 0x0f, null, ["K08"]], + [104, 0x40, 0x11, null, ["K08"]], + [107, 0x1c, 0x05, 11, []], + [107, 0x2c, 0x08, 12, []], + [107, 0x1c, 0x0b, 12, []], + [107, 0x62, 0x19, 9, []], + [107, 0x2c, 0x05, null, []], + [107, 0x1c, 0x08, null, []], + [107, 0x2c, 0x0b, null, []], + [107, 0x5a, 0x19, null, []], + [108, 0x14, 0x06, 11, []], + [108, 0x28, 0x06, 9, []], + [108, 0x14, 0x0a, 10, []], + [108, 0x28, 0x0a, 12, []], + [109, 0x1c, 0x1a, 11, []], + [109, 0x20, 0x1a, 11, []], + [109, 0x1c, 0x1b, 12, []], + [109, 0x20, 0x1b, 12, []], + [115, 0x9a, 0x15, 9, ["S13"]], + [115, 0x9e, 0x15, 1, ["S13"]], + [115, 0x14, 0x17, "S13", ["S13"]], // adjusted + [115, 0x24, 0x17, 7, ["S13"]], + [115, 0x90, 0x18, 11, ["S13"]], + [115, 0xa8, 0x18, 9, ["S13"]], + [115, 0x14, 0x1a, 12, ["S13"]], + [115, 0x24, 0x1a, 11, ["S13"]], + [115, 0x9a, 0x1b, 1, ["S13"]], + [115, 0x9e, 0x1b, 7, ["S13"]], + [116, 0x1e, 0x05, 12, ["S14"]], + [116, 0x3e, 0x05, "S14", ["S14"]], + [116, 0x5e, 0x05, 12, ["S14"]], + [116, 0x0e, 0x0b, 11, ["S14"]], + [116, 0x2e, 0x0b, 9, ["S14"]], + [116, 0x4e, 0x0b, 9, ["S14"]], + [116, 0x6e, 0x0b, 11, ["S14"]], + [117, 0x94, 0x16, 12, []], + [117, 0xa0, 0x16, 9, []], + [117, 0xac, 0x16, 11, []], + [118, 0x70, 0x0c, 11, ["K01"]], + [118, 0x54, 0x17, 11, ["K01"]], + [118, 0x60, 0x17, 11, ["K01"]], + [123, 0x3c, 0x04, 11, ["K10"]], + [123, 0x40, 0x04, "K10", ["K10"]], + [123, 0x30, 0x0a, null, ["K10"]], + [123, 0x4c, 0x07, null, ["K10"]], + [123, 0x58, 0x0a, null, ["K10"]], + [124, 0x1c, 0x04, 11, []], + [124, 0x20, 0x04, 11, []], + [124, 0x24, 0x15, null, []], + [125, 0x70, 0x06, 11, []], + [125, 0x6c, 0x14, 9, []], + [125, 0x72, 0x14, 10, []], + [125, 0x4c, 0x1c, 10, []], + [125, 0x2c, 0x0c, null, []], + [125, 0x2c, 0x06, null, []], + [126, 0x56, 0x0f, 11, ["S15"]], + [126, 0x52, 0x1a, 12, ["S15"]], + [126, 0x64, 0x1a, "S15", ["S15"]], + [126, 0x68, 0x1a, null, ["S15"]], + [128, 0x30, 0x04, 11, []], + [128, 0x34, 0x04, 11, []], + [128, 0x38, 0x04, 11, []], + [130, 0x4c, 0x32, 11, []], + [130, 0x32, 0x2a, null, []], + [130, 0x32, 0x25, null, []], + [131, 0x4c, 0x04, 9, []], + [131, 0x50, 0x04, 1, []], + [131, 0x4c, 0x1c, 7, []], + [131, 0x50, 0x1c, 9, []], + [132, 0x18, 0x07, 9, []], + [132, 0x64, 0x07, 9, []], + [132, 0x18, 0x06, null, []], + [132, 0x64, 0x06, null, []], + [132, 0x50, 0x0e, null, []], + [132, 0x3c, 0x11, null, []], + [132, 0x2c, 0x0e, null, []], + [132, 0x40, 0x11, null, []], + [133, 0x2c, 0x1c, 11, []], + [133, 0x30, 0x1c, 9, []], + [135, 0x4c, 0x14, 12, []], + [135, 0x70, 0x14, 13, []], + [135, 0x28, 0x0c, null, []], + [135, 0x20, 0x0c, null, []], + [135, 0x18, 0x0c, null, []], + [135, 0x10, 0x0c, null, []], + [135, 0x10, 0x0b, null, []], + [135, 0x0c, 0x0b, null, []], + [139, 0x70, 0x0c, "K11", ["K11"]], + [139, 0x4c, 0x14, 12, []], + [139, 0x4c, 0x1c, 11, []], + [139, 0x4c, 0x0c, null, ["K11"]], + [139, 0x20, 0x09, null, ["K11"]], + [139, 0x1c, 0x17, null, ["K11"]], + [139, 0x20, 0x17, null, ["K11"]], + [140, 0x4c, 0x0c, "S16", ["S16"]], + [140, 0x70, 0x0c, 12, ["S16"]], + [140, 0x4c, 0x14, 10, []], + [140, 0x5c, 0x14, 10, []], + [140, 0x64, 0x15, 9, []], + [140, 0x68, 0x1a, 10, []], + [140, 0x58, 0x1b, 10, []], + [141, 0xcc, 0x0e, 13, []], + [141, 0x1c, 0x17, 11, []], + [141, 0x24, 0x17, 11, []], + [141, 0x20, 0x18, 13, []], + [142, 0x50, 0x05, 9, ["K13"]], + [145, 0x54, 0x04, 11, []], + [145, 0x68, 0x04, 12, []], + [147, 0x1c, 0x07, "S17", ["S17"]], + [147, 0x60, 0x07, 11, []], + [150, 0x20, 0x11, 12, []], + [150, 0x20, 0x18, 12, []], + [150, 0x4c, 0x15, 11, []], + [150, 0x70, 0x15, 13, []], + [150, 0x20, 0x05, null, []], + [150, 0x2e, 0x0b, null, []], + [150, 0x0e, 0x12, null, []], + [150, 0x0e, 0x18, null, []], + [153, 0x28, 0x14, 12, []], + [153, 0x54, 0x14, 11, []], + [155, 0x30, 0x04, 12, ["K12"]], + [155, 0x30, 0x0c, "K12", ["K12"]], + [155, 0x20, 0x18, null, []], + [155, 0x1c, 0x18, null, []], + [156, 0x38, 0x08, 12, []], + [156, 0x38, 0x09, 9, []], + [157, 0x4c, 0x04, 10, []], + [157, 0x54, 0x04, 12, []], + [157, 0x28, 0x09, null, []], + [157, 0x20, 0x07, null, []], + [159, 0x8a, 0x13, 11, ["S18", "K13"]], + [159, 0xb2, 0x13, 11, ["S18", "K13"]], + [159, 0x28, 0x15, "S18", ["S18", "K13"]], + [159, 0x8a, 0x15, "K13", ["S18", "K13"]], + [159, 0x14, 0x1b, 11, ["S18", "K13"]], + [159, 0x8a, 0x1b, 11, ["S18", "K13"]], + [159, 0xb2, 0x1c, 11, ["S18", "K13"]], + [159, 0x8a, 0x14, null, ["S18", "K13"]], + [159, 0x14, 0x15, null, ["S18", "K13"]], + [159, 0xb2, 0x14, null, ["S18", "K13"]], + [159, 0xb2, 0x15, null, ["S18", "K13"]], + [159, 0xb2, 0x1a, null, ["S18", "K13"]], + [159, 0xb2, 0x1b, null, ["S18", "K13"]], + [159, 0x28, 0x1b, null, ["S18", "K13"]], + [159, 0x8a, 0x1a, null, ["S18", "K13"]], + [159, 0x8a, 0x1c, null, ["S18", "K13"]], + [161, 0x96, 0x06, "K14", ["K14"]], // adjusted + [161, 0x64, 0x0b, 12, ["K14"]], + [161, 0x68, 0x0c, 11, ["K14"]], + [161, 0x6c, 0x0d, 12, ["K14"]], + [161, 0x70, 0x0e, 11, ["K14"]], + [161, 0x60, 0x17, 11, ["K14"]], + [161, 0x5c, 0x15, null, ["K14"]], + [161, 0x4c, 0x1c, null, ["K14"]], + [161, 0x70, 0x1c, null, ["K14"]], + [161, 0x60, 0x1b, null, ["K14"]], + [162, 0x0c, 0x1c, 13, []], + [168, 0x8a, 0x13, 11, ["K17"]], + [168, 0x1e, 0x18, 1, ["K17"]], + [168, 0xb2, 0x13, null, ["K17"]], + [168, 0x8a, 0x1c, null, ["K17"]], + [168, 0xb2, 0x1c, null, ["K17"]], + [169, 0x90, 0x2b, 9, ["K17"]], + [169, 0xec, 0x2b, 9, ["K17"]], + [169, 0x90, 0x2c, 9, ["K17"]], + [169, 0xec, 0x2c, 11, ["K17"]], + [169, 0x10, 0x14, 11, ["K17"]], + [169, 0x6c, 0x14, 11, ["K17"]], + [169, 0x0c, 0x13, null, ["K17"]], + [169, 0x70, 0x13, null, ["K17"]], + [170, 0x5e, 0x08, "S19", ["S19", "K17"]], + [170, 0x6c, 0x37, 11, ["K17"]], + [170, 0x6c, 0x38, 11, ["K17"]], + [170, 0x6c, 0x39, 11, ["K17"]], + [170, 0xe8, 0x05, 11, ["S19", "K17"]], + [170, 0xe8, 0x0a, null, ["S19", "K17"]], + [170, 0xd4, 0x0a, null, ["S19", "K17"]], + [170, 0xd4, 0x05, null, ["S19", "K17"]], + [171, 0x14, 0x18, "K15", ["K15"]], + [174, 0x4c, 0x0c, "S20", ["S20"]], + [176, 0x14, 0x15, 10, []], + [176, 0x1c, 0x15, 1, []], + [176, 0x20, 0x15, 7, []], + [176, 0x28, 0x15, 9, []], + [176, 0x10, 0x17, 7, []], + [176, 0x2c, 0x17, 1, []], + [176, 0x24, 0x18, 11, []], + [176, 0x10, 0x19, 11, []], + [176, 0x1c, 0x1b, 9, []], + [176, 0x28, 0x1b, 10, []], + [176, 0x14, 0x1b, null, []], + [176, 0x18, 0x18, null, []], + [176, 0x2c, 0x19, null, []], + [176, 0x20, 0x1b, null, []], + [177, 0x4c, 0x04, 11, ["K14"]], + [177, 0x70, 0x04, 1, ["K14"]], + [178, 0x30, 0x28, 1, ["K14"]], + [178, 0x4c, 0x28, 1, ["K14"]], + [178, 0x4c, 0x29, 11, ["K14"]], + [178, 0x30, 0x29, null, ["K14"]], + [179, 0x0c, 0x14, "K16", ["S21", "K16"]], + [179, 0x30, 0x14, 12, ["S21", "K16"]], + [179, 0x30, 0x1c, "S21", ["S21", "K16"]], + [180, 0x2c, 0x1c, 13, []], + [180, 0x30, 0x1c, 11, []], + [181, 0x70, 0x04, 7, ["S22"]], + [181, 0x70, 0x0f, 11, ["S22"]], + [181, 0x4c, 0x10, "S22", ["S22"]], + [181, 0x70, 0x10, 13, ["S22"]], + [181, 0x70, 0x11, 11, ["S22"]], + [181, 0x70, 0x1c, 10, ["S22"]], + [183, 0x1e, 0x05, 12, []], + [184, 0x60, 0x0d, "S23", ["S23"]], // adjusted + [184, 0x58, 0x10, 11, ["S23"]], + [184, 0x68, 0x10, 11, ["S23"]], + [185, 0x5c, 0x12, 1, ["K17"]], + [185, 0x60, 0x12, 7, ["K17"]], + [185, 0x68, 0x12, 7, ["K17"]], + [185, 0x6c, 0x12, 1, ["K17"]], + [186, 0x5e, 0x04, 1, ["K17"]], + [186, 0x4c, 0x06, 11, ["K17"]], + [186, 0x70, 0x06, "K17", ["K17"]], + [186, 0x4c, 0x0a, 11, ["K17"]], + [186, 0x70, 0x0a, 12, ["K17"]], + [186, 0x5e, 0x0c, 1, ["K17"]], + [186, 0x58, 0x08, null, ["K17"]], + [186, 0x64, 0x08, null, ["K17"]], + [186, 0x64, 0x08, null, ["K17"]], + [186, 0x58, 0x08, null, ["K17"]], + [188, 0xb2, 0x03, "S24", ["S24"]], + [188, 0x56, 0x04, 11, ["K18"]], + [188, 0x66, 0x04, "K18", ["K18"]], + [188, 0x8a, 0x0c, 11, []], + [188, 0x0c, 0x14, 10, []], + [188, 0x30, 0x14, 10, []], + [188, 0x1c, 0x15, 7, []], + [188, 0x20, 0x15, 7, []], + [188, 0x1c, 0x1b, 7, []], + [188, 0x20, 0x1b, 7, []], + [188, 0x0c, 0x1c, 10, []], + [188, 0x30, 0x1c, 10, []], + [188, 0xb2, 0x0c, null, ["S24"]], + [188, 0x0c, 0x14, null, ["S24"]], + [188, 0x8a, 0x03, null, ["S24"]], + [190, 0x5c, 0x19, "S25", ["S25"]], // adjusted + [191, 0x28, 0x14, 9, []], + [191, 0x2c, 0x14, 11, []], + [191, 0x30, 0x14, 10, []], + [191, 0x28, 0x1c, 12, []], + [191, 0x2c, 0x1c, 12, []], + [191, 0x30, 0x1c, 12, []], + [192, 0x30, 0x0a, 10, []], + [192, 0x0c, 0x0e, 7, []], + [192, 0x0c, 0x1a, 11, []], + [192, 0x1c, 0x1b, 1, []], + [194, 0xb4, 0x07, "S25", ["S25"]], + [194, 0x64, 0x2e, 12, ["S25", "K14"]], + [194, 0x44, 0x30, 1, ["S25", "K14"]], + [194, 0x40, 0x34, 9, ["S25", "K14"]], + [196, 0x54, 0x09, 10, []], + [196, 0x18, 0x0e, 11, []], + [196, 0x38, 0x11, 7, []], + [196, 0x54, 0x11, 10, []], + [196, 0x0c, 0x15, 9, []], + [196, 0x4c, 0x17, 1, []], + [196, 0x30, 0x19, 12, []], + [196, 0x0c, 0x1a, 11, []], + [198, 0x0c, 0x07, 13, []], + [198, 0x0c, 0x19, 11, []], + [199, 0x0c, 0x0a, 11, []], + [199, 0x0c, 0x0b, 13, []], + [199, 0x0c, 0x16, 12, []], + [199, 0x0c, 0x1c, 9, []], + [201, 0x1e, 0x16, 1, ["S26"]], + [201, 0x5e, 0x16, 1, ["S26"]], + [201, 0x3c, 0x16, "S26", ["S26"]], + [203, 0x58, 0x10, 11, ["K15"]], + [203, 0x58, 0x1c, 7, ["K15"]], + [204, 0x24, 0x04, 7, ["K15"]], + [204, 0x70, 0x04, 11, ["K15"]], + [204, 0x24, 0x1c, 7, ["K15"]], + [204, 0x70, 0x1c, 10, ["K15"]], + [206, 0x4c, 0x08, 12, []], + [206, 0x50, 0x08, 12, []], + [206, 0x6c, 0x0c, 10, []], + [206, 0x70, 0x0c, 9, []], + [206, 0xcc, 0x0b, "H", ["H"]], + [206, 0x6c, 0x08, null, ["H"]], + [208, 0x9e, 0x05, 12, []], + [208, 0x8c, 0x0b, 1, []], + [208, 0x2a, 0x0d, 12, []], + [208, 0x30, 0x10, 11, []], + [208, 0xb0, 0x14, 1, []], + [208, 0x92, 0x17, 7, []], + [208, 0x0c, 0x1c, 11, []], + [209, 0x30, 0x04, 13, []], + [209, 0x4c, 0x04, 1, []], + [209, 0x70, 0x04, 9, []], + [209, 0xa8, 0x07, 1, []], + [209, 0x70, 0x0c, 1, []], + [214, 0x5c, 0x16, 13, []], + [214, 0x60, 0x16, 10, []], + [216, 0xca, 0x08, 11, []], + [216, 0xf2, 0x08, 9, []], + [216, 0xca, 0x0a, 9, []], + [216, 0xf2, 0x0a, 9, []], + [216, 0xca, 0x0c, 9, []], + [216, 0xf2, 0x0c, 11, []], + [216, 0x5c, 0x18, 11, []], + [216, 0x60, 0x18, 9, []], + [217, 0x5c, 0x14, 9, []], + [217, 0x5c, 0x1c, 11, []], + [218, 0x18, 0x17, 9, ["S27"]], + [218, 0x24, 0x17, 9, ["S27"]], + [218, 0x18, 0x19, "S27", ["S27"]], + [218, 0x24, 0x19, 11, ["S27"]], + [219, 0x70, 0x04, 7, ["K15"]], + [219, 0x58, 0x10, 11, ["K15"]], + [219, 0x3e, 0x23, null, ["K15"]], + [220, 0x38, 0x04, 7, ["K15"]], + [220, 0x70, 0x04, 10, ["K15"]], + [220, 0x44, 0x10, 11, ["K15"]], + [220, 0x0c, 0x1c, 9, ["K15"]], + [227, 0x64, 0x39, 1, []], + [227, 0x58, 0x37, null, []], + [228, 0x20, 0x09, 7, []], + [228, 0x70, 0x0a, 1, []], + [229, 0x30, 0x04, 1, []], + [229, 0x4c, 0x04, 1, []], + [229, 0x70, 0x10, 1, []], + [229, 0x40, 0x12, 7, []], + [230, 0x6c, 0x0c, 9, []], + [230, 0x58, 0x10, 11, []], + [230, 0x38, 0x18, 1, []], + [231, 0x44, 0x05, 1, []], + [231, 0x48, 0x05, 1, []], + [232, 0x60, 0x04, 11, []], + [235, 0xce, 0x08, 7, []], + [235, 0xd2, 0x08, 7, []], + [235, 0x58, 0x0e, 12, []], + [235, 0x5c, 0x0e, 11, []], + [235, 0x60, 0x0e, 12, []], + [241, 0x40, 0x05, 11, []], + [248, 0xf2, 0x0d, 13, []], + [253, 0x58, 0x06, 7, []], + [253, 0x64, 0x06, 7, []], + [253, 0x54, 0x17, 7, []], + [253, 0x54, 0x18, 7, []], + [255, 0x5c, 0x08, 11, []], + [255, 0x60, 0x08, 11, []], + [255, 0x70, 0x1c, 1, []], + [257, 0x0c, 0x14, 11, []], + [257, 0xe0, 0x13, 14, []], + [257, 0xe4, 0x13, 11, []], + [258, 0x92, 0x13, 11, []], + [258, 0x96, 0x13, 11, []], + [259, 0x8c, 0x07, 14, []], + [259, 0x0c, 0x0c, 11, []], + [260, 0xca, 0x15, 11, []], + [260, 0xca, 0x16, 11, []], + [260, 0xca, 0x17, 11, []], + [261, 0x1e, 0x14, 11, []], + [261, 0x1c, 0x15, 11, []], + [261, 0x20, 0x15, 11, []], + [263, 0xd6, 0x17, 10, []], + [263, 0xde, 0x17, 9, []], + [263, 0xe6, 0x17, 10, []], + [263, 0xd6, 0x19, 1, []], + [263, 0xe6, 0x19, 1, []], + [263, 0xd6, 0x1b, 10, []], + [263, 0xe6, 0x1b, 10, []], + [264, 0xa6, 0x13, 14, []], + [276, 0x5c, 0x04, 11, []], + [276, 0x60, 0x04, 11, []], + [276, 0x5c, 0x05, 10, []], + [276, 0x60, 0x05, 10, []], + [276, 0x5c, 0x0a, 9, []], + [276, 0x60, 0x0a, 11, []], + [279, 0x8a, 0x03, 11, []], + [279, 0x8e, 0x03, 11, []], + [279, 0xa6, 0x03, 11, []], + [279, 0xaa, 0x03, 11, []], + [279, 0x8a, 0x04, 11, []], + [279, 0x8e, 0x04, 11, []], + [279, 0xa6, 0x04, 11, []], + [279, 0xaa, 0x04, 11, []], + [281, 0x2c, 0x1c, 11, []], + [281, 0x30, 0x1c, 1, []], + [281, 0x4c, 0x1c, 11, []], + [281, 0x50, 0x1c, 11, []], + [282, 0xd6, 0x0a, 11, []], + [282, 0xda, 0x0a, 11, []], + [282, 0xe2, 0x0a, 11, []], + [282, 0xe6, 0x0a, 11, []], + [283, 0x18, 0x36, 11, []], + [283, 0x20, 0x36, 11, []], + [283, 0x28, 0x36, 11, []], + [283, 0x5c, 0x16, 10, []], + [283, 0x60, 0x16, 11, []], + [283, 0x18, 0x37, 11, []], + [283, 0x5c, 0x17, 10, []], + [283, 0x60, 0x17, 11, []], + [283, 0x1c, 0x38, 11, []], + [283, 0x5c, 0x18, 10, []], + [283, 0x60, 0x18, 11, []], + [283, 0x5c, 0x19, 10, []], + [283, 0x60, 0x19, 11, []], + [285, 0x3c, 0x06, 7, []], + [285, 0x40, 0x06, 7, []], + [285, 0x3c, 0x07, 7, []], + [285, 0x40, 0x07, 7, []], + [285, 0x3c, 0x08, 7, []], + [285, 0x40, 0x08, 7, []], + [287, 0xae, 0x1c, 11, []], + [287, 0xb2, 0x1c, 11, []], + [292, 0x14, 0x14, 7, []], + [292, 0x28, 0x14, 7, []], + [292, 0x14, 0x15, 7, []], + [292, 0x28, 0x15, 7, []], + [292, 0x14, 0x16, 7, []], + [292, 0x28, 0x16, 7, []], + [292, 0x18, 0x18, 7, []], + [292, 0x1c, 0x18, 7, []], + [292, 0x20, 0x18, 7, []], + [292, 0x24, 0x18, 7, []], + [293, 0x18, 0x19, 7, []], + [293, 0x1c, 0x19, 7, []], + [293, 0x20, 0x19, 7, []], + [293, 0x24, 0x19, 7, []], + [293, 0x58, 0x16, 11, []], + [293, 0x64, 0x16, 11, []], + [293, 0x58, 0x1c, 11, []], + [293, 0x64, 0x1c, 11, []] +]; diff --git a/resources/js/potshuffle.js b/resources/js/potshuffle.js new file mode 100644 index 000000000..7e5263166 --- /dev/null +++ b/resources/js/potshuffle.js @@ -0,0 +1,88 @@ +import Prando from "prando"; +import PotData from "./potdata"; + +export default class PotShuffle { + constructor(seed) { + this.rand = new Prando(seed); + } + + shuffle() { + // JS only makes shallow copies, this assures we are starting from clean data. + this.pots = JSON.parse(JSON.stringify(PotData)); + this.rand.reset(); + + // collect all items + const potSpecialItems = this.pots + .filter( + pot => + pot[3] !== null && + typeof pot[3] === "string" && + ["K", "S", "H"].indexOf(pot[3].charAt(0)) !== -1 + ) + .map(pot => pot[3]); + + const potItems = this.pots + .filter( + pot => + pot[3] !== null && + !( + typeof pot[3] === "string" && + ["K", "S", "H"].indexOf(pot[3].charAt(0)) !== -1 + ) + ) + .map(pot => pot[3]); + + // clear out all pots + this.pots.forEach(pot => (pot[3] = null)); + + // shuffle the pot order + const newPots = this.fy_shuffle(this.pots); + + // place special items + potSpecialItems.forEach(item => { + for (let i = 0; i < newPots.length; i++) { + if (newPots[i][4].length === 0) { + continue; + } + + if (newPots[i][4].indexOf(item) !== -1 && newPots[i][3] === null) { + newPots[i][3] = item; + return; + } + } + throw new Error(`no pot available for ${item}`); + }); + + // place simple items + potItems.forEach(item => { + for (let i = 0; i < newPots.length; i++) { + if (newPots[i][3] === null) { + newPots[i][3] = item; + return; + } + } + throw new Error(`no pot available for ${item}`); + }); + + const returnPots = {}; + newPots.forEach(pot => { + if (typeof returnPots[pot[0]] === "undefined") { + returnPots[pot[0]] = []; + } + returnPots[pot[0]].push(pot); + }); + + return returnPots; + } + + fy_shuffle(array) { + let new_array = Array.from(array); + + for (let i = array.length - 1; i >= 0; --i) { + let r = this.rand.nextInt(0, i); + [new_array[i], new_array[r]] = [new_array[r], new_array[i]]; + } + + return new_array; + } +} diff --git a/resources/js/rom.js b/resources/js/rom.js new file mode 100644 index 000000000..b6a9c29a7 --- /dev/null +++ b/resources/js/rom.js @@ -0,0 +1,650 @@ +const SparkMD5 = require('spark-md5'); +const FileSaver = require('file-saver'); +const Prando = require('prando').default; +const PotShuffle = require('./potshuffle').default; + +function RGBtoColor(r, g, b) { + return (r << 16) + (g << 8) + b; +} + +var ROM = (function(blob, loaded_callback, error_callback) { + var u_array = []; + var arrayBuffer; + var base_patch; + var original_data; + var size = 2; // mb + var rand = new Prando(); + + var fileReader = new FileReader(); + + fileReader.onload = function() { + arrayBuffer = this.result; + }; + + fileReader.onloadend = function() { + if (typeof arrayBuffer === 'undefined') { + if (error_callback) error_callback(); + return; + } + // Check rom for header and cut it out + if (arrayBuffer.byteLength % 0x400 == 0x200) { + arrayBuffer = arrayBuffer.slice(0x200, arrayBuffer.byteLength); + } + + original_data = arrayBuffer.slice(0); + this.resize(size); + + u_array = new Uint8Array(arrayBuffer); + + if (loaded_callback) loaded_callback(this); + }.bind(this); + + fileReader.readAsArrayBuffer(blob); + + this.checkMD5 = function() { + return SparkMD5.ArrayBuffer.hash(arrayBuffer); + }; + + this.getArrayBuffer = function() { + return arrayBuffer; + }; + + this.getOriginalArrayBuffer = function() { + return original_data; + }; + + this.write = function(seek, bytes) { + if (!Array.isArray(bytes)) { + u_array[seek] = bytes; + return; + } + for (var i = 0; i < bytes.length; i++) { + u_array[seek + i] = bytes[i]; + } + }; + + this.updateChecksum = function() { + return new Promise(function(resolve, reject) { + var sum = u_array.reduce(function(sum, mbyte, i) { + if (i >= 0x7FDC && i < 0x7FE0) { + return sum; + } + return sum + mbyte; + }); + var checksum = (sum + 0x1FE) & 0xFFFF; + var inverse = checksum ^ 0xFFFF; + this.write(0x7FDC, [inverse & 0xFF, inverse >> 8, checksum & 0xFF, checksum >> 8]); + resolve(this); + }.bind(this)); + }.bind(this); + + this.save = function(filename, { paletteShuffle, quickswap, musicOn }) { + let preProcess = arrayBuffer.slice(0); + + if (paletteShuffle) { + this.randomizePalettes(); + } + if (!this.tournament || this.allowQuickSwap) { + this.setQuickswap(quickswap); + } else { + this.setQuickswap(false); + } + this.setMusicVolume(musicOn); + + this.updateChecksum().then(function() { + FileSaver.saveAs(new Blob([u_array]), filename); + + // undo any presave processing we did. + arrayBuffer = preProcess; + u_array = new Uint8Array(arrayBuffer); + }); + }; + + this.parseSprGfx = function(spr) { + if ('ZSPR' == String.fromCharCode(spr[0]) + String.fromCharCode(spr[1]) + String.fromCharCode(spr[2]) + String.fromCharCode(spr[3])) { + return this.parseZsprGfx(spr); + } + return new Promise(function(resolve, reject) { + for (var i = 0; i < 0x7000; i++) { + u_array[0x80000 + i] = spr[i]; + } + for (var i = 0; i < 120; i++) { + u_array[0xDD308 + i] = spr[0x7000 + i]; + } + // gloves color + u_array[0xDEDF5] = spr[0x7036]; + u_array[0xDEDF6] = spr[0x7037]; + u_array[0xDEDF7] = spr[0x7054]; + u_array[0xDEDF8] = spr[0x7055]; + resolve(this); + }.bind(this)); + }.bind(this); + + this.parseZsprGfx = function(zspr) { + // we are going to just hope that it's in the proper format O.o + return new Promise(function(resolve, reject) { + var gfx_offset = zspr[12] << 24 | zspr[11] << 16 | zspr[10] << 8 | zspr[9]; + var palette_offset = zspr[18] << 24 | zspr[17] << 16 | zspr[16] << 8 | zspr[15]; + // GFX + for (var i = 0; i < 0x7000; i++) { + u_array[0x80000 + i] = zspr[gfx_offset + i]; + } + // Palettes + for (var i = 0; i < 120; i++) { + u_array[0xDD308 + i] = zspr[palette_offset + i]; + } + // Gloves + for (var i = 0; i < 4; ++i) { + u_array[0xDEDF5 + i] = zspr[palette_offset + 120 + i]; + } + resolve(this); + }.bind(this)); + }.bind(this); + + this.setQuickswap = function(enable) { + return new Promise(function(resolve, reject) { + this.write(0x18004B, enable ? 0x01 : 0x00); + resolve(this); + }.bind(this)); + }.bind(this); + + this.setMusicVolume = (enable) => { + return new Promise(resolve => { + this.write(0x18021A, !enable ? 0x01 : 0x00); + + resolve(this); + }); + }; + + this.setMenuSpeed = function(speed) { + return new Promise(function(resolve, reject) { + var fast = false; + switch (speed) { + case 'instant': + this.write(0x180048, 0xE8); + fast = true; + break; + case 'fast': + this.write(0x180048, 0x10); + break; + case 'normal': + default: + this.write(0x180048, 0x08); + break; + case 'slow': + this.write(0x180048, 0x04); + break; + } + this.write(0x6DD9A, fast ? 0x20 : 0x11); + this.write(0x6DF2A, fast ? 0x20 : 0x12); + this.write(0x6E0E9, fast ? 0x20 : 0x12); + resolve(this); + }.bind(this)); + }.bind(this); + + this.setHeartColor = function(color_on) { + return new Promise(function(resolve, reject) { + switch (color_on) { + case 'blue': + byte = 0x2C; + file_byte = 0x0D; + break; + case 'green': + byte = 0x3C; + file_byte = 0x19; + break; + case 'yellow': + byte = 0x28; + file_byte = 0x09; + break; + case 'red': + default: + byte = 0x24; + file_byte = 0x05; + } + this.write(0x6FA1E, byte); + this.write(0x6FA20, byte); + this.write(0x6FA22, byte); + this.write(0x6FA24, byte); + this.write(0x6FA26, byte); + this.write(0x6FA28, byte); + this.write(0x6FA2A, byte); + this.write(0x6FA2C, byte); + this.write(0x6FA2E, byte); + this.write(0x6FA30, byte); + this.write(0x65561, file_byte); + resolve(this); + }.bind(this)); + }.bind(this); + + this.setHeartSpeed = function(speed) { + return new Promise(function(resolve, reject) { + var sbyte = 0x20; + switch (speed) { + case 'off': sbyte = 0x00; break; + case 'half': sbyte = 0x40; break; + case 'quarter': sbyte = 0x80; break; + case 'double': sbyte = 0x10; break; + } + this.write(0x180033, sbyte); + resolve(this); + }.bind(this)); + }.bind(this); + + this.parsePatch = function(data, progressCallback) { + return new Promise(function(resolve, reject) { + this.rand = new Prando(data.hash); + this.seed = data.seed; + this.spoiler = data.spoiler; + this.hash = data.hash; + this.generated = data.generated; + if (data.size) { + this.resize(data.size); + } + if (data.spoiler && data.spoiler.meta) { + this.build = data.spoiler.meta.build; + this.goal = data.spoiler.meta.goal; + this.logic = data.spoiler.meta.logic; + this.mode = data.spoiler.meta.mode; + this.name = data.spoiler.meta.name; + this.variation = data.spoiler.meta.variation; + this.weapons = data.spoiler.meta.weapons; + this.shuffle = data.spoiler.meta.shuffle; + this.difficulty_mode = data.spoiler.meta.difficulty_mode; + this.difficulty = data.spoiler.meta.difficulty; + this.notes = data.spoiler.meta.notes; + this.tournament = data.spoiler.meta.tournament; + this.special = data.spoiler.meta.special; + } + if (data.patch && data.patch.length) { + data.patch.forEach(function(value, index, array) { + if (progressCallback) progressCallback(index / data.patch.length, this); + for (address in value) { + this.write(Number(address), value[address]); + } + }.bind(this)); + } + resolve(this); + }.bind(this)); + }; + + this.setBasePatch = function(patch) { + this.base_patch = patch; + }; + + this.resizeUint8 = function(baseArrayBuffer, newByteSize) { + var resizedArrayBuffer = new ArrayBuffer(newByteSize), + len = baseArrayBuffer.byteLength, + resizeLen = (len > newByteSize)? newByteSize : len; + + (new Uint8Array(resizedArrayBuffer, 0, resizeLen)).set(new Uint8Array(baseArrayBuffer, 0, resizeLen)); + + return resizedArrayBuffer; + }; + + this.resize = function(size) { + switch (size) { + case 4: + arrayBuffer = this.resizeUint8(arrayBuffer, 4194304); + break; + case 2: + arrayBuffer = this.resizeUint8(arrayBuffer, 2097152); + break; + case 1: + default: + size = 1; + arrayBuffer = this.resizeUint8(arrayBuffer, 1048576); + } + u_array = new Uint8Array(arrayBuffer); + this.size = size; + }; + + this.downloadFilename = function() { + return this.name + || 'ALttP - VT_' + this.logic + + '-' + this.mode + + (this.weapons ? '_' + this.weapons : '') + + '-' + this.goal + + '_' + this.hash + + (this.special ? '_special' : ''); + }; + + this.reset = function(size) { + return new Promise((resolve, reject) => { + arrayBuffer = original_data.slice(0); + // always reset to 2mb so we can verify MD5 later + this.resize(2); + + if (!this.base_patch) { + reject('base patch not set'); + } + this.parsePatch({patch: this.base_patch}).then((rom) => { + resolve(rom); + }).catch((error) => { + console.log(error, ":("); + reject('sadness'); + }); + }); + }; + + this.getRandomColor = function() + { + var r = this.rand.nextInt(60, 240); + var g = this.rand.nextInt(60, 240); + var b = this.rand.nextInt(60, 240); + + return RGBtoColor(r, g, b); + } + + this.randomizePalettes = function() + { + this.randomizeDungeonPalettes(); + this.randomizeOverworldPalettes(); + } + + this.setColor = function(address, color, shade) + { + const r = (((color >> 16) & 0xFF) * Math.pow(.8, shade)) / 255 * 0x1F; + const g = (((color >> 8) & 0xFF) * Math.pow(.8, shade)) / 255 * 0x1F; + const b = ((color & 0xFF) * Math.pow(.8, shade)) / 255 * 0x1F; + + const snesColor = (b << 10) | (g << 5) | (r << 0); + this.write(address, snesColor & 0xFF); + this.write(address + 1, (snesColor >> 8) & 0xFF); + } + + this.randomizeDungeonPalettes = function() + { + for (let i = 0; i < 20; i++) + { + this.randomizeWall(i); + this.randomizeFloors(i); + } + } + + this.randomizeWall = function(dungeon) + { + var wallColor = this.getRandomColor(); + for (let i = 0; i < 5; i++) { + var shadex = (10 - (i * 2)); + this.setColor((0xDD734 + (0xB4 * dungeon)) + (i * 2), wallColor, shadex); + this.setColor((0xDD770 + (0xB4 * dungeon)) + (i * 2), wallColor, shadex); + this.setColor((0xDD744 + (0xB4 * dungeon)) + (i * 2), wallColor, shadex); + + if (dungeon == 0) { + this.setColor((0xDD7CA + (0xB4 * dungeon)) + (i * 2), wallColor, shadex); + } + } + + if (dungeon == 2) { + this.setColor((0xDD74E + (0xB4 * dungeon)), wallColor, 3); + this.setColor((0xDD74E + 2 + (0xB4 * dungeon)), wallColor, 5); + this.setColor((0xDD73E + (0xB4 * dungeon)), wallColor, 3); + this.setColor((0xDD73E + 2 + (0xB4 * dungeon)), wallColor, 5); + } + + this.setColor(0xDD7E4 + (0xB4 * dungeon), wallColor, 4); + this.setColor(0xDD7E6 + (0xB4 * dungeon), wallColor, 2); + + this.setColor(0xDD7DA + (0xB4 * dungeon), wallColor, 10); + this.setColor(0xDD7DC + (0xB4 * dungeon), wallColor, 8); + + + var potColor = this.getRandomColor(); + this.setColor(0xDD75A + (0xB4 * dungeon), potColor, 7); + this.setColor(0xDD75C + (0xB4 * dungeon), potColor, 1); + this.setColor(0xDD75E + (0xB4 * dungeon), potColor, 3); + + this.setColor(0xDD76A + (0xB4 * dungeon), wallColor, 7); + this.setColor(0xDD76C + (0xB4 * dungeon), wallColor, 2); + this.setColor(0xDD76E + (0xB4 * dungeon), wallColor, 4); + + var chestColor = this.getRandomColor(); + this.setColor(0xDD7AE + (0xB4 * dungeon), chestColor, 2); + this.setColor(0xDD7B0 + (0xB4 * dungeon), chestColor, 0); + } + + this.randomizeFloors = function(dungeon) + { + const floorColor = [ + this.getRandomColor(), + this.getRandomColor(), + this.getRandomColor() + ]; + + for (let i = 0; i < 3; i++) { + var shadex = (6 - (i * 2)) & 0xFF; + this.setColor(0xDD764 + (0xB4 * dungeon) + (i * 2), floorColor[0], shadex); + this.setColor(0xDD782 + (0xB4 * dungeon) + (i * 2), floorColor[0], (shadex + 3) & 0xFF); + + this.setColor(0xDD7A0 + (0xB4 * dungeon) + (i * 2), floorColor[1], shadex); + this.setColor(0xDD7BE + (0xB4 * dungeon) + (i * 2), floorColor[1], (shadex + 3) & 0xFF); + } + + this.setColor(0xDD7E2 + (0xB4 * dungeon), floorColor[2], 3); + this.setColor(0xDD796 + (0xB4 * dungeon), floorColor[2], 4); + } + + this.randomizeOverworldPalettes = function() + { + const grass = this.getRandomColor(); + const grass2 = this.getRandomColor(); + const grass3 = this.getRandomColor(); + const dirt = this.getRandomColor(); + const dirt2 = this.getRandomColor(); + const water = this.getRandomColor(); + const clouds = this.getRandomColor(); + const dwdirt = this.getRandomColor(); + const dwgrass = this.getRandomColor(); + const dwwater = this.getRandomColor(); + const dwdmdirt = this.getRandomColor(); + const dwdmgrass = this.getRandomColor(); + const dwdmclouds1 = this.getRandomColor(); + const dwdmclouds2 = this.getRandomColor(); + + const treeleaf = RGBtoColor( + ((grass >> 16) & 0xFF) - 20 + this.rand.nextInt(0, 30), + ((grass >> 8) & 0xFF) - 20 + this.rand.nextInt(0, 30), + (grass & 0xFF) - 20 + this.rand.nextInt(0, 30) + ); + const dwtree = RGBtoColor( + ((dwgrass >> 16) & 0xFF) - 20 + this.rand.nextInt(0, 30), + ((dwgrass >> 8) & 0xFF) - 20 + this.rand.nextInt(0, 30), + (dwgrass & 0xFF) - 20 + this.rand.nextInt(0, 30) + ); + + [0x67FB4, 0x67F94, 0x67FC6, 0x67FE6, 0x5FEA9, 0xDE886, 0xDE6D2, + 0xDE6FC, 0xDE70A, 0xDE6FE, 0xDE93A, 0xDE92C, 0xDE91E, + 0xDEA1C, 0xDEA2A, 0xDEA30].forEach(address => { + this.setColor(address, grass, 0); + }); + + [0xDE892, 0xDE70C, 0xDE91C, 0xDE92A].forEach(address => { + this.setColor(address, grass, 1); + }); + + [0xDE708, 0xDD4AC].forEach(address => { + this.setColor(address, grass, 2); + }); + + [0xDE6FA, 0X067FE1, 0X0DE6D0, 0xDE884, 0xDE8AE, 0xDE8BE, 0xDE8E4, 0xDE938, 0xDE9C4].forEach(address => { + this.setColor(address, grass, 3); + }); + + [0xDE6D0].forEach(address => { + this.setColor(address, grass, 4); + }); + + [0xDE6DE, 0xDD3D2, 0xDE88C, 0xDE8A8, + 0xDE9F8, 0xDEA4E, 0xDEAF6, 0xDEB2E, 0xDEB4A].forEach(address => { + this.setColor(address, grass2, 2); + }); + + [0xDE6E0, 0xDD4AE, 0xDE9FA, 0xDEA0E].forEach(address => { + this.setColor(address, grass2, 1); + }); + + [0xDE6E2, 0xDE9FE].forEach(address => { + this.setColor(address, grass2, 0); + }); + + [0xDE75C, 0xDE786, 0xDE794, 0xDE99A].forEach(address => { + this.setColor(address, grass3, 2); + }); + + [0xDE75E, 0xDE788, 0xDE796, 0xDE99C].forEach(address => { + this.setColor(address, grass3, 1); + }); + + this.setColor(0xDE93C, dirt, 1); + + [0xDE672, 0xDE6D4, 0xDE6DC, 0xDE6E2, 0xDE6EA, 0xDE6EE, 0xDE6F0, 0xDE920, 0xDE936].forEach(address => { + this.setColor(address, dirt, 2); + }); + + [0xDE66E, 0xDE6CE, 0xDE916, 0xDE934, 0xDE9F2].forEach(address => { + this.setColor(address, dirt, 3); + }); + + [0xDE6CC, 0xDE6DA, 0xDE6E8, 0xDE6EC, 0xDE932].forEach(address => { + this.setColor(address, dirt, 4); + }); + + [0xDE6CA, 0xDE6D8, 0xDE6E6, 0xDEA2E].forEach(address => { + this.setColor(address, dirt, 5); + }); + + [0xDE756, 0xDE764, 0xDE772, 0xDE994, 0xDE9A2].forEach(address => { + this.setColor(address, dirt2, 4); + }); + + [0xDE758, 0xDE766, 0xDE774, 0xDE996, 0xDE9A4].forEach(address => { + this.setColor(address, dirt2, 3); + }); + + [0xDE75A, 0xDE768, 0xDE776, 0xDE778, 0xDE998, 0xDE9A6].forEach(address => { + this.setColor(address, dirt2, 2); + }); + + [0xDE9AC, 0xDE99E, 0xDE760, 0xDE77A, 0xDE77C, 0xDE798, 0xDE664, 0xDE980].forEach(address => { + this.setColor(address, dirt2, 1); + }); + + this.setColor(0xDE890, treeleaf, 1); + + this.setColor(0xDE894, treeleaf, 0); + + this.setColor(0xDEA10, water, 4); + + [0xDEA16, 0xDE924, 0xDE668].forEach(address => { + this.setColor(address, water, 3); + }); + + this.setColor(0xDE66A, water, 2); + + [0xDEA1A, 0xDE92E, 0xDE918, 0xDE670].forEach(address => { + this.setColor(address, water, 1); + }); + + [0xDE91A, 0xDE66C].forEach(address => { + this.setColor(address, water, 2); + }); + + [0xDE76A, 0xDE9A8, 0xDE98C].forEach(address => { + this.setColor(address, clouds, 2); + }); + + [0xDE76E, 0xDE9AA, 0xDE8DA, 0xDE8D8, 0xDE8D0, 0xDE990].forEach(address => { + this.setColor(address, clouds, 0); + }); + + [0xDE716, 0xDE740, 0xDE74E, 0xDEAC0, 0xDEACE, 0xDEADC, 0xDEB24].forEach(address => { + this.setColor(address, dwgrass, 3); + }); + + this.setColor(0xDE752, dwgrass, 2); + + [0xDE718, 0xDE742, 0xDE750, 0xDEB26, 0xDEAC2, 0xDEAD0, 0xDEADE, 0x5FEB3].forEach(address => { + this.setColor(address, dwgrass, 1); + }); + + this.setColor(0xDEB34, dwtree, 4); + + this.setColor(0xDEB30, dwtree, 3); + + this.setColor(0xDEB32, dwtree, 1); + + [0xDE710, 0xDE71E, 0xDE72C, 0xDEAD6].forEach(address => { + this.setColor(address, dwdirt, 5); + }); + + [0xDE712, 0xDE720, 0xDE72E, 0xDE660, 0xDEAD8].forEach(address => { + this.setColor(address, dwdirt, 4); + }); + + [0xDEADA, 0xDE714, 0xDE722, 0xDE730, 0xDE732].forEach(address => { + this.setColor(address, dwdirt, 3); + }); + + [0xDE734, 0xDE736, 0xDE728, 0xDE71A, 0xDE664, 0xDEAE0].forEach(address => { + this.setColor(address, dwdirt, 2); + }); + + this.setColor(0xDE65A, dwwater, 5); + + [0xDEAC8, 0xDEAAE, 0xDEAAC, 0xDE65C].forEach(address => { + this.setColor(address, dwwater, 3); + }); + + [0xDEAD2, 0xDEABC, 0xDEAB6, 0xDEA9E, 0xDEA98, 0xDE662].forEach(address => { + this.setColor(address, dwwater, 2); + }); + + [0xDEABE, 0xDE65E].forEach(address => { + this.setColor(address, dwwater, 1); + }); + + [0xDE7BC, 0xDE7A2, 0xDE7BE, 0xDE7CC, 0xDE7DA, 0xDEB6A, 0xDE948, 0xDE956, 0xDE964].forEach(address => { + this.setColor(address, dwdmgrass, 3); + }); + + [0xDEA1A, 0xDEA16, 0x67FE1, 0x67F94, 0x67FB4, 0x67FC6, 0x67FE6, 0xDD4A0, 0xDE8E6, + 0xDEA1C, 0xDE7CE, 0xDE7A4, 0xDEBA2, 0xDEBB0].forEach(address => { + this.setColor(address, dwdmgrass, 1); + }); + + [0xDE79A, 0xDE7A8, 0xDE7B6, 0xDEB60, 0xDEB6E, 0xDE93E, 0xDE94C, 0xDEBA6].forEach(address => { + this.setColor(address, dwdmdirt, 6); + }); + + [0xDE79C, 0xDE7AA, 0xDE7B8, 0xDE7BE, 0xDE7CC, 0xDE7DA, 0xDEB70, 0xDEBA8].forEach(address => { + this.setColor(address, dwdmdirt, 4); + }); + + [0xDEB72, 0xDEB74, 0xDE79E, 0xDE7AC, 0xDEB6A, 0xDE948, 0xDE956, 0xDE964, 0xDEBAA, 0xDE7A0].forEach(address => { + this.setColor(address, dwdmdirt, 3); + }); + + [0xDEBAC, 0xDE7AE, 0xDE7C2, 0xDE7A6, 0xDEB7A, 0xDEB6C, 0xDE7C0].forEach(address => { + this.setColor(address, dwdmdirt, 2); + }); + + [0xDE644, 0xDEB84].forEach(address => { + this.setColor(address, dwdmclouds1, 2); + }); + + [0xDE648, 0xDEB88].forEach(address => { + this.setColor(address, dwdmclouds1, 1); + }); + + [0xDEBAE, 0xDE7B0].forEach(address => { + this.setColor(address, dwdmclouds2, 2); + }); + + [0xDE7B4, 0xDEB78, 0xDEBB2].forEach(address => { + this.setColor(address, dwdmclouds2, 0); + }); + } +}); + +module.exports = ROM; diff --git a/resources/js/store/customizer.js b/resources/js/store/customizer.js new file mode 100644 index 000000000..12f7b595b --- /dev/null +++ b/resources/js/store/customizer.js @@ -0,0 +1,110 @@ +import axios from "axios"; +import prizePacks from "./modules/prizePacks"; +import itemLocations from "./modules/itemLocations"; +import context from "./modules/context"; +import glitches from "./modules/glitches"; +import randomizer from "./modules/randomizer"; +import romSettings from "./modules/romSettings"; +import Vuex from "vuex"; +import localforage from "localforage"; + +export default new Vuex.Store({ + strict: process.env.NODE_ENV !== "production", + state: { + settings: { + droppables: [], + items: [], + prizes: [] + }, + sprites: [], + loading: false + }, + modules: { + prizePacks, + itemLocations, + context, + glitches, + randomizer, + romSettings + }, + getters: { + droppableLookup: state => { + // determine if prizePacks is source of truth here. + return state.settings.droppables.reduce((map, obj) => { + map[obj.value] = obj; + return map; + }, {}); + }, + itemLookup: state => { + // determine if itemLocations is source of truth here. + return state.settings.items + .concat(state.settings.prizes) + .reduce((map, obj) => { + map[obj.value.replace(/:\d+$/, "")] = obj; + return map; + }, {}); + }, + locationLookup: state => { + return state.itemLocations.locations.reduce((map, obj) => { + map[obj.hash] = obj; + return map; + }, {}); + } + }, + actions: { + nukeStore({ dispatch }) { + return Promise.all([ + dispatch("prizePacks/clearStorage"), + dispatch("itemLocations/clearStorage"), + dispatch("context/clearStorage"), + dispatch("glitches/clearStorage"), + localforage.removeItem("vt.custom.equipment") + ]); + }, + resetStore({ commit, dispatch }) { + commit("setLoading", true); + commit("prizePacks/setPool", this.state.settings.droppables); + commit("itemLocations/setItemPool", this.state.settings); + commit("itemLocations/setLocations", this.state.settings.locations); + + return Promise.all([ + dispatch("prizePacks/initalize", this.state.settings.prizepacks), + dispatch("itemLocations/initalize", this.state.settings.locations), + dispatch("context/initalize"), + dispatch("glitches/initalize") + ]).then(() => { + console.log("loaded!"); + commit("setLoading", false); + }); + }, + getSprites({ commit }) { + return axios.get(`/sprites`).then(response => { + var sprites = response.data; + sprites.push({ + author: "none", + file: null, + name: "Random" + }); + commit("updateSprites", sprites); + }); + }, + getSettings({ commit, dispatch }) { + commit("setLoading", true); + return axios.get(`/customizer/settings`).then(response => { + commit("updateSettings", response.data); + return dispatch("resetStore"); + }); + } + }, + mutations: { + updateSettings(state, settings) { + state.settings = settings; + }, + updateSprites(state, sprites) { + state.sprites = sprites; + }, + setLoading(state, loading) { + state.loading = loading; + } + } +}); diff --git a/resources/js/store/modules/context.js b/resources/js/store/modules/context.js new file mode 100644 index 000000000..ae6cf6982 --- /dev/null +++ b/resources/js/store/modules/context.js @@ -0,0 +1,80 @@ +import localforage from "localforage"; + +export default { + namespaced: true, + state: { + settings: { + "item.Goal.Required": "", + "item.require.Lamp": false, + "item.value.BlueClock": "", + "item.value.GreenClock": "", + "item.value.RedClock": "", + "item.value.Rupoor": "", + "prize.crossWorld": true, + "prize.shuffleCrystals": true, + "prize.shufflePendants": true, + "region.bossNormalLocation": true, + "region.wildBigKeys": false, + "region.wildCompasses": false, + "region.wildKeys": false, + "region.wildMaps": false, + "rom.dungeonCount": "off", + "rom.freeItemMenu": false, + "rom.freeItemText": false, + "rom.mapOnPickup": false, + "rom.timerMode": "off", + "rom.timerStart": "", + "rom.rupeeBow": false, + "rom.genericKeys": false, + "spoil.BootsLocation": false, + "spoil.Hints": true + }, + initializing: true + }, + actions: { + clearStorage() { + return localforage.removeItem("vt.custom.settings"); + }, + initalize({ commit, dispatch, state }) { + return localforage + .getItem("vt.custom.settings") + .then(value => { + if (value === null) { + localforage.setItem("vt.custom.settings", state.settings); + return; + } + Object.keys(value).forEach(name => { + dispatch("setSetting", { + key: name, + value: value[name], + save: false + }); + }); + }) + .then(() => { + return commit("setInitalizing", false); + }); + }, + setSetting({ commit, state }, data) { + data = { + save: true, + ...data + }; + commit("setSetting", data); + if (data.save) { + localforage.setItem("vt.custom.settings", state.settings); + } + } + }, + mutations: { + setSetting(state, data) { + state.settings[data.key] = data.value; + }, + setSettings(state, settings) { + state.settings = settings; + }, + setInitalizing(state, init) { + state.initializing = init; + } + } +}; diff --git a/resources/js/store/modules/glitches.js b/resources/js/store/modules/glitches.js new file mode 100644 index 000000000..89522c6c2 --- /dev/null +++ b/resources/js/store/modules/glitches.js @@ -0,0 +1,70 @@ +import localforage from "localforage"; + +export default { + namespaced: true, + state: { + settings: { + canBombJump: false, + canBootsClip: false, + canBunnyRevive: false, + canBunnySurf: false, + canDungeonRevive: false, + canFakeFlipper: false, + canMirrorClip: false, + canMirrorWrap: false, + canOneFrameClipOW: false, + canOWYBA: false, + canSuperBunny: false, + canSuperSpeed: false, + canWaterFairyRevive: false, + canWaterWalk: false + }, + initializing: true + }, + actions: { + clearStorage() { + return localforage.removeItem("vt.custom.glitches"); + }, + initalize({ commit, dispatch, state }) { + return localforage + .getItem("vt.custom.glitches") + .then(value => { + if (value === null) { + localforage.setItem("vt.custom.glitches", state.settings); + return; + } + Object.keys(value).forEach(name => { + dispatch("setSetting", { + key: name, + value: value[name], + save: false + }); + }); + }) + .then(() => { + return commit("setInitalizing", false); + }); + }, + setSetting({ commit, state }, data) { + data = { + save: true, + ...data + }; + commit("setSetting", data); + if (data.save) { + localforage.setItem("vt.custom.glitches", state.settings); + } + } + }, + mutations: { + setSetting(state, data) { + state.settings[data.key] = data.value; + }, + setSettings(state, settings) { + state.settings = settings; + }, + setInitalizing(state, init) { + state.initializing = init; + } + } +}; diff --git a/resources/js/store/modules/itemLocations.js b/resources/js/store/modules/itemLocations.js new file mode 100644 index 000000000..4be19be4b --- /dev/null +++ b/resources/js/store/modules/itemLocations.js @@ -0,0 +1,198 @@ +import localforage from "localforage"; + +export default { + namespaced: true, + state: { + pool: { + items: [], + prizes: [], + bottles: [], + medallions: [] + }, + locations: [], + initializing: true + }, + getters: { + flatItemPool: state => { + return state.pool.items.reduce((map, obj) => { + if (obj.value == "auto_fill") return map; + let value = + obj.value.indexOf(":") !== -1 ? obj.value.split(":")[0] : obj.value; + map[value] = Number(obj.count); + return map; + }, {}); + }, + flatLocations: state => { + return state.locations.reduce((map, location) => { + if (!location.item || location.item.value == "auto_fill") return map; + map[location.hash] = location.item.value; + return map; + }, {}); + } + }, + actions: { + clearStorage() { + return Promise.all([ + localforage.removeItem("vt.custom.locations"), + localforage.removeItem("vt.custom.items") + ]); + }, + initalize({ commit, dispatch, state, rootGetters }) { + var commit_locations = []; + state.locations.forEach(location => { + commit_locations.push({ + ...location, + item: rootGetters.itemLookup["auto_fill"] + }); + }); + commit("setLocations", commit_locations); + + return localforage + .getItem("vt.custom.locations") + .then(value => { + if (value === null) { + return; + } + Object.keys(value).forEach(hash => { + dispatch("setLocation", { + item: value[hash], + location: rootGetters.locationLookup[hash], + save: false + }); + }); + }) + .then(() => { + return localforage.getItem("vt.custom.items").then(value => { + if (value === null) { + return; + } + + Object.keys(value).forEach(name => { + if (rootGetters.itemLookup[name]) { + // TODO: v3 compat, remove in v5 + var lookupName = name.replace(/^item-count-/); + dispatch("setItemCount", { + item: rootGetters.itemLookup[lookupName], + count: value[name], + save: false + }); + } + }); + }); + }) + .then(() => { + return commit("setInitalizing", false); + }); + }, + setLocation({ commit, getters, rootGetters }, data) { + data = { + save: true, + lookup: rootGetters.itemLookup, + ...data + }; + if (rootGetters.itemLookup[data.item]) { + data.item = rootGetters.itemLookup[data.item]; + } + commit("setLocation", data); + if (data.save) { + localforage.setItem("vt.custom.locations", getters.flatLocations); + // setLocation can side affect counts + localforage.setItem("vt.custom.items", getters.flatItemPool); + } + }, + setItemCount({ commit, getters }, data) { + data = { + save: true, + ...data + }; + commit("setItemCount", data); + if (data.save) { + localforage.setItem("vt.custom.items", getters.flatItemPool); + } + } + }, + mutations: { + setLocation(state, data) { + for (var i = 0; i < state.locations.length; ++i) { + if (state.locations[i] == data.location) { + var previous = state.locations[i].item; + break; + } + } + data.location.item = data.item; + + if (data.location.class == "prizes") { + previous.$isDisabled = false; + data.item.$isDisabled = true; + } + + // we only pool the item type locations + if (data.location.class != "items") { + return; + } + + previous.placed--; + if (previous.value.indexOf("Bottle") !== -1) { + previous = data.lookup["BottleWithRandom"]; + } + if (previous.value.indexOf("Shield") !== -1) { + previous = data.lookup["ProgressiveShield"]; + } + if (previous.value.indexOf("Sword") !== -1) { + previous = data.lookup["ProgressiveSword"]; + } + if (previous.value.indexOf("Mail") !== -1) { + previous = data.lookup["ProgressiveArmor"]; + } + if (Object.prototype.hasOwnProperty.call(previous, "count")) { + if (previous.neg_count < 0) { + previous.neg_count++; + } else { + previous.count++; + } + } + + data.item.placed++; + if (data.item.value.indexOf("Bottle") !== -1) { + data.item = data.lookup["BottleWithRandom"]; + } + if (data.item.value.indexOf("Shield") !== -1) { + data.item = data.lookup["ProgressiveShield"]; + } + if (data.item.value.indexOf("Sword") !== -1) { + data.item = data.lookup["ProgressiveSword"]; + } + if (data.item.value.indexOf("Mail") !== -1) { + data.item = data.lookup["ProgressiveArmor"]; + } + if (Object.prototype.hasOwnProperty.call(data.item, "count")) { + if (data.item.count > 0) { + data.item.count--; + } else { + data.item.neg_count = data.item.neg_count + ? data.item.neg_count - 1 + : -1; + } + } + }, + setItemCount(state, data) { + state.pool.items.forEach(item => { + if (item === data.item) { + item.count = data.count; + } + }); + }, + setItemPool(state, pool) { + state.pool.items = pool.items; + state.pool.prizes = pool.prizes; + state.pool.bottles = pool.bottles; + state.pool.medallions = pool.medallions; + }, + setLocations(state, locations) { + state.locations = locations; + }, + setInitalizing(state, init) { + state.initializing = init; + } + } +}; diff --git a/resources/js/store/modules/prizePacks.js b/resources/js/store/modules/prizePacks.js new file mode 100644 index 000000000..22a8ab31f --- /dev/null +++ b/resources/js/store/modules/prizePacks.js @@ -0,0 +1,154 @@ +import localforage from "localforage"; + +export default { + namespaced: true, + state: { + pool: [], + packs: {}, + flatpacks: {}, + initializing: true + }, + getters: { + flatPool: state => { + return state.pool.reduce((map, obj) => { + if (obj.value == "auto_fill") return map; + map[obj.value] = Number(obj.count); + return map; + }, {}); + } + }, + actions: { + clearStorage({ commit, dispatch, state }) { + return Promise.all([ + localforage.removeItem("vt.custom.prizepacks"), + localforage.removeItem("vt.custom.drops") + ]); + }, + initalize( + { commit, dispatch, state, rootState, getters, rootGetters }, + packs + ) { + var commit_packs = {}; + var commit_flatpacks = {}; + for (var i = 0; i < packs.length; ++i) { + commit_packs[packs[i].name] = Array(packs[i].slots).fill( + rootGetters.droppableLookup["auto_fill"] + ); + commit_flatpacks[packs[i].name] = Array(packs[i].slots).fill( + "auto_fill" + ); + } + commit("setPacks", commit_packs); + commit("setFlatPacks", commit_flatpacks); + + return localforage + .getItem("vt.custom.prizepacks") + .then(value => { + if (value === null) { + return; + } + Object.keys(value).forEach(pack => { + value[pack].forEach((item, slot) => { + dispatch("setDrop", { + pack: pack, + slot: slot, + drop: item, + save: false + }); + }); + }); + }) + .then(() => { + return localforage.getItem("vt.custom.drops").then(value => { + if (value === null) { + return; + } + + Object.keys(value).forEach(name => { + if (rootGetters.droppableLookup[name]) { + dispatch("setDropCount", { + drop: rootGetters.droppableLookup[name], + count: value[name], + save: false + }); + } + }); + }); + }) + .then(() => { + return commit("setInitalizing", false); + }); + }, + setDrop({ commit, state, rootState, getters, rootGetters }, data) { + data = { + save: true, + ...data + }; + if (rootGetters.droppableLookup[data.drop]) { + data.drop = rootGetters.droppableLookup[data.drop]; + } + commit("setDrop", data); + if (data.save) { + localforage.setItem("vt.custom.prizepacks", state.flatpacks); + // setDrop can side affect counts + localforage.setItem("vt.custom.drops", getters.flatPool); + } + }, + setDropCount({ commit, state, getters }, data) { + data = { + save: true, + ...data + }; + commit("setDropCount", data); + if (data.save) { + localforage.setItem("vt.custom.drops", getters.flatPool); + } + } + }, + mutations: { + setDrop(state, data) { + var previous = state.packs[data.pack][data.slot]; + state.packs[data.pack][data.slot] = data.drop; + state.flatpacks[data.pack][data.slot] = data.drop.value; + + previous.placed--; + if (previous.hasOwnProperty("count")) { + if (previous.neg_count < 0) { + previous.neg_count++; + } else { + previous.count++; + } + } + + data.drop.placed++; + if (data.drop.hasOwnProperty("count")) { + if (data.drop.count > 0) { + data.drop.count--; + } else { + data.drop.neg_count = data.drop.neg_count + ? data.drop.neg_count - 1 + : -1; + } + } + }, + setDropCount(state, data) { + state.pool.forEach(item => { + if (item === data.drop) { + item.count = data.count; + } + }); + }, + setPool(state, pool) { + state.pool = pool; + }, + setPacks(state, packs) { + state.packs = packs; + }, + setFlatPacks(state, packs) { + state.flatpacks = packs; + }, + setInitalizing(state, init) { + state.initializing = init; + } + } +}; diff --git a/resources/js/store/modules/randomizer.js b/resources/js/store/modules/randomizer.js new file mode 100644 index 000000000..7bcc72624 --- /dev/null +++ b/resources/js/store/modules/randomizer.js @@ -0,0 +1,467 @@ +import localforage from "localforage"; +import axios from "axios"; + +function hasValue(value, array) { + return ( + array.filter(v => { + return value.value === v.value; + }).length > 0 + ); +} + +function asMulti(object, mKey) { + return Object.keys(object).map(key => { + return { + value: key, + name: `randomizer.${mKey}.options.${key}` + }; + }); +} + +export default { + namespaced: true, + state: { + preset: { + value: "default", + name: "randomizer.preset.options.default" + }, + glitches_required: { + value: "none", + name: "randomizer.glitches_required.options.none" + }, + item_placement: { + value: "advanced", + name: "randomizer.item_placement.options.advanced" + }, + dungeon_items: { + value: "standard", + name: "randomizer.dungeon_items.options.standard" + }, + accessibility: { + value: "items", + name: "randomizer.accessibility.options.items" + }, + goal: { + value: "ganon", + name: "randomizer.goal.options.ganon" + }, + tower_open: { + value: "7", + name: "randomizer.tower_open.options.7" + }, + ganon_open: { + value: "7", + name: "randomizer.ganon_open.options.7" + }, + world_state: { + value: "open", + name: "randomizer.world_state.options.open" + }, + entrance_shuffle: { + value: "none", + name: "randomizer.entrance_shuffle.options.none" + }, + boss_shuffle: { + value: "none", + name: "randomizer.boss_shuffle.options.none" + }, + enemy_shuffle: { + value: "none", + name: "randomizer.enemy_shuffle.options.none" + }, + hints: { + value: "on", + name: "randomizer.hints.options.on" + }, + weapons: { + value: "randomized", + name: "randomizer.weapons.options.randomized" + }, + item_pool: { + value: "normal", + name: "randomizer.item_pool.options.normal" + }, + item_functionality: { + value: "normal", + name: "randomizer.item_functionality.options.normal" + }, + enemy_damage: { + value: "default", + name: "randomizer.enemy_damage.options.default" + }, + enemy_health: { + value: "default", + name: "randomizer.enemy_health.options.default" + }, + options: { + preset: [], + glitches_required: [], + item_placement: [], + dungeon_items: [], + accessibility: [], + goal: [], + tower_open: [], + ganon_open: [], + world_state: [], + entrance_shuffle: [], + boss_shuffle: [], + enemy_shuffle: [], + hints: [], + weapons: [], + item_pool: [], + item_functionality: [], + enemy_damage: [], + enemy_health: [] + }, + preset_map: {}, + initializing: true + }, + getters: {}, + actions: { + getItemSettings({ commit, dispatch }) { + return axios + .get(`/randomizer/settings`) + .then(response => { + commit("updateItemSettings", response.data); + }) + .then(() => + Promise.all([ + dispatch("load", ["preset", "setPreset"]), + dispatch("load", ["glitches_required", "setGlitchesRequired"]), + dispatch("load", ["item_placement", "setItemPlacement"]), + dispatch("load", ["dungeon_items", "setDungeonItems"]), + dispatch("load", ["accessibility", "setAccessibility"]), + dispatch("load", ["goal", "setGoal"]), + dispatch("load", ["tower_open", "setTowerOpen"]), + dispatch("load", ["ganon_open", "setGanonOpen"]), + dispatch("load", ["world_state", "setWorldState"]), + dispatch("load", ["entrance_shuffle", "setEntranceShuffle"]), + dispatch("load", ["boss_shuffle", "setBossShuffle"]), + dispatch("load", ["enemy_shuffle", "setEnemyShuffle"]), + dispatch("load", ["hints", "setHints"]), + dispatch("load", ["weapons", "setWeapons"]), + dispatch("load", ["item_pool", "setItemPool"]), + dispatch("load", ["item_functionality", "setItemFunctionality"]), + dispatch("load", ["enemy_damage", "setEnemyDamage"]), + dispatch("load", ["enemy_health", "setEnemyHealth"]) + ]) + ) + .then(() => { + commit("setInitalizing", false); + }); + }, + setPreset({ commit, state }, preset) { + if ( + preset.value !== "custom" && + typeof state.preset_map[preset.value] !== "undefined" + ) { + commit( + "setGlitchesRequired", + state.preset_map[preset.value]["glitches_required"] + ); + commit( + "setItemPlacement", + state.preset_map[preset.value]["item_placement"] + ); + commit( + "setDungeonItems", + state.preset_map[preset.value]["dungeon_items"] + ); + commit( + "setAccessibility", + state.preset_map[preset.value]["accessibility"] + ); + commit("setGoal", state.preset_map[preset.value]["goal"]); + commit("setTowerOpen", state.preset_map[preset.value]["tower_open"]); + commit("setGanonOpen", state.preset_map[preset.value]["ganon_open"]); + commit("setWorldState", state.preset_map[preset.value]["world_state"]); + commit( + "setEntranceShuffle", + state.preset_map[preset.value]["entrance_shuffle"] + ); + commit( + "setBossShuffle", + state.preset_map[preset.value]["boss_shuffle"] + ); + commit( + "setEnemyShuffle", + state.preset_map[preset.value]["enemy_shuffle"] + ); + commit("setHints", state.preset_map[preset.value]["hints"]); + commit("setWeapons", state.preset_map[preset.value]["weapons"]); + commit("setItemPool", state.preset_map[preset.value]["item_pool"]); + commit( + "setItemFunctionality", + state.preset_map[preset.value]["item_functionality"] + ); + commit( + "setEnemyDamage", + state.preset_map[preset.value]["enemy_damage"] + ); + commit( + "setEnemyHealth", + state.preset_map[preset.value]["enemy_health"] + ); + } + + commit("setPreset", preset); + }, + async load({ commit, state }, [key, mutate]) { + const value = await localforage.getItem(`randomizer.${key}`); + if (value !== null && hasValue(value, state.options[key])) { + commit(mutate, value); + } + }, + setGlitchesRequired({ commit, state }, value) { + commit("setGlitchesRequired", value); + + if ( + ["none", "no_logic"].indexOf(state.glitches_required.value) === -1 && + state.entrance_shuffle.value !== "none" + ) { + commit("setEntranceShuffle", "none"); + } + }, + setItemPlacement({ commit, state }, value) { + commit("setItemPlacement", value); + + if ( + state.item_placement.value !== "advanced" && + state.entrance_shuffle.value !== "none" + ) { + commit("setEntranceShuffle", "none"); + } + }, + setDungeonItems({ commit, state }, value) { + commit("setDungeonItems", value); + + if ( + ["full", "standard"].indexOf(state.dungeon_items.value) === -1 && + state.entrance_shuffle.value !== "none" + ) { + commit("setEntranceShuffle", "none"); + } + }, + setGoal({ commit, state }, value) { + commit("setGoal", value); + + if (state.goal.value === "dungeons") { + commit("setGanonOpen", "7"); + } + }, + setGanonOpen({ commit, state }, value) { + commit("setGanonOpen", value); + + if (state.ganon_open.value !== "7" && state.goal.value === "dungeons") { + commit("setGoal", "ganon"); + } + }, + setWorldState({ commit }, value) { + commit("setWorldState", value); + }, + setEntranceShuffle({ commit, state }, value) { + commit("setEntranceShuffle", value); + + // rules when ER is enabled, hopefully we can reduce this section to be + // completely removed in the future. + if (state.entrance_shuffle.value !== "none") { + if ( + ["none", "no_logic"].indexOf(state.glitches_required.value) === -1 + ) { + commit("setGlitchesRequired", "none"); + } + + if (state.item_placement.value !== "advanced") { + commit("setItemPlacement", "advanced"); + } + + if (["full", "standard"].indexOf(state.dungeon_items.value) === -1) { + commit("setDungeonItems", "standard"); + } + } + } + }, + mutations: { + updateItemSettings( + state, + { + presets, + glitches_required, + item_placement, + dungeon_items, + accessibility, + goals, + tower_open, + ganon_open, + world_state, + entrance_shuffle, + boss_shuffle, + enemy_shuffle, + hints, + weapons, + item_pool, + item_functionality, + enemy_damage, + enemy_health + } + ) { + state.options.preset = asMulti(presets, "preset"); + state.options.glitches_required = asMulti( + glitches_required, + "glitches_required" + ); + state.options.item_placement = asMulti(item_placement, "item_placement"); + state.options.dungeon_items = asMulti(dungeon_items, "dungeon_items"); + state.options.accessibility = asMulti(accessibility, "accessibility"); + state.options.goal = asMulti(goals, "goal"); + state.options.tower_open = asMulti(tower_open, "tower_open"); + state.options.ganon_open = asMulti(ganon_open, "ganon_open"); + state.options.world_state = asMulti(world_state, "world_state"); + state.options.entrance_shuffle = asMulti( + entrance_shuffle, + "entrance_shuffle" + ); + state.options.boss_shuffle = asMulti(boss_shuffle, "boss_shuffle"); + state.options.enemy_shuffle = asMulti(enemy_shuffle, "enemy_shuffle"); + state.options.hints = asMulti(hints, "hints"); + state.options.weapons = asMulti(weapons, "weapons"); + state.options.item_pool = asMulti(item_pool, "item_pool"); + state.options.item_functionality = asMulti( + item_functionality, + "item_functionality" + ); + state.options.enemy_damage = asMulti(enemy_damage, "enemy_damage"); + state.options.enemy_health = asMulti(enemy_health, "enemy_health"); + state.preset_map = presets; + }, + setPreset(state, value) { + if (typeof value === "string") { + value = state.options.preset.find(o => o.value === value); + } + state.preset = value; + localforage.setItem("randomizer.preset", value); + }, + setGlitchesRequired(state, value) { + if (typeof value === "string") { + value = state.options.glitches_required.find(o => o.value === value); + } + state.glitches_required = value; + localforage.setItem("randomizer.glitches_required", value); + }, + setItemPlacement(state, value) { + if (typeof value === "string") { + value = state.options.item_placement.find(o => o.value === value); + } + state.item_placement = value; + localforage.setItem("randomizer.item_placement", value); + }, + setDungeonItems(state, value) { + if (typeof value === "string") { + value = state.options.dungeon_items.find(o => o.value === value); + } + state.dungeon_items = value; + localforage.setItem("randomizer.dungeon_items", value); + }, + setAccessibility(state, value) { + if (typeof value === "string") { + value = state.options.accessibility.find(o => o.value === value); + } + state.accessibility = value; + localforage.setItem("randomizer.accessibility", value); + }, + setGoal(state, value) { + if (typeof value === "string") { + value = state.options.goal.find(o => o.value === value); + } + state.goal = value; + localforage.setItem("randomizer.goal", value); + }, + setTowerOpen(state, value) { + if (typeof value === "string") { + value = state.options.tower_open.find(o => o.value === value); + } + state.tower_open = value; + localforage.setItem("randomizer.tower_open", value); + }, + setGanonOpen(state, value) { + if (typeof value === "string") { + value = state.options.ganon_open.find(o => o.value === value); + } + state.ganon_open = value; + localforage.setItem("randomizer.ganon_open", value); + }, + setWorldState(state, value) { + if (typeof value === "string") { + value = state.options.world_state.find(o => o.value === value); + } + state.world_state = value; + localforage.setItem("randomizer.world_state", value); + }, + setEntranceShuffle(state, value) { + if (typeof value === "string") { + value = state.options.entrance_shuffle.find(o => o.value === value); + } + state.entrance_shuffle = value; + localforage.setItem("randomizer.entrance_shuffle", value); + }, + setBossShuffle(state, value) { + if (typeof value === "string") { + value = state.options.boss_shuffle.find(o => o.value === value); + } + state.boss_shuffle = value; + localforage.setItem("randomizer.boss_shuffle", value); + }, + setEnemyShuffle(state, value) { + if (typeof value === "string") { + value = state.options.enemy_shuffle.find(o => o.value === value); + } + state.enemy_shuffle = value; + localforage.setItem("randomizer.enemy_shuffle", value); + }, + setHints(state, value) { + if (typeof value === "string") { + value = state.options.hints.find(o => o.value === value); + } + state.hints = value; + localforage.setItem("randomizer.hints", value); + }, + setWeapons(state, value) { + if (typeof value === "string") { + value = state.options.weapons.find(o => o.value === value); + } + state.weapons = value; + localforage.setItem("randomizer.weapons", value); + }, + setItemPool(state, value) { + if (typeof value === "string") { + value = state.options.item_pool.find(o => o.value === value); + } + state.item_pool = value; + localforage.setItem("randomizer.item_pool", value); + }, + setItemFunctionality(state, value) { + if (typeof value === "string") { + value = state.options.item_functionality.find(o => o.value === value); + } + state.item_functionality = value; + localforage.setItem("randomizer.item_functionality", value); + }, + setEnemyDamage(state, value) { + if (typeof value === "string") { + value = state.options.enemy_damage.find(o => o.value === value); + } + state.enemy_damage = value; + localforage.setItem("randomizer.enemy_damage", value); + }, + setEnemyHealth(state, value) { + if (typeof value === "string") { + value = state.options.enemy_health.find(o => o.value === value); + } + state.enemy_health = value; + localforage.setItem("randomizer.enemy_health", value); + }, + setInitalizing(state, init) { + state.initializing = init; + } + } +}; diff --git a/resources/js/store/modules/romSettings.js b/resources/js/store/modules/romSettings.js new file mode 100644 index 000000000..2c4cf5773 --- /dev/null +++ b/resources/js/store/modules/romSettings.js @@ -0,0 +1,96 @@ +import localforage from "localforage"; + +function hasValue(value, array) { + return ( + array.filter(v => { + return value.value === v.value; + }).length > 0 + ); +} + +export default { + namespaced: true, + state: { + heartSpeed: { value: "half", name: "rom.settings.heart_speeds.half" }, + menuSpeed: { value: "normal", name: "rom.settings.menu_speeds.normal" }, + heartColor: { value: "red", name: "rom.settings.heart_colors.red" }, + quickswap: false, + musicOn: true, + paletteShuffle: false, + options: { + heartSpeed: [ + { value: "off", name: "rom.settings.heart_speeds.off" }, + { value: "double", name: "rom.settings.heart_speeds.double" }, + { value: "normal", name: "rom.settings.heart_speeds.normal" }, + { value: "half", name: "rom.settings.heart_speeds.half" }, + { value: "quarter", name: "rom.settings.heart_speeds.quarter" } + ], + menuSpeed: [ + { value: "instant", name: "rom.settings.menu_speeds.instant" }, + { value: "fast", name: "rom.settings.menu_speeds.fast" }, + { value: "normal", name: "rom.settings.menu_speeds.normal" }, + { value: "slow", name: "rom.settings.menu_speeds.slow" } + ], + heartColor: [ + { value: "blue", name: "rom.settings.heart_colors.blue" }, + { value: "green", name: "rom.settings.heart_colors.green" }, + { value: "red", name: "rom.settings.heart_colors.red" }, + { value: "yellow", name: "rom.settings.heart_colors.yellow" } + ] + }, + initializing: true + }, + getters: {}, + actions: { + initialize({ commit, dispatch }) { + return Promise.all([ + dispatch("load", ["heart_speeds", "setHeartSpeed"]), + dispatch("load", ["menu_speeds", "setMenuSpeed"]), + dispatch("load", ["heart_colors", "setHeartColor"]), + dispatch("load", ["quickswap", "setQuickswap"]), + dispatch("load", ["music_on", "setMusicOn"]), + dispatch("load", ["palette_shuffle", "setPaletteShuffle"]) + ]).then(() => { + commit("setInitalizing", false); + }); + }, + async load({ commit, state }, [key, mutate]) { + const value = await localforage.getItem(`rom.${key}`); + if ( + value !== null && + (!state.options[key] || hasValue(value, state.options[key])) + ) { + commit(mutate, value); + } + } + }, + mutations: { + setHeartSpeed(state, heartSpeed) { + state.heartSpeed = heartSpeed; + localforage.setItem("rom.heart_speeds", heartSpeed); + }, + setMenuSpeed(state, menuSpeed) { + state.menuSpeed = menuSpeed; + localforage.setItem("rom.menu_speeds", menuSpeed); + }, + setHeartColor(state, heartColor) { + state.heartColor = heartColor; + localforage.setItem("rom.heart_colors", heartColor); + }, + setQuickswap(state, quickswap) { + state.quickswap = quickswap; + localforage.setItem("rom.quickswap", quickswap); + }, + setMusicOn(state, musicOn) { + state.musicOn = musicOn; + localforage.setItem("rom.music_on", musicOn); + }, + setPaletteShuffle(state, paletteShuffle) { + state.paletteShuffle = paletteShuffle; + localforage.setItem("rom.palette_shuffle", paletteShuffle); + }, + setInitalizing(state, init) { + state.initializing = init; + } + } +}; diff --git a/resources/js/views/Customizer.vue b/resources/js/views/Customizer.vue new file mode 100644 index 000000000..6cebc5dc8 --- /dev/null +++ b/resources/js/views/Customizer.vue @@ -0,0 +1,744 @@ + + + + + diff --git a/resources/js/views/HashLoader.vue b/resources/js/views/HashLoader.vue new file mode 100644 index 000000000..938a9a121 --- /dev/null +++ b/resources/js/views/HashLoader.vue @@ -0,0 +1,254 @@ + + + diff --git a/resources/js/views/Randomizer.vue b/resources/js/views/Randomizer.vue new file mode 100644 index 000000000..dd72bfc8c --- /dev/null +++ b/resources/js/views/Randomizer.vue @@ -0,0 +1,606 @@ + + + + + diff --git a/resources/js/views/Sprites.vue b/resources/js/views/Sprites.vue new file mode 100644 index 000000000..a431f2a19 --- /dev/null +++ b/resources/js/views/Sprites.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/resources/js/vue-i18n-locales.generated.js b/resources/js/vue-i18n-locales.generated.js new file mode 100644 index 000000000..a1115a4e6 --- /dev/null +++ b/resources/js/vue-i18n-locales.generated.js @@ -0,0 +1,2935 @@ +export default { + "de": { + "randomizer": { + "title": "Randomizer", + "preset": { + "title": "Select Preset", + "customize": "Customize", + "options": { + "default": "Default", + "beginner": "Beginner", + "veetorp": "OWG (Veetorp’s Favorite)", + "crosskeys": "Crosskeys", + "quick": "Super Quick", + "nightmare": "Nightmare", + "custom": "Custom" + } + }, + "placement": { + "title": "Item Placement" + }, + "item_placement": { + "title": "Item Placement", + "options": { + "basic": "Basic", + "advanced": "Advanced" + } + }, + "dungeon_items": { + "title": "Dungeon Items", + "options": { + "standard": "Standard", + "mc": "Maps/Compasses", + "mcs": "Maps/Compasses/Small Keys", + "full": "Keysanity" + } + }, + "accessibility": { + "title": "Accessibility", + "options": { + "items": "100% Inventory", + "locations": "100% Locations", + "none": "Not Guaranteed" + } + }, + "glitches_required": { + "title": "Glitches Required", + "options": { + "none": "None", + "overworld_glitches": "Overworld Glitches", + "major_glitches": "Major Glitches", + "no_logic": "No Logic" + }, + "glitch_warning": "These settings require knowledge of Major Glitches**" + }, + "goal": { + "title": "Ziel", + "options": { + "ganon": "Besiege Ganon", + "fast_ganon": "Fast Ganon", + "dungeons": "Alle Dungeons", + "pedestal": "Master-Schwert Sockel", + "triforce-hunt": "Triforce-Splitter" + } + }, + "tower_open": { + "title": "Open Tower", + "options": { + "0": "0 Crystals", + "1": "1 Crystal", + "2": "2 Crystals", + "3": "3 Crystals", + "4": "4 Crystals", + "5": "5 Crystals", + "6": "6 Crystals", + "7": "7 Crystals", + "random": "Random" + } + }, + "ganon_open": { + "title": "Ganon Vulnerable", + "options": { + "0": "0 Crystals", + "1": "1 Crystal", + "2": "2 Crystals", + "3": "3 Crystals", + "4": "4 Crystals", + "5": "5 Crystals", + "6": "6 Crystals", + "7": "7 Crystals", + "random": "Random" + } + }, + "gameplay": { + "title": "Gameplay" + }, + "world_state": { + "title": "World State", + "options": { + "standard": "Standard", + "open": "Offen", + "inverted": "Invertiert", + "retro": "Retro" + } + }, + "entrance_shuffle": { + "title": "Entrance Shuffle", + "options": { + "none": "None", + "simple": "Simpel", + "restricted": "Beschränkt", + "full": "Voll", + "crossed": "Gekreuzt", + "insanity": "Wahnsinn" + } + }, + "boss_shuffle": { + "title": "Boss Shuffle", + "options": { + "none": "None", + "simple": "Simple", + "full": "Full", + "random": "Random" + } + }, + "enemy_shuffle": { + "title": "Enemy Shuffle", + "options": { + "none": "None", + "shuffled": "Shuffled", + "random": "Random" + } + }, + "hints": { + "title": "Hints", + "options": { + "on": "On", + "off": "Off" + } + }, + "weapons": { + "title": "Schwerter", + "options": { + "randomized": "Zufällig", + "assured": "Assured", + "vanilla": "Vanilla", + "swordless": "Schwertlos" + } + }, + "item_pool": { + "title": "Item Pool", + "options": { + "easy": "Einfach", + "normal": "Normal", + "hard": "Schwer", + "expert": "Experte", + "crowd_control": "Crowd Control" + }, + "crowd_control_warning": "* This setting is meant to be used with the Crowd Control Twitch extension. find out more: https://crowdcontrol.live/" + }, + "item_functionality": { + "title": "Item Functionality", + "options": { + "easy": "Einfach", + "normal": "Normal", + "hard": "Schwer", + "expert": "Experte" + } + }, + "enemy_damage": { + "title": "Enemy Damage", + "options": { + "default": "Default", + "shuffled": "Shuffled", + "random": "Random" + } + }, + "enemy_health": { + "title": "Enemy Health", + "options": { + "default": "Default", + "easy": "Einfach", + "hard": "Schwer", + "expert": "Experte" + } + }, + "generate": { + "race": "Generiere ROM für Rennen", + "race_warning": "Spoilerfrei", + "spoiler_race": "ROM für Spoiler Rennen", + "casual": "Generiere ROM", + "back": "Change Settings", + "regenerate": "Generate Again", + "regenerate_tooltip": "Generate new game with same settings", + "generating": "Generating..." + }, + "details": { + "title": "Spiel Details", + "save_spoiler": "Speichere Spoiler", + "save_rom": "Speichere Rom" + }, + "variation": { + "title": "Variation" + }, + "difficulty": { + "title": "Schwierigkeitsgrad", + "options": { + "easy": "Einfach", + "normal": "Normal", + "hard": "Schwer", + "expert": "Experte", + "insane": "Wahnsinnig", + "crowdControl": "Crowd Control" + } + } + }, + "enemizer": { + "title": "Enemizer", + "enable": "Aktiviere Enemizer", + "disable": "Deaktiviere Enemizer", + "enemy_health": { + "title": "Gegner Leben", + "options": [ + "Regulär", + "Einfach (1-4 hp)", + "Mittel (2-15 hp)", + "Schwer (2-30 hp)", + "Wahnsinnig (4-50 hp)" + ] + }, + "enemy_damage": { + "title": "Gegner Schaden", + "options": { + "off": "Regulär", + "shuffle": "Durcheinander", + "chaos": "Chaos" + } + }, + "bosses": { + "title": "Bosse", + "options": { + "off": "Regulär", + "basic": "Basis", + "normal": "Normal", + "chaos": "Chaos" + } + }, + "palette_shuffle": "Palettenmischung", + "pot_shuffle": "Topf mischen", + "enemy_shuffle": "Gegner mischen" + }, + "entrance": { + "title": "Entrance Randomizer", + "switch": { + "item": "Wechsele zum Item Randomizer" + }, + "rom": { + "options": "ROM Optionen" + }, + "difficulty": { + "title": "Schwierigkeit", + "options": { + "easy": "Einfach", + "normal": "Mittel", + "hard": "Schwer", + "expert": "Experte", + "insane": "Wahnsinnig" + } + }, + "goal": { + "title": "Ziel", + "options": { + "ganon": "Besiege Ganon", + "crystals": "Kristalle", + "dungeons": "Alle Dungeons", + "pedestal": "Master-Schwert Sockel", + "triforcehunt": "Triforce Teile" + } + }, + "logic": { + "title": "Logik", + "options": { + "NoGlitches": "Keine Glitches" + } + }, + "mode": { + "title": "Zustand", + "options": { + "swordless": "Schwertlos", + "open": "Offen" + } + }, + "shuffle": { + "title": "Mischung", + "options": { + "simple": "Simpel", + "restricted": "Beschränkt", + "full": "Voll", + "crossed": "Gekreuzt", + "insanity": "Wahnsinn" + } + }, + "variation": { + "title": "Variation", + "options": { + "none": "Keine", + "timed-race": "Zeitrennen", + "timed-ohko": "Zeitlimit bis OHKO", + "ohko": "OHKO", + "triforce-hunt": "Triforce-Splitter Jagd", + "key-sanity": "Keysanity", + "retro": "Retro" + } + }, + "generate": { + "race": "Generiere ROM für Rennen", + "spoiler_race": "ROM für Spoiler Rennen", + "casual": "Generiere ROM" + }, + "details": { + "title": "Spiele Details", + "save_spoiler": "Speichere Spoiler", + "save_rom": "Speichere Rom" + } + }, + "customizer": { + "settings": { + "timers": { + "off": "Off", + "stopwatch": "Stopwatch", + "countdown-ohko": "Countdown OHKO", + "countdown-continue": "Countdown Continue", + "countdown-stop": "Countdown Stop" + }, + "dungeon_count": { + "off": "Off", + "on": "Always On", + "pickup": "On Compass Pickup" + } + }, + "glitches": { + "canBombJump": { + "title": "Bomb Jump", + "description": "One may be required to Bomb jump over gaps." + }, + "canBootsClip": { + "title": "Boots Clip", + "description": "When one has the Boots, they may be required to clip through walls in the in overworld." + }, + "canBunnyRevive": { + "title": "Bunny Revive", + "description": "One may be required to go somewhere as bunny form and abuse death/fairy revive to be Link." + }, + "canBunnySurf": { + "title": "Bunny Surf", + "description": "One may be required to water walk in bunny state." + }, + "canDungeonRevive": { + "title": "Dungeon Revive", + "description": "One may be required to revive as a bunny in a dungeon to collect items as Link." + }, + "canFakeFlipper": { + "title": "Fake Flipper", + "description": "One may be required to use the fake flipper glitch to collect items." + }, + "canMirrorClip": { + "title": "Mirror Clip", + "description": "One may be required to abuse Mirror bouce to go out of bounds." + }, + "canMirrorWrap": { + "title": "Mirror Wrap", + "description": "One may be required to use Mirror to auto scroll to a different location." + }, + "canOneFrameClipOW": { + "title": "One Frame Clip (overworld)", + "description": "You don’t want this. Trust me." + }, + "canOWYBA": { + "title": "YBA (overworld)", + "description": "May be required to use bottles in the overworld to teleport to different locations." + }, + "canSuperBunny": { + "title": "Super Bunny", + "description": "One may be required to activate super bunny to access locations." + }, + "canSuperSpeed": { + "title": "Super Speed", + "description": "One may be required to super speed clip through edges in overworld." + }, + "canWaterFairyRevive": { + "title": "Water Fairy Revive", + "description": "This setup is silly and requires a bunch of items." + }, + "canWaterWalk": { + "title": "Water walk", + "description": "One may be required to use boots to walk on top of water." + }, + "noLogic": { + "title": "Disable all logic checks", + "description": "When this is selected all bets are off, and nothing below matters." + } + } + }, + "rom": { + "loader": { + "title": "Anfangen", + "file_select": "ROM Datei auswählen", + "content": "
  1. Wähle die Rom Datei und lade sie ihn den Browser (Bitte nutze die Zelda no Densetsu: Kamigami no Triforce v1.0 ROM mit einer .smc oder .sfc Endung)
  2. Wähle die Spieloptionen um auszuwählen wie Zufällig dein Spiel sein soll
  3. Klicke Generiere ROM für Rennen
  4. Dann speichere deine Rom und fang an zu spielen
" + }, + "info": { + "spoilerwarning": "WARNUNG: Der Ersteller dieses Spiel hat den Spoiler Log angesehen.", + "logic": "Glitches Required", + "build": "ROM build", + "difficulty": "Schwierigkeitsgrad", + "variation": "Variation", + "shuffle": "Mischung", + "mode": "World State", + "weapons": "Schwerter", + "goal": "Ziel", + "permalink": "Permalink", + "special": "Spezial", + "notes": "Notizen", + "generated": "Erstellt" + }, + "settings": { + "heart_speed": "Herz Geschwindigkeit", + "heart_speeds": { + "off": "Aus", + "double": "Doppelte Geschwindigkeit", + "normal": "Geschwindigkeit", + "half": "Halbe Geschwindigkeit", + "quarter": "Viertel Geschwindigkeit" + }, + "menu_speed": "Menü Geschwindigkeit", + "menu_speeds": { + "instant": "Instant", + "fast": "Schnell", + "normal": "Normal", + "slow": "Langsam" + }, + "heart_color": "Farbe der Herzen", + "heart_colors": { + "blue": "Blau", + "green": "Grün", + "red": "Rot", + "yellow": "Gelb" + }, + "play_as": "Spiele als", + "music": "Hintergrundmusik", + "music_info": "(setze zu \"Keine\" für MSU-1 Support)", + "quickswap": "Gegenstand Schnellwechsel", + "palette_shuffle": "Palette Shuffle", + "race_warning": "Funktioniert nicht in einer Rom für Rennen" + } + }, + "error": { + "title": "Fehler", + "429": "Auch wenn wir schätzen das du einen haufen Spiele generierst, andere Leute möchten dies aber auch. Bitte kommen später wieder wenn du mehr generieren möchtest.", + "failed_generation": "Fehler beim erstellen :(", + "bad_file": "Datei nicht erkannt", + "quota_exceeded_error": "Your local storage quota has been exceeded." + }, + "item": { + "Random": "Random", + "BottleWithRandom": "Bottle (Random)", + "Nothing": "Nichts", + "UncleSword": "Progressives Schwert", + "L1Sword": "Schwert des Onkels", + "L1SwordAndShield": "Schwert und Schild des Onkels", + "L2Sword": "Master-Schwert", + "MasterSword": "Master-Schwert", + "L3Sword": "Gehärtetes Schwert", + "L4Sword": "Goldenes Schwert", + "BlueShield": "Schild des Onkels", + "RedShield": "Rotes Schild", + "MirrorShield": "Spiegelschild", + "FireRod": "Feuerstab", + "IceRod": "Eisstab", + "Hammer": "Hammer", + "Hookshot": "Enterharken", + "Bow": "Bogen", + "Boomerang": "Blauer Bumerang", + "Powder": "Magisches Pulver", + "Bee": "Biene", + "Bombos": "Bombos-Medaillon", + "Ether": "Ether-Medaillon", + "Quake": "Quake-Medaillon", + "Lamp": "Lampe", + "Shovel": "Schaufel", + "OcarinaInactive": "Flöte", + "CaneOfSomaria": "Somaria Stab", + "Bottle": "Flasche (Leer)", + "PieceOfHeart": "Herzteil", + "CaneOfByrna": "Byrna Stab", + "Cape": "Magischer Umhang", + "MagicMirror": "Magischer Spiegel", + "PowerGlove": "Krafthandschuhe", + "TitansMitt": "Titanenhandschuhe", + "BookOfMudora": "Buch Mudora", + "Flippers": "Schwimmflossen", + "MoonPearl": "Mondperle", + "BugCatchingNet": "Schmetterlingsnetz", + "BlueMail": "Blaue Rüstung", + "RedMail": "Rote Rüstung", + "Key": "Schlüssel", + "Compass": "Kompass", + "HeartContainerNoAnimation": "Herzcontainer (keine Animation)", + "Bomb": "Eine Bombe", + "ThreeBombs": "Drei Bomben", + "Mushroom": "Pilz", + "RedBoomerang": "Magischer Bumerang", + "BottleWithRedPotion": "Flasche (Rotes Elixier)", + "BottleWithGreenPotion": "Flasche (Grünes Elixier)", + "BottleWithBluePotion": "Flasche (Blaues Elixier)", + "RedPotion": "Rotes Elixier", + "GreenPotion": "Grünes Elixier", + "BluePotion": "Blaues Elixier", + "TenBombs": "Zehn Bomben", + "BigKey": "Großer Schlüssel", + "Map": "Dungeon-Karte", + "OneRupee": "Ein Rubin", + "FiveRupees": "Fünf Rubine", + "TwentyRupees": "Zwanzig Rubine", + "PendantOfCourage": "Amulett des Mutes", + "PendantOfWisdom": "Amulett der Weisheit", + "PendantOfPower": "Amulett der Stärke", + "BowAndArrows": "Pfeil und Bogen", + "BowAndSilverArrows": "Silberpfeil und Bogen", + "BottleWithBee": "Flasche (Biene)", + "BottleWithFairy": "Flasche (Fee)", + "BossHeartContainer": "Herzcontainer", + "HeartContainer": "Herzcontainer der Kathedrale", + "OneHundredRupees": "Einhundert Rubine", + "FiftyRupees": "Fünfzig Rubine", + "Heart": "Kleines Herz", + "Arrow": "Ein Pfeil", + "ShopArrow": "Arrows", + "TenArrows": "Zehn Pfeile", + "SmallMagic": "Kleine Magie", + "ThreeHundredRupees": "Dreihundert Rubine", + "TwentyRupees2": "Zwanzig Rubine", + "BottleWithGoldBee": "Flasche (Goldene Biene)", + "OcarinaActive": "Flöte (Aktiviert)", + "PegasusBoots": "Pegasus-Stiefel", + "BombUpgrade5": "Bomben Upgrade (+5)", + "BombUpgrade10": "Bomben Upgrade (+10)", + "BombUpgrade50": "Bomben Upgrade (+50)", + "ArrowUpgrade5": "Pfeil Upgrade (+5)", + "ArrowUpgrade10": "Pfeil Upgrade (+10)", + "ArrowUpgrade70": "Pfeil Upgrade (+70)", + "HalfMagic": "Halbe Magie", + "QuarterMagic": "Viertel Magie", + "Programmable1": "Programmierbar 1", + "Programmable2": "Programmierbar 2", + "Programmable3": "Programmierbar 3", + "SilverArrowUpgrade": "Silberpfeil Upgrade", + "Rupoor": "Rupoor", + "RedClock": "Rote Uhr", + "BlueClock": "Blaue Uhr", + "GreenClock": "Grüne Uhr", + "ProgressiveSword": "Progressives Schwert", + "ProgressiveShield": "Progressives Schild", + "ProgressiveArmor": "Progressive Rüstung", + "ProgressiveGlove": "Progressive Handschuhe", + "singleRNG": "Einzigartiger RNG Gegenstand", + "multiRNG": "Nicht einzigartiger RNG Gegenstand", + "ProgressiveBow": "Progressiver Bogen", + "Triforce": "Triforce", + "PowerStar": "Power-Stern", + "TriforcePiece": "Triforce-Splitter", + "MapLW": "Lichtwelt-Karte", + "MapDW": "Schattenwelt-Karte", + "MapA2": "Karte von Ganons Turm", + "MapD7": "Karte vom Schildkrötenfelsen", + "MapD4": "Karte von Blinds Versteck", + "MapP3": "Karte von Heras Turm", + "MapD5": "Karte vom Eispalast", + "MapD3": "Karte vom Skelettwald", + "MapD6": "Karte vom Wüstenseepalast", + "MapD1": "Karte vom Palast der Dunkelheit", + "MapD2": "Karte vom Sumpfpalast", + "MapA1": "Karte von Agahnims Turm", + "MapP2": "Karte vom Wüstenpalast", + "MapP1": "Karte vom Ostpalast", + "MapH1": "Karte von Schloss Hyrule", + "MapH2": "Karte der Kanalisation", + "CompassA2": "Kompass von Ganons Turm", + "CompassD7": "Kompass vom Schildkrötenfelsen", + "CompassD4": "Kompass von Blinds Versteck", + "CompassP3": "Kompass von Heras Turm", + "CompassD5": "Kompass vom Eispalast", + "CompassD3": "Kompass vom Skelettwald", + "CompassD6": "Kompass vom Wüstenseepalast", + "CompassD1": "Kompass vom Palast der Dunkelheit", + "CompassD2": "Kompass vom Sumpfpalast", + "CompassA1": "Kompass von Agahnims Turm", + "CompassP2": "Kompass vom Wüstenpalast", + "CompassP1": "Kompass vom Ostpalast", + "CompassH1": "Kompass von Schloss Hyrule", + "CompassH2": "Kompass der Kanalisation", + "BigKeyA2": "Großer Schlüssel von Ganons Turm", + "BigKeyD7": "Großer Schlüssel vom Schildkrötenfelsen ", + "BigKeyD4": "Großer Schlüssel von Blinds Versteck", + "BigKeyP3": "Großer Schlüssel von Heras Turm", + "BigKeyD5": "Großer Schlüssel vom Eispalast", + "BigKeyD3": "Großer Schlüssel vom Skelettwald", + "BigKeyD6": "Großer Schlüssel vom Wüstenseepalast", + "BigKeyD1": "Großer Schlüssel vom Palast der Dunkelheit", + "BigKeyD2": "Großer Schlüssel vom Sumpfpalast", + "BigKeyA1": "Großer Schlüssel von Agahnims Turm", + "BigKeyP2": "Großer Schlüssel vom Wüstenpalast", + "BigKeyP1": "Großer Schlüssel vom Ostpalast", + "BigKeyH1": "Großer Schlüssel von Schloss Hyrule", + "BigKeyH2": "Großer Schlüssel der Kanalisation", + "KeyH2": "Kleiner Schlüssel der Kanalisation", + "KeyH1": "Kleiner Schlüssel von Schloss Hyrule", + "KeyP1": "Kleiner Schlüssel vom Ostpalast", + "KeyP2": "Kleiner Schlüssel vom Wüstenpalast", + "KeyA1": "Kleiner Schlüssel von Agahnims Turm", + "KeyD2": "Kleiner Schlüssel vom Sumpfpalast", + "KeyD1": "Kleiner Schlüssel vom Palast der Dunkelheit", + "KeyD6": "Kleiner Schlüssel vom Wüstenseepalast", + "KeyD3": "Kleiner Schlüssel vom Skelettwald", + "KeyD5": "Kleiner Schlüssel vom Eispalast", + "KeyP3": "Kleiner Schlüssel von Heras Turm", + "KeyD4": "Kleiner Schlüssel von Blinds Versteck", + "KeyD7": "Kleiner Schlüssel vom Schildkrötenfelsen", + "KeyA2": "Kleiner Schlüssel von Ganons Turm", + "KeyGK": "Generischer kleiner Schlüssel", + "Crystal1": "Kristall 1", + "Crystal2": "Kristall 2", + "Crystal3": "Kristall 3", + "Crystal4": "Kristall 4", + "Crystal5": "Kristall 5", + "Crystal6": "Kristall 6", + "Crystal7": "Kristall 7", + "RescueZelda": "Rette Zelda", + "DefeatAgahnim": "Besiege Agahnim", + "BigRedBomb": "Große rote Bombe", + "DefeatAgahnim2": "Besiege Agahnim 2", + "DefeatGanon": "Besiege Ganon", + "ChocoboEgg": "Chocobo Egg", + "NoSlipBoots": "Ice Cleats", + "Reindeer1": "Dasher", + "Reindeer2": "Dancer", + "Reindeer3": "Prancer", + "Reindeer4": "Vixen", + "Reindeer5": "Comet", + "Reindeer6": "Cupid", + "Reindeer7": "Donner", + "Reindeer8": "Blitzen", + "Coal1": "Coal", + "Coal2": "Coal", + "Armos Knights": "Armos Knights", + "Lanmolas": "Lanmolas", + "Moldorm": "Moldorm", + "Helmasaur King": "Helmasaur King", + "Arrghus": "Arrghus", + "Mothula": "Mothula", + "Blind": "Blind", + "Kholdstare": "Kholdstare", + "Vitreous": "Vitreous", + "Trinexx": "Trinexx", + "Agahnim": "Agahnim", + "Agahnim 2": "Agahnim 2", + "Ganon": "Ganon", + "Test": "Testing Item" + } + }, + "en": { + "randomizer": { + "title": "Randomizer", + "preset": { + "title": "Select Preset", + "customize": "Customize", + "options": { + "default": "Default", + "beginner": "Beginner", + "veetorp": "OWG (Veetorp’s Favorite)", + "crosskeys": "Crosskeys", + "quick": "Super Quick", + "nightmare": "Nightmare", + "custom": "Custom" + } + }, + "placement": { + "title": "Item Placement" + }, + "item_placement": { + "title": "Item Placement", + "options": { + "basic": "Basic", + "advanced": "Advanced" + } + }, + "dungeon_items": { + "title": "Dungeon Items", + "options": { + "standard": "Standard", + "mc": "Maps/Compasses", + "mcs": "Maps/Compasses/Small Keys", + "full": "Keysanity" + } + }, + "accessibility": { + "title": "Accessibility", + "options": { + "items": "100% Inventory", + "locations": "100% Locations", + "none": "Beatable" + } + }, + "glitches_required": { + "title": "Glitches Required", + "options": { + "none": "None", + "overworld_glitches": "Overworld Glitches", + "major_glitches": "Major Glitches", + "no_logic": "No Logic" + }, + "glitch_warning": "These settings require knowledge of Major Glitches**" + }, + "goal": { + "title": "Goal", + "options": { + "ganon": "Defeat Ganon", + "fast_ganon": "Fast Ganon", + "dungeons": "All Dungeons", + "pedestal": "Master Sword Pedestal", + "triforce-hunt": "Triforce Pieces" + } + }, + "tower_open": { + "title": "Open Tower", + "options": { + "0": "0 Crystals", + "1": "1 Crystal", + "2": "2 Crystals", + "3": "3 Crystals", + "4": "4 Crystals", + "5": "5 Crystals", + "6": "6 Crystals", + "7": "7 Crystals", + "random": "Random" + } + }, + "ganon_open": { + "title": "Ganon Vulnerable", + "options": { + "0": "0 Crystals", + "1": "1 Crystal", + "2": "2 Crystals", + "3": "3 Crystals", + "4": "4 Crystals", + "5": "5 Crystals", + "6": "6 Crystals", + "7": "7 Crystals", + "random": "Random" + } + }, + "gameplay": { + "title": "Gameplay" + }, + "world_state": { + "title": "World State", + "options": { + "standard": "Standard", + "open": "Open", + "inverted": "Inverted", + "retro": "Retro" + } + }, + "entrance_shuffle": { + "title": "Entrance Shuffle", + "options": { + "none": "None", + "simple": "Simple", + "restricted": "Restricted", + "full": "Full", + "crossed": "Crossed", + "insanity": "Insanity" + } + }, + "boss_shuffle": { + "title": "Boss Shuffle", + "options": { + "none": "None", + "simple": "Simple", + "full": "Full", + "random": "Random" + } + }, + "enemy_shuffle": { + "title": "Enemy Shuffle", + "options": { + "none": "None", + "shuffled": "Shuffled", + "random": "Random" + } + }, + "hints": { + "title": "Hints", + "options": { + "on": "On", + "off": "Off" + } + }, + "weapons": { + "title": "Swords", + "options": { + "randomized": "Randomized", + "assured": "Assured", + "vanilla": "Vanilla", + "swordless": "Swordless" + } + }, + "item_pool": { + "title": "Item Pool", + "options": { + "easy": "Easy", + "normal": "Normal", + "hard": "Hard", + "expert": "Expert", + "crowd_control": "Crowd Control" + }, + "crowd_control_warning": "* This setting is meant to be used with the Crowd Control Twitch extension. find out more: https://crowdcontrol.live/" + }, + "item_functionality": { + "title": "Item Functionality", + "options": { + "easy": "Easy", + "normal": "Normal", + "hard": "Hard", + "expert": "Expert" + } + }, + "enemy_damage": { + "title": "Enemy Damage", + "options": { + "default": "Default", + "shuffled": "Shuffled", + "random": "Random" + } + }, + "enemy_health": { + "title": "Enemy Health", + "options": { + "default": "Default", + "easy": "Easy", + "hard": "Hard", + "expert": "Expert" + } + }, + "generate": { + "race": "Generate ROM", + "race_warning": "Spoilers will never be available for this option.", + "spoiler_race": "Generate ROM (with spoilers)", + "back": "Change Settings", + "regenerate": "Generate Again", + "regenerate_tooltip": "Generate new game with same settings", + "generating": "Generating..." + }, + "details": { + "title": "Game Details", + "save_spoiler": "Save Spoiler", + "save_rom": "Save Rom" + }, + "variation": { + "title": "Variation" + }, + "difficulty": { + "title": "Difficulty", + "options": { + "easy": "Easy", + "normal": "Normal", + "hard": "Hard", + "expert": "Expert", + "insane": "Insane", + "crowdControl": "Crowd Control" + } + } + }, + "region": { + "all": "All Regions", + "Light World": "Light World", + "Hyrule Castle": "Hyrule Castle", + "Eastern Palace": "Eastern Palace", + "Desert Palace": "Desert Palace", + "Death Mountain": "Death Mountain", + "Tower Of Hera": "Tower Of Hera", + "Castle Tower": "Castle Tower", + "Dark World": "Dark World", + "Dark Palace": "Dark Palace", + "Swamp Palace": "Swamp Palace", + "Skull Woods": "Skull Woods", + "Thieves Town": "Thieves Town", + "Ice Palace": "Ice Palace", + "Misery Mire": "Misery Mire", + "Turtle Rock": "Turtle Rock", + "Ganons Tower": "Ganons Tower", + "Special": "Special" + }, + "enemizer": { + "title": "Enemizer", + "enable": "Enable Enemizer", + "disable": "Disable Enemizer", + "enemy_health": { + "title": "Enemy Health", + "options": [ + "Default", + "Easy (1-4 hp)", + "Normal (2-15 hp)", + "Hard (2-30 hp)", + "Brick Wall (4-50 hp)" + ] + }, + "enemy_damage": { + "title": "Enemy Damage", + "options": { + "off": "Default", + "shuffle": "Shuffled", + "chaos": "Chaos" + } + }, + "bosses": { + "title": "Boss Shuffle", + "options": { + "off": "Off", + "basic": "Simple", + "normal": "Full", + "chaos": "Chaos" + } + }, + "palette_shuffle": "Palette Shuffle", + "pot_shuffle": "Pot Shuffle", + "enemy_shuffle": "Enemy Shuffle" + }, + "entrance": { + "title": "Entrance Randomizer", + "switch": { + "item": "Switch to Item Randomizer" + }, + "rom": { + "options": "ROM Options" + }, + "difficulty": { + "title": "Difficulty", + "options": { + "easy": "Easy", + "normal": "Normal", + "hard": "Hard", + "expert": "Expert", + "insane": "Insane" + } + }, + "goal": { + "title": "Goal", + "options": { + "ganon": "Defeat Ganon", + "crystals": "Crystals", + "dungeons": "All Dungeons", + "pedestal": "Master Sword Pedestal", + "triforcehunt": "Triforce Pieces" + } + }, + "logic": { + "title": "Logic", + "options": { + "NoGlitches": "No Glitches" + } + }, + "mode": { + "title": "State", + "options": { + "swordless": "Swordless", + "open": "Open" + } + }, + "shuffle": { + "title": "Shuffle", + "options": { + "simple": "Simple", + "restricted": "Restricted", + "full": "Full", + "crossed": "Crossed", + "insanity": "Insanity" + } + }, + "variation": { + "title": "Variation", + "options": { + "none": "None", + "timed-race": "Timed Race", + "timed-ohko": "Timed OHKO", + "ohko": "OHKO", + "triforce-hunt": "Triforce Piece Hunt", + "key-sanity": "Keysanity", + "retro": "Retro" + } + }, + "generate": { + "race": "Generate Race ROM", + "spoiler_race": "Spoiler Race ROM", + "casual": "Generate ROM" + }, + "details": { + "title": "Game Details", + "save_spoiler": "Save Spoiler", + "save_rom": "Save Rom" + } + }, + "customizer": { + "settings": { + "timers": { + "off": "Off", + "stopwatch": "Stopwatch", + "countdown-ohko": "Countdown OHKO", + "countdown-continue": "Countdown Continue", + "countdown-stop": "Countdown Stop" + }, + "dungeon_count": { + "off": "Off", + "on": "Always On", + "pickup": "On Compass Pickup" + } + }, + "glitches": { + "canBombJump": { + "title": "Bomb Jump", + "description": "One may be required to Bomb jump over gaps." + }, + "canBootsClip": { + "title": "Boots Clip", + "description": "When one has the Boots, they may be required to clip through walls in the in overworld." + }, + "canBunnyRevive": { + "title": "Bunny Revive", + "description": "One may be required to go somewhere as bunny form and abuse death/fairy revive to be Link." + }, + "canBunnySurf": { + "title": "Bunny Surf", + "description": "One may be required to water walk in bunny state." + }, + "canDungeonRevive": { + "title": "Dungeon Revive", + "description": "One may be required to revive as a bunny in a dungeon to collect items as Link." + }, + "canFakeFlipper": { + "title": "Fake Flipper", + "description": "One may be required to use the fake flipper glitch to collect items." + }, + "canMirrorClip": { + "title": "Mirror Clip", + "description": "One may be required to abuse Mirror bouce to go out of bounds." + }, + "canMirrorWrap": { + "title": "Mirror Wrap", + "description": "One may be required to use Mirror to auto scroll to a different location." + }, + "canOneFrameClipOW": { + "title": "One Frame Clip (overworld)", + "description": "You don’t want this. Trust me." + }, + "canOWYBA": { + "title": "YBA (overworld)", + "description": "May be required to use bottles in the overworld to teleport to different locations." + }, + "canSuperBunny": { + "title": "Super Bunny", + "description": "One may be required to activate super bunny to access locations." + }, + "canSuperSpeed": { + "title": "Super Speed", + "description": "One may be required to super speed clip through edges in overworld." + }, + "canWaterFairyRevive": { + "title": "Water Fairy Revive", + "description": "This setup is silly and requires a bunch of items." + }, + "canWaterWalk": { + "title": "Water walk", + "description": "One may be required to use boots to walk on top of water." + }, + "noLogic": { + "title": "Disable all logic checks", + "description": "When this is selected all bets are off, and nothing below matters." + } + } + }, + "rom": { + "loader": { + "title": "Getting Started", + "file_select": "Select ROM File", + "content": "
  1. Select your rom file and load it into the browser (Please use a Zelda no Densetsu: Kamigami no Triforce v1.0 ROM with an .smc or .sfc extension)
  2. Select the Game Options for how you would like your game randomized
  3. Click Generate ROM
  4. Then Save your rom and get to playing
" + }, + "info": { + "spoilerwarning": "WARNING: The generator of this game viewed the spoiler log.", + "logic": "Glitches Required", + "build": "ROM build", + "difficulty": "Difficulty", + "variation": "Variation", + "shuffle": "Shuffle", + "mode": "World State", + "weapons": "Swords", + "goal": "Goal", + "permalink": "Permalink", + "special": "Special", + "notes": "Notes", + "generated": "Created" + }, + "settings": { + "heart_speed": "Heart Speed", + "heart_speeds": { + "off": "Off", + "double": "Double Speed", + "normal": "Normal Speed", + "half": "Half Speed", + "quarter": "Quarter Speed" + }, + "menu_speed": "Menu Speed", + "menu_speeds": { + "instant": "Instant", + "fast": "Fast", + "normal": "Normal", + "slow": "Slow" + }, + "heart_color": "Heart Color", + "heart_colors": { + "blue": "Blue", + "green": "Green", + "red": "Red", + "yellow": "Yellow" + }, + "play_as": "Play As", + "music": "Background Music", + "music_info": "(set to \"No\" for MSU-1 support)", + "quickswap": "Item Quickswap", + "palette_shuffle": "Palette Shuffle", + "race_warning": "Does not work in Race Roms" + } + }, + "sprite": { + "Raven": "Raven", + "Vulture": "Vulture", + "FlyingStalfosHead": "Flying Stalfos Head", + "Empty": "Empty", + "PullSwitchGood": "Pull Switch (Good)", + "PullSwitch1": "Pull Switch (Unused)", + "PullSwitchBad": "Pull Switch (Bad)", + "PullSwitch2": "Pull Switch (Unused)", + "Octorok1": "Octorok (One Way)", + "Moldorm": "Moldorm (Boss)", + "Octorok4": "Octorok (Four Way)", + "Chicken": "Chicken", + "Octorok": "Octorok (?)", + "Buzzblob": "Buzzblob", + "Snapdragon": "Snapdragon", + "Octoballoon": "Octoballoon", + "OctoballoonHatchlings": "Octoballoon Hatchlings", + "Hinox": "Hinox", + "Moblin": "Moblin", + "MiniHelmasaur": "Mini Helmasaur", + "ForkGate": "Gargoyle's Domain Gate", + "Antifairy": "Antifairy", + "Sahasrahla": "Sahasrahla / Aginah", + "BushHoarder": "Bush Hoarder", + "MiniMoldorm": "Mini Moldorm", + "Poe": "Poe", + "Dwarves": "Dwarves", + "WallArrow": "Arrow in wall?", + "Statue": "Statue", + "Weathervane": "Weathervane", + "CrystalSwitch": "Crystal Switch", + "SickKid": "Bug-Catching Kid", + "Sluggula": "Sluggula", + "PushSwitch": "Push Switch", + "Ropa": "Ropa", + "RedBari": "Red Bari", + "BlueBari": "Blue Bari", + "TalkingTree": "Talking Tree", + "HardhatBeetle": "Hardhat Beetle", + "Deadrock": "Deadrock", + "Storytellers": "Storytellers", + "BlindHistorian": "Blind Hideout attendant", + "SweepingLady": "Sweeping Lady", + "Multipurpose": "Multipurpose Sprite", + "Lumberjacks": "Lumberjacks", + "TelepathicStones": "Telepathic stones? (No idea what this actually is, likely unused)", + "FluteBoyNotes": "Flute Boy's Notes", + "RaceNPCs": "Race HP NPCs", + "Person": "Person?", + "FortuneTeller": "Fortune Teller", + "AngryBrothers": "Angry Brothers", + "PullForRupees": "Pull For Rupees Sprite", + "ScaredGirl2": "Scared Girl 2", + "Innkeeper": "Innkeeper", + "0": "Potion =>hop", + "1": "Potion Shop", + "Waterfall": "Waterfall", + "ArrowTarget": "Arrow Target", + "AverageMan": "Average Middle-Aged Man", + "MagicBat": "Half Magic Bat", + "DashItem": "Dash Item", + "VillageKid": "Village Kid", + "Sign": "Signs? Chicken lady also showed up / Scared ladies outside houses.", + "RockHoarder": "Rock Hoarder", + "TutorialSoldier": "Tutorial Soldier", + "LightningLock": "Lightning Lock", + "BlueSwordSoldier": "Blue Sword Soldier / Used by guards to detect player", + "GreenSwordSoldier": "Green Sword Soldier", + "RedSpearSoldier": "Red Spear Soldier", + "AssaultSwordSoldier": "Assault Sword Soldier", + "GreenSpearSoldier": "Green Spear Soldier", + "BlueArcher": "Blue Archer", + "GreenArcher": "Green Archer", + "RedJavelinSolider": "Red Javelin Soldier", + "RedJavelinSolider2": "Red Javelin Soldier 2", + "RedBombSolider": "Red Bomb Soldiers", + "GreenSoldierRecruit": "Green Soldier Recruits", + "Geldman": "Geldman", + "Rabbit": "Rabbit", + "Popo": "Popo", + "Popo2": "Popo 2", + "CannonBall": "Cannon Balls", + "Armos": "Armos", + "KingZora": "Giant Zora", + "ArmosKnights": "Armos Knights (Boss)", + "Lanmolas": "Lanmolas (Boss)", + "FireballZora": "Fireball Zora", + "WalkingZora": "Walking Zora", + "DesertPalaceBarrier": "Desert Palace Barriers", + "Crab": "Crab", + "Bird": "Birds (Haunted Grove)", + "Squirrel": "Squirrel", + "SparkLR": "Spark (Left to Right)", + "SparkRL": "Spark (Right to Left)", + "RollerV1": "Roller (vertical moving)", + "RollerV2": "Roller (vertical moving)", + "Roller": "Roller", + "RollerH": "Roller (horizontal moving)", + "Beamos": "Beamos", + "MasterSword": "Master Sword", + "Devalant": "Devalant (Non-shooter)", + "DevalantShooter": "Devalant (Shooter)", + "ShootingGalleryNPC": "Shooting Gallery Proprietor", + "CannonBallShooterR": "Moving Cannon Ball Shooters (Right)", + "CannonBallShooterL": "Moving Cannon Ball Shooters (Left)", + "CannonBallShooterD": "Moving Cannon Ball Shooters (Down)", + "CannonBallShooterU": "Moving Cannon Ball Shooters (Up)", + "BallNChainTrooper": "Ball N' Chain Trooper", + "CannonSoldier": "Cannon Soldier", + "MirrorPortal": "Mirror Portal", + "Rat": "Rat", + "Rope": "Rope", + "Keese": "Keese", + "HelmasaurFireball": "Helmasaur King Fireball", + "Leever": "Leever", + "PondActivation": "Activator for the ponds (where you throw in items)", + "2": "Link' => Uncle", + "3": "Uncle / Priest", + "RunningMan": "Running Man", + "BottleSalesman": "Bottle Salesman", + "Zelda": "Princess Zelda", + "Antifairy2": "Antifairy (Alternate)", + "VillageElder": "Village Elder", + "Bee": "Bee Swarm", + "Agahnim": "Agahnim", + "AgahnimBall": "Agahnim Energy Ball", + "Hyu": "Hyu", + "BigSpikeTrap": "Big Spike Trap", + "GuruguruBarCW": "Guruguru Bar (Clockwise)", + "GuruguruBarCCW": "Guruguru Bar (Counter Clockwise)", + "Winder": "Winder", + "WaterTektite": "Water Tektite", + "AntifairyCircle": "Antifairy Circle", + "EyegoreGreen": "Green Eyegore", + "EyegoreRed": "Red Eyegore", + "StalfosYellow": "Yellow Stalfos", + "Kodongos": "Kodongos", + "Flames": "Flames", + "Mothula": "Mothula (Boss)", + "MothulaBeam": "Mothula's Beam", + "SpikeTrap": "Spike Trap", + "Gibdo": "Gibdo", + "Arrghus": "Arrghus (Boss)", + "ArrghusSpawn": "Arrghus spawn", + "Terrorpin": "Terrorpin", + "Slime": "Slime", + "Wallmaster": "Wallmaster", + "StalfosKnight": "Stalfos Knight", + "Helmasaur": "Helmasaur King", + "Bumper": "Bumper", + "Swimmers": "Swimmers", + "EyeLaserR": "Eye Laser (Right)", + "EyeLaserL": "Eye Laser (Left)", + "EyeLaserD": "Eye Laser (Down)", + "EyeLaserU": "Eye Laser (Up)", + "Pengator": "Pengator", + "Kyameron": "Kyameron", + "Wizzrobe": "Wizzrobe", + "Tadpoles": "Tadpoles", + "Tadpoles2": "Tadpoles", + "Ostrich": "Ostrich (Haunted Grove)", + "Flute": "Flute", + "Freezor": "Freezor", + "Kholdstare": "Kholdstare (Boss)", + "KholdstareShell": "Kholdstare's Shell", + "FallingIce": "Falling Ice", + "ZazakFireball": "Zazak Fireball", + "ZazakRed": "Red Zazak", + "Stalfos": "Stalfos", + "Zirro": "Bomber Flying Creatures from Darkworld", + "Zirro2": "Bomber Flying Creatures from Darkworld", + "Pikit": "Pikit", + "Maiden": "Maiden", + "Apple": "Apple", + "LostOldMan": "Lost Old Man", + "PipeD": "Down Pipe", + "PipeU": "Up Pipe", + "PipeR": "Right Pipe", + "PipeL": "Left Pipe", + "BeeGood": "Good Bee", + "HylianInscription": "Hylian Inscription", + "PurpleChest": "Thief's chest (not the one that follows you, the one that you grab from the DW smithy house)", + "BombSalesman": "Bomb Salesman", + "Kiki": "Kiki", + "BlindMaiden": "Maiden following you in Blind Dungeon", + "Monologue": "Monologue Testing Sprite", + "FeudingFriends": "Feuding Friends on Death Mountain", + "Whirlpool": "Whirlpool", + "Salesman": "Salesman / chestgame guy / 300 rupee giver guy / Chest game thief", + "Drunk": "Drunk in the inn", + "Vitreous": "Vitreous (Large Eyeball)", + "VitreousSmallEyeball": "Vitreous (Small Eyeball)", + "VitreousLightning": "Vitreous' Lightning", + "Catfish": "Monster in Lake of Ill Omen / Quake Medallion", + "AgahnimTeleporting": "Agahnim teleporting Zelda to dark world", + "Boulders": "Boulders", + "Gibo": "Gibo", + "Thief": "Thief", + "Medusa": "Medusa", + "YomoMedusa": "Yomo Medusa", + "HokkuBokku": "Hokku-Bokku", + "FairyBig": "Big Fairy who heals you", + "Tektite": "Tektite", + "ChainChomp": "Chain Chomp", + "Trinexx": "Trinexx", + "TrinexxHeadFire": "Another part of trinexx", + "TrinexxHeadIce": "Yet another part of trinexx", + "Blind": "Blind The Thief (Boss)", + "Swamola": "Swamola", + "Lynel": "Lynel", + "BunnyBeam": "Bunny Beam", + "FloppingFish": "Flopping Fish", + "Stal": "Stal", + "Landmine": "Landmine", + "DiggingGameNPC": "Digging Game Proprietor", + "Ganon": "Ganon", + "GanonInvisible": "Copy of Ganon, except invincible?", + "Heart": "Heart", + "RupeeGreen": "Green Rupee", + "RupeeBlue": "Blue Rupee", + "RupeeRed": "Red Rupee", + "BombRefill1": "Bomb Refill (1)", + "BombRefill4": "Bomb Refill (4)", + "BombRefill8": "Bomb Refill (8)", + "MagicRefillSmall": "Small Magic Refill", + "MagicRefillFull": "Full Magic Refill", + "ArrowRefill5": "Arrow Refill (5)", + "ArrowRefill10": "Arrow Refill (10)", + "Fairy": "Fairy", + "Key": "Key", + "BigKey": "Big Key", + "Shield": "Shield", + "Mushroom": "Mushroom", + "FakeMasterSword": "Fake Master Sword", + "MagicShopDude": "Magic Shop dude / His items, including the magic powder", + "HeartContainer": "Heart Container", + "HeartPiece": "Heart Piece", + "Bush": "Bushes", + "SomariaPlatform": "Cane Of Somaria Platform", + "Mantle": "Mantle", + "SomariaPlatform1": "Cane of Somaria Platform (Unused)", + "SomariaPlatform2": "Cane of Somaria Platform (Unused)", + "SomariaPlatform3": "Cane of Somaria Platform (Unused)", + "MedallionTablet": "Medallion Tablet" + }, + "error": { + "title": "Error", + "429": "While we apprecate your want to generate a lot of games, Other people would like to as well. Please come back later if you would like to generate more.", + "failed_generation": "Failed Creating Game :(", + "bad_file": "File not recognized", + "quota_exceeded_error": "Your local storage quota has been exceeded." + }, + "item": { + "Random": "Random", + "BottleWithRandom": "Bottle (Random)", + "Nothing": "Nothing", + "UncleSword": "Progressive Sword", + "L1Sword": "Fighters Sword", + "L1SwordAndShield": "Fighters Sword and Shield", + "L2Sword": "Master Sword", + "MasterSword": "Master Sword", + "L3Sword": "Tempered Sword", + "L4Sword": "Golden Sword", + "BlueShield": "Fighters Shield", + "RedShield": "Fire Shield", + "MirrorShield": "Mirror Shield", + "FireRod": "Fire Rod", + "IceRod": "Ice Rod", + "Hammer": "Hammer", + "Hookshot": "Hookshot", + "Bow": "Bow", + "Boomerang": "Blue Boomerang", + "Powder": "Magic Powder", + "Bee": "Bee", + "Bombos": "Bombos", + "Ether": "Ether", + "Quake": "Quake", + "Lamp": "Lamp", + "Shovel": "Shovel", + "OcarinaInactive": "Flute", + "CaneOfSomaria": "Cane Of Somaria", + "Bottle": "Bottle (Empty)", + "PieceOfHeart": "Piece Of Heart", + "CaneOfByrna": "Cane Of Byrna", + "Cape": "Magic Cape", + "MagicMirror": "Magic Mirror", + "PowerGlove": "Power Glove", + "TitansMitt": "Titans Mitt", + "BookOfMudora": "Book Of Mudora", + "Flippers": "Flippers", + "MoonPearl": "Moon Pearl", + "BugCatchingNet": "Bug Catching Net", + "BlueMail": "Blue Mail", + "RedMail": "Red Mail", + "Key": "Key", + "Compass": "Compass", + "HeartContainerNoAnimation": "Heart Container (no animation)", + "Bomb": "Single Bomb", + "ThreeBombs": "Three Bombs", + "Mushroom": "Mushroom", + "RedBoomerang": "Magical Boomerang", + "BottleWithRedPotion": "Bottle (Red Potion)", + "BottleWithGreenPotion": "Bottle (Green Potion)", + "BottleWithBluePotion": "Bottle (Blue Potion)", + "RedPotion": "Red Potion", + "GreenPotion": "Green Potion", + "BluePotion": "Blue Potion", + "TenBombs": "Ten Bombs", + "BigKey": "Big Key", + "Map": "Dungeon Map", + "OneRupee": "One Rupee", + "FiveRupees": "Five Rupees", + "TwentyRupees": "Twenty Rupees", + "PendantOfCourage": "Pendant Of Courage", + "PendantOfWisdom": "Pendant Of Wisdom", + "PendantOfPower": "Pendant Of Power", + "BowAndArrows": "Bow And Arrows", + "BowAndSilverArrows": "Bow And Silver Arrows", + "BottleWithBee": "Bottle (Bee)", + "BottleWithFairy": "Bottle (Fairy)", + "BossHeartContainer": "Heart Container", + "HeartContainer": "Sanctuary Heart Container", + "OneHundredRupees": "One Hundred Rupees", + "FiftyRupees": "Fifty Rupees", + "Heart": "Small Heart", + "Arrow": "Single Arrow", + "ShopArrow": "Arrows", + "TenArrows": "Ten Arrows", + "SmallMagic": "Small Magic", + "ThreeHundredRupees": "Three Hundred Rupees", + "TwentyRupees2": "Twenty Rupees", + "BottleWithGoldBee": "Bottle (Golden Bee)", + "OcarinaActive": "Flute (active)", + "PegasusBoots": "Pegasus Boots", + "BombUpgrade5": "Bomb Upgrade (+5)", + "BombUpgrade10": "Bomb Upgrade (+10)", + "BombUpgrade50": "Bomb Upgrade (+50)", + "ArrowUpgrade5": "Arrow Upgrade (+5)", + "ArrowUpgrade10": "Arrow Upgrade (+10)", + "ArrowUpgrade70": "Arrow Upgrade (+70)", + "HalfMagic": "Half Magic", + "QuarterMagic": "Quarter Magic", + "Programmable1": "Programmable 1", + "Programmable2": "Programmable 2", + "Programmable3": "Programmable 3", + "SilverArrowUpgrade": "Silver Arrows Upgrade", + "Rupoor": "Rupoor", + "RedClock": "Red Clock", + "BlueClock": "Blue Clock", + "GreenClock": "Green Clock", + "ProgressiveSword": "Progressive Sword", + "ProgressiveShield": "Progressive Shield", + "ProgressiveArmor": "Progressive Armor", + "ProgressiveGlove": "Progressive Glove", + "singleRNG": "Unique RNG Item", + "multiRNG": "Non-Unique RNG Item", + "ProgressiveBow": "Progressive Bow", + "Triforce": "Triforce", + "PowerStar": "Power Star", + "TriforcePiece": "Triforce Piece", + "MapLW": "Light World Map", + "MapDW": "Dark World Map", + "MapA2": "Ganons Tower Map", + "MapD7": "Turtle Rock Map", + "MapD4": "Thieves Town Map", + "MapP3": "Tower of Hera Map", + "MapD5": "Ice Palace Map", + "MapD3": "Skull Woods Map", + "MapD6": "Misery Mire Map", + "MapD1": "Palace of Darkness Map", + "MapD2": "Swamp Palace Map", + "MapA1": "Agahnims Tower Map", + "MapP2": "Desert Palace Map", + "MapP1": "Eastern Palace Map", + "MapH1": "Hyrule Castle Map", + "MapH2": "Sewers Map", + "CompassA2": "Ganons Tower Compass", + "CompassD7": "Turtle Rock Compass", + "CompassD4": "Thieves Town Compass", + "CompassP3": "Tower of Hera Compass", + "CompassD5": "Ice Palace Compass", + "CompassD3": "Skull Woods Compass", + "CompassD6": "Misery Mire Compass", + "CompassD1": "Palace of Darkness Compass", + "CompassD2": "Swamp Palace Compass", + "CompassA1": "Agahnims Tower Compass", + "CompassP2": "Desert Palace Compass", + "CompassP1": "Eastern Palace Compass", + "CompassH1": "Hyrule Castle Compass", + "CompassH2": "Sewers Compass", + "BigKeyA2": "Ganons Tower Big Key", + "BigKeyD7": "Turtle Rock Big Key", + "BigKeyD4": "Thieves Town Big Key", + "BigKeyP3": "Tower of Hera Big Key", + "BigKeyD5": "Ice Palace Big Key", + "BigKeyD3": "Skull Woods Big Key", + "BigKeyD6": "Misery Mire Big Key", + "BigKeyD1": "Palace of Darkness Big Key", + "BigKeyD2": "Swamp Palace Big Key", + "BigKeyA1": "Agahnims Tower Big Key", + "BigKeyP2": "Desert Palace Big Key", + "BigKeyP1": "Eastern Palace Big Key", + "BigKeyH1": "Hyrule Castle Big Key", + "BigKeyH2": "Sewers Big Key", + "KeyH2": "Sewers Key", + "KeyH1": "Hyrule Castle Key", + "KeyP1": "Eastern Palace Key", + "KeyP2": "Desert Palace Key", + "KeyA1": "Agahnims Tower Key", + "KeyD2": "Swamp Palace Key", + "KeyD1": "Palace of Darkness Key", + "KeyD6": "Misery Mire Key", + "KeyD3": "Skull Woods Key", + "KeyD5": "Ice Palace Key", + "KeyP3": "Tower of Hera Key", + "KeyD4": "Thieves Town Key", + "KeyD7": "Turtle Rock Key", + "KeyA2": "Ganons Tower Key", + "KeyGK": "Generic Key", + "ShopKey": "Key", + "Crystal1": "Crystal 1", + "Crystal2": "Crystal 2", + "Crystal3": "Crystal 3", + "Crystal4": "Crystal 4", + "Crystal5": "Crystal 5", + "Crystal6": "Crystal 6", + "Crystal7": "Crystal 7", + "RescueZelda": "Rescue Zelda", + "DefeatAgahnim": "Defeat Agahnim", + "BigRedBomb": "Big Red Bomb", + "DefeatAgahnim2": "Defeat Agahnim 2", + "DefeatGanon": "Defeat Ganon", + "ChocoboEgg": "Chocobo Egg", + "NoSlipBoots": "Ice Cleats", + "Reindeer1": "Dasher", + "Reindeer2": "Dancer", + "Reindeer3": "Prancer", + "Reindeer4": "Vixen", + "Reindeer5": "Comet", + "Reindeer6": "Cupid", + "Reindeer7": "Donner", + "Reindeer8": "Blitzen", + "Coal1": "Coal", + "Coal2": "Coal", + "Armos Knights": "Armos Knights", + "Lanmolas": "Lanmolas", + "Moldorm": "Moldorm", + "Helmasaur King": "Helmasaur King", + "Arrghus": "Arrghus", + "Mothula": "Mothula", + "Blind": "Blind", + "Kholdstare": "Kholdstare", + "Vitreous": "Vitreous", + "Trinexx": "Trinexx", + "Agahnim": "Agahnim", + "Agahnim 2": "Agahnim 2", + "Ganon": "Ganon", + "Test": "Testing Item" + } + }, + "es": { + "randomizer": { + "title": "Randomizer", + "preset": { + "title": "Select Preset", + "customize": "Customize", + "options": { + "default": "Default", + "beginner": "Beginner", + "veetorp": "OWG (Veetorp’s Favorite)", + "crosskeys": "Crosskeys", + "quick": "Super Quick", + "nightmare": "Nightmare", + "custom": "Custom" + } + }, + "placement": { + "title": "Item Placement" + }, + "item_placement": { + "title": "Item Placement", + "options": { + "basic": "Basic", + "advanced": "Advanced" + } + }, + "dungeon_items": { + "title": "Dungeon Items", + "options": { + "standard": "Standard", + "mc": "Maps/Compasses", + "mcs": "Maps/Compasses/Small Keys", + "full": "Keysanity" + } + }, + "accessibility": { + "title": "Accessibility", + "options": { + "items": "100% Inventory", + "locations": "100% Locations", + "none": "Not Guaranteed" + } + }, + "glitches_required": { + "title": "Glitches Required", + "options": { + "none": "None", + "overworld_glitches": "Glitches de la Superfície", + "major_glitches": "Glitches Mayore", + "no_logic": "No Logic" + }, + "glitch_warning": "Esta Lógica require conocimiento de Glithes Mayores**" + }, + "goal": { + "title": "Objetivo", + "options": { + "ganon": "Derrotar a Ganon", + "fast_ganon": "Fast Ganon", + "dungeons": "Todas las mazmorras", + "pedestal": "Pedestal de la Espada Maestra", + "triforce-hunt": "Piezas de la Trifuerza" + } + }, + "tower_open": { + "title": "Open Tower", + "options": { + "0": "0 Crystals", + "1": "1 Crystal", + "2": "2 Crystals", + "3": "3 Crystals", + "4": "4 Crystals", + "5": "5 Crystals", + "6": "6 Crystals", + "7": "7 Crystals", + "random": "Random" + } + }, + "ganon_open": { + "title": "Ganon Vulnerable", + "options": { + "0": "0 Crystals", + "1": "1 Crystal", + "2": "2 Crystals", + "3": "3 Crystals", + "4": "4 Crystals", + "5": "5 Crystals", + "6": "6 Crystals", + "7": "7 Crystals", + "random": "Random" + } + }, + "gameplay": { + "title": "Gameplay" + }, + "world_state": { + "title": "World State", + "options": { + "standard": "Estándar", + "open": "Abierto", + "inverted": "Inverso", + "retro": "Retro" + } + }, + "entrance_shuffle": { + "title": "Entrance Shuffle", + "options": { + "none": "None", + "simple": "Simple", + "restricted": "Restringido", + "full": "Completo", + "crossed": "Cruzado", + "insanity": "Locura" + } + }, + "boss_shuffle": { + "title": "Boss Shuffle", + "options": { + "none": "None", + "simple": "Simple", + "full": "Full", + "random": "Random" + } + }, + "enemy_shuffle": { + "title": "Enemy Shuffle", + "options": { + "none": "None", + "shuffled": "Shuffled", + "random": "Random" + } + }, + "hints": { + "title": "Hints", + "options": { + "on": "On", + "off": "Off" + } + }, + "weapons": { + "title": "Espadas", + "options": { + "randomized": "Randomizadas", + "assured": "Assured", + "vanilla": "Vanilla", + "swordless": "Sin Espadas" + } + }, + "item_pool": { + "title": "Item Pool", + "options": { + "easy": "Fácil", + "normal": "Normal", + "hard": "Difícil", + "expert": "Experto", + "crowd_control": "Crowd Control" + }, + "crowd_control_warning": "* This setting is meant to be used with the Crowd Control Twitch extension. find out more: https://crowdcontrol.live/" + }, + "item_functionality": { + "title": "Item Functionality", + "options": { + "easy": "Fácil", + "normal": "Normal", + "hard": "Difícil", + "expert": "Experto" + } + }, + "enemy_damage": { + "title": "Enemy Damage", + "options": { + "default": "Default", + "shuffled": "Shuffled", + "random": "Random" + } + }, + "enemy_health": { + "title": "Enemy Health", + "options": { + "default": "Default", + "easy": "Fácil", + "hard": "Difícil", + "expert": "Experto" + } + }, + "generate": { + "race": "Generar ROM para carreras", + "race_warning": "sin spoilers", + "spoiler_race": "Generar ROM para carreras (con spoilers)", + "back": "Change Settings", + "regenerate": "Generate Again", + "regenerate_tooltip": "Generate new game with same settings", + "generating": "Generating..." + }, + "details": { + "title": "Detalles del juego", + "save_spoiler": "Guardar spoiler", + "save_rom": "Guardar ROM" + }, + "variation": { + "title": "Variación" + }, + "difficulty": { + "title": "Dificultad", + "options": { + "easy": "Fácil", + "normal": "Normal", + "hard": "Difícil", + "expert": "Experto", + "insane": "Locura", + "crowdControl": "Crowd Control" + } + } + }, + "enemizer": { + "title": "Enemizer", + "enable": "Activar Enemizer", + "disable": "Desactivar Enemizer", + "enemy_health": { + "title": "Vida de enemigos", + "options": [ + "Normal", + "Fácil (1-4 hp)", + "Medio (2-15 hp)", + "Difícil (2-30 hp)", + "Locura (4-50 hp)" + ] + }, + "enemy_damage": { + "title": "Daño de enemigos", + "options": { + "off": "Normal", + "shuffle": "Aleatorio", + "chaos": "Caos" + } + }, + "bosses": { + "title": "Jefes", + "options": { + "off": "Normal", + "basic": "Básico", + "normal": "Normal", + "chaos": "Caos" + } + }, + "palette_shuffle": "Paleta aleatorias", + "pot_shuffle": "Vasijas aleatorias", + "enemy_shuffle": "Enemigos aleatorios" + }, + "entrance": { + "title": "Randomizer de Entradas", + "switch": { + "item": "Cambiar a randomizer de objetos" + }, + "rom": { + "options": "Opciones de ROM" + }, + "difficulty": { + "title": "Dificultad", + "options": { + "easy": "Fácil", + "normal": "Normal", + "hard": "Difícil", + "expert": "Experto", + "insane": "Locura" + } + }, + "goal": { + "title": "Objetivo", + "options": { + "ganon": "Derrotar a Ganon", + "crystals": "Cristales", + "dungeons": "Todas las mazmorras", + "pedestal": "Pedestal de la Espada Maestra", + "triforcehunt": "Piezas de la Trifuerza" + } + }, + "logic": { + "title": "Lógica", + "options": { + "NoGlitches": "Sin Glitches" + } + }, + "mode": { + "title": "Tipo", + "options": { + "swordless": "Sin espadas", + "open": "Abierto" + } + }, + "shuffle": { + "title": "Orden", + "options": { + "simple": "Simple", + "restricted": "Restringido", + "full": "Completo", + "crossed": "Cruzado", + "insanity": "Locura" + } + }, + "variation": { + "title": "Variación", + "options": { + "none": "Ninguna", + "timed-race": "Carrera cronometrada", + "timed-ohko": "Muerte Súbita cronometrada", + "ohko": "Muerte Súbita", + "triforce-hunt": "Caza de la Trifuerza", + "key-sanity": "Keysanity", + "retro": "Retro" + } + }, + "generate": { + "race": "Generar ROM para carreras", + "spoiler_race": "Generar ROM para carreras", + "casual": "Generar ROM" + }, + "details": { + "title": "Detalles del juego", + "save_spoiler": "Guardar spoiler", + "save_rom": "Guardar ROM" + } + }, + "customizer": { + "settings": { + "timers": { + "off": "Off", + "stopwatch": "Stopwatch", + "countdown-ohko": "Countdown OHKO", + "countdown-continue": "Countdown Continue", + "countdown-stop": "Countdown Stop" + }, + "dungeon_count": { + "off": "Off", + "on": "Always On", + "pickup": "On Compass Pickup" + } + }, + "glitches": { + "canBombJump": { + "title": "Bomb Jump", + "description": "One may be required to Bomb jump over gaps." + }, + "canBootsClip": { + "title": "Boots Clip", + "description": "When one has the Boots, they may be required to clip through walls in the in overworld." + }, + "canBunnyRevive": { + "title": "Bunny Revive", + "description": "One may be required to go somewhere as bunny form and abuse death/fairy revive to be Link." + }, + "canBunnySurf": { + "title": "Bunny Surf", + "description": "One may be required to water walk in bunny state." + }, + "canDungeonRevive": { + "title": "Dungeon Revive", + "description": "One may be required to revive as a bunny in a dungeon to collect items as Link." + }, + "canFakeFlipper": { + "title": "Fake Flipper", + "description": "One may be required to use the fake flipper glitch to collect items." + }, + "canMirrorClip": { + "title": "Mirror Clip", + "description": "One may be required to abuse Mirror bouce to go out of bounds." + }, + "canMirrorWrap": { + "title": "Mirror Wrap", + "description": "One may be required to use Mirror to auto scroll to a different location." + }, + "canOneFrameClipOW": { + "title": "One Frame Clip (overworld)", + "description": "You don’t want this. Trust me." + }, + "canOWYBA": { + "title": "YBA (overworld)", + "description": "May be required to use bottles in the overworld to teleport to different locations." + }, + "canSuperBunny": { + "title": "Super Bunny", + "description": "One may be required to activate super bunny to access locations." + }, + "canSuperSpeed": { + "title": "Super Speed", + "description": "One may be required to super speed clip through edges in overworld." + }, + "canWaterFairyRevive": { + "title": "Water Fairy Revive", + "description": "This setup is silly and requires a bunch of items." + }, + "canWaterWalk": { + "title": "Water walk", + "description": "One may be required to use boots to walk on top of water." + }, + "noLogic": { + "title": "Disable all logic checks", + "description": "When this is selected all bets are off, and nothing below matters." + } + } + }, + "rom": { + "loader": { + "title": "Empezar a Jugar", + "file_select": "Selecciona archivo ROM", + "content": "
  1. Selecciona tu archivo ROM y cárgalo en tu navegador (Por favor, usa una ROM Zelda no Densetsu: Kamigami no Triforce v1.0 con extensión .smc o .sfc)
  2. Selecciona las Opciones de Juego para cómo quieres que tu juego sea randomizado
  3. Haz click en Generar ROM para carreras
  4. Guarda tu ROM y ponte a jugar
" + }, + "info": { + "spoilerwarning": "ADVERTENCIA: El generador de este juego a visto el registro de spoiler.", + "logic": "Glitches Required", + "build": "Build de la ROM", + "difficulty": "Dificultad", + "variation": "Variación", + "shuffle": "Orden", + "mode": "World State", + "weapons": "Espadas", + "goal": "Objetivo", + "permalink": "Enlace permanente", + "special": "Especial", + "notes": "Notas", + "generated": "Creada" + }, + "settings": { + "heart_speed": "Velocidad de Corazones", + "heart_speeds": { + "off": "Desactivado", + "double": "Velocidad Doble", + "normal": "Velocidad Normal", + "half": "Media Velocidad", + "quarter": "Cuarto de Velocidad" + }, + "menu_speed": "Velocidad de Menú", + "menu_speeds": { + "instant": "Instantáneo", + "fast": "Rápido", + "normal": "Normal", + "slow": "Lento" + }, + "heart_color": "Color de Corazones", + "heart_colors": { + "blue": "Azul", + "green": "Verde", + "red": "Rojo", + "yellow": "Amarillo" + }, + "play_as": "Jugar Como", + "music": "Música de fondo", + "music_info": "(poner en \"No\" para soporte con MSU-1)", + "quickswap": "Cambio Rápido de Objetos", + "palette_shuffle": "Palette Shuffle", + "race_warning": "No funciona en ROMs para carreras" + } + }, + "error": { + "title": "Error", + "429": "Aunque apreciamos que quieras generar un montón de partidas, otras personas quieren hacerlo también. Por favor, vuelve más tarde si quieres generar más.", + "failed_generation": "Error creando la semilla :(", + "bad_file": "Archivo no reconocido", + "quota_exceeded_error": "Your local storage quota has been exceeded." + }, + "item": { + "Random": "Random", + "BottleWithRandom": "Bottle (Random)", + "Nothing": "Nada", + "UncleSword": "Espada Progresiva", + "L1Sword": "Espada Normal", + "L1SwordAndShield": "Espada y Escudo", + "L2Sword": "Espada Maestra", + "MasterSword": "Espada Maestra", + "L3Sword": "Espada Templada", + "L4Sword": "Espada Dorada", + "BlueShield": "Escudo Pequeño", + "RedShield": "Escudo Rojo", + "MirrorShield": "Escudo Espejo", + "FireRod": "Cetro de Fuego", + "IceRod": "Cetro de Hielo", + "Hammer": "Martillo", + "Hookshot": "Gancho", + "Bow": "Arco", + "Boomerang": "Bumerán Azul", + "Powder": "Polvos Mágicos", + "Bee": "Abeja", + "Bombos": "Bombos", + "Ether": "Ether", + "Quake": "Quake", + "Lamp": "Lámpara", + "Shovel": "Pala", + "OcarinaInactive": "Flauta", + "CaneOfSomaria": "Vara de Somaria", + "Bottle": "Botella (vacía)", + "PieceOfHeart": "Pieza de Corazón", + "CaneOfByrna": "Vara de Byrna", + "Cape": "Capa Mágica", + "MagicMirror": "Espejo Mágico", + "PowerGlove": "Guante de Poder", + "TitansMitt": "Guante Titán", + "BookOfMudora": "Libro de Mudora", + "Flippers": "Aletas", + "MoonPearl": "Perla Lunar", + "BugCatchingNet": "Cazamariposas", + "BlueMail": "Malla Azul", + "RedMail": "Malla Roja", + "Key": "Llave", + "Compass": "Brújula", + "HeartContainerNoAnimation": "Contenedor de Corazón (sin animación)", + "Bomb": "Bomba", + "ThreeBombs": "Tres Bombas", + "Mushroom": "Seta", + "RedBoomerang": "Bumerán Mágico", + "BottleWithRedPotion": "Botella (Poción Roja)", + "BottleWithGreenPotion": "Botella (Poción Verde)", + "BottleWithBluePotion": "Botella (Poción Azul)", + "RedPotion": "Poción Roja", + "GreenPotion": "Poción Verde", + "BluePotion": "Poción Azul", + "TenBombs": "Diez Bombas", + "BigKey": "Llave Grande", + "Map": "Mapa de la Mazmorra", + "OneRupee": "Una Rupia", + "FiveRupees": "Cinco Rupias", + "TwentyRupees": "Veinte Rupias", + "PendantOfCourage": "Colgante del Valor", + "PendantOfWisdom": "Colgante de la Sabiduría", + "PendantOfPower": "Colgante del Poder", + "BowAndArrows": "Arco y Flechas", + "BowAndSilverArrows": "Arco y Flechas de Plata", + "BottleWithBee": "Botella (Abeja)", + "BottleWithFairy": "Botella (Hada)", + "BossHeartContainer": "Contenedor de Corazón", + "HeartContainer": "Contenedor de Corazón del Santuario", + "OneHundredRupees": "Cien Rupias", + "FiftyRupees": "Cincuenta Rupias", + "Heart": "Corazón Pequeño", + "Arrow": "Una Flecha", + "ShopArrow": "Arrows", + "TenArrows": "Dies Flechas", + "SmallMagic": "Magia Pequeña", + "ThreeHundredRupees": "Trescientas Rupias", + "TwentyRupees2": "Veinte Rupias", + "BottleWithGoldBee": "Botella (Abeja Dorada)", + "OcarinaActive": "Flauta (activada)", + "PegasusBoots": "Botas de Pegaso", + "BombUpgrade5": "Mejora de Bombas (+5)", + "BombUpgrade10": "Mejora de Bombas (+10)", + "BombUpgrade50": "Mejora de Bombas (+50)", + "ArrowUpgrade5": "Mejora de Flechas (+5)", + "ArrowUpgrade10": "Mejora de Flechas (+10)", + "ArrowUpgrade70": "Mejora de Flechas (+70)", + "HalfMagic": "Media Magia", + "QuarterMagic": "Cuarto de Magia", + "Programmable1": "Programable 1", + "Programmable2": "Programable 2", + "Programmable3": "Programable 3", + "SilverArrowUpgrade": "Mejora de Flechas de Plata", + "Rupoor": "Rupobre", + "RedClock": "Reloj Rojo", + "BlueClock": "Reloj Azul", + "GreenClock": "Reloj Verde", + "ProgressiveSword": "Espada Progresiva", + "ProgressiveShield": "Escudo Progresivo", + "ProgressiveArmor": "Armadura Progresiva", + "ProgressiveGlove": "Guante Progresivo", + "singleRNG": "Objeto RNG Único", + "multiRNG": "Objeto RNG No Único", + "ProgressiveBow": "Arco Progresivo", + "Triforce": "Trifuerza", + "PowerStar": "Estrella de Poder", + "TriforcePiece": "Pieza de la Trifuerza", + "MapLW": "Mapa del Mundo de la Luz", + "MapDW": "Mapa del Mundo Oscuro", + "MapA2": "Mapa de la Torre de Ganon", + "MapD7": "Mapa de Roca Tortuga", + "MapD4": "Mapa de Cueva de los Ladrones", + "MapP3": "Mapa de la Torre de Hera", + "MapD5": "Mapa del Palacio de Hielo", + "MapD3": "Mapa de Bosque de Osamentas", + "MapD6": "Mapa de Gruta de las Marismas", + "MapD1": "Mapa del Palacio de la Oscuridad", + "MapD2": "Mapa del Palacio del Pantano", + "MapA1": "Mapa de la Torre de Agahnim", + "MapP2": "Mapa del Palacio del Desierto", + "MapP1": "Mapa del Palacio del Este", + "MapH1": "Mapa del Castillo de Hyrule", + "MapH2": "Mapa de las Cloacas", + "CompassA2": "Brújula de la Torre de Ganon", + "CompassD7": "Brújula de Roca Tortuga", + "CompassD4": "Brújula de Cueva de los Ladrones", + "CompassP3": "Brújula de la Torre de Hera", + "CompassD5": "Brújula del Palacio de Hielo", + "CompassD3": "Brújula de Bosque de Osamentas", + "CompassD6": "Brújula de Gruta de las Marismas", + "CompassD1": "Brújula del Palacio de la Oscuridad", + "CompassD2": "Brújula del Palacio del Pantano", + "CompassA1": "Brújula de la Torre de Agahnim", + "CompassP2": "Brújula del Palacio del Desierto", + "CompassP1": "Brújula del Palacio del Este", + "CompassH1": "Brújula del Castillo de Hyrule", + "CompassH2": "Brújula de las Cloacas", + "BigKeyA2": "Llave Grande de la Torre de Ganon", + "BigKeyD7": "Llave Grande de Roca Tortuga", + "BigKeyD4": "Llave Grande de Cueva de los Ladrones", + "BigKeyP3": "Llave Grande de la Torre de Hera", + "BigKeyD5": "Llave Grande del Palacio de Hielo", + "BigKeyD3": "Llave Grande de Bosque de Osamentas", + "BigKeyD6": "Llave Grande de Gruta de las Marismas", + "BigKeyD1": "Llave Grande del Palacio de la Oscuridad", + "BigKeyD2": "Llave Grande del Palacio del Pantano", + "BigKeyA1": "Llave Grande de la Torre de Agahnim", + "BigKeyP2": "Llave Grande del Palacio del Desierto", + "BigKeyP1": "Llave Grande del Palacio del Este", + "BigKeyH1": "Llave Grande del Castillo de Hyrule", + "BigKeyH2": "Llave Grande de las Cloacas", + "KeyH2": "Llave de las Cloacas", + "KeyH1": "Llave del Castillo de Hyrule", + "KeyP1": "Llave del Palacio del Este", + "KeyP2": "Llave del Palacio del Desierto", + "KeyA1": "Llave de la Torre de Agahnim", + "KeyD2": "Llave del Palacio del Pantano", + "KeyD1": "Llave del Palacio de la Oscuridad", + "KeyD6": "Llave de Gruta de las Marismas", + "KeyD3": "Llave de Bosque de Osamentas", + "KeyD5": "Llave del Palacio de Hielo", + "KeyP3": "Llave de la Torre de Hera", + "KeyD4": "Llave de Cueva de los Ladrones", + "KeyD7": "Llave de Roca Tortuga", + "KeyA2": "Llave de la Torre de Ganon", + "KeyGK": "Llave Genérica", + "ShopKey": "Key", + "Crystal1": "Cristal 1", + "Crystal2": "Cristal 2", + "Crystal3": "Cristal 3", + "Crystal4": "Cristal 4", + "Crystal5": "Cristal 5", + "Crystal6": "Cristal 6", + "Crystal7": "Cristal 7", + "RescueZelda": "Rescata a Zelda", + "DefeatAgahnim": "Derrota a Agahnim", + "BigRedBomb": "Big Red Bomb", + "DefeatAgahnim2": "Derrota a Agahnim 2", + "DefeatGanon": "Derrota a Ganon", + "ChocoboEgg": "Chocobo Egg", + "NoSlipBoots": "Ice Cleats", + "Reindeer1": "Dasher", + "Reindeer2": "Dancer", + "Reindeer3": "Prancer", + "Reindeer4": "Vixen", + "Reindeer5": "Comet", + "Reindeer6": "Cupid", + "Reindeer7": "Donner", + "Reindeer8": "Blitzen", + "Coal1": "Coal", + "Coal2": "Coal", + "Armos Knights": "Armos Knights", + "Lanmolas": "Lanmolas", + "Moldorm": "Moldorm", + "Helmasaur King": "Helmasaur King", + "Arrghus": "Arrghus", + "Mothula": "Mothula", + "Blind": "Blind", + "Kholdstare": "Kholdstare", + "Vitreous": "Vitreous", + "Trinexx": "Trinexx", + "Agahnim": "Agahnim", + "Agahnim 2": "Agahnim 2", + "Ganon": "Ganon" + } + }, + "fr": { + "randomizer": { + "title": "Randomizer", + "preset": { + "title": "Select Preset", + "customize": "Customize", + "options": { + "default": "Default", + "beginner": "Beginner", + "veetorp": "OWG (Veetorp’s Favorite)", + "crosskeys": "Crosskeys", + "quick": "Super Quick", + "nightmare": "Nightmare", + "custom": "Custom" + } + }, + "placement": { + "title": "Item Placement" + }, + "item_placement": { + "title": "Item Placement", + "options": { + "basic": "Basic", + "advanced": "Advanced" + } + }, + "dungeon_items": { + "title": "Dungeon Items", + "options": { + "standard": "Standard", + "mc": "Maps/Compasses", + "mcs": "Maps/Compasses/Small Keys", + "full": "Keysanity" + } + }, + "accessibility": { + "title": "Accessibility", + "options": { + "items": "100% Inventory", + "locations": "100% Locations", + "none": "Not Guaranteed" + } + }, + "glitches_required": { + "title": "Glitches Required", + "options": { + "none": "None", + "overworld_glitches": "Glitches Monde Extérieur", + "major_glitches": "Glitches Majeurs", + "no_logic": "No Logic" + }, + "glitch_warning": "Cette logique nécessite la connaissance des glitches majeurs**" + }, + "goal": { + "title": "Objectif", + "options": { + "ganon": "Vaincre Ganon", + "fast_ganon": "Fast Ganon", + "dungeons": "Tous les Donjons", + "pedestal": "Piédestal de la Master Sword", + "triforce-hunt": "Morceaux de Triforce " + } + }, + "tower_open": { + "title": "Open Tower", + "options": { + "0": "0 Crystals", + "1": "1 Crystal", + "2": "2 Crystals", + "3": "3 Crystals", + "4": "4 Crystals", + "5": "5 Crystals", + "6": "6 Crystals", + "7": "7 Crystals", + "random": "Random" + } + }, + "ganon_open": { + "title": "Ganon Vulnerable", + "options": { + "0": "0 Crystals", + "1": "1 Crystal", + "2": "2 Crystals", + "3": "3 Crystals", + "4": "4 Crystals", + "5": "5 Crystals", + "6": "6 Crystals", + "7": "7 Crystals", + "random": "Random" + } + }, + "gameplay": { + "title": "Gameplay" + }, + "world_state": { + "title": "World State", + "options": { + "standard": "Standard", + "open": "Ouvert", + "inverted": "Inversé", + "retro": "Retro" + } + }, + "entrance_shuffle": { + "title": "Entrance Shuffle", + "options": { + "none": "None", + "simple": "Simple", + "restricted": "Restreint", + "full": "Complet", + "crossed": "Croisé", + "insanity": "Insensé" + } + }, + "boss_shuffle": { + "title": "Boss Shuffle", + "options": { + "none": "None", + "simple": "Simple", + "full": "Full", + "random": "Random" + } + }, + "enemy_shuffle": { + "title": "Enemy Shuffle", + "options": { + "none": "None", + "shuffled": "Shuffled", + "random": "Random" + } + }, + "hints": { + "title": "Hints", + "options": { + "on": "On", + "off": "Off" + } + }, + "weapons": { + "title": "Épées", + "options": { + "randomized": "Randomisées", + "assured": "Assurés", + "vanilla": "Vanilla", + "swordless": "Sans Épée" + } + }, + "item_pool": { + "title": "Item Pool", + "options": { + "easy": "Easy", + "normal": "Normal", + "hard": "Difficile", + "expert": "Expert", + "crowd_control": "Crowd Control" + }, + "crowd_control_warning": "* This setting is meant to be used with the Crowd Control Twitch extension. find out more: https://crowdcontrol.live/" + }, + "item_functionality": { + "title": "Item Functionality", + "options": { + "easy": "Easy", + "normal": "Normal", + "hard": "Difficile", + "expert": "Expert" + } + }, + "enemy_damage": { + "title": "Enemy Damage", + "options": { + "default": "Default", + "shuffled": "Shuffled", + "random": "Random" + } + }, + "enemy_health": { + "title": "Enemy Health", + "options": { + "default": "Default", + "easy": "Easy", + "hard": "Difficile", + "expert": "Expert" + } + }, + "generate": { + "race": "Générer une ROM de Course", + "race_warning": "Les spoilers ne seront jamais disponibles pour cette option.", + "spoiler_race": "Spoiler de la ROM de Course", + "back": "Change Settings", + "regenerate": "Generate Again", + "regenerate_tooltip": "Generate new game with same settings", + "generating": "Generating..." + }, + "details": { + "title": "Détails du jeu", + "save_spoiler": "Enregistrer le spoiler", + "save_rom": "Sauvegarder la ROM" + }, + "variation": { + "title": "Variation" + }, + "difficulty": { + "title": "Difficulté", + "options": { + "easy": "Easy", + "normal": "Normal", + "hard": "Difficile", + "expert": "Expert", + "insane": "Insensé", + "crowdControl": "Crowd Control" + } + } + }, + "enemizer": { + "title": "Enemizer", + "enable": "Activer l’Ennemiseur", + "disable": "Désactiver l’Ennemiseur", + "enemy_health": { + "title": "Santé Ennemis", + "options": [ + "Ordinaire", + "Facile (1-4 hp)", + "Moyen (2-15 hp)", + "Difficile (2-30 hp)", + "Insensé (4-50 hp)" + ] + }, + "enemy_damage": { + "title": "Dégâts des Ennemis", + "options": { + "off": "Ordinaire", + "shuffle": "Mélangé", + "chaos": "Chaos" + } + }, + "bosses": { + "title": "Bosses", + "options": { + "off": "Ordinaire", + "basic": "De base", + "normal": "Commun", + "chaos": "Chaos" + } + }, + "palette_shuffle": "Mélange les Palettes", + "pot_shuffle": "Mélange les Pots", + "enemy_shuffle": "Mélanger les Ennemis" + }, + "entrance": { + "title": "Randomizer de portes", + "switch": { + "item": "Passer au Randomizer d’objets" + }, + "rom": { + "options": "Options de ROM" + }, + "difficulty": { + "title": "Difficulté", + "options": { + "easy": "Facile", + "normal": "Normal", + "hard": "Difficile", + "expert": "Expert", + "insane": "Insensé" + } + }, + "goal": { + "title": "Objectif", + "options": { + "ganon": "Vaincre Ganon", + "crystals": "Cristaux", + "dungeons": "Tous les Donjons", + "pedestal": "Piédestal de la Master Sword", + "triforcehunt": "Pièces de Triforce" + } + }, + "logic": { + "title": "Logique", + "options": { + "NoGlitches": "Sans Glitches" + } + }, + "mode": { + "title": "Réglage", + "options": { + "swordless": "Sans Épée", + "open": "Ouvert" + } + }, + "shuffle": { + "title": "Mélanger", + "options": { + "simple": "Simple", + "restricted": "Restreint", + "full": "Complet", + "crossed": "Croisé", + "insanity": "Insensé" + } + }, + "variation": { + "title": "Variation", + "options": { + "none": "Aucun", + "timed-race": "Chronométrée", + "timed-ohko": "Décompte Final", + "ohko": "Zéro Coeurs", + "triforce-hunt": "Chasse aux morceaux de Triforce", + "key-sanity": "Clé-sordre", + "retro": "Rétro" + } + }, + "generate": { + "race": "Générer une ROM de course", + "spoiler_race": "Spoiler de la ROM de Course", + "casual": "Générer une ROM" + }, + "details": { + "title": "Détails du jeu", + "save_spoiler": "Enregistrer le spoiler", + "save_rom": "Sauvegarder la ROM" + } + }, + "customizer": { + "settings": { + "timers": { + "off": "Off", + "stopwatch": "Stopwatch", + "countdown-ohko": "Countdown OHKO", + "countdown-continue": "Countdown Continue", + "countdown-stop": "Countdown Stop" + }, + "dungeon_count": { + "off": "Off", + "on": "Always On", + "pickup": "On Compass Pickup" + } + }, + "glitches": { + "canBombJump": { + "title": "Bomb Jump", + "description": "One may be required to Bomb jump over gaps." + }, + "canBootsClip": { + "title": "Boots Clip", + "description": "When one has the Boots, they may be required to clip through walls in the in overworld." + }, + "canBunnyRevive": { + "title": "Bunny Revive", + "description": "One may be required to go somewhere as bunny form and abuse death/fairy revive to be Link." + }, + "canBunnySurf": { + "title": "Bunny Surf", + "description": "One may be required to water walk in bunny state." + }, + "canDungeonRevive": { + "title": "Dungeon Revive", + "description": "One may be required to revive as a bunny in a dungeon to collect items as Link." + }, + "canFakeFlipper": { + "title": "Fake Flipper", + "description": "One may be required to use the fake flipper glitch to collect items." + }, + "canMirrorClip": { + "title": "Mirror Clip", + "description": "One may be required to abuse Mirror bouce to go out of bounds." + }, + "canMirrorWrap": { + "title": "Mirror Wrap", + "description": "One may be required to use Mirror to auto scroll to a different location." + }, + "canOneFrameClipOW": { + "title": "One Frame Clip (overworld)", + "description": "You don’t want this. Trust me." + }, + "canOWYBA": { + "title": "YBA (overworld)", + "description": "May be required to use bottles in the overworld to teleport to different locations." + }, + "canSuperBunny": { + "title": "Super Bunny", + "description": "One may be required to activate super bunny to access locations." + }, + "canSuperSpeed": { + "title": "Super Speed", + "description": "One may be required to super speed clip through edges in overworld." + }, + "canWaterFairyRevive": { + "title": "Water Fairy Revive", + "description": "This setup is silly and requires a bunch of items." + }, + "canWaterWalk": { + "title": "Water walk", + "description": "One may be required to use boots to walk on top of water." + }, + "noLogic": { + "title": "Disable all logic checks", + "description": "When this is selected all bets are off, and nothing below matters." + } + } + }, + "rom": { + "loader": { + "title": "Pour commencer", + "file_select": "Sélectionnez le fichier ROM", + "content": "
  1. Sélectionnez votre fichier ROM et chargez-le dans le navigateur (utilisez une ROM Zelda no Densetsu: Kamigami no Triforce v1.0 avec une extension .smc ou .sfc)
  2. Sélectionnez les Options de Jeu pour déterminer de quelle façon le jeu sera randomisé
  3. Cliquez sur Générer une ROM de Course
  4. Ensuite, sauvegardez votre rom et commencez à jouer
" + }, + "info": { + "spoilerwarning": "AVERTISSEMENT : La personne qui a généré cette partie a regardé le spoiler log.", + "logic": "Glitches Required", + "build": "Création de ROM", + "difficulty": "Difficulté", + "variation": "Variation", + "shuffle": "Mélanger", + "mode": "World State", + "weapons": "Épées", + "goal": "Objectif", + "permalink": "Lien permanent", + "special": "Spécial", + "notes": "Remarques", + "generated": "Créé" + }, + "settings": { + "heart_speed": "Bip de vie faible", + "heart_speeds": { + "off": "Éteint", + "double": "Vitesse Double", + "normal": "Vitesse Normale", + "half": "Moitié de Vitesse", + "quarter": "Quart de Vitesse" + }, + "menu_speed": "Vitesse du menu", + "menu_speeds": { + "instant": "Immédiat", + "fast": "Rapide", + "normal": "Normal", + "slow": "Lent" + }, + "heart_color": "Couleur des coeurs", + "heart_colors": { + "blue": "Bleu", + "green": "Vert", + "red": "Rouge", + "yellow": "Jaune" + }, + "play_as": "Jouer en tant que", + "music": "Musique de fond", + "music_info": "(définie sur \"Non\" pour le support MSU-1)", + "quickswap": "Changement rapide d’objets", + "palette_shuffle": "Palette Shuffle", + "race_warning": "Ne fonctionne pas dans les ROMs de course" + } + }, + "error": { + "title": "Erreur", + "429": "Bien que nous appréciions que vous souhaitiez générer beaucoup de jeux, d’autres personnes aimeraient également le faire. Veuillez revenir plus tard si vous souhaitez continuer à générer.", + "failed_generation": "Échec de la création de jeu :(", + "bad_file": "Fichier non reconnu", + "quota_exceeded_error": "TRANSLATETHIS Your local storage quota has been exceeded." + }, + "item": { + "Random": "Random", + "BottleWithRandom": "Bottle (Random)", + "Nothing": "Rien", + "UncleSword": "Épée progressive", + "L1Sword": "Épée de combat", + "L1SwordAndShield": "Épée et Bouclier de combat", + "L2Sword": "Master Sword", + "MasterSword": "Master Sword", + "L3Sword": "Épée trempée", + "L4Sword": "Épée d’or", + "BlueShield": "Bouclier de combat", + "RedShield": "Bouclier de feu", + "MirrorShield": "Bouclier miroir", + "FireRod": "Baguette de Feu", + "IceRod": "Baguette de Glace", + "Hammer": "Marteau", + "Hookshot": "Grappin", + "Bow": "Arc", + "Boomerang": "Boomerang Bleu", + "Powder": "Poudre magique", + "Bee": "Abeille", + "Bombos": "Bombos", + "Ether": "Ether", + "Quake": "Quake", + "Lamp": "Lampe", + "Shovel": "Pelle", + "OcarinaInactive": "Flûte", + "CaneOfSomaria": "Canne De Somaria", + "Bottle": "Flacon (vide)", + "PieceOfHeart": "Quart de Coeur", + "CaneOfByrna": "Canne De Byrna", + "Cape": "Cape Magique", + "MagicMirror": "Miroir Magique", + "PowerGlove": "Gants de puissance", + "TitansMitt": "Gants des Titans", + "BookOfMudora": "Livre De Mudora", + "Flippers": "Palmes", + "MoonPearl": "Perle de lune", + "BugCatchingNet": "Filet à papillon", + "BlueMail": "Tunique bleue", + "RedMail": "Tunique rouge", + "Key": "Clé", + "Compass": "Boussole", + "HeartContainerNoAnimation": "Réceptacle de coeur (pas d’animation)", + "Bomb": "Une Bombe", + "ThreeBombs": "Trois Bombes", + "Mushroom": "Champignon", + "RedBoomerang": "Boomerang magique", + "BottleWithRedPotion": "Flacon (potion rouge)", + "BottleWithGreenPotion": "Flacon (potion verte)", + "BottleWithBluePotion": "Flacon (potion bleue)", + "RedPotion": "Potion Rouge", + "GreenPotion": "Potion Verte", + "BluePotion": "Potion Bleue", + "TenBombs": "Dix Bombes", + "BigKey": "Grande Clé", + "Map": "Carte du Donjon", + "OneRupee": "Un Rubis", + "FiveRupees": "Cinq Rubiss", + "TwentyRupees": "Vingt Rubis", + "PendantOfCourage": "Pendentif du courage", + "PendantOfWisdom": "Pendentif de sagesse", + "PendantOfPower": "Pendentif de puissance", + "BowAndArrows": "Arc et Flèches", + "BowAndSilverArrows": "Arc Et Flèches d’Argent ", + "BottleWithBee": "Flacon (abeille)", + "BottleWithFairy": "Flacon (fée)", + "BossHeartContainer": "Réceptacle de coeur", + "HeartContainer": "Réceptacle de coeur du sanctuaire", + "OneHundredRupees": "Cent Rubis", + "FiftyRupees": "Cinquante Rubis", + "Heart": "Petit coeur", + "Arrow": "La Flèche", + "ShopArrow": "Arrows", + "TenArrows": "Dix Flèches", + "SmallMagic": "Petite magie", + "ThreeHundredRupees": "Trois cent Rubis", + "TwentyRupees2": "Vingt Rubis", + "BottleWithGoldBee": "Flacon (Abeille D’or)", + "OcarinaActive": "Flûte (activée)", + "PegasusBoots": "Bottes Pégase", + "BombUpgrade5": "Extension de Sac de Bombes (+5)", + "BombUpgrade10": "Extension de Sac de Bombes (+10)", + "BombUpgrade50": "Extension de Sac de Bombes (+50)", + "ArrowUpgrade5": "Extension de carquois (+5)", + "ArrowUpgrade10": "Extension de carquois (+10)", + "ArrowUpgrade70": "Extension de carquois (+70)", + "HalfMagic": "Demi-magie", + "QuarterMagic": "Quart de magie", + "Programmable1": "Programmable 1", + "Programmable2": "Programmable 2", + "Programmable3": "Programmable 3", + "SilverArrowUpgrade": "Flèches d’argent", + "Rupoor": "Rupoor", + "RedClock": "Horloge rouge", + "BlueClock": "Horloge bleue", + "GreenClock": "Horloge verte", + "ProgressiveSword": "Épée progressive", + "ProgressiveShield": "Bouclier Progressif", + "ProgressiveArmor": "Armure progressive", + "ProgressiveGlove": "Gant Progressif", + "singleRNG": "Objet RNG unique", + "multiRNG": "Objet RNG non unique", + "ProgressiveBow": "Arc Progressif", + "Triforce": "Triforce", + "PowerStar": "Étoile de puissance", + "TriforcePiece": "Pièce Triforce", + "MapLW": "Carte du monde de la lumière", + "MapDW": "Carte du monde des ténèbres", + "MapA2": "Carte de Ganons Tower", + "MapD7": "Carte de Turtle Rock", + "MapD4": "Carte de Thieves Town", + "MapP3": "Carte de Hera Tower", + "MapD5": "Carte de Ice Palace", + "MapD3": "Carte de Skulls Woods", + "MapD6": "Carte de Misery Mire", + "MapD1": "Carte de Palace of Darkness", + "MapD2": "Carte de Swamp Palace", + "MapA1": "Carte de Agahnim Tower", + "MapP2": "Carte de Desert Palace", + "MapP1": "Carte de Eastern Palace", + "MapH1": "Carte de Hyrule Castle", + "MapH2": "Carte de Sewers", + "CompassA2": "Boussole de Ganons Tower", + "CompassD7": "Boussole de Turtle Rock", + "CompassD4": "Boussole de Thieves Town", + "CompassP3": "Boussole de Hera Tower", + "CompassD5": "Boussole de Ice Palace", + "CompassD3": "Boussole de Skulls Woods", + "CompassD6": "Boussole de Misery Mire", + "CompassD1": "Boussole de Palace of Darkness", + "CompassD2": "Boussole de Swamp Palace", + "CompassA1": "Boussole de Agahnim Tower", + "CompassP2": "Boussole de Desert Palace", + "CompassP1": "Boussole de Eastern Palace", + "CompassH1": "Boussole de Hyrule Castle", + "CompassH2": "Boussole de Sewers", + "BigKeyA2": "Grande Clé de Ganons Tower", + "BigKeyD7": "Grande Clé de Turtle Rock", + "BigKeyD4": "Grande Clé de Thieves Town", + "BigKeyP3": "Grande Clé de Hera Tower", + "BigKeyD5": "Grande Clé de Ice Palace", + "BigKeyD3": "Grande Clé de Skulls Woods", + "BigKeyD6": "Grande Clé de Misery Mire", + "BigKeyD1": "Grande Clé de Palace of Darkness", + "BigKeyD2": "Grande Clé de Swamp Palace", + "BigKeyA1": "Grande Clé de Agahnims Tower", + "BigKeyP2": "Grande Clé de Desert Palace", + "BigKeyP1": "Grande Clé de Eastern Palace", + "BigKeyH1": "Grande Clé de Hyrule Castle", + "BigKeyH2": "Grande Clé de Sewers", + "KeyH2": "Clé de Sewers", + "KeyH1": "Clé de Hyrule Castle", + "KeyP1": "Clé de Eastern Palace", + "KeyP2": "Clé de Desert Palace", + "KeyA1": "Clé de Agahnims Tower", + "KeyD2": "Clé de Swamp Palace", + "KeyD1": "Clé de Palace of Darkness", + "KeyD6": "Clé de Misery Mire", + "KeyD3": "Clé de Skulls Woods", + "KeyD5": "Clé de Ice Palace", + "KeyP3": "Clé de Hera Tower", + "KeyD4": "Clé de Thieves Town", + "KeyD7": "Clé de Turtle Rock", + "KeyA2": "Clé de Ganon Tower", + "KeyGK": "Clé générique", + "ShopKey": "Key", + "Crystal1": "Cristal 1", + "Crystal2": "Cristal 2", + "Crystal3": "Cristal 3", + "Crystal4": "Cristal 4", + "Crystal5": "Cristal 5", + "Crystal6": "Cristal 6", + "Crystal7": "Cristal 7", + "RescueZelda": "Sauver Zelda", + "DefeatAgahnim": "Vaincre Agahnim", + "BigRedBomb": "Grosse bombe rouge", + "DefeatAgahnim2": "Vaincre Agahnim 2", + "DefeatGanon": "Vaincre Ganon", + "ChocoboEgg": "Chocobo Egg", + "NoSlipBoots": "Crampons de Glace", + "Reindeer1": "Fonceur", + "Reindeer2": "Danseur", + "Reindeer3": "Sauteur", + "Reindeer4": "Fripponne", + "Reindeer5": "Comète", + "Reindeer6": "Cupidonne", + "Reindeer7": "Tonnerre", + "Reindeer8": "Éclair", + "Coal1": "Charbon", + "Coal2": "Charbon", + "Armos Knights": "Armos Knights", + "Lanmolas": "Lanmolas", + "Moldorm": "Moldorm", + "Helmasaur King": "Helmasaur King", + "Arrghus": "Arrghus", + "Mothula": "Mothula", + "Blind": "Blind", + "Kholdstare": "Kholdstare", + "Vitreous": "Vitreous", + "Trinexx": "Trinexx", + "Agahnim": "Agahnim", + "Agahnim 2": "Agahnim 2", + "Ganon": "Ganon", + "Test": "Testing Item" + } + } +} diff --git a/resources/lang/de/about.php b/resources/lang/de/about.php index a6f7e0638..0e3d72fef 100644 --- a/resources/lang/de/about.php +++ b/resources/lang/de/about.php @@ -1,7 +1,7 @@ [ - 'ALttP: Randomizer ist ein neuer Ansatz von dem klassischen Spiel The Legend of Zelda: A Link to the Past. Jedes durchspielen mischt die Fundorte der wichtigen Gegenstände im Spiel. Wirst du den Bogen auf dem Gipfel vom Todesberg finden, der Feuerstab der still in der Bibliothekt ruht, oder selbst das Master-Schwert das im Hühnerstall wartet?', - 'Fordere deine Freunde heraus um die schnellste Zeit in einer bestimmten Mischung zu kriegen oder mach mit beim Wöchentlichen Speedrun Wettbewerb. Wenn dein Geschick gut genug ist, wirst du villeicht die Krone nach Hause holen in einem unserer halbjährlichen geschlossenen Turniere. Man sieht sich in Hyrule!', - ], + 'content' => [ + 'ALttP: Randomizer ist ein neuer Ansatz von dem klassischen Spiel The Legend of Zelda: A Link to the Past. Jedes durchspielen mischt die Fundorte der wichtigen Gegenstände im Spiel. Wirst du den Bogen auf dem Gipfel vom Todesberg finden, der Feuerstab der still in der Bibliothekt ruht, oder selbst das Master-Schwert das im Hühnerstall wartet?', + 'Fordere deine Freunde heraus um die schnellste Zeit in einer bestimmten Mischung zu kriegen oder mach mit beim Wöchentlichen Speedrun Wettbewerb. Wenn dein Geschick gut genug ist, wirst du villeicht die Krone nach Hause holen in einem unserer halbjährlichen geschlossenen Turniere. Man sieht sich in Hyrule!', + ], ]; diff --git a/resources/lang/de/contribute.php b/resources/lang/de/contribute.php index ecfbdbc2e..7eb536483 100644 --- a/resources/lang/de/contribute.php +++ b/resources/lang/de/contribute.php @@ -1,34 +1,34 @@ 'Mitwirken', - 'subheader' => 'Es gibt viele Wege mitzuwirken, trete den Entwicklungskanälen auf Discord bei!', - 'cards' => [ - 'sprite' => [ - 'header' => 'Sprite Entwicklung', - 'content' => [ - 'Du willst deinen eigenen Sprite anstatt Link sehen? Schaue dir fatmanspanda’s Dokumentation! an!', - 'Für mehr Informationen über die Erstellung eines Sprites und wie man einen selbsterstellten Sprite in ALttP:R hinzufügt, checke #sprite-dev auf Discord aus!', - ] - ], - 'live' => [ - 'header' => 'Live-Rennen Produktion', - 'content' => [ - 'Interessiert unserem Team von Restreamer, Kommentatoren und Tracker beizutreten?', - 'Fülle dieses Formular aus und halte Ausschau auf Discord!', - '
', - ] - ], - 'other' => [ - 'header' => 'Andere Wege mitzuwirken', - 'content' => [ - 'Du hast eine Idee für ein Feature? Du hast beim spielen einen Bug gefunden? Du suchst Arbeit für deine technischen Fähigkeiten? Trete dem #suggestions Kanal auf Discord bei und stelle dich vor!', - ] - ], - 'discord' => [ - 'header' => 'Trete der Discord Community bei!', - 'content' => [ - 'Haben wir schon erwähnt, dass du uns beitreten sollst auf Discord? Der beste Weg in alles involviert zu sein ist, beizutreten und sich vorzustellen!', - ] - ], - ], + 'header' => 'Mitwirken', + 'subheader' => 'Es gibt viele Wege mitzuwirken, trete den Entwicklungskanälen auf Discord bei!', + 'cards' => [ + 'sprite' => [ + 'header' => 'Sprite Entwicklung', + 'content' => [ + 'Du willst deinen eigenen Sprite anstatt Link sehen? Schaue dir fatmanspanda’s Dokumentation! an!', + 'Für mehr Informationen über die Erstellung eines Sprites und wie man einen selbsterstellten Sprite in ALttP:R hinzufügt, checke #sprite-dev auf Discord aus!', + ] + ], + 'live' => [ + 'header' => 'Live-Rennen Produktion', + 'content' => [ + 'Interessiert unserem Team von Restreamer, Kommentatoren und Tracker beizutreten?', + 'Fülle dieses Formular aus und halte Ausschau auf Discord!', + '
', + ] + ], + 'other' => [ + 'header' => 'Andere Wege mitzuwirken', + 'content' => [ + 'Du hast eine Idee für ein Feature? Du hast beim spielen einen Bug gefunden? Du suchst Arbeit für deine technischen Fähigkeiten? Trete dem #suggestions Kanal auf Discord bei und stelle dich vor!', + ] + ], + 'discord' => [ + 'header' => 'Trete der Discord Community bei!', + 'content' => [ + 'Haben wir schon erwähnt, dass du uns beitreten sollst auf Discord? Der beste Weg in alles involviert zu sein ist, beizutreten und sich vorzustellen!', + ] + ], + ], ]; diff --git a/resources/lang/de/customizer.php b/resources/lang/de/customizer.php new file mode 100644 index 000000000..3246501d7 --- /dev/null +++ b/resources/lang/de/customizer.php @@ -0,0 +1,79 @@ + [ + 'timers' => [ + 'off' => 'Off', + 'stopwatch' => 'Stopwatch', + 'countdown-ohko' => 'Countdown OHKO', + 'countdown-continue' => 'Countdown Continue', + 'countdown-stop' => 'Countdown Stop', + ], + 'dungeon_count' => [ + 'off' => 'Off', + 'on' => 'Always On', + 'pickup' => 'On Compass Pickup', + ], + ], + 'glitches' => [ + 'canBombJump' => [ + 'title' => 'Bomb Jump', + 'description' => 'One may be required to Bomb jump over gaps.', + ], + 'canBootsClip' => [ + 'title' => 'Boots Clip', + 'description' => 'When one has the Boots, they may be required to clip through walls in the in overworld.', + ], + 'canBunnyRevive' => [ + 'title' => 'Bunny Revive', + 'description' => 'One may be required to go somewhere as bunny form and abuse death/fairy revive to be Link.', + ], + 'canBunnySurf' => [ + 'title' => 'Bunny Surf', + 'description' => 'One may be required to water walk in bunny state.', + ], + 'canDungeonRevive' => [ + 'title' => 'Dungeon Revive', + 'description' => 'One may be required to revive as a bunny in a dungeon to collect items as Link.', + ], + 'canFakeFlipper' => [ + 'title' => 'Fake Flipper', + 'description' => 'One may be required to use the fake flipper glitch to collect items.', + ], + 'canMirrorClip' => [ + 'title' => 'Mirror Clip', + 'description' => 'One may be required to abuse Mirror bouce to go out of bounds.', + ], + 'canMirrorWrap' => [ + 'title' => 'Mirror Wrap', + 'description' => 'One may be required to use Mirror to auto scroll to a different location.', + ], + 'canOneFrameClipOW' => [ + 'title' => 'One Frame Clip (overworld)', + 'description' => 'You don’t want this. Trust me.', + ], + 'canOWYBA' => [ + 'title' => 'YBA (overworld)', + 'description' => 'May be required to use bottles in the overworld to teleport to different locations.', + ], + 'canSuperBunny' => [ + 'title' => 'Super Bunny', + 'description' => 'One may be required to activate super bunny to access locations.', + ], + 'canSuperSpeed' => [ + 'title' => 'Super Speed', + 'description' => 'One may be required to super speed clip through edges in overworld.', + ], + 'canWaterFairyRevive' => [ + 'title' => 'Water Fairy Revive', + 'description' => 'This setup is silly and requires a bunch of items.', + ], + 'canWaterWalk' => [ + 'title' => 'Water walk', + 'description' => 'One may be required to use boots to walk on top of water.', + ], + 'noLogic' => [ + 'title' => 'Disable all logic checks', + 'description' => 'When this is selected all bets are off, and nothing below matters.', + ], + ] +]; diff --git a/resources/lang/de/daily.php b/resources/lang/de/daily.php index 79372ff85..17b743174 100644 --- a/resources/lang/de/daily.php +++ b/resources/lang/de/daily.php @@ -1,8 +1,8 @@ 'Randomizer Spiel des Tages', - 'content' => [ - 'Du kannst nicht auf Wochende warten für die nächste Randomizer Challenge? Du willst wissen wie du dich gegen deine Lieblingsstreamer schlägst? Wir stellen vor: Randomizer Spiel des Tages!', - 'Der Spielmodus wird jeden Tag zufällig sein! (Hättest du auch was anderes erwartet?) Versuche und erlebe etwas neues! Hast du die Geduld um dich durch ein ' . __('randomizer.variation.options.ohko') . ' Spiel durchzuschlagen, die Gerissenheit um das komplexe ' . __('randomizer.variation.options.key-sanity') . ' zu lösen, oder die Geschwindigkeit um das Triforce aus dem Sockel zu ziehen? Finde es heute heraus!', - ] + 'header' => 'Randomizer Spiel des Tages', + 'content' => [ + 'Du kannst nicht auf Wochende warten für die nächste Randomizer Challenge? Du willst wissen wie du dich gegen deine Lieblingsstreamer schlägst? Wir stellen vor: Randomizer Spiel des Tages!', + 'Der Spielmodus wird jeden Tag zufällig sein! (Hättest du auch was anderes erwartet?) Versuche und erlebe etwas neues! Hast du die Geduld um dich durch ein ' . __('randomizer.variation.options.ohko') . ' Spiel durchzuschlagen, die Gerissenheit um das komplexe ' . __('randomizer.variation.options.key-sanity') . ' zu lösen, oder die Geschwindigkeit um das Triforce aus dem Sockel zu ziehen? Finde es heute heraus!', + ] ]; diff --git a/resources/lang/de/enemizer.php b/resources/lang/de/enemizer.php index 8e65bf48d..cf030c254 100644 --- a/resources/lang/de/enemizer.php +++ b/resources/lang/de/enemizer.php @@ -1,36 +1,36 @@ 'Enemizer', - 'enable' => 'Aktiviere Enemizer', - 'disable' => 'Deaktiviere Enemizer', - 'enemy_health' => [ - 'title' => 'Gegner Leben', - 'options' => [ - 0 => 'Regulär', - 1 => 'Einfach (1-4 hp)', - 2 => 'Mittel (2-15 hp)', - 3 => 'Schwer (2-30 hp)', - 4 => 'Wahnsinnig (4-50 hp)', - ], - ], - 'enemy_damage' => [ - 'title' => 'Gegner Schaden', - 'options' => [ - 'off' => 'Regulär', - 'shuffle' => 'Durcheinander', - 'chaos' => 'Chaos', - ], - ], - 'bosses' => [ - 'title' => 'Bosse', - 'options' => [ - 'off' => 'Regulär', - 'basic' => 'Basis', - 'normal' => 'Normal', - 'chaos' => 'Chaos', - ], - ], - 'palette_shuffle' => 'Palettenmischung', - 'pot_shuffle' => 'Topf mischen', - 'enemy_shuffle' => 'Gegner mischen', + 'title' => 'Enemizer', + 'enable' => 'Aktiviere Enemizer', + 'disable' => 'Deaktiviere Enemizer', + 'enemy_health' => [ + 'title' => 'Gegner Leben', + 'options' => [ + 0 => 'Regulär', + 1 => 'Einfach (1-4 hp)', + 2 => 'Mittel (2-15 hp)', + 3 => 'Schwer (2-30 hp)', + 4 => 'Wahnsinnig (4-50 hp)', + ], + ], + 'enemy_damage' => [ + 'title' => 'Gegner Schaden', + 'options' => [ + 'off' => 'Regulär', + 'shuffle' => 'Durcheinander', + 'chaos' => 'Chaos', + ], + ], + 'bosses' => [ + 'title' => 'Bosse', + 'options' => [ + 'off' => 'Regulär', + 'basic' => 'Basis', + 'normal' => 'Normal', + 'chaos' => 'Chaos', + ], + ], + 'palette_shuffle' => 'Palettenmischung', + 'pot_shuffle' => 'Topf mischen', + 'enemy_shuffle' => 'Gegner mischen', ]; diff --git a/resources/lang/de/entrance.php b/resources/lang/de/entrance.php index 78e70ef1b..bf62333ad 100644 --- a/resources/lang/de/entrance.php +++ b/resources/lang/de/entrance.php @@ -1,75 +1,75 @@ 'Entrance Randomizer', - 'switch' => [ - 'item' => 'Wechsele zum Item Randomizer', - ], - 'rom' => [ - 'options' => 'ROM Optionen', - ], - 'difficulty' => [ - 'title' => 'Schwierigkeit', - 'options' => [ - 'easy' => 'Einfach', - 'normal' => 'Mittel', - 'hard' => 'Schwer', - 'expert' => 'Experte', - 'insane' => 'Wahnsinnig', - ], - ], - 'goal' => [ - 'title' => 'Ziel', - 'options' => [ - 'ganon' => 'Besiege Ganon', - 'crystals' => 'Kristalle', - 'dungeons' => 'Alle Dungeons', - 'pedestal' => 'Master-Schwert Sockel', - 'triforcehunt' => 'Triforce Teile', - ], - ], - 'logic' => [ - 'title' => 'Logik', - 'options' => [ - 'NoGlitches' => 'Keine Glitches', - ], - ], - 'mode' => [ - 'title' => 'Zustand', - 'options' => [ - 'swordless' => 'Schwertlos', - 'open' => 'Offen', - ], - ], - 'shuffle' => [ - 'title' => 'Mischung', - 'options' => [ - 'simple' => 'Simpel', - 'restricted' => 'Beschränkt', - 'full' => 'Voll', - 'crossed' => 'Gekreuzt', - 'insanity' => 'Wahnsinn', - ], - ], - 'variation' => [ - 'title' => 'Variation', - 'options' => [ - 'none' => 'Keine', - 'timed-race' => 'Zeitrennen', - 'timed-ohko' => 'Zeitlimit bis OHKO', - 'ohko' => 'OHKO', - 'triforce-hunt' => 'Triforce-Splitter Jagd', - 'key-sanity' => 'Keysanity', - 'retro' => 'Retro', - ], - ], - 'generate' => [ - 'race' => 'Generiere ROM für Rennen', - 'spoiler_race' => 'ROM für Spoiler Rennen', - 'casual' => 'Generiere ROM', - ], - 'details' => [ - 'title' => 'Spiele Details', - 'save_spoiler' => 'Speichere Spoiler', - 'save_rom' => 'Speichere Rom', - ], + 'title' => 'Entrance Randomizer', + 'switch' => [ + 'item' => 'Wechsele zum Item Randomizer', + ], + 'rom' => [ + 'options' => 'ROM Optionen', + ], + 'difficulty' => [ + 'title' => 'Schwierigkeit', + 'options' => [ + 'easy' => 'Einfach', + 'normal' => 'Mittel', + 'hard' => 'Schwer', + 'expert' => 'Experte', + 'insane' => 'Wahnsinnig', + ], + ], + 'goal' => [ + 'title' => 'Ziel', + 'options' => [ + 'ganon' => 'Besiege Ganon', + 'crystals' => 'Kristalle', + 'dungeons' => 'Alle Dungeons', + 'pedestal' => 'Master-Schwert Sockel', + 'triforcehunt' => 'Triforce Teile', + ], + ], + 'logic' => [ + 'title' => 'Logik', + 'options' => [ + 'NoGlitches' => 'Keine Glitches', + ], + ], + 'mode' => [ + 'title' => 'Zustand', + 'options' => [ + 'swordless' => 'Schwertlos', + 'open' => 'Offen', + ], + ], + 'shuffle' => [ + 'title' => 'Mischung', + 'options' => [ + 'simple' => 'Simpel', + 'restricted' => 'Beschränkt', + 'full' => 'Voll', + 'crossed' => 'Gekreuzt', + 'insanity' => 'Wahnsinn', + ], + ], + 'variation' => [ + 'title' => 'Variation', + 'options' => [ + 'none' => 'Keine', + 'timed-race' => 'Zeitrennen', + 'timed-ohko' => 'Zeitlimit bis OHKO', + 'ohko' => 'OHKO', + 'triforce-hunt' => 'Triforce-Splitter Jagd', + 'key-sanity' => 'Keysanity', + 'retro' => 'Retro', + ], + ], + 'generate' => [ + 'race' => 'Generiere ROM für Rennen', + 'spoiler_race' => 'ROM für Spoiler Rennen', + 'casual' => 'Generiere ROM', + ], + 'details' => [ + 'title' => 'Spiele Details', + 'save_spoiler' => 'Speichere Spoiler', + 'save_rom' => 'Speichere Rom', + ], ]; diff --git a/resources/lang/de/entrance_options.php b/resources/lang/de/entrance_options.php deleted file mode 100644 index c3d5bdbea..000000000 --- a/resources/lang/de/entrance_options.php +++ /dev/null @@ -1,38 +0,0 @@ - 'Was ist der Entrance Randomizer?', - 'subheader' => 'Der Entrance Randomizer erlaubt dir die Welt auf den Kopf zu stellen und das Spiel dennoch zu spielen. Es folgt zumeist den Standard VT Regeln für die Einstellungen für alles, aber es führt eine neue Option ein “' . __('entrance.shuffle.title') . '”.', - 'cards' => [ - 'simple' => [ - 'header' => __('entrance.shuffle.options.simple'), - 'content' => [ - 'Mischt die Dungeon Eingänge untereinander und behällt alle Dungeons mit 4 Eingängen an einem Platz so dass die Dungeons eins zu eins untereinander getauscht werden.', - 'Anders als auf dem Todesberg in der Lichtwelt, wo die Innenräume gemischt werden, aber immer noch zum dem gleichen Punkt auf der Oberwelt verbunden sind. Auf dem Todesberg sind die Eingänge freier miteinander verbunden.', - ], - ], - 'restricted' => [ - 'header' => __('entrance.shuffle.options.restricted'), - 'content' => [ - 'Nutz die gleiche Mischung für Dungeons wie Simpel, aber die restlichen Eingänge sind freier miteinander verbunden. Höhlen und Dungeon mit mehreren Eingängen sind auf eine Welt beschränkt.', - ], - ], - 'full' => [ - 'header' => __('entrance.shuffle.options.full'), - 'content' => [ - 'Mischt Höhlen und Dungeon Eingänge uneingeschränkt. Höhlen und Dungeon mit mehreren Eingängen sind auf eine Welt beschränkt.', - ], - ], - 'crossed' => [ - 'header' => __('entrance.shuffle.options.crossed'), - 'content' => [ - 'Mischt Höhlen und Dungeon Eingänge uneingeschränkt, aber Verbindungshöhlen und Dungeons können nun die Lichtwelt und Schattenwelt miteinander verbinden.', - ], - ], - 'insanity' => [ - 'header' => __('entrance.shuffle.options.insanity'), - 'content' => [ - 'Entkoppelt Eingänge und Ausgänge und mischt sie uneingeschränkt. Höhlen die im Original Spiel nur einen Eingang haben, können nur an der selben Stelle verlassen werden wo man sie betreten hat.', - ], - ], - ], -]; diff --git a/resources/lang/de/error.php b/resources/lang/de/error.php index 773c19b09..4e2b5e56b 100644 --- a/resources/lang/de/error.php +++ b/resources/lang/de/error.php @@ -1,7 +1,8 @@ 'Fehler', - '429' => 'Auch wenn wir schätzen das du einen haufen Spiele generierst, andere Leute möchten dies aber auch. Bitte kommen später wieder wenn du mehr generieren möchtest.', - 'failed_generation' => 'Fehler beim erstellen :(', - 'bad_file' => 'Datei nicht erkannt', + 'title' => 'Fehler', + '429' => 'Auch wenn wir schätzen das du einen haufen Spiele generierst, andere Leute möchten dies aber auch. Bitte kommen später wieder wenn du mehr generieren möchtest.', + 'failed_generation' => 'Fehler beim erstellen :(', + 'bad_file' => 'Datei nicht erkannt', + 'quota_exceeded_error' => 'Your local storage quota has been exceeded.', ]; diff --git a/resources/lang/de/item.php b/resources/lang/de/item.php index d3d02fc40..7b99a41a1 100644 --- a/resources/lang/de/item.php +++ b/resources/lang/de/item.php @@ -1,206 +1,214 @@ 'Nichts', - 'UncleSword' => 'Progressives Schwert', - 'L1Sword' => 'Schwert des Onkels', - 'L1SwordAndShield' => 'Schwert und Schild des Onkels', - 'L2Sword' => 'Master-Schwert', - 'MasterSword' => 'Master-Schwert', - 'L3Sword' => 'Gehärtetes Schwert', - 'L4Sword' => 'Goldenes Schwert', - 'BlueShield' => 'Schild des Onkels', - 'RedShield' => 'Rotes Schild', - 'MirrorShield' => 'Spiegelschild', - 'FireRod' => 'Feuerstab', - 'IceRod' => 'Eisstab', - 'Hammer' => 'Hammer', - 'Hookshot' => 'Enterharken', - 'Bow' => 'Bogen', - 'Boomerang' => 'Blauer Bumerang', - 'Powder' => 'Magisches Pulver', - 'Bee' => 'Biene', - 'Bombos' => 'Bombos-Medaillon', - 'Ether' => 'Ether-Medaillon', - 'Quake' => 'Quake-Medaillon', - 'Lamp' => 'Lampe', - 'Shovel' => 'Schaufel', - 'OcarinaInactive' => 'Flöte', - 'CaneOfSomaria' => 'Somaria Stab', - 'Bottle' => 'Flasche (Leer)', - 'PieceOfHeart' => 'Herzteil', - 'CaneOfByrna' => 'Byrna Stab', - 'Cape' => 'Magischer Umhang', - 'MagicMirror' => 'Magischer Spiegel', - 'PowerGlove' => 'Krafthandschuhe', - 'TitansMitt' => 'Titanenhandschuhe', - 'BookOfMudora' => 'Buch Mudora', - 'Flippers' => 'Schwimmflossen', - 'MoonPearl' => 'Mondperle', - 'BugCatchingNet' => 'Schmetterlingsnetz', - 'BlueMail' => 'Blaue Rüstung', - 'RedMail' => 'Rote Rüstung', - 'Key' => 'Schlüssel', - 'Compass' => 'Kompass', - 'HeartContainerNoAnimation' => 'Herzcontainer (keine Animation)', - 'Bomb' => 'Eine Bombe', - 'ThreeBombs' => 'Drei Bomben', - 'Mushroom' => 'Pilz', - 'RedBoomerang' => 'Magischer Bumerang', - 'BottleWithRedPotion' => 'Flasche (Rotes Elixier)', - 'BottleWithGreenPotion' => 'Flasche (Grünes Elixier)', - 'BottleWithBluePotion' => 'Flasche (Blaues Elixier)', - 'RedPotion' => 'Rotes Elixier', - 'GreenPotion' => 'Grünes Elixier', - 'BluePotion' => 'Blaues Elixier', - 'TenBombs' => 'Zehn Bomben', - 'BigKey' => 'Großer Schlüssel', - 'Map' => 'Dungeon-Karte', - 'OneRupee' => 'Ein Rubin', - 'FiveRupees' => 'Fünf Rubine', - 'TwentyRupees' => 'Zwanzig Rubine', - 'PendantOfCourage' => 'Amulett des Mutes', - 'PendantOfWisdom' => 'Amulett der Weisheit', - 'PendantOfPower' => 'Amulett der Stärke', - 'BowAndArrows' => 'Pfeil und Bogen', - 'BowAndSilverArrows' => 'Silberpfeil und Bogen', - 'BottleWithBee' => 'Flasche (Biene)', - 'BottleWithFairy' => 'Flasche (Fee)', - 'BossHeartContainer' => 'Herzcontainer', - 'HeartContainer' => 'Herzcontainer der Kathedrale', - 'OneHundredRupees' => 'Einhundert Rubine', - 'FiftyRupees' => 'Fünfzig Rubine', - 'Heart' => 'Kleines Herz', - 'Arrow' => 'Ein Pfeil', - 'TenArrows' => 'Zehn Pfeile', - 'SmallMagic' => 'Kleine Magie', - 'ThreeHundredRupees' => 'Dreihundert Rubine', - 'TwentyRupees2' => 'Zwanzig Rubine', - 'BottleWithGoldBee' => 'Flasche (Goldene Biene)', - 'OcarinaActive' => 'Flöte (Aktiviert)', - 'PegasusBoots' => 'Pegasus-Stiefel', - 'BombUpgrade5' => 'Bomben Upgrade (+5)', - 'BombUpgrade10' => 'Bomben Upgrade (+10)', - 'BombUpgrade50' => 'Bomben Upgrade (+50)', - 'ArrowUpgrade5' => 'Pfeil Upgrade (+5)', - 'ArrowUpgrade10' => 'Pfeil Upgrade (+10)', - 'ArrowUpgrade70' => 'Pfeil Upgrade (+70)', - 'HalfMagic' => 'Halbe Magie', - 'QuarterMagic' => 'Viertel Magie', - 'Programmable1' => 'Programmierbar 1', - 'Programmable2' => 'Programmierbar 2', - 'Programmable3' => 'Programmierbar 3', - 'SilverArrowUpgrade' => 'Silberpfeil Upgrade', - 'Rupoor' => 'Rupoor', - 'RedClock' => 'Rote Uhr', - 'BlueClock' => 'Blaue Uhr', - 'GreenClock' => 'Grüne Uhr', - 'ProgressiveSword' => 'Progressives Schwert', - 'ProgressiveShield' => 'Progressives Schild', - 'ProgressiveArmor' => 'Progressive Rüstung', - 'ProgressiveGlove' => 'Progressive Handschuhe', - 'singleRNG' => 'Einzigartiger RNG Gegenstand', - 'multiRNG' => 'Nicht einzigartiger RNG Gegenstand', - 'Triforce' => 'Triforce', - 'PowerStar' => 'Power-Stern', - 'TriforcePiece' => 'Triforce-Splitter', - 'MapLW' => 'Lichtwelt-Karte', - 'MapDW' => 'Schattenwelt-Karte', - 'MapA2' => 'Karte von Ganons Turm', - 'MapD7' => 'Karte vom Schildkrötenfelsen', - 'MapD4' => 'Karte von Blinds Versteck', - 'MapP3' => 'Karte von Heras Turm', - 'MapD5' => 'Karte vom Eispalast', - 'MapD3' => 'Karte vom Skelettwald', - 'MapD6' => 'Karte vom Wüstenseepalast', - 'MapD1' => 'Karte vom Palast der Dunkelheit', - 'MapD2' => 'Karte vom Sumpfpalast', - 'MapA1' => 'Karte von Agahnims Turm', - 'MapP2' => 'Karte vom Wüstenpalast', - 'MapP1' => 'Karte vom Ostpalast', - 'MapH1' => 'Karte von Schloss Hyrule', - 'MapH2' => 'Karte der Kanalisation', - 'CompassA2' => 'Kompass von Ganons Turm', - 'CompassD7' => 'Kompass vom Schildkrötenfelsen', - 'CompassD4' => 'Kompass von Blinds Versteck', - 'CompassP3' => 'Kompass von Heras Turm', - 'CompassD5' => 'Kompass vom Eispalast', - 'CompassD3' => 'Kompass vom Skelettwald', - 'CompassD6' => 'Kompass vom Wüstenseepalast', - 'CompassD1' => 'Kompass vom Palast der Dunkelheit', - 'CompassD2' => 'Kompass vom Sumpfpalast', - 'CompassA1' => 'Kompass von Agahnims Turm', - 'CompassP2' => 'Kompass vom Wüstenpalast', - 'CompassP1' => 'Kompass vom Ostpalast', - 'CompassH1' => 'Kompass von Schloss Hyrule', - 'CompassH2' => 'Kompass der Kanalisation', - 'BigKeyA2' => 'Großer Schlüssel von Ganons Turm', - 'BigKeyD7' => 'Großer Schlüssel vom Schildkrötenfelsen ', - 'BigKeyD4' => 'Großer Schlüssel von Blinds Versteck', - 'BigKeyP3' => 'Großer Schlüssel von Heras Turm', - 'BigKeyD5' => 'Großer Schlüssel vom Eispalast', - 'BigKeyD3' => 'Großer Schlüssel vom Skelettwald', - 'BigKeyD6' => 'Großer Schlüssel vom Wüstenseepalast', - 'BigKeyD1' => 'Großer Schlüssel vom Palast der Dunkelheit', - 'BigKeyD2' => 'Großer Schlüssel vom Sumpfpalast', - 'BigKeyA1' => 'Großer Schlüssel von Agahnims Turm', - 'BigKeyP2' => 'Großer Schlüssel vom Wüstenpalast', - 'BigKeyP1' => 'Großer Schlüssel vom Ostpalast', - 'BigKeyH1' => 'Großer Schlüssel von Schloss Hyrule', - 'BigKeyH2' => 'Großer Schlüssel der Kanalisation', - 'KeyH2' => 'Kleiner Schlüssel der Kanalisation', - 'KeyH1' => 'Kleiner Schlüssel von Schloss Hyrule', - 'KeyP1' => 'Kleiner Schlüssel vom Ostpalast', - 'KeyP2' => 'Kleiner Schlüssel vom Wüstenpalast', - 'KeyA1' => 'Kleiner Schlüssel von Agahnims Turm', - 'KeyD2' => 'Kleiner Schlüssel vom Sumpfpalast', - 'KeyD1' => 'Kleiner Schlüssel vom Palast der Dunkelheit', - 'KeyD6' => 'Kleiner Schlüssel vom Wüstenseepalast', - 'KeyD3' => 'Kleiner Schlüssel vom Skelettwald', - 'KeyD5' => 'Kleiner Schlüssel vom Eispalast', - 'KeyP3' => 'Kleiner Schlüssel von Heras Turm', - 'KeyD4' => 'Kleiner Schlüssel von Blinds Versteck', - 'KeyD7' => 'Kleiner Schlüssel vom Schildkrötenfelsen', - 'KeyA2' => 'Kleiner Schlüssel von Ganons Turm', - 'KeyGK' => 'Generischer kleiner Schlüssel', - 'Crystal1' => 'Kristall 1', - 'Crystal2' => 'Kristall 2', - 'Crystal3' => 'Kristall 3', - 'Crystal4' => 'Kristall 4', - 'Crystal5' => 'Kristall 5', - 'Crystal6' => 'Kristall 6', - 'Crystal7' => 'Kristall 7', - 'RescueZelda' => 'Rette Zelda', - 'DefeatAgahnim' => 'Besiege Agahnim', - 'BigRedBomb' => 'Große rote Bombe', - 'DefeatAgahnim2' => 'Besiege Agahnim 2', - 'DefeatGanon' => 'Besiege Ganon', + 'Random' => 'Random', + 'BottleWithRandom' => 'Bottle (Random)', + 'Nothing' => 'Nichts', + 'UncleSword' => 'Progressives Schwert', + 'L1Sword' => 'Schwert des Onkels', + 'L1SwordAndShield' => 'Schwert und Schild des Onkels', + 'L2Sword' => 'Master-Schwert', + 'MasterSword' => 'Master-Schwert', + 'L3Sword' => 'Gehärtetes Schwert', + 'L4Sword' => 'Goldenes Schwert', + 'BlueShield' => 'Schild des Onkels', + 'RedShield' => 'Rotes Schild', + 'MirrorShield' => 'Spiegelschild', + 'FireRod' => 'Feuerstab', + 'IceRod' => 'Eisstab', + 'Hammer' => 'Hammer', + 'Hookshot' => 'Enterharken', + 'Bow' => 'Bogen', + 'Boomerang' => 'Blauer Bumerang', + 'Powder' => 'Magisches Pulver', + 'Bee' => 'Biene', + 'Bombos' => 'Bombos-Medaillon', + 'Ether' => 'Ether-Medaillon', + 'Quake' => 'Quake-Medaillon', + 'Lamp' => 'Lampe', + 'Shovel' => 'Schaufel', + 'OcarinaInactive' => 'Flöte', + 'CaneOfSomaria' => 'Somaria Stab', + 'Bottle' => 'Flasche (Leer)', + 'PieceOfHeart' => 'Herzteil', + 'CaneOfByrna' => 'Byrna Stab', + 'Cape' => 'Magischer Umhang', + 'MagicMirror' => 'Magischer Spiegel', + 'PowerGlove' => 'Krafthandschuhe', + 'TitansMitt' => 'Titanenhandschuhe', + 'BookOfMudora' => 'Buch Mudora', + 'Flippers' => 'Schwimmflossen', + 'MoonPearl' => 'Mondperle', + 'BugCatchingNet' => 'Schmetterlingsnetz', + 'BlueMail' => 'Blaue Rüstung', + 'RedMail' => 'Rote Rüstung', + 'Key' => 'Schlüssel', + 'Compass' => 'Kompass', + 'HeartContainerNoAnimation' => 'Herzcontainer (keine Animation)', + 'Bomb' => 'Eine Bombe', + 'ThreeBombs' => 'Drei Bomben', + 'Mushroom' => 'Pilz', + 'RedBoomerang' => 'Magischer Bumerang', + 'BottleWithRedPotion' => 'Flasche (Rotes Elixier)', + 'BottleWithGreenPotion' => 'Flasche (Grünes Elixier)', + 'BottleWithBluePotion' => 'Flasche (Blaues Elixier)', + 'RedPotion' => 'Rotes Elixier', + 'GreenPotion' => 'Grünes Elixier', + 'BluePotion' => 'Blaues Elixier', + 'TenBombs' => 'Zehn Bomben', + 'BigKey' => 'Großer Schlüssel', + 'Map' => 'Dungeon-Karte', + 'OneRupee' => 'Ein Rubin', + 'FiveRupees' => 'Fünf Rubine', + 'TwentyRupees' => 'Zwanzig Rubine', + 'PendantOfCourage' => 'Amulett des Mutes', + 'PendantOfWisdom' => 'Amulett der Weisheit', + 'PendantOfPower' => 'Amulett der Stärke', + 'BowAndArrows' => 'Pfeil und Bogen', + 'BowAndSilverArrows' => 'Silberpfeil und Bogen', + 'BottleWithBee' => 'Flasche (Biene)', + 'BottleWithFairy' => 'Flasche (Fee)', + 'BossHeartContainer' => 'Herzcontainer', + 'HeartContainer' => 'Herzcontainer der Kathedrale', + 'OneHundredRupees' => 'Einhundert Rubine', + 'FiftyRupees' => 'Fünfzig Rubine', + 'Heart' => 'Kleines Herz', + 'Arrow' => 'Ein Pfeil', + 'ShopArrow' => 'Arrows', + 'TenArrows' => 'Zehn Pfeile', + 'SmallMagic' => 'Kleine Magie', + 'ThreeHundredRupees' => 'Dreihundert Rubine', + 'TwentyRupees2' => 'Zwanzig Rubine', + 'BottleWithGoldBee' => 'Flasche (Goldene Biene)', + 'OcarinaActive' => 'Flöte (Aktiviert)', + 'PegasusBoots' => 'Pegasus-Stiefel', + 'BombUpgrade5' => 'Bomben Upgrade (+5)', + 'BombUpgrade10' => 'Bomben Upgrade (+10)', + 'BombUpgrade50' => 'Bomben Upgrade (+50)', + 'ArrowUpgrade5' => 'Pfeil Upgrade (+5)', + 'ArrowUpgrade10' => 'Pfeil Upgrade (+10)', + 'ArrowUpgrade70' => 'Pfeil Upgrade (+70)', + 'HalfMagic' => 'Halbe Magie', + 'QuarterMagic' => 'Viertel Magie', + 'Programmable1' => 'Programmierbar 1', + 'Programmable2' => 'Programmierbar 2', + 'Programmable3' => 'Programmierbar 3', + 'SilverArrowUpgrade' => 'Silberpfeil Upgrade', + 'Rupoor' => 'Rupoor', + 'RedClock' => 'Rote Uhr', + 'BlueClock' => 'Blaue Uhr', + 'GreenClock' => 'Grüne Uhr', + 'ProgressiveSword' => 'Progressives Schwert', + 'ProgressiveShield' => 'Progressives Schild', + 'ProgressiveArmor' => 'Progressive Rüstung', + 'ProgressiveGlove' => 'Progressive Handschuhe', + 'singleRNG' => 'Einzigartiger RNG Gegenstand', + 'multiRNG' => 'Nicht einzigartiger RNG Gegenstand', + 'ProgressiveBow' => 'Progressiver Bogen', + 'Triforce' => 'Triforce', + 'PowerStar' => 'Power-Stern', + 'TriforcePiece' => 'Triforce-Splitter', + 'MapLW' => 'Lichtwelt-Karte', + 'MapDW' => 'Schattenwelt-Karte', + 'MapA2' => 'Karte von Ganons Turm', + 'MapD7' => 'Karte vom Schildkrötenfelsen', + 'MapD4' => 'Karte von Blinds Versteck', + 'MapP3' => 'Karte von Heras Turm', + 'MapD5' => 'Karte vom Eispalast', + 'MapD3' => 'Karte vom Skelettwald', + 'MapD6' => 'Karte vom Wüstenseepalast', + 'MapD1' => 'Karte vom Palast der Dunkelheit', + 'MapD2' => 'Karte vom Sumpfpalast', + 'MapA1' => 'Karte von Agahnims Turm', + 'MapP2' => 'Karte vom Wüstenpalast', + 'MapP1' => 'Karte vom Ostpalast', + 'MapH1' => 'Karte von Schloss Hyrule', + 'MapH2' => 'Karte der Kanalisation', + 'CompassA2' => 'Kompass von Ganons Turm', + 'CompassD7' => 'Kompass vom Schildkrötenfelsen', + 'CompassD4' => 'Kompass von Blinds Versteck', + 'CompassP3' => 'Kompass von Heras Turm', + 'CompassD5' => 'Kompass vom Eispalast', + 'CompassD3' => 'Kompass vom Skelettwald', + 'CompassD6' => 'Kompass vom Wüstenseepalast', + 'CompassD1' => 'Kompass vom Palast der Dunkelheit', + 'CompassD2' => 'Kompass vom Sumpfpalast', + 'CompassA1' => 'Kompass von Agahnims Turm', + 'CompassP2' => 'Kompass vom Wüstenpalast', + 'CompassP1' => 'Kompass vom Ostpalast', + 'CompassH1' => 'Kompass von Schloss Hyrule', + 'CompassH2' => 'Kompass der Kanalisation', + 'BigKeyA2' => 'Großer Schlüssel von Ganons Turm', + 'BigKeyD7' => 'Großer Schlüssel vom Schildkrötenfelsen ', + 'BigKeyD4' => 'Großer Schlüssel von Blinds Versteck', + 'BigKeyP3' => 'Großer Schlüssel von Heras Turm', + 'BigKeyD5' => 'Großer Schlüssel vom Eispalast', + 'BigKeyD3' => 'Großer Schlüssel vom Skelettwald', + 'BigKeyD6' => 'Großer Schlüssel vom Wüstenseepalast', + 'BigKeyD1' => 'Großer Schlüssel vom Palast der Dunkelheit', + 'BigKeyD2' => 'Großer Schlüssel vom Sumpfpalast', + 'BigKeyA1' => 'Großer Schlüssel von Agahnims Turm', + 'BigKeyP2' => 'Großer Schlüssel vom Wüstenpalast', + 'BigKeyP1' => 'Großer Schlüssel vom Ostpalast', + 'BigKeyH1' => 'Großer Schlüssel von Schloss Hyrule', + 'BigKeyH2' => 'Großer Schlüssel der Kanalisation', + 'KeyH2' => 'Kleiner Schlüssel der Kanalisation', + 'KeyH1' => 'Kleiner Schlüssel von Schloss Hyrule', + 'KeyP1' => 'Kleiner Schlüssel vom Ostpalast', + 'KeyP2' => 'Kleiner Schlüssel vom Wüstenpalast', + 'KeyA1' => 'Kleiner Schlüssel von Agahnims Turm', + 'KeyD2' => 'Kleiner Schlüssel vom Sumpfpalast', + 'KeyD1' => 'Kleiner Schlüssel vom Palast der Dunkelheit', + 'KeyD6' => 'Kleiner Schlüssel vom Wüstenseepalast', + 'KeyD3' => 'Kleiner Schlüssel vom Skelettwald', + 'KeyD5' => 'Kleiner Schlüssel vom Eispalast', + 'KeyP3' => 'Kleiner Schlüssel von Heras Turm', + 'KeyD4' => 'Kleiner Schlüssel von Blinds Versteck', + 'KeyD7' => 'Kleiner Schlüssel vom Schildkrötenfelsen', + 'KeyA2' => 'Kleiner Schlüssel von Ganons Turm', + 'KeyGK' => 'Generischer kleiner Schlüssel', + 'Crystal1' => 'Kristall 1', + 'Crystal2' => 'Kristall 2', + 'Crystal3' => 'Kristall 3', + 'Crystal4' => 'Kristall 4', + 'Crystal5' => 'Kristall 5', + 'Crystal6' => 'Kristall 6', + 'Crystal7' => 'Kristall 7', + 'RescueZelda' => 'Rette Zelda', + 'DefeatAgahnim' => 'Besiege Agahnim', + 'BigRedBomb' => 'Große rote Bombe', + 'DefeatAgahnim2' => 'Besiege Agahnim 2', + 'DefeatGanon' => 'Besiege Ganon', - 'NoSlipBoots' => 'Ice Cleats', - 'Reindeer1' => 'Dasher', - 'Reindeer2' => 'Dancer', - 'Reindeer3' => 'Prancer', - 'Reindeer4' => 'Vixen', - 'Reindeer5' => 'Comet', - 'Reindeer6' => 'Cupid', - 'Reindeer7' => 'Donner', - 'Reindeer8' => 'Blitzen', - 'Coal1' => 'Coal', - 'Coal2' => 'Coal', - - 'Armos Knights' => 'Armos Knights', - 'Lanmolas' => 'Lanmolas', - 'Moldorm' => 'Moldorm', - 'Helmasaur King' => 'Helmasaur King', - 'Arrghus' => 'Arrghus', - 'Mothula' => 'Mothula', - 'Blind' => 'Blind', - 'Kholdstare' => 'Kholdstare', - 'Vitreous' => 'Vitreous', - 'Trinexx' => 'Trinexx', - 'Armos Knights' => 'Armos Knights', - 'Lanmolas' => 'Lanmolas', - 'Moldorm' => 'Moldorm', - 'Agahnim' => 'Agahnim', - 'Agahnim 2' => 'Agahnim 2', - 'Ganon' => 'Ganon', + 'ChocoboEgg' => 'Chocobo Egg', + + 'NoSlipBoots' => 'Ice Cleats', + 'Reindeer1' => 'Dasher', + 'Reindeer2' => 'Dancer', + 'Reindeer3' => 'Prancer', + 'Reindeer4' => 'Vixen', + 'Reindeer5' => 'Comet', + 'Reindeer6' => 'Cupid', + 'Reindeer7' => 'Donner', + 'Reindeer8' => 'Blitzen', + 'Coal1' => 'Coal', + 'Coal2' => 'Coal', + + 'Armos Knights' => 'Armos Knights', + 'Lanmolas' => 'Lanmolas', + 'Moldorm' => 'Moldorm', + 'Helmasaur King' => 'Helmasaur King', + 'Arrghus' => 'Arrghus', + 'Mothula' => 'Mothula', + 'Blind' => 'Blind', + 'Kholdstare' => 'Kholdstare', + 'Vitreous' => 'Vitreous', + 'Trinexx' => 'Trinexx', + 'Armos Knights' => 'Armos Knights', + 'Lanmolas' => 'Lanmolas', + 'Moldorm' => 'Moldorm', + 'Agahnim' => 'Agahnim', + 'Agahnim 2' => 'Agahnim 2', + 'Ganon' => 'Ganon', + + 'Test' => 'Testing Item', ]; diff --git a/resources/lang/de/navigation.php b/resources/lang/de/navigation.php index cdae3c829..fe5c61dc6 100644 --- a/resources/lang/de/navigation.php +++ b/resources/lang/de/navigation.php @@ -1,27 +1,25 @@ 'Anfangen zu spielen', - 'start_watching' => 'Anfangen zu schauen', - 'generate' => 'Generiere Spiel', - 'randomizer' => 'Generiere Randomized Spiel', - 'entrance' => 'Entrance Randomizer', - 'daily' => 'Tägliche Herausforderung', - 'customizer' => 'Erstelle eigenes Spiel', + 'start_playing' => 'Anfangen zu spielen', + 'start_watching' => 'Anfangen zu schauen', + 'generate' => 'Generiere Spiel', + 'randomizer' => 'Generiere Randomized Spiel', + 'entrance' => 'Entrance Randomizer', + 'daily' => 'Tägliche Herausforderung', + 'customizer' => 'Erstelle eigenes Spiel', - 'calendar' => 'Kalender der Events', + 'calendar' => 'Kalender der Events', - 'language' => ' Sprache', + 'language' => ' Sprache', - 'help' => 'Hilfe', - 'resources' => 'Ressourcen', - 'options' => 'Spieloptionen', - 'races' => 'Organisierte Rennen', - 'updates' => 'Updates', - 'game_entrance' => 'Entrance Randomizer', - 'game_enemizer' => 'Enemizer', - 'sprite_preview' => 'Sprite Options', - 'contribute' => 'Mitwirken', - 'discord' => 'Trete uns auf Discord bei', - 'report_issue' => 'Melde ein Problem', + 'help' => 'Hilfe', + 'resources' => 'Ressourcen', + 'options' => 'Spieloptionen', + 'races' => 'Organisierte Rennen', + 'updates' => 'Updates', + 'sprite_preview' => 'Sprite Options', + 'contribute' => 'Mitwirken', + 'discord' => 'Trete uns auf Discord bei', + 'report_issue' => 'Melde ein Problem', ]; diff --git a/resources/lang/de/options.php b/resources/lang/de/options.php index 02c3553a0..fcb497079 100644 --- a/resources/lang/de/options.php +++ b/resources/lang/de/options.php @@ -1,355 +1,606 @@ 'Optionen', - 'subheader' => 'Es gibt viele Wege um ALttP:Randomizer zu spielen!', - 'cards' => [ - 'mode' => [ - 'header' => __('randomizer.mode.title'), - 'sections' => [ - [ - 'header' => __('randomizer.mode.options.standard'), - 'content' => [ - 'Dieser Modus hält sich am meisten an das Original. Du startes in Link´s Bett, kriegst eine Waffe von deinem Onkel (hängt zusammen mit den Schwert Optionen, siehe unten), und rettest Zelda bevor du mit dem Rest des Spiels fortschreiten kannst.', - ], - ], - [ - 'header' => __('randomizer.mode.options.open'), - 'content' => [ - 'Dieser Modus startet mit der Option ob du in deinem Haus oder in der Kathedrale startest und du kannst sofort die Welt erkunden. Es gibt einige Punkte zu erwähnen in diesem Modus:', - '
    ' - . '
  • Der Onkel ist schon in der Kanalisation und hat einen Gegenstand.
  • ' - . '
  • Dunkle Räume bekommen keinen freien Lichtpegel, nichtmal in der Kanalisation.
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.mode.options.inverted'), - 'content' => [ - 'Tired of starting in the Light World and working your way to Ganon on top of Death Mountain? Well have we got the mode for you!', - 'Introducing inverted, the game state where we flip the game on its head just to really mess with things.', - 'This mode is really hard in the beginning so we really don’t suggest it for your first playthrough. Enemies in the Dark World hit like a truck, well a bunch of trucks really, and starting with 3 hearts is enough to get gone in a single hit or two', - 'But what does this all mean? Well we had to make some serious modifications to the game to have Link start in the Dark World and get to the light world to complete the game:', - '
    ' - . '
  • Link’s house is now located in the place that the Bomb shop used to reside
  • ' - . '
  • The Bomb shop has been transported to the light world where Link’s house used to be
  • ' - . '
  • The ' . __('item.MagicMirror') . ' works in the Light World to take you back to the Dark World
  • ' - . '
  • The ' . __('item.OcarinaInactive') . ' only works in the Dark World, but you still have to find a way to activate it in the Light world
  • ' - . '
  • Lots of terrain in the Light World has been modified to allow you to get to those pesky ' . __('item.MagicMirror') . ' locations
  • ' - . '
  • The old man has decided to “get lost” the Dark World. You’ll still have to return him to his cave in the Light World
  • ' - . '
  • Portals? All the ones you used to see in the Light World will be in the Dark World with the same requirements to use them
  • ' - . '
  • Agahnim has really gotten tired of his place in Hyrule Castle and decided to move on up to the Tower formally known as Ganon’s on Dark Death Mountain. No silly bat barrier to get in, oh and he added some stairs so you can get to East Dark Death Mountain or his place pretty quickly
  • ' - . '
  • Since Agahnim decided to move on up, that means Ganon’s Tower came on down to Hyrule Castle, that center door being in the entrance, you’ll still need those 7 crystals though
  • ' - . '
  • Ice Palace tore down the wall so you can swim there pretty early now
  • ' - . '
  • Remember a bunny can use the ' . __('item.BookOfMudora') . ' as well as talk to people, and collect items it sees lying on the ground
  • ' - . '
  • The top of Turtle Rock can be accessed by walking on it’s tail
  • ' - . '
', - ], - ], - ], - ], - 'weapons' => [ - 'header' => __('randomizer.weapons.title'), - 'sections' => [ - [ - 'header' => __('randomizer.weapons.options.randomized'), - 'content' => [ - 'Alle Schwert Upgrades sind zufällig verteilt. Du startest nicht mit einem Schwert und wirst wahrscheinlich eine Weile brauchen eins zu finden. Bomben sind eine gute Waffe für den Anfang, genauso wie Büsche und Schilder! Nutze jeden Gegenstand denn du findest um dich zu verteidigen.', - 'Wenn diese Option mit dem Standard Modus kombiniert ist (siehe oben), wird dein Onkel so gnädig sein dir einer der folgenden Gegenstände zu geben, damit du die Flucht Sequenz abschließen kannst:', - '
    ' - . '
  • Schwert Upgrade (ja, es ist immer noch möglich)
  • ' - . '
  • Hammer
  • ' - . '
  • Bogen + Volle Auffüllung deiner Pfeile
  • ' - . '
  • Volle Auffüllung der Bomben
  • ' - . '
  • Feuerstab + Volle Auffüllung der Magie
  • ' - . '
  • Somaria Stab + Volle Auffüllung der Magie
  • ' - . '
  • Byrna Stab + Volle Auffüllung der Magie
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.weapons.options.uncle'), - 'content' => [ - 'Der Onkel hat immer ein Schwert. Die verbleibende Upgrades sind zufällig verteilt.', - ], - ], - [ - 'header' => __('randomizer.weapons.options.swordless'), - 'content' => [ - 'Alle Schwerter wurden aus dem Spiel entfernt. Weil das Spiel aber vorraussetzt das du ein Schwert hast, sind folgende Änderungen nur im Schwertlos Modus enthalten:', - '
    ' - . '
  • Schwerter wurden ersetzt durch 4 Kopien von 20 Rubine (ein grüner Rubin sprite mit “20” drauf).
  • ' - . '
  • Die Barriere die den Eingang von Agahnim’s Turm blockiert kann mit dem Hammer zerstört werden.
  • ' - . '
  • Die Vorhänge die den Fortschritt in Agahnim’s Turm blockieren sind schon vorher geöffnet, so wie die Ranken im Skelettwald.
  • ' - . '
  • Medaillone können nur genutzt werden um den Schildkrötenfelsen oder den Wüstenseepalast zu öffnen, oder um im Eispalast fortzuschreiten. Normalerweise wird ein Schwert gebraucht um sie zu nutzen.
  • ' - . '
  • Ganon kann nun Schaden vom Hammer nehmen.
  • ' - . '
  • Die Silberpfeile sind in allen Schwierigkeitsgraden erhältlich.
  • ' - . '
  • Der Hammer und das Buch Mudora werden gebraucht um die Tafeln von Quake und Bombos zu lesen.
  • ' - . '
', - ], - ], - ], - ], - 'logic' => [ - 'header' => __('randomizer.logic.title'), - 'sections' => [ - [ - 'header' => __('randomizer.logic.options.NoGlitches'), - 'content' => [ - 'Dieser Modus setzt kein fortschrittliches Wissen über das Spiel vorraus. Es wurde so entworfen als würdest du das Spiel zum ersten Mal spielen.', - 'In diesem Modus wurde vorgebeugt das du nirgends feststecken kannst, egal wie du deine kleine Schlüsseln in Dungeons verwendest.', - 'Es könnte sein das vorrausgesetzt wird, das du in bestimmten Situation "Save and Quit" benutzt, um zum Beispiel wieder zurück in die Lichtwelt zu kommen wenn du in der Schattenwelt bist ohne magischen Spiegel.', - ], - ], - [ - 'header' => __('randomizer.logic.options.OverworldGlitches'), - 'content' => [ - 'Dieser Modus verlangt einige der einfachen Overworld Glitches. Es ist schwieriger als nur die Fake Flippers zum Hobo! Nur diese zwei Arten von Major Glitches werden vorausgesetzt:', - '
    ' - . '
  • Overworld boots clipping
  • ' - . '
  • Mirror clipping (DMD, TR Middle Clip, und Fluteless Mire)
  • ' - . '
', - 'Die meisten Minor Glitches werden berücksichtigt für:', - '
    ' - . '
  • Fake Flippers (erlaubt Zugang zum Eispalast, König Zora, Herzteil vom Hylia-See, und Hobo ohne Schwimmflossen)
  • ' - . '
  • Dungeon Bunny Revival (erlaubt Zugang zum Eispalast ohne die Mondperle)
  • ' - . '
  • Overworld Bunny Revival (erlaubt Zugang zum Wüstenseepalast und dem Schuppe außerhalb des Wüstenseepalast ohne die Mondperle und ohne DMD machen zu müssen)
  • ' - . '
  • Super Bunny (erlaubt Zugang zu zwei Kisten auf dem Todesberg in der Schattenwelt ohne die Mondperle)
  • ' - . '
  • Surfing Bunny (erlaubt Zugang zum Herzteil vom Hylia-See ohne die Mondperle)
  • ' - . '
  • Walk on Water (erlaubt Zugang zum Vorsprung im Reich der Zoras ohne die Schwimmflossen)
  • ' - . '
', - 'Die folgenden werden NICHT berücksichtigt in der Logik, du wirst also nie gezwungen sein sie zu machen:', - '
    ' - . '
  • Bootless Clips
  • ' - . '
  • Mirror Screenwraps
  • ' - . '
  • Overworld YBAs
  • ' - . '
  • Underworld Clips
  • ' - . '
  • Dark Room Navigation
  • ' - . '
  • Hovering
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.logic.options.MajorGlitches'), - 'content' => [ - 'Dieser Modus verlangt alles bis auf EG und semi-EG. Dieser Modus ist extrem schwert und setzt sehr gute Kenntnisse über Glitches vorraus, einschließlich:', - '
    ' - . '
  • Overworld YBA
  • ' - . '
  • Clipping out of bounds
  • ' - . '
  • Screenwraps
  • ' - . '
', - 'Einige zusätzliche Veränderungen wurden unternommen damit das Spiel korrekt funktioniert mit dieser Logik:', - '
    ' - . '
  • Die falsche Schattenwelt ist nicht mehr rausgepatcht. Kristalle werden immer fallen, unabhänging von Konflikten mit Amuletten.
  • ' - . '
  • Der Wasserpegel im Sumpfpalast wird nicht sinken wenn du das Gebiet auf der Oberwelt verlässt, ausgenommen ist der erste Raum.
  • ' - . '
  • Wenn du speicherst und beendest in der Schattenwelt, wirst du immer auf der Pyramide landen wenn du Agahnim besiegt hast.
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.logic.options.None'), - 'content' => [ - 'Es gibt überhaupt keine Überprüfung wo ein Gegenstand landen wird, so viel Glück wenn du diese Option versuchst.', - ], - ], - ], - ], - 'goal' => [ - 'header' => __('randomizer.goal.title'), - 'sections' => [ - [ - 'header' => __('randomizer.goal.options.ganon'), - 'content' => [ - 'Wie im Original, ist dein Ziel alle sieben Kristalle zu sammeln, dich durch Ganons Turm durchzuschlagen, um dann Ganon zu besiegen.', - ], - ], - [ - 'header' => __('randomizer.goal.options.dungeons'), - 'content' => [ - 'Du musst alle Bosse in Hyrule besiegen, einschließlich beide Verkörperungen von Agahnim. Nur wenn alle besiegt sind, kannst du Ganon besiegen.', - ], - ], - [ - 'header' => __('randomizer.goal.options.pedestal'), - 'content' => [ - 'Sammle das Amulett des Mutes, der Weisheit, der Stärke und ziehe dann das Triforce aus dem Sockel! Aber Vorsicht, du wirst villeicht über ganz Hyrule reisen müssen, einschließlich Ganon’s Turm, um dein Abenteuer abschließen zu können.', - ], - ], - [ - 'header' => __('randomizer.goal.options.triforce-hunt'), - 'content' => [ - 'Das Triforce wurde in 30 Splitter zerschlagen und über ganz Hyrule verteilt! Sammle 20 Splitter um zu gewinnen!', - ], - ], - ], - ], - 'difficulty' => [ - 'header' => __('randomizer.difficulty.title'), - 'sections' => [ - [ - 'header' => __('randomizer.difficulty.options.easy'), - 'content' => [ - 'Dieser Modus ist für neuere Spieler empfohlen. Einfach macht das reisen durch Hyrule um einiges sicherer.', - 'Das finden der zweiten ½ Magic wird deine Magie zu ¼ Magic upgraden.', - 'Wenn im Standard Modus, falls der Onkel Bogen, Bomen, Feuerstab, Somaria Stab, oder Byrna Stab hat, wird Link während der Flucht Sequenz unendlich Munition für diesen Gegenstand erhalten.', - 'Schau dir die Tabelle an die die Schwierigkeitsgrade untereiander vergleicht für alle Informationen.', - ], - ], - [ - 'header' => __('randomizer.difficulty.options.normal'), - 'content' => [ - 'In diesem Modus wirst du alle Gegenstände vom Original Spiel finden.', - ], - ], - [ - 'header' => sprintf('%s, %s, and %s', __('randomizer.difficulty.options.hard'), __('randomizer.difficulty.options.expert'), __('randomizer.difficulty.options.insane')), - 'content' => [ - 'Du suchst eine Herausforderung? Diese fortschrittlichen Schwierigkeitsgrade passen das Spiel um einiges mehr an um dein Können zu testen! Schau dir unten den Vergleich an für mehr Informationen.', - ], - ], - ], - 'comparison' => [ - 'header' => 'Schwierigkeitsgrade Vergleichs', - 'maximum_health' => 'Maximales Leben', - 'heart_containers' => 'Herzcontainer', - 'heart_pieces' => 'Herzteile', - 'maximum_mail' => 'Höchste Rüstung', - 'number_in_pool' => '# im Pool', - 'maximum_sword' => 'Höchstes Schwert', - 'maximum_shield' => 'Höchstes Schild', - 'shields_store' => 'Kaufbares Schild', - 'maximum_magic' => 'Maximale Magie Kapazität', - 'number_silvers' => '# der Silberpfeile', - 'number_silvers_swordless' => '# der Silberpfeile (Schwertlos)', - 'number_bottles' => '# der Flaschen', - 'number_lamps' => '# der Lampe', - 'potion_magic' => 'Fülling der Magie eines Elixiers', - 'potion_health' => 'Fülling der Herzen eine Elixiers ', - 'bug_net_fairy' => 'Fängt Schmetterlingsnetzt Feen', - 'powder_bubble' => 'Magisches Pulver auf Anti-Feen', - 'cape_consumption' => 'Magieverbrauchsrate des Umhangs', - 'byrna_invincible' => 'Byrna verleiht Unverwundbarkeit', - 'stun_boomerang' => 'Bumerang lähmt Gegner', - 'stun_hookshot' => 'Enterharken lähmt Gegner', - 'capacity_upgrade' => 'Pfeile / Bomben Kapazität Upgrades', - 'drop_rates' => 'Gegner Drop Raten', - 'quarter' => 'Viertel', - 'half' => 'Halb', - 'normal' => 'Normal', - 'shield_3' => 'Spiegel', - 'shield_2' => 'Rot', - 'shield_1' => 'Onkel’s', - 'none' => 'Keine', - 'sword_4' => 'Gold', - 'sword_3' => 'Gehärtetes', - 'sword_2' => 'Master', - 'mail_3' => 'Rot', - 'mail_2' => 'Blau', - 'mail_1' => 'Grün', - 'fairy' => 'Feen', - 'heart' => 'Herz', - 'bee' => 'Bienen', - 'yes' => 'Ja', - 'no' => 'Nein', - 'tooltip' => [ - 'silvers' => 'Silberpfeile funktionieren nur im Raum von Ganon.', - 'bottles' => 'Wenn 4 Flaschen gesammelt wurden, werden die restlichen in Rubine umgewandelt.', - 'potion_magic' => 'Elixiere werden 100% der Magie auffüllen in der Stachelhöhle.', - 'potion_health' => 'Elixiere werden 20 Herzen auffüllen in der Stachelhöhle.', - ], - ], - ], - 'variation' => [ - 'header' => __('randomizer.variation.title'), - 'sections' => [ - [ - 'header' => __('randomizer.variation.options.none'), - 'content' => [ - 'Die Option die dem Original am meisten ähnelt.', - ], - ], - [ - 'header' => __('randomizer.variation.options.timed-race'), - 'content' => [ - 'Die Zeitanzeige zählt aufwärts von 0, mit dem Ziel die beste Zeit auf der Anzeige zu haben. Es gibt Gegenstände in der Welt die deine Zeitanzeige beeinflussen können, so als Erster fertig zu sein heißt nicht der Gewinner zu sein.', - 'Wirst du Zeit spenden um Uhren zu finden? Oder wirst du einfach bis zum Ende rennen?', - 'Die folgende Gegenstände wurde zum Gegenstandspool hinzugefügt:', - '
    ' - . '
  • 20 Grüne Uhren die 4 Minuten von der Zeitanzeige abziehen
  • ' - . '
  • 10 Blaue Uhren die 2 Minuten von der Zeitanzeige abziehen
  • ' - . '
  • 10 Rote Uhren die 2 Minuten von der Zeitanzeige hinzufügen
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.variation.options.timed-ohko') . ' (One Hit Knockout)', - 'content' => [ - 'In diesem Modus startest du mit Zeit auf der Anzeige und findest grüne Uhren, um mehr hinzuzufügen.', - 'Wenn die Zeitanzeige Null erreicht, wird der One Hit Knockout Modus aktiviert, wo alles dich sofort töten wird.', - 'Verzweifle aber nicht. Wenn du im OHKO Modus bist und eine weitere Uhr findest, wirst du den OHKO Modus verlassen und bekommst Zeit auf deine Anzeige, unabhänging wie lange du im OHKO Modus warst.', - ], - 'ohko_table' => [ - 'minutes' => 'Minuten', - 'start_time' => 'Zeit mit der du startest', - 'green_clock' => 'Grüne Uhren (+4 Minuten)', - 'red_clock' => 'Rote Uhren (sofort im OHKO)', - ], - ], - [ - 'header' => __('randomizer.variation.options.ohko') . ' (One Hit Knockout)', - 'content' => [ - 'Egal bei welchem Schaden, Link wird sofort sterben. Nicht für schwache Herzen.', - ], - ], - [ - 'header' => __('randomizer.variation.options.key-sanity'), - 'content' => [ - 'Das Spiel ist nicht zufällig genug? Du suchst eine richtige Herausforderung?', - 'NA SCHÖN!', - 'Alle Karten, Kompasse und Schlüssel die in Truhen gefunden werden, sind nicht mehr an ihre Dungeons gebunden!', - 'Du wirst alles von oben bis unten absuchen müssen um Schlüssel zu finden damit du in den Dungeons fortschreiten kannst. Schlüssel von Gegner und Töpfe bleiben aber gleich.', - 'Außerdem sind Karten und Kompasse mehr wert: Die Karte der Oberwelt wird dir keine Informationen über die Dungeons geben bis du die entsprechende Karte gefunden hast (und falls du dachtest du könntest die Musik der Dungeons nutzen, falsch gedacht, die sind jetzt auch zufällig). Und Kompasse, naja, die Zeigen dir an wieviele Kisten du schon in einem Dungeon geöffnet hast wenn du sie einsammelst.', - 'Und falls du dich fragst woher du weißt welchen Schlüssel / Karte / Kompass du eingesammelt hast. Da haben wir vorgesorgt: Es wird eine Textbox erscheinen die dir mitteilt für welchen Dungeons es ist . Außerdem wird das Menü eine Tabelle haben, die dir hilft, alles im Überblick zu haben.', - 'Karten und Kompasse werden in der Logik vorrausgesetzt um ihre entsprechende Dungeons zu beenden.', - ], - ], - [ - 'header' => __('randomizer.variation.options.retro'), - 'content' => [ - 'Eine Erinnerung an den ersten Teil von der Legend of Zelda Serie, ' . __('randomizer.variation.options.retro') . ' ' . __('randomizer.variation.title') . ' verbindet uns sogar mehr zu der Vergangenheit.', - [ - 'header' => 'Rubinen betriebener Bogen', - 'content' => [ - 'Der Bogen nutzt nicht länger Pfeile. Es nutzt nun Rubine. Jeder Holzpfeil nutzt 10 Rubine zum feuern, während jeder Silberpfeil 50 Rubine kostet.', - 'Holzpfeile sind nun getrennt vom Bogen, genau wie Silberpfeile; du musst den Bogen und entweder Holzpfeile oder Silberpfeile finden um den Bogen zu benutzen zu können.', - 'Holzpfeile sind nun ein Gegenstand den man beschaffen muss, und zwar durch einen einmaligen Einkauf in einem Geschäft. Man kann sie NICHT in regulären Kisten finden oder andersweitig sonst wo außerhalb eines Geschäfts.', - 'Falls du die Silberpfeile findest ohne die Holzpfeile gekauft zu haben, wirst du nur in der Lage sein Silberpfeile zu verschießen.', - ], - ], - [ - 'header' => 'Geschäfte auf der Oberwelt', - 'content' => [ - 'Fünf Geschäfte von möglichen neun werden zufällig ausgewählt und werden neue Ware haben. Dies schließt NICHT das Geschäft der großen Bombe und das Geschäft der Hexe mit ein. Die Holzpfeile werden erhältlich sein für 80 Rubine und kleine Schlüssel für 100 Rubine pro Stück. Kleine Schlüssel sind mehrfach kaufbar.', - ], - ], - [ - 'header' => 'Kleine Schlüssel', - 'content' => [ - 'Kleine Schlüssel sind nicht mehr Dungeon gebunden. Sie wurden in den generellen Gegenstandspool gemischt und sind außerhalb Dungeons auffindbar. Schlüssel von Gegner und Töpfe wurden nicht verändert.', - 'Im einfachen und normalen Schwierigkeitsgrad wurden zehn Schlüssel aus dem Gegenstandspool entfernt ; fünfzehn in Schwer, Experte und Wahnsinnig. Denke nach wie du deine Schlüssel nutzt, und falls du feststeckst, kannst du welche im Geschäft kaufen!', - 'Große Schlüssel, Karten und Kompasse sind an ihre jeweiligen Dungeons gebunden und wurden nicht zufällig verteilt außerhalb ihrer Dungeon.', - ], - ], - [ - 'header' => 'Wähle-Eins Höhlen', - 'content' => [ - 'Vier zufällig ausgewählte Höhlen mit nur einem Eingang werden dich nicht zur einem Ort mit einem Gegenstand führen, sondern zu einer Wähle-Eins Höhle wo du die Auswahl zwischen einem Herzcontainer und einem blauen Elixier hast. Die Herzcontainer sind nicht aus dem Gegenstandspool, sondern sind Extra. Aber du wirst nicht mehr als 20 Herzcontainer aufeinmal haben können.', - 'Eine zufällig ausgewählte Höhle mit nur einem Eingang wird dich zu einem mysteriösen, aber dennoch bekannten alten Mann führen der ein Schwert Upgrade besitzt. Dieses Schwert Upgrade ist aus dem generellen Gegenstandspool.', - ], - ], - ], - ], - ], - ], - 'item_pool' => 'Gegenstandspool', - ], + 'header' => 'Optionen', + 'subheader' => 'Es gibt viele Wege um ALttP:Randomizer zu spielen!', + 'cards' => [ + 'glitches_required' => [ + 'header' => __('randomizer.glitches_required.title'), + 'sections' => [ + [ + 'header' => __('randomizer.glitches_required.options.none'), + 'content' => [ + 'Dieser Modus setzt kein fortschrittliches Wissen über das Spiel vorraus. Es wurde so entworfen als würdest du das Spiel zum ersten Mal spielen.', + 'In diesem Modus wurde vorgebeugt das du nirgends feststecken kannst, egal wie du deine kleine Schlüsseln in Dungeons verwendest.', + 'Es könnte sein das vorrausgesetzt wird, das du in bestimmten Situation "Save and Quit" benutzt, um zum Beispiel wieder zurück in die Lichtwelt zu kommen wenn du in der Schattenwelt bist ohne magischen Spiegel.', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.overworld_glitches'), + 'content' => [ + 'Dieser Modus verlangt einige der einfachen Overworld Glitches. Es ist schwieriger als nur die Fake Flippers zum Hobo! Nur diese zwei Arten von Major Glitches werden vorausgesetzt:', + '
    ' + . '
  • Overworld boots clipping
  • ' + . '
  • Mirror clipping (DMD, TR Middle Clip, und Fluteless Mire)
  • ' + . '
', + 'Die meisten Minor Glitches werden berücksichtigt für:', + '
    ' + . '
  • Fake Flippers (erlaubt Zugang zum Eispalast, König Zora, Herzteil vom Hylia-See, und Hobo ohne Schwimmflossen)
  • ' + . '
  • Dungeon Bunny Revival (erlaubt Zugang zum Eispalast ohne die Mondperle)
  • ' + . '
  • Overworld Bunny Revival (erlaubt Zugang zum Wüstenseepalast und dem Schuppe außerhalb des Wüstenseepalast ohne die Mondperle und ohne DMD machen zu müssen)
  • ' + . '
  • Super Bunny (erlaubt Zugang zu zwei Kisten auf dem Todesberg in der Schattenwelt ohne die Mondperle)
  • ' + . '
  • Surfing Bunny (erlaubt Zugang zum Herzteil vom Hylia-See ohne die Mondperle)
  • ' + . '
  • Walk on Water (erlaubt Zugang zum Vorsprung im Reich der Zoras ohne die Schwimmflossen)
  • ' + . '
', + 'Die folgenden werden NICHT berücksichtigt in der Logik, du wirst also nie gezwungen sein sie zu machen:', + '
    ' + . '
  • Bootless Clips
  • ' + . '
  • Overworld YBAs
  • ' + . '
  • Underworld Clips
  • ' + . '
  • Dark Room Navigation
  • ' + . '
  • Hovering
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.major_glitches'), + 'content' => [ + 'Dieser Modus verlangt alles bis auf EG und semi-EG. Dieser Modus ist extrem schwert und setzt sehr gute Kenntnisse über Glitches vorraus, einschließlich:', + '
    ' + . '
  • Overworld YBA
  • ' + . '
  • Clipping out of bounds
  • ' + . '
  • Screenwraps
  • ' + . '
', + 'Einige zusätzliche Veränderungen wurden unternommen damit das Spiel korrekt funktioniert mit dieser Logik:', + '
    ' + . '
  • Die falsche Schattenwelt ist nicht mehr rausgepatcht. Kristalle werden immer fallen, unabhänging von Konflikten mit Amuletten.
  • ' + . '
  • Der Wasserpegel im Sumpfpalast wird nicht sinken wenn du das Gebiet auf der Oberwelt verlässt, ausgenommen ist der erste Raum.
  • ' + . '
  • Wenn du speicherst und beendest in der Schattenwelt, wirst du immer auf der Pyramide landen wenn du Agahnim besiegt hast.
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.logic.options.None'), + 'content' => [ + 'Es gibt überhaupt keine Überprüfung wo ein Gegenstand landen wird, so viel Glück wenn du diese Option versuchst.', + ], + ], + ], + ], + 'item_placement' => [ + 'header' => __('randomizer.item_placement.title'), + 'sections' => [ + [ + 'header' => __('randomizer.item_placement.options.basic'), + 'content' => [ + 'This is mostly aimed at newer players.', + ], + ], + [ + 'header' => __('randomizer.item_placement.options.advanced'), + 'content' => [ + 'The intention of this setting is to maximise glitchless item placement reach. An exception is made to prevent navigation through dark rooms. No other consideration is given to the difficulty of execution or obscurity of item placements. The expectation is a player choosing this setting is decently familiar and practiced with the original game and/or No Major Glitches speedrun.', + ], + ], + ], + ], + 'dungeon_items' => [ + 'header' => __('randomizer.dungeon_items.title'), + 'sections' => [ + [ + 'header' => __('randomizer.dungeon_items.options.standard'), + 'content' => [ + 'All dungeons items are locked to their respective dungeons.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.mc'), + 'content' => [ + 'Maps and compasses are randomized freely into the world.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.mcs'), + 'content' => [ + 'Maps, compasses and small keys are randomized freely into the world.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.full'), + 'content' => [ + 'Maps, compasses, small keys and big keys are randomized freely in to the world.', + ], + ], + ], + ], + 'accessibility' => [ + 'header' => __('randomizer.accessibility.title'), + 'sections' => [ + [ + 'header' => __('randomizer.accessibility.options.items'), + 'content' => [ + '
    ' + . '
  • It is not guaranteed that you can reach every item location
  • ' + . '
  • It is guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is not guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.accessibility.options.locations'), + 'content' => [ + '
    ' + . '
  • It is guaranteed that you can reach every item location
  • ' + . '
  • It is guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.accessibility.options.none'), + 'content' => [ + '
    ' + . '
  • It is not guaranteed that you can reach every item location
  • ' + . '
  • It is not guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is not guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + ], + ], + 'goal' => [ + 'header' => __('randomizer.goal.title'), + 'sections' => [ + [ + 'header' => __('randomizer.goal.options.ganon'), + 'content' => [ + 'Wie im Original, ist dein Ziel alle sieben Kristalle zu sammeln, dich durch Ganons Turm durchzuschlagen, um dann Ganon zu besiegen.', + ], + ], + [ + 'header' => __('randomizer.goal.options.fast_ganon'), + 'content' => [ + 'Similar to ' . __('randomizer.goal.options.ganon') . ', your goal will be to collect all required crystals and defeat Ganon, however defeating Agahnihm at the top of Ganon’s Tower is not necessarily required. Thus, if entrance shuffle is not enabled, the entrance to Ganon will already be open.', + ], + ], + [ + 'header' => __('randomizer.goal.options.dungeons'), + 'content' => [ + 'Du musst alle Bosse in Hyrule besiegen, einschließlich beide Verkörperungen von Agahnim. Nur wenn alle besiegt sind, kannst du Ganon besiegen.', + ], + ], + [ + 'header' => __('randomizer.goal.options.pedestal'), + 'content' => [ + 'Sammle das Amulett des Mutes, der Weisheit, der Stärke und ziehe dann das Triforce aus dem Sockel! Aber Vorsicht, du wirst villeicht über ganz Hyrule reisen müssen, einschließlich Ganon’s Turm, um dein Abenteuer abschließen zu können.', + ], + ], + [ + 'header' => __('randomizer.goal.options.triforce-hunt'), + 'content' => [ + 'The Triforce has been shattered and scattered into 30 pieces throughout Hyrule! Collect 20 pieces and take them to Sahasrahla to win!', + 'Wait? Who do we take these silly pieces to? Well Murahdahla of course!', + 'Who’s Murahdahla? I hear you ask. Murahdahla is the younger brother of Sahasrahla and Aginah. Back from vacation in Lorule. He has some mystic powers so be sure to have a chat with him in the Castle Courtyard.', + ], + ], + ], + ], + 'tower_open' => [ + 'header' => __('randomizer.tower_open.title'), + 'sections' => [ + [ + 'header' => '0 - 7', + 'content' => [ + 'Pick the number of Crystals required to open the way to Ganon’s Tower.', + ], + ], + [ + 'header' => __('randomizer.tower_open.options.random'), + 'content' => [ + 'This will pick a random value from above for entry into Ganon’s Tower.', + ], + ], + ], + ], + 'ganon_open' => [ + 'header' => __('randomizer.ganon_open.title'), + 'sections' => [ + [ + 'header' => '0 - 7', + 'content' => [ + 'Pick the number of Crystals required to defeat to Ganon.', + ], + ], + [ + 'header' => __('randomizer.ganon_open.options.random'), + 'content' => [ + 'This will pick a random value from above to defeat Ganon.', + ], + ], + ], + ], + 'world_state' => [ + 'header' => __('randomizer.world_state.title'), + 'sections' => [ + [ + 'header' => __('randomizer.world_state.options.standard'), + 'content' => [ + 'Dieser Modus hält sich am meisten an das Original. Du startes in Link´s Bett, kriegst eine Waffe von deinem Onkel (hängt zusammen mit den Schwert Optionen, siehe unten), und rettest Zelda bevor du mit dem Rest des Spiels fortschreiten kannst.', + ], + ], + [ + 'header' => __('randomizer.world_state.options.open'), + 'content' => [ + 'Dieser Modus startet mit der Option ob du in deinem Haus oder in der Kathedrale startest und du kannst sofort die Welt erkunden. Es gibt einige Punkte zu erwähnen in diesem Modus:', + '
    ' + . '
  • Der Onkel ist schon in der Kanalisation und hat einen Gegenstand.
  • ' + . '
  • Dunkle Räume bekommen keinen freien Lichtpegel, nichtmal in der Kanalisation.
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.world_state.options.inverted'), + 'content' => [ + 'Tired of starting in the Light World and working your way to Ganon on top of Death Mountain? Well have we got the mode for you!', + 'Introducing inverted, the game state where we flip the game on its head just to really mess with things.', + 'This mode is really hard in the beginning so we really don’t suggest it for your first playthrough. Enemies in the Dark World hit like a truck, well a bunch of trucks really, and starting with 3 hearts is enough to get gone in a single hit or two', + 'But what does this all mean? Well we had to make some serious modifications to the game to have Link start in the Dark World and get to the light world to complete the game:', + '
    ' + . '
  • Link’s house is now located in the place that the Bomb shop used to reside
  • ' + . '
  • The Bomb shop has been transported to the light world where Link’s house used to be
  • ' + . '
  • The ' . __('item.MagicMirror') . ' works in the Light World to take you back to the Dark World
  • ' + . '
  • The ' . __('item.OcarinaInactive') . ' only works in the Dark World, but you still have to find a way to activate it in the Light world
  • ' + . '
  • Lots of terrain in the Light World has been modified to allow you to get to those pesky ' . __('item.MagicMirror') . ' locations
  • ' + . '
  • The old man has decided to “get lost” in the Dark World. You’ll still have to return him to his cave in the Light World
  • ' + . '
  • Portals? All the ones you used to see in the Light World will be in the Dark World with the same requirements to use them
  • ' + . '
  • Agahnim has really gotten tired of his place in Hyrule Castle and decided to move on up to the Tower formally known as Ganon’s on Dark Death Mountain. No silly bat barrier to get in, oh and he added some stairs so you can get to East Dark Death Mountain or his place pretty quickly
  • ' + . '
  • Since Agahnim decided to move on up, that means Ganon’s Tower came on down to Hyrule Castle, that center door being in the entrance, you’ll still need the required crystals to enter though
  • ' + . '
  • Ice Palace tore down the wall so you can swim there pretty early now
  • ' + . '
  • Remember a bunny can use the ' . __('item.BookOfMudora') . ' as well as talk to people, and collect items it sees lying on the ground
  • ' + . '
  • The top of Turtle Rock can be accessed by walking on it’s tail
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.world_state.options.retro'), + 'content' => [ + 'Eine Erinnerung an den ersten Teil von der Legend of Zelda Serie, ' . __('randomizer.variation.options.retro') . ' ' . __('randomizer.variation.title') . ' verbindet uns sogar mehr zu der Vergangenheit.', + [ + 'header' => 'Rubinen betriebener Bogen', + 'content' => [ + 'Der Bogen nutzt nicht länger Pfeile. Es nutzt nun Rubine. Jeder Holzpfeil nutzt 10 Rubine zum feuern, während jeder Silberpfeil 50 Rubine kostet.', + 'Holzpfeile sind nun getrennt vom Bogen, genau wie Silberpfeile; du musst den Bogen und entweder Holzpfeile oder Silberpfeile finden um den Bogen zu benutzen zu können.', + 'Holzpfeile sind nun ein Gegenstand den man beschaffen muss, und zwar durch einen einmaligen Einkauf in einem Geschäft. Man kann sie NICHT in regulären Kisten finden oder andersweitig sonst wo außerhalb eines Geschäfts.', + 'Falls du die Silberpfeile findest ohne die Holzpfeile gekauft zu haben, wirst du nur in der Lage sein Silberpfeile zu verschießen.', + ], + ], + [ + 'header' => 'Geschäfte auf der Oberwelt', + 'content' => [ + 'Fünf Geschäfte von möglichen neun werden zufällig ausgewählt und werden neue Ware haben. Dies schließt NICHT das Geschäft der großen Bombe und das Geschäft der Hexe mit ein. Die Holzpfeile werden erhältlich sein für 80 Rubine und kleine Schlüssel für 100 Rubine pro Stück. Kleine Schlüssel sind mehrfach kaufbar.', + ], + ], + [ + 'header' => 'Kleine Schlüssel', + 'content' => [ + 'Kleine Schlüssel sind nicht mehr Dungeon gebunden. Sie wurden in den generellen Gegenstandspool gemischt und sind außerhalb Dungeons auffindbar. Schlüssel von Gegner und Töpfe wurden nicht verändert.', + 'Im einfachen und normalen Schwierigkeitsgrad wurden zehn Schlüssel aus dem Gegenstandspool entfernt ; fünfzehn in Schwer, Experte und Wahnsinnig. Denke nach wie du deine Schlüssel nutzt, und falls du feststeckst, kannst du welche im Geschäft kaufen!', + 'Große Schlüssel, Karten und Kompasse sind an ihre jeweiligen Dungeons gebunden und wurden nicht zufällig verteilt außerhalb ihrer Dungeon.', + ], + ], + [ + 'header' => 'Wähle-Eins Höhlen', + 'content' => [ + 'Vier zufällig ausgewählte Höhlen mit nur einem Eingang werden dich nicht zur einem Ort mit einem Gegenstand führen, sondern zu einer Wähle-Eins Höhle wo du die Auswahl zwischen einem Herzcontainer und einem blauen Elixier hast. Die Herzcontainer sind nicht aus dem Gegenstandspool, sondern sind Extra. Aber du wirst nicht mehr als 20 Herzcontainer aufeinmal haben können.', + 'Eine zufällig ausgewählte Höhle mit nur einem Eingang wird dich zu einem mysteriösen, aber dennoch bekannten alten Mann führen der ein Schwert Upgrade besitzt. Dieses Schwert Upgrade ist aus dem generellen Gegenstandspool.', + ], + ], + ], + ], + ], + ], + 'entrance_shuffle' => [ + 'header' => __('randomizer.entrance_shuffle.title'), + 'subheader' => 'Der Entrance Randomizer erlaubt dir die Welt auf den Kopf zu stellen und das Spiel dennoch zu spielen.', + 'sections' => [ + 'none' => [ + 'header' => __('randomizer.entrance_shuffle.options.none'), + 'content' => [ + 'No entrance shuffling is applied.', + ], + ], + 'simple' => [ + 'header' => __('randomizer.entrance_shuffle.options.simple'), + 'content' => [ + 'Mischt die Dungeon Eingänge untereinander und behällt alle Dungeons mit 4 Eingängen an einem Platz so dass die Dungeons eins zu eins untereinander getauscht werden.', + 'Anders als auf dem Todesberg in der Lichtwelt, wo die Innenräume gemischt werden, aber immer noch zum dem gleichen Punkt auf der Oberwelt verbunden sind. Auf dem Todesberg sind die Eingänge freier miteinander verbunden.', + ], + ], + 'basic' => [ + 'header' => __('randomizer.entrance_shuffle.options.restricted'), + 'content' => [ + 'Nutz die gleiche Mischung für Dungeons wie Simpel, aber die restlichen Eingänge sind freier miteinander verbunden. Höhlen und Dungeon mit mehreren Eingängen sind auf eine Welt beschränkt.', + ], + ], + 'full' => [ + 'header' => __('randomizer.entrance_shuffle.options.full'), + 'content' => [ + 'Mischt Höhlen und Dungeon Eingänge uneingeschränkt. Höhlen und Dungeon mit mehreren Eingängen sind auf eine Welt beschränkt.', + ], + ], + 'crossed' => [ + 'header' => __('randomizer.entrance_shuffle.options.crossed'), + 'content' => [ + 'Mischt Höhlen und Dungeon Eingänge uneingeschränkt, aber Verbindungshöhlen und Dungeons können nun die Lichtwelt und Schattenwelt miteinander verbinden.', + ], + ], + 'insanity' => [ + 'header' => __('randomizer.entrance_shuffle.options.insanity'), + 'content' => [ + 'Entkoppelt Eingänge und Ausgänge und mischt sie uneingeschränkt. Höhlen die im Original Spiel nur einen Eingang haben, können nur an der selben Stelle verlassen werden wo man sie betreten hat.', + ], + ], + ], + ], + 'bosses' => [ + 'header' => __('randomizer.boss_shuffle.title'), + 'sections' => [ + [ + 'header' => __('randomizer.boss_shuffle.options.none'), + 'content' => [ + 'Bosses will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.simple'), + 'content' => [ + 'The normal number of each boss shuffled in their different locations, so expect to see armos knights, lanmolas, and moldorm twice.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.full'), + 'content' => [ + 'Similar to ' . __('randomizer.boss_shuffle.options.simple') . ', except that 3 bosses are chosen at random to be seen twice.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.random'), + 'content' => [ + 'All bosses chosen at random, you may see any boss multiple times as well as not see a boss at all.', + ], + ], + ], + ], + 'enemy_shuffle' => [ + 'header' => __('randomizer.enemy_shuffle.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_shuffle.options.none'), + 'content' => [ + 'Enemies will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_shuffle.options.shuffled'), + 'content' => [ + 'Enemies are shuffled, Thieves are killable, Tile rooms are not random, Enemies are not random under bushes.', + ], + ], + [ + 'header' => __('randomizer.enemy_shuffle.options.random'), + 'content' => [ + 'Anything goes with enemies.', + ], + ], + ], + ], + 'hints' => [ + 'header' => __('randomizer.hints.title'), + 'content' => [ + 'Enable or disable the hints found on telepathic tiles throughout the world.', + ], + ], + 'difficulty' => [ + 'header' => __('randomizer.difficulty.title'), + 'item_pool' => __('randomizer.item_pool.title'), + 'item_functionality' => __('randomizer.item_functionality.title'), + 'comparison' => [ + 'header' => 'Schwierigkeitsgrade Vergleichs', + 'maximum_health' => 'Maximales Leben', + 'heart_containers' => 'Herzcontainer', + 'heart_pieces' => 'Herzteile', + 'maximum_mail' => 'Höchste Rüstung', + 'number_in_pool' => '# im Pool', + 'maximum_sword' => 'Höchstes Schwert', + 'maximum_shield' => 'Höchstes Schild', + 'shields_store' => 'Kaufbares Schild', + 'maximum_magic' => 'Maximale Magie Kapazität', + 'number_silvers' => '# der Silberpfeile', + 'number_silvers_swordless' => '# der Silberpfeile (Schwertlos)', + 'number_bottles' => '# der Flaschen', + 'number_lamps' => '# der Lampe', + 'potion_magic' => 'Fülling der Magie eines Elixiers', + 'potion_health' => 'Fülling der Herzen eine Elixiers ', + 'bug_net_fairy' => 'Fängt Schmetterlingsnetzt Feen', + 'powder_bubble' => 'Magisches Pulver auf Anti-Feen', + 'cape_consumption' => 'Magieverbrauchsrate des Umhangs', + 'byrna_invincible' => 'Byrna verleiht Unverwundbarkeit', + 'stun_boomerang' => 'Bumerang lähmt Gegner', + 'stun_hookshot' => 'Enterharken lähmt Gegner', + 'capacity_upgrade' => 'Pfeile / Bomben Kapazität Upgrades', + 'drop_rates' => 'Gegner Drop Raten', + 'quarter' => 'Viertel', + 'half' => 'Halb', + 'normal' => 'Normal', + 'shield_3' => 'Spiegel', + 'shield_2' => 'Rot', + 'shield_1' => 'Onkel’s', + 'none' => 'Keine', + 'sword_4' => 'Gold', + 'sword_3' => 'Gehärtetes', + 'sword_2' => 'Master', + 'mail_3' => 'Rot', + 'mail_2' => 'Blau', + 'mail_1' => 'Grün', + 'fairy' => 'Feen', + 'heart' => 'Herz', + 'bee' => 'Bienen', + 'yes' => 'Ja', + 'no' => 'Nein', + 'tooltip' => [ + 'silvers' => 'Silberpfeile funktionieren nur im Raum von Ganon.', + 'bottles' => 'Wenn 4 Flaschen gesammelt wurden, werden die restlichen in Rubine umgewandelt.', + 'potion_magic' => 'Elixiere werden 100% der Magie auffüllen in der Stachelhöhle.', + 'potion_health' => 'Elixiere werden 20 Herzen auffüllen in der Stachelhöhle.', + ], + ], + ], + 'weapons' => [ + 'header' => __('randomizer.weapons.title'), + 'sections' => [ + [ + 'header' => __('randomizer.weapons.options.randomized'), + 'content' => [ + 'Alle Schwert Upgrades sind zufällig verteilt. Du startest nicht mit einem Schwert und wirst wahrscheinlich eine Weile brauchen eins zu finden. Bomben sind eine gute Waffe für den Anfang, genauso wie Büsche und Schilder! Nutze jeden Gegenstand denn du findest um dich zu verteidigen.', + 'Wenn diese Option mit dem Standard Modus kombiniert ist (siehe oben), wird dein Onkel so gnädig sein dir einer der folgenden Gegenstände zu geben, damit du die Flucht Sequenz abschließen kannst:', + '
    ' + . '
  • Schwert Upgrade (ja, es ist immer noch möglich)
  • ' + . '
  • Hammer
  • ' + . '
  • Bogen + Volle Auffüllung deiner Pfeile
  • ' + . '
  • Volle Auffüllung der Bomben
  • ' + . '
  • Feuerstab + Volle Auffüllung der Magie
  • ' + . '
  • Somaria Stab + Volle Auffüllung der Magie
  • ' + . '
  • Byrna Stab + Volle Auffüllung der Magie
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.weapons.options.assured'), + 'content' => [ + 'Link starts with a sword in his hands, prepared to take on the world.', + ], + ], + [ + 'header' => __('randomizer.weapons.options.vanilla'), + 'content' => [ + 'Link will be able to find the four swords in their regular locations.', + ], + ], + [ + 'header' => __('randomizer.weapons.options.swordless'), + 'content' => [ + 'Alle Schwerter wurden aus dem Spiel entfernt. Weil das Spiel aber vorraussetzt das du ein Schwert hast, sind folgende Änderungen nur im Schwertlos Modus enthalten:', + '
    ' + . '
  • Schwerter wurden ersetzt durch 4 Kopien von 20 Rubine (ein grüner Rubin sprite mit “20” drauf).
  • ' + . '
  • Die Barriere die den Eingang von Agahnim’s Turm blockiert kann mit dem Hammer zerstört werden.
  • ' + . '
  • Die Vorhänge die den Fortschritt in Agahnim’s Turm blockieren sind schon vorher geöffnet, so wie die Ranken im Skelettwald.
  • ' + . '
  • Medaillone können nur genutzt werden um den Schildkrötenfelsen oder den Wüstenseepalast zu öffnen, oder um im Eispalast fortzuschreiten. Normalerweise wird ein Schwert gebraucht um sie zu nutzen.
  • ' + . '
  • Ganon kann nun Schaden vom Hammer nehmen.
  • ' + . '
  • Die Silberpfeile sind in allen Schwierigkeitsgraden erhältlich.
  • ' + . '
  • Der Hammer und das Buch Mudora werden gebraucht um die Tafeln von Quake und Bombos zu lesen.
  • ' + . '
', + ], + ], + ], + ], + 'enemy_health' => [ + 'header' => __('randomizer.enemy_health.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_health.options.default'), + 'content' => [ + 'Enemy Health will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.easy'), + 'content' => [ + 'All enemy health will be in the 1-4 hp range.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.hard'), + 'content' => [ + 'All enemy health will be in the 2-15 hp range.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.expert'), + 'content' => [ + 'All enemy health will be in the 2-30 hp range.', + ], + ], + ], + ], + 'enemy_damage' => [ + 'header' => __('randomizer.enemy_damage.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_damage.options.default'), + 'content' => [ + 'Enemy damage will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_damage.options.shuffled'), + 'content' => [ + 'The damage enemies do will be shuffled.', + ], + ], + [ + 'header' => __('randomizer.enemy_damage.options.random'), + 'content' => [ + 'The damage enemies do will be completely randomized.', + ], + ], + ], + ], + 'post_generation' => [ + 'header' => 'Post Generation (cosmetic)', + 'cards' => [ + 'heart_speed' => [ + 'header' => __('rom.settings.heart_speed'), + 'content' => [ + 'Change the heart beep speed when Link is low on health.', + ], + ], + 'play_as' => [ + 'header' => __('rom.settings.play_as'), + 'content' => [ + 'You may choose a new sprite for Link and enjoy Hyrule as this character.', + ], + ], + 'menu_speed' => [ + 'header' => __('rom.settings.menu_speed'), + 'content' => [ + 'Only allowed in some configurations, When available this will allow you to set the speed of the menu opening and closing.', + ], + ], + 'heart_color' => [ + 'header' => __('rom.settings.heart_color'), + 'content' => [ + 'For players with color-blindness, we have a few options so they know how much health they have.', + ], + ], + 'music' => [ + 'header' => __('rom.settings.music'), + 'content' => [ + 'Enable or disable the background music so you can listen to your our sweet tracks.', + ], + ], + 'quickswap' => [ + 'header' => __('rom.settings.quickswap'), + 'content' => [ + 'Only allowed in some configurations, When available this will allow you to use L and R buttons to change items without opening the menu.', + ], + ], + 'palette_shuffle' => [ + 'header' => __('rom.settings.palette_shuffle'), + 'content' => [ + 'Shuffles the colors of the game around, an Enemizer staple.', + ], + ], + ], + ], + 'item_pool' => 'Item Pool', + ], ]; diff --git a/resources/lang/de/races.php b/resources/lang/de/races.php index 6c6aa6c52..df39f4c43 100644 --- a/resources/lang/de/races.php +++ b/resources/lang/de/races.php @@ -1,73 +1,73 @@ 'Organisierte Spiele', - 'cards' => [ - 'races' => [ - 'header' => 'Rennen', - 'sections' => [ - [ - 'header' => '', - 'content' => [ - 'Die meisten Rennen werden auf SpeedRacing.tv oder SpeedRunsLive.com ausgetragen. Gehe sicher beide Seiten anzusehen um mehr Informationen zu erhalten wie du bei der Aktion mitmachen kannst!', - ], - ], - [ - 'header' => 'Wöchentliches Rennen des Standard Modus, Samstags um 15:00 Uhr (3pm) EST/EDT bzw. 21:00 Uhr (9pm) CET/CEST', - 'content' => [ - 'Das führende Community Event, das wöchentliche Rennen hat viele Teilnehmer!', - ], - ], - [ - 'header' => 'Wöchentliches Rennen des Offen Modus, Sonntags um 17:00 UHR (5pm) EST/EDT bzw. 23:00 Uhr (11pm) CET/CEST', - 'content' => [ - 'Trete uns Sonntag bei für ein anderes beliebtes Community Event.', - ], - ], - [ - 'header' => 'Das nächtliche Community Rennen, 22:00 Uhr (10pm) EST/EDT bzw. 04:00 Uhr (2am) CET/CEST', - 'content' => [ - 'Wir haben sogar ein nächtliches Rennen für jeden, der jeden Tag spielen möchte', - ], - ], - [ - 'header' => 'Plannungslose Rennen', - 'content' => [ - 'Die geplannten Rennen passen nicht in dein Zeitplan? Du suchst Rennen mit eher ungenutzen Optionen? Trete einer der ungeplannten Rennen bei! Du wirst rund um die Uhr Spieler finden die gewillt sind, ein Rennen zu machen. Trete dem #race-planning Kanal bei auf unserem Discord!', - ], - ], - ], - ], - 'watch' => [ - 'header' => 'Zuschauen', - 'content' => [ - 'Mit so vielen Sachen am laufen, wird es immer ein Rennen zum schauen geben! Folge diese Netzwerken und vermisse niemals ein Rennen!', - ], - ], - 'network' => [ - 'header' => 'Netzwerke für Rennen', - 'content' => [ - 'Im normalfall werden Rennen auf einem Netzwerk für Rennen ausgetragen. Diese Seiten erleichtern das organisieren von Rennen, fügen eine offiziele Zeitanzeige hinzu, und erleichtern das finden von Rennen für Teilnehmer und Zuschauer.', - 'Besuche beide Seiten SpeedRunsLive.com und SpeedRacing.tv für mehr Informationen!', - ], - ], - 'tournament' => [ - 'header' => 'Turniere', - 'sections' => [ - [ - 'header' => '', - 'content' => [ - 'Trete uns bei für aufregende Turniere mit großartigen Kommentar und exzellente Spielzüge!', - ], - ], - [ - 'header' => 'Halbjährliches geschlossenes Turnier', - 'content' => [ - 'Werde Zeuge wenn die besten Spieler um die Trophäe kämpfen! Du denkst du hast das Zeug mit den Besten Schritt zu halten? Trede dem Discord bei und halte Ausschau für die Qualifikationsrennen!', - 'Das Spring Invitational findet statt von März bis Juni.', - 'Das Fall Invitational findet statt von September bis Dezember.', - ], - ], - ], - ], - ], + 'header' => 'Organisierte Spiele', + 'cards' => [ + 'races' => [ + 'header' => 'Rennen', + 'sections' => [ + [ + 'header' => '', + 'content' => [ + 'Die meisten Rennen werden auf SpeedRacing.tv oder SpeedRunsLive.com ausgetragen. Gehe sicher beide Seiten anzusehen um mehr Informationen zu erhalten wie du bei der Aktion mitmachen kannst!', + ], + ], + [ + 'header' => 'Wöchentliches Rennen des Standard Modus, Samstags um 15:00 Uhr (3pm) EST/EDT bzw. 21:00 Uhr (9pm) CET/CEST', + 'content' => [ + 'Das führende Community Event, das wöchentliche Rennen hat viele Teilnehmer!', + ], + ], + [ + 'header' => 'Wöchentliches Rennen des Offen Modus, Sonntags um 17:00 UHR (5pm) EST/EDT bzw. 23:00 Uhr (11pm) CET/CEST', + 'content' => [ + 'Trete uns Sonntag bei für ein anderes beliebtes Community Event.', + ], + ], + [ + 'header' => 'Das nächtliche Community Rennen, 22:00 Uhr (10pm) EST/EDT bzw. 04:00 Uhr (2am) CET/CEST', + 'content' => [ + 'Wir haben sogar ein nächtliches Rennen für jeden, der jeden Tag spielen möchte', + ], + ], + [ + 'header' => 'Plannungslose Rennen', + 'content' => [ + 'Die geplannten Rennen passen nicht in dein Zeitplan? Du suchst Rennen mit eher ungenutzen Optionen? Trete einer der ungeplannten Rennen bei! Du wirst rund um die Uhr Spieler finden die gewillt sind, ein Rennen zu machen. Trete dem #race-planning Kanal bei auf unserem Discord!', + ], + ], + ], + ], + 'watch' => [ + 'header' => 'Zuschauen', + 'content' => [ + 'Mit so vielen Sachen am laufen, wird es immer ein Rennen zum schauen geben! Folge diese Netzwerken und vermisse niemals ein Rennen!', + ], + ], + 'network' => [ + 'header' => 'Netzwerke für Rennen', + 'content' => [ + 'Im normalfall werden Rennen auf einem Netzwerk für Rennen ausgetragen. Diese Seiten erleichtern das organisieren von Rennen, fügen eine offiziele Zeitanzeige hinzu, und erleichtern das finden von Rennen für Teilnehmer und Zuschauer.', + 'Besuche beide Seiten SpeedRunsLive.com und SpeedRacing.tv für mehr Informationen!', + ], + ], + 'tournament' => [ + 'header' => 'Turniere', + 'sections' => [ + [ + 'header' => '', + 'content' => [ + 'Trete uns bei für aufregende Turniere mit großartigen Kommentar und exzellente Spielzüge!', + ], + ], + [ + 'header' => 'Halbjährliches geschlossenes Turnier', + 'content' => [ + 'Werde Zeuge wenn die besten Spieler um die Trophäe kämpfen! Du denkst du hast das Zeug mit den Besten Schritt zu halten? Trede dem Discord bei und halte Ausschau für die Qualifikationsrennen!', + 'Das Spring Invitational findet statt von März bis Juni.', + 'Das Fall Invitational findet statt von September bis Dezember.', + ], + ], + ], + ], + ], ]; diff --git a/resources/lang/de/randomizer.php b/resources/lang/de/randomizer.php index ea69f81f9..389276441 100644 --- a/resources/lang/de/randomizer.php +++ b/resources/lang/de/randomizer.php @@ -1,84 +1,215 @@ 'Item Randomizer', - 'switch' => [ - 'entrance' => 'Wechsele zum Entrance Randomizer', - ], - 'difficulty' => [ - 'title' => 'Schwierigkeitsgrad', - 'options' => [ - 'easy' => 'Einfach', - 'normal' => 'Normal', - 'hard' => 'Schwer', - 'expert' => 'Experte', - 'insane' => 'Wahnsinnig', - ], - ], - 'difficulty_adjustments' => [ - 'title' => 'Schwierigkeitsgrad “Fixes”', - 'options' => [ - -1 => 'Einfach', - 0 => 'Normal', - 1 => 'Schwer', - 2 => 'Experte', - 3 => 'Wahnsinnig', - ], - ], - 'goal' => [ - 'title' => 'Ziel', - 'options' => [ - 'ganon' => 'Besiege Ganon', - 'dungeons' => 'Alle Dungeons', - 'pedestal' => 'Master-Schwert Sockel', - 'triforce-hunt' => 'Triforce-Splitter', - ], - ], - 'logic' => [ - 'title' => 'Logik', - 'options' => [ - 'NoGlitches' => 'Keine Glitches', - 'OverworldGlitches' => 'Overworld Glitches', - 'MajorGlitches' => 'Major Glitches', - 'None' => 'Keine (Ich weiß was ich tue)', - ], - 'glitch_warning' => 'Diese Logik verlangt Wissen über Major Glitches**', - ], - 'mode' => [ - 'title' => 'Zustand', - 'options' => [ - 'standard' => 'Standard', - 'open' => 'Offen', - 'inverted' => 'Invertiert', - ], - ], - 'weapons' => [ - 'title' => 'Schwerter', - 'options' => [ - 'randomized' => 'Zufällig', - 'uncle' => 'Onkel Garantiert', - 'swordless' => 'Schwertlos', - ], - ], - 'variation' => [ - 'title' => 'Variation', - 'options' => [ - 'none' => 'Keine', - 'timed-race' => 'Zeitrennen', - 'timed-ohko' => 'Zeitrennen OHKO', - 'ohko' => 'OHKO', - 'key-sanity' => 'Key-sanity', - 'retro' => 'Retro', - ], - ], - 'generate' => [ - 'race' => 'Generiere ROM für Rennen', - 'race_warning' => 'Spoilerfrei', - 'spoiler_race' => 'ROM für Spoiler Rennen', - 'casual' => 'Generiere ROM', - ], - 'details' => [ - 'title' => 'Spiel Details', - 'save_spoiler' => 'Speichere Spoiler', - 'save_rom' => 'Speichere Rom', - ], + 'title' => 'Randomizer', + 'preset' => [ + 'title' => 'Select Preset', + 'customize' => 'Customize', + 'options' => [ + 'default' => 'Default', + 'beginner' => 'Beginner', + 'veetorp' => 'OWG (Veetorp’s Favorite)', + 'crosskeys' => 'Crosskeys', + 'quick' => 'Super Quick', + 'nightmare' => 'Nightmare', + 'custom' => 'Custom', + ], + ], + 'placement' => [ + 'title' => 'Item Placement', + ], + 'item_placement' => [ + 'title' => 'Item Placement', + 'options' => [ + 'basic' => 'Basic', + 'advanced' => 'Advanced', + ], + ], + 'dungeon_items' => [ + 'title' => 'Dungeon Items', + 'options' => [ + 'standard' => 'Standard', + 'mc' => 'Maps/Compasses', + 'mcs' => 'Maps/Compasses/Small Keys', + 'full' => 'Keysanity', + ], + ], + 'accessibility' => [ + 'title' => 'Accessibility', + 'options' => [ + 'items' => '100% Inventory', + 'locations' => '100% Locations', + 'none' => 'Not Guaranteed', + ], + ], + 'glitches_required' => [ + 'title' => 'Glitches Required', + 'options' => [ + 'none' => 'None', + 'overworld_glitches' => 'Overworld Glitches', + 'major_glitches' => 'Major Glitches', + 'no_logic' => 'No Logic', + ], + 'glitch_warning' => 'These settings require knowledge of Major Glitches**', + ], + 'goal' => [ + 'title' => 'Ziel', + 'options' => [ + 'ganon' => 'Besiege Ganon', + 'fast_ganon' => 'Fast Ganon', + 'dungeons' => 'Alle Dungeons', + 'pedestal' => 'Master-Schwert Sockel', + 'triforce-hunt' => 'Triforce-Splitter', + ], + ], + 'tower_open' => [ + 'title' => 'Open Tower', + 'options' => [ + '0' => '0 Crystals', + '1' => '1 Crystal', + '2' => '2 Crystals', + '3' => '3 Crystals', + '4' => '4 Crystals', + '5' => '5 Crystals', + '6' => '6 Crystals', + '7' => '7 Crystals', + 'random' => 'Random' + ], + ], + 'ganon_open' => [ + 'title' => 'Ganon Vulnerable', + 'options' => [ + '0' => '0 Crystals', + '1' => '1 Crystal', + '2' => '2 Crystals', + '3' => '3 Crystals', + '4' => '4 Crystals', + '5' => '5 Crystals', + '6' => '6 Crystals', + '7' => '7 Crystals', + 'random' => 'Random' + ], + ], + 'gameplay' => [ + 'title' => 'Gameplay', + ], + "world_state" => [ + 'title' => 'World State', + 'options' => [ + 'standard' => 'Standard', + 'open' => 'Offen', + 'inverted' => 'Invertiert', + 'retro' => 'Retro', + ], + ], + "entrance_shuffle" => [ + 'title' => 'Entrance Shuffle', + 'options' => [ + 'none' => 'None', + 'simple' => 'Simpel', + 'restricted' => 'Beschränkt', + 'full' => 'Voll', + 'crossed' => 'Gekreuzt', + 'insanity' => 'Wahnsinn', + ], + ], + "boss_shuffle" => [ + 'title' => 'Boss Shuffle', + 'options' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'full' => 'Full', + 'random' => 'Random', + ], + ], + "enemy_shuffle" => [ + 'title' => 'Enemy Shuffle', + 'options' => [ + 'none' => 'None', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + ], + "hints" => [ + 'title' => 'Hints', + 'options' => [ + 'on' => 'On', + 'off' => 'Off', + ], + ], + 'weapons' => [ + 'title' => 'Schwerter', + 'options' => [ + 'randomized' => 'Zufällig', + 'assured' => 'Assured', + 'vanilla' => 'Vanilla', + 'swordless' => 'Schwertlos', + ], + ], + 'item_pool' => [ + 'title' => 'Item Pool', + 'options' => [ + 'easy' => 'Einfach', + 'normal' => 'Normal', + 'hard' => 'Schwer', + 'expert' => 'Experte', + 'crowd_control' => 'Crowd Control', + ], + 'crowd_control_warning' => '* This setting is meant to be used with the Crowd Control Twitch extension. find out more: https://crowdcontrol.live/', + ], + 'item_functionality' => [ + 'title' => 'Item Functionality', + 'options' => [ + 'easy' => 'Einfach', + 'normal' => 'Normal', + 'hard' => 'Schwer', + 'expert' => 'Experte', + ], + ], + 'enemy_damage' => [ + 'title' => 'Enemy Damage', + 'options' => [ + 'default' => 'Default', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + ], + 'enemy_health' => [ + 'title' => 'Enemy Health', + 'options' => [ + 'default' => 'Default', + 'easy' => 'Einfach', + 'hard' => 'Schwer', + 'expert' => 'Experte', + ], + ], + 'generate' => [ + 'race' => 'Generiere ROM für Rennen', + 'race_warning' => 'Spoilerfrei', + 'spoiler_race' => 'ROM für Spoiler Rennen', + 'casual' => 'Generiere ROM', + 'back' => 'Change Settings', + 'regenerate' => 'Generate Again', + 'regenerate_tooltip' => 'Generate new game with same settings', + 'generating' => 'Generating...', + ], + 'details' => [ + 'title' => 'Spiel Details', + 'save_spoiler' => 'Speichere Spoiler', + 'save_rom' => 'Speichere Rom', + ], + // depricated + 'variation' => [ + 'title' => 'Variation', + ], + 'difficulty' => [ + 'title' => 'Schwierigkeitsgrad', + 'options' => [ + 'easy' => 'Einfach', + 'normal' => 'Normal', + 'hard' => 'Schwer', + 'expert' => 'Experte', + 'insane' => 'Wahnsinnig', + 'crowdControl' => 'Crowd Control', + ], + ], ]; diff --git a/resources/lang/de/resources.php b/resources/lang/de/resources.php index 02250c9dc..f6a3037d0 100644 --- a/resources/lang/de/resources.php +++ b/resources/lang/de/resources.php @@ -1,95 +1,95 @@ 'Ressourcen', - 'cards' => [ - 'discord' => [ - 'header' => 'Discord', - 'content' => [ - '', - 'Trete unserer Discord Community bei! Wir haben freundliche und hilfsbereite Leute, Neuigkeiten über Community Events, ALttP: Randomizer Updates, hilfreiche Handbücher, Tipps und Tricks, und vieles mehr! Komm sag Hallo und schau dir einfach mal den #resources Kanal an!', - ], - ], - 'learn' => [ - 'header' => 'Lern-zu-spielen Videos', - 'content' => [ - '', - 'Schau dir die Guides an wie man seine Route plannt, Glitch Gutorials, Update Ankündigungen, Turnier Highlights, und vieles mehr! Gut für beide, neue Spieler die alles erlernen wollen, und erfahrene Spieler die ihr Können perfektionieren wollen!', - ], - ], - 'external' => [ - 'header' => 'Externe Ressourcen', - 'content' => [ - '', - ], - ], - 'pitfalls' => [ - 'header' => 'Häufige Irrtümer', - 'content' => [ - '
    ' - . '
  • Du kannst den Y Knopf benutzen um zwischen Silber und Normalen Pfeilen zu wechseln, dem Roten und Blauen Bumerang, dem Pilz und dem magischen Pulver, der Schaufel und der Flöte.
  • ' - . '
  • In der Schattenwelt kannst du nördlich der Pyramide den Enterharken benutzen um über den Fluss zu kommen. Halte ausschau nach dem Pfeil aus Gras!
  • ' - . '
  • Falls du dich im Bumper Cave befindest und den Enterhaken nicht besitzt, versuche am oberen Rand des Loches entlangen zu gehen - Enterhaken wird nicht benötigt!
  • ' - . '
  • Mit dem magischen Umhang kannst du einfach durch Agahnim’s Barrerie gehen, oder du kannst sie einfach mit einem verbesserten Schwert zerstören.
  • ' - . '
  • Falls du den magischen Spiegel hast, kannst du den Wüstenpalast einfach vom Areal des Wüstenseepalast erreichen ohne das Buch Mudora zu haben.
  • ' - . '
  • Bombos-Medaillon schmilzt Sachen genauso wie der Feuerstab, sehr nützlich im Eispalast.
  • ' - . '
  • Du kannst kleine Öffnungen überwinden indem du gegen eine Wand oder ein Objekt rennst. Der Rückstoß befördert dich einfach rüber.
  • ' - . '
  • Sahasrahla gibt dir einen Gegendstand falls du das Amulett des Mutes im Besitz hast.
  • ' - . '
  • Die Superbombe ist erhältlich im Bombenladen wenn du Kristall 5 und 6 besitzt.
  • ' - . '
  • Der Schmied und die lilaene Kiste bleiben bei dir wenn du speicherst und beendest.
  • ' - . '
  • Es wird niemals verlangt das du dich durch Dunkle Räume navigierst; die Lampe wird deinen Weg erhellen, du musst sie nur finden!
  • ' - . '
  • Manche Schlüssel sind nicht erhältlich, wenn sie nicht von der Logik vorrausgesetzt werden um einen Dungeon abzuschließen. Als Beispiel: Im Skelettwald könnte der große Schlüssel in der großen Truhe sein.
  • ' - . '
', - ], - ], - 'changes' => [ - 'header' => 'Unterschiede', - 'sections' => [ - [ - 'header' => 'Was ist zufällig?', - 'content' => [ - '
    ' - . '
  • Beinahe alle Orte von einzigartigen Gegendstände
  • ' - . '
  • Amulette und Kristalle (Überprüfe deine Karte!)
  • ' - . '
  • Die Medaillone die benötigt werden um den Wüstenseepalast und Schildkrötenfelsen zu öffnen.
  • ' - . '
  • Gegner drops und Ziehpreise (z.B. von Bäumen)
  • ' - . '
', - ], - ], - [ - 'header' => 'Was ist gleich geblieben?', - 'content' => [ - '
    ' - . '
  • Alle Läden in Hyrule
  • ' - . '
  • Der Schießstand und Rubinkistenspiele
  • ' - . '
  • Kleine Schlüssel unter Töpfe und von Gegnern
  • ' - . '
', - ], - ], - [ - 'header' => 'Was änderte sich vom originalen Spiel?', - 'content' => [ - 'Es gibt einige Änderungen vom originalen Spiel um das Spielerlebniss zu verbessern und um zu verhindet das man feststeckt. Die Japanische 1.0 Rom wird benutzt da es einige Glitches mehr erlaubt die für fortgeschrittene Spielmodi benutzt werden.', - '
    ' - . '
  • Du brauchst nicht länger die Lampe im Prolog um das Bücherregal zu verschieben.
  • ' - . '
  • Du kannst nun in dunklen Räumen sehen ohne die Lampe (außer im Offen Modus).
  • ' - . '
  • Du kannst mit Y zwischen Gegendstände wechseln die den selben Platz im Inventar belegen. Als Beispiel, du kannst nun Schaufel und Flöte besitzen und zwischen ihnen wechseln.
  • ' - . '
  • Das Untermenü für die Flaschen öffnet sich nicht länger automatisch. Du kannst es mit X öffnen oder einfach mit Y zwischen den Flaschen herwechseln.
  • ' - . '
  • Die Wasserlevel im Sumpfpalast kehren automatisch zu ihrem Ursprungzustand zurück, wenn du denn Bereich auf der Oberwelt verlässt. Dies verhindert das du ausversehen den kleinen Schlüssel unter Wasser setzt und somit feststeckst!
  • ' - . '
  • Das Menü wo du deine Speicherstände auswählt hat eine Reihe von Symbolen oben. Die sind für jeden Seed anders und versichert das jeder den selben Seed hat für Rennen. Ansonsten haben sie keine andere Relevanz.
  • ' - . '
  • Die Feen (Pyramide und Wasserfall der Wünsche) verbessern nicht länger deine Gegendstände. Stattdessen enthalten ihre Höhlen jeweils zwei Truhen, die für die üblichen Upgrades stehen, die in den Mix gemischt wurden.
  • ' - . '
  • Es ist garantiert das du den Gegendstand beim Schaufelspiel bei der dreizigsten Grabung hast.
  • ' - . '
  • Es ist garantiert das du den Gegenstand beim Truhenspiel beim ersten Versuch erhälst (entweder in der ersten oder zweiten Kiste).
  • ' - . '
', - ], - ], - ], + 'header' => 'Ressourcen', + 'cards' => [ + 'discord' => [ + 'header' => 'Discord', + 'content' => [ + '', + 'Trete unserer Discord Community bei! Wir haben freundliche und hilfsbereite Leute, Neuigkeiten über Community Events, ALttP: Randomizer Updates, hilfreiche Handbücher, Tipps und Tricks, und vieles mehr! Komm sag Hallo und schau dir einfach mal den #resources Kanal an!', + ], + ], + 'learn' => [ + 'header' => 'Lern-zu-spielen Videos', + 'content' => [ + '', + 'Schau dir die Guides an wie man seine Route plannt, Glitch Gutorials, Update Ankündigungen, Turnier Highlights, und vieles mehr! Gut für beide, neue Spieler die alles erlernen wollen, und erfahrene Spieler die ihr Können perfektionieren wollen!', + ], + ], + 'external' => [ + 'header' => 'Externe Ressourcen', + 'content' => [ + '', + ], + ], + 'pitfalls' => [ + 'header' => 'Häufige Irrtümer', + 'content' => [ + '
    ' + . '
  • Du kannst den Y Knopf benutzen um zwischen Silber und Normalen Pfeilen zu wechseln, dem Roten und Blauen Bumerang, dem Pilz und dem magischen Pulver, der Schaufel und der Flöte.
  • ' + . '
  • In der Schattenwelt kannst du nördlich der Pyramide den Enterharken benutzen um über den Fluss zu kommen. Halte ausschau nach dem Pfeil aus Gras!
  • ' + . '
  • Falls du dich im Bumper Cave befindest und den Enterhaken nicht besitzt, versuche am oberen Rand des Loches entlangen zu gehen - Enterhaken wird nicht benötigt!
  • ' + . '
  • Mit dem magischen Umhang kannst du einfach durch Agahnim’s Barrerie gehen, oder du kannst sie einfach mit einem verbesserten Schwert zerstören.
  • ' + . '
  • Falls du den magischen Spiegel hast, kannst du den Wüstenpalast einfach vom Areal des Wüstenseepalast erreichen ohne das Buch Mudora zu haben.
  • ' + . '
  • Bombos-Medaillon schmilzt Sachen genauso wie der Feuerstab, sehr nützlich im Eispalast.
  • ' + . '
  • Du kannst kleine Öffnungen überwinden indem du gegen eine Wand oder ein Objekt rennst. Der Rückstoß befördert dich einfach rüber.
  • ' + . '
  • Sahasrahla gibt dir einen Gegendstand falls du das Amulett des Mutes im Besitz hast.
  • ' + . '
  • Die Superbombe ist erhältlich im Bombenladen wenn du Kristall 5 und 6 besitzt.
  • ' + . '
  • Der Schmied und die lilaene Kiste bleiben bei dir wenn du speicherst und beendest.
  • ' + . '
  • Es wird niemals verlangt das du dich durch Dunkle Räume navigierst; die Lampe wird deinen Weg erhellen, du musst sie nur finden!
  • ' + . '
  • Manche Schlüssel sind nicht erhältlich, wenn sie nicht von der Logik vorrausgesetzt werden um einen Dungeon abzuschließen. Als Beispiel: Im Skelettwald könnte der große Schlüssel in der großen Truhe sein.
  • ' + . '
', + ], + ], + 'changes' => [ + 'header' => 'Unterschiede', + 'sections' => [ + [ + 'header' => 'Was ist zufällig?', + 'content' => [ + '
    ' + . '
  • Beinahe alle Orte von einzigartigen Gegendstände
  • ' + . '
  • Amulette und Kristalle (Überprüfe deine Karte!)
  • ' + . '
  • Die Medaillone die benötigt werden um den Wüstenseepalast und Schildkrötenfelsen zu öffnen.
  • ' + . '
  • Gegner drops und Ziehpreise (z.B. von Bäumen)
  • ' + . '
', + ], + ], + [ + 'header' => 'Was ist gleich geblieben?', + 'content' => [ + '
    ' + . '
  • Alle Läden in Hyrule
  • ' + . '
  • Der Schießstand und Rubinkistenspiele
  • ' + . '
  • Kleine Schlüssel unter Töpfe und von Gegnern
  • ' + . '
', + ], + ], + [ + 'header' => 'Was änderte sich vom originalen Spiel?', + 'content' => [ + 'Es gibt einige Änderungen vom originalen Spiel um das Spielerlebniss zu verbessern und um zu verhindet das man feststeckt. Die Japanische 1.0 Rom wird benutzt da es einige Glitches mehr erlaubt die für fortgeschrittene Spielmodi benutzt werden.', + '
    ' + . '
  • Du brauchst nicht länger die Lampe im Prolog um das Bücherregal zu verschieben.
  • ' + . '
  • Du kannst nun in dunklen Räumen sehen ohne die Lampe (außer im Offen Modus).
  • ' + . '
  • Du kannst mit Y zwischen Gegendstände wechseln die den selben Platz im Inventar belegen. Als Beispiel, du kannst nun Schaufel und Flöte besitzen und zwischen ihnen wechseln.
  • ' + . '
  • Das Untermenü für die Flaschen öffnet sich nicht länger automatisch. Du kannst es mit X öffnen oder einfach mit Y zwischen den Flaschen herwechseln.
  • ' + . '
  • Die Wasserlevel im Sumpfpalast kehren automatisch zu ihrem Ursprungzustand zurück, wenn du denn Bereich auf der Oberwelt verlässt. Dies verhindert das du ausversehen den kleinen Schlüssel unter Wasser setzt und somit feststeckst!
  • ' + . '
  • Das Menü wo du deine Speicherstände auswählt hat eine Reihe von Symbolen oben. Die sind für jeden Seed anders und versichert das jeder den selben Seed hat für Rennen. Ansonsten haben sie keine andere Relevanz.
  • ' + . '
  • Die Feen (Pyramide und Wasserfall der Wünsche) verbessern nicht länger deine Gegendstände. Stattdessen enthalten ihre Höhlen jeweils zwei Truhen, die für die üblichen Upgrades stehen, die in den Mix gemischt wurden.
  • ' + . '
  • Es ist garantiert das du den Gegendstand beim Schaufelspiel bei der dreizigsten Grabung hast.
  • ' + . '
  • Es ist garantiert das du den Gegenstand beim Truhenspiel beim ersten Versuch erhälst (entweder in der ersten oder zweiten Kiste).
  • ' + . '
', + ], + ], + ], - ], - ], + ], + ], ]; diff --git a/resources/lang/de/rom.php b/resources/lang/de/rom.php index 29bd09fa9..4db04682d 100644 --- a/resources/lang/de/rom.php +++ b/resources/lang/de/rom.php @@ -1,56 +1,58 @@ [ - 'title' => 'Anfangen', - 'file_select' => 'ROM Datei auswählen', - 'content' => '
    ' - . '
  1. Wähle die Rom Datei und lade sie ihn den Browser (Bitte nutze die Zelda no Densetsu: Kamigami no Triforce v1.0 ROM mit einer .smc oder .sfc Endung)
  2. ' - . '
  3. Wähle die ' . __('navigation.options') . ' um auszuwählen wie Zufällig dein Spiel sein soll
  4. ' - . '
  5. Klicke ' . __('randomizer.generate.casual') . '
  6. ' - . '
  7. Dann speichere deine Rom und fang an zu spielen
  8. ' - . '
', - ], - 'info' => [ - 'logic' => __('randomizer.logic.title'), - 'build' => 'ROM build', - 'difficulty' => __('randomizer.difficulty.title'), - 'variation' => __('randomizer.variation.title'), - 'shuffle' => __('entrance.shuffle.title'), - 'mode' => __('randomizer.mode.title'), - 'weapons' => __('randomizer.weapons.title'), - 'goal' => __('randomizer.goal.title'), - 'permalink' => 'Permalink', - 'special' => 'Spezial', - 'notes' => 'Notizen', - 'generated' => 'Erstellt', - ], - 'settings' => [ - 'heart_speed' => 'Herz Geschwindigkeit', - 'heart_speeds' => [ - 'off' => 'Aus', - 'double' => 'Doppelte Geschwindigkeit', - 'normal' => 'Geschwindigkeit', - 'half' => 'Halbe Geschwindigkeit', - 'quarter' => 'Viertel Geschwindigkeit', - ], - 'menu_speed' => 'Menü Geschwindigkeit', - 'menu_speeds' => [ - 'instant' => 'Instant', - 'fast' => 'Schnell', - 'normal' => 'Normal', - 'slow' => 'Langsam', - ], - 'heart_color' => 'Farbe der Herzen', - 'heart_colors' => [ - 'blue' => 'Blau', - 'green' => 'Grün', - 'red' => 'Rot', - 'yellow' => 'Gelb', - ], - 'play_as' => 'Spiele als', - 'music' => 'Hintergrundmusik', - 'music_info' => '(setze zu "Keine" für MSU-1 Support)', - 'quickswap' => 'Gegenstand Schnellwechsel', - 'race_warning' => 'Funktioniert nicht in einer Rom für Rennen', - ], + 'loader' => [ + 'title' => 'Anfangen', + 'file_select' => 'ROM Datei auswählen', + 'content' => '
    ' + . '
  1. Wähle die Rom Datei und lade sie ihn den Browser (Bitte nutze die Zelda no Densetsu: Kamigami no Triforce v1.0 ROM mit einer .smc oder .sfc Endung)
  2. ' + . '
  3. Wähle die ' . __('navigation.options') . ' um auszuwählen wie Zufällig dein Spiel sein soll
  4. ' + . '
  5. Klicke ' . __('randomizer.generate.race') . '
  6. ' + . '
  7. Dann speichere deine Rom und fang an zu spielen
  8. ' + . '
', + ], + 'info' => [ + 'spoilerwarning' => 'WARNUNG: Der Ersteller dieses Spiel hat den Spoiler Log angesehen.', + 'logic' => __('randomizer.glitches_required.title'), + 'build' => 'ROM build', + 'difficulty' => __('randomizer.difficulty.title'), + 'variation' => __('randomizer.variation.title'), + 'shuffle' => __('entrance.shuffle.title'), + 'mode' => __('randomizer.world_state.title'), + 'weapons' => __('randomizer.weapons.title'), + 'goal' => __('randomizer.goal.title'), + 'permalink' => 'Permalink', + 'special' => 'Spezial', + 'notes' => 'Notizen', + 'generated' => 'Erstellt', + ], + 'settings' => [ + 'heart_speed' => 'Herz Geschwindigkeit', + 'heart_speeds' => [ + 'off' => 'Aus', + 'double' => 'Doppelte Geschwindigkeit', + 'normal' => 'Geschwindigkeit', + 'half' => 'Halbe Geschwindigkeit', + 'quarter' => 'Viertel Geschwindigkeit', + ], + 'menu_speed' => 'Menü Geschwindigkeit', + 'menu_speeds' => [ + 'instant' => 'Instant', + 'fast' => 'Schnell', + 'normal' => 'Normal', + 'slow' => 'Langsam', + ], + 'heart_color' => 'Farbe der Herzen', + 'heart_colors' => [ + 'blue' => 'Blau', + 'green' => 'Grün', + 'red' => 'Rot', + 'yellow' => 'Gelb', + ], + 'play_as' => 'Spiele als', + 'music' => 'Hintergrundmusik', + 'music_info' => '(setze zu "Keine" für MSU-1 Support)', + 'quickswap' => 'Gegenstand Schnellwechsel', + 'palette_shuffle' => 'Palette Shuffle', + 'race_warning' => 'Funktioniert nicht in einer Rom für Rennen', + ], ]; diff --git a/resources/lang/de/start.php b/resources/lang/de/start.php index d17e42771..d33437e72 100644 --- a/resources/lang/de/start.php +++ b/resources/lang/de/start.php @@ -1,52 +1,52 @@ 'Beginne dein Abenteuer!', - 'subheader' => 'Willst du deine Fähigkeiten testen in einem durchgemischten Hyrule? Hier bist du am richtigen Platz!', - 'cards' => [ - 'discord' => [ - 'header' => '1. Trete unsere Discord Community bei', - 'content' => [ - '', - 'Trete unserer Discord Community bei! Wir haben freundliches hilfreiche Leute, News über Community Events, ALttP:Randomizer Updates, hilfreiches Guides, Tipps und Tricks, und vieles mehr! Komm sag Hallo!', - ] - ], - 'rom' => [ - 'header' => '2. Bekomme die ROM', - 'content' => [ - 'Du brauchst die basis ROM. Es sollte eine Zelda no Densetsu: Kamigami no Triforce v1.0 ROM sein. Mach dir keine Sorgen wenn du kein Japanisch kannst; der Patch liefert englische Texte und behält die einzigartigen Glitches in Takt die es nur bei der originalen Version gibt.', - 'Falls du Probleme hast, frage im Discord nach!', - ] - ], - 'randomize' => [ - 'header' => '3. Wähle deine Spieloptionen', - 'content' => [ - 'Gehe zu ' . __('navigation.randomizer') . ' und lade deine ROM. Der nächste Bildschirm zeigt dir verschiedene Spieloptionen. Für die ersten Male empfehlen wir “' . __('randomizer.difficulty.title') . '” zu “' . __('randomizer.difficulty.options.easy') . '” wechseln und die restlichen Optionen einfach so zulassen. Dann klicke “' . __('randomizer.generate.casual') . '” und du bekommst einen nagelneues, zufälliges Spiel!', - 'Einen mehr detaillierten Guide findet ihr hier.', - ] - ], - 'emulator' => [ - 'header' => '4. Finde einen Weg zum spielen', - 'content' => [ - 'Als erstes braucht ihr etwas, worauf ihr euer Spiel spielen könnt. Wir empfehlen einen Emulator. Ein Emulator ist ein Programm, das die SNES Hardware nachstellt, das euch erlaubt SNES Spiele auf dem Computer zu spielen. Der empfohlende Emulator, SNES9x, findet ihr auf ihrer Webseite hier.', - 'Auch wenn ihr komplett nur mit eine Tastatur spielen könnt, sorgt ein Kontroller dennoch für eine bessere Erfahrung. Während die meisten USB Kontroller ihr Arbeit tun, empfehlen wir einen iBuffalo Classic USB Gamepad oder einen 8Bitdo SFC30 Wireless Bluetooth Controller.', - 'Es gibt auch andere Wege zu spielen, einschließlich auf originaler SNES Hardware. Aber es gibt auch Emulatoren, wie der Zsnes, die nicht richtig mit dem Randomizer funktionieren. Trete uns auf Discord bei um mehr zu lernen!', - 'NOTIZ FÜR SNESMINI SPIELER: Nenne deine ROM Datei auf 61 Buchstaben oder weniger um, denn der SNESMini kommt nicht mit langen Dateinamen klar.', - ] - ], - 'play' => [ - 'header' => '5. Spiel spielen!', - 'content' => [ - 'Du bist nun endlich bereit! Der beste weg zum lernen ist, die ROM Datei zu laden und anfangen zu spielen. Falls du das Gefühl hast das du feststeckst, schaue auf der Liste für häufige Irrtümer nach, oder frage im Discord nach Hilfe.', - '
    ' - . '
  • Du kannst den Y Knopf benutzen um zwischen Silber und Normalen Pfeilen zu wechseln, dem Roten und Blauen Bumerang, dem Pilz und dem magischen Pulver, der Schaufen und der Flöte.
  • ' - . '
  • Der Schmied und die lilaene Kiste bleiben bei dir wenn du speicherst und beendest, so kannst du sie sie zurück bringen ohne den magischen Spiegel zu besitzen.
  • ' - . '
  • In der Schattenwelt kannst du nördlich der Pyramide den Enterharken benutzen um über den Fluss zu kommen. Halte ausschau nach dem Pfeil aus Gras!
  • ' - . '
  • Du kannst kleine Öffnungen überwinden indem du gegen eine Wand oder ein Objekt rennst. Der Rückstoß befördert dich einfach rüber.
  • ' - . '
  • Falls du dich im Bumper Cave befindest und den Enterhaken nicht besitzt, versuche am oberen Rand des Loches entlangen zu gehen - Enterhaken wird nicht benötigt!
  • ' - . '
  • Manche Schlüssel sind nicht erhältlich, wenn sie nicht von der Logik vorrausgesetzt werden um einen Dungeon abzuschließen. Als Beispiel: Im Skelettwald könnte der große Schlüssel in der großen Truhe sein.
  • ' - . '
', - 'Vergesse nicht im umfassenden ' . __('navigation.resources') . ' nachzuschauen für Tutorials und mehr Tipps!', - ] - ], - ], + 'header' => 'Beginne dein Abenteuer!', + 'subheader' => 'Willst du deine Fähigkeiten testen in einem durchgemischten Hyrule? Hier bist du am richtigen Platz!', + 'cards' => [ + 'discord' => [ + 'header' => '1. Trete unsere Discord Community bei', + 'content' => [ + '', + 'Trete unserer Discord Community bei! Wir haben freundliches hilfreiche Leute, News über Community Events, ALttP:Randomizer Updates, hilfreiches Guides, Tipps und Tricks, und vieles mehr! Komm sag Hallo!', + ] + ], + 'rom' => [ + 'header' => '2. Bekomme die ROM', + 'content' => [ + 'Du brauchst die basis ROM. Es sollte eine Zelda no Densetsu: Kamigami no Triforce v1.0 ROM sein. Mach dir keine Sorgen wenn du kein Japanisch kannst; der Patch liefert englische Texte und behält die einzigartigen Glitches in Takt die es nur bei der originalen Version gibt.', + 'Falls du Probleme hast, frage im Discord nach!', + ] + ], + 'randomize' => [ + 'header' => '3. Wähle deine Spieloptionen', + 'content' => [ + 'Gehe zu ' . __('navigation.randomizer') . ' und lade deine ROM. Der nächste Bildschirm zeigt dir verschiedene Spieloptionen. Für die ersten Male empfehlen wir “' . __('randomizer.difficulty.title') . '” zu “' . __('randomizer.difficulty.options.easy') . '” wechseln und die restlichen Optionen einfach so zulassen. Dann klicke “' . __('randomizer.generate.race') . '” und du bekommst einen nagelneues, zufälliges Spiel!', + 'Einen mehr detaillierten Guide findet ihr hier.', + ] + ], + 'emulator' => [ + 'header' => '4. Finde einen Weg zum spielen', + 'content' => [ + 'Als erstes braucht ihr etwas, worauf ihr euer Spiel spielen könnt. Wir empfehlen einen Emulator. Ein Emulator ist ein Programm, das die SNES Hardware nachstellt, das euch erlaubt SNES Spiele auf dem Computer zu spielen. Der empfohlende Emulator, SNES9x, findet ihr auf ihrer Webseite hier.', + 'Auch wenn ihr komplett nur mit eine Tastatur spielen könnt, sorgt ein Kontroller dennoch für eine bessere Erfahrung. Während die meisten USB Kontroller ihr Arbeit tun, empfehlen wir einen iBuffalo Classic USB Gamepad oder einen 8Bitdo SF30 Wireless Bluetooth Controller.', + 'Es gibt auch andere Wege zu spielen, einschließlich auf originaler SNES Hardware. Aber es gibt auch Emulatoren, wie der Zsnes, die nicht richtig mit dem Randomizer funktionieren. Trete uns auf Discord bei um mehr zu lernen!', + 'NOTIZ FÜR SNESMINI SPIELER: Nenne deine ROM Datei auf 61 Buchstaben oder weniger um, denn der SNESMini kommt nicht mit langen Dateinamen klar.', + ] + ], + 'play' => [ + 'header' => '5. Spiel spielen!', + 'content' => [ + 'Du bist nun endlich bereit! Der beste weg zum lernen ist, die ROM Datei zu laden und anfangen zu spielen. Falls du das Gefühl hast das du feststeckst, schaue auf der Liste für häufige Irrtümer nach, oder frage im Discord nach Hilfe.', + '
    ' + . '
  • Du kannst den Y Knopf benutzen um zwischen Silber und Normalen Pfeilen zu wechseln, dem Roten und Blauen Bumerang, dem Pilz und dem magischen Pulver, der Schaufen und der Flöte.
  • ' + . '
  • Der Schmied und die lilaene Kiste bleiben bei dir wenn du speicherst und beendest, so kannst du sie sie zurück bringen ohne den magischen Spiegel zu besitzen.
  • ' + . '
  • In der Schattenwelt kannst du nördlich der Pyramide den Enterharken benutzen um über den Fluss zu kommen. Halte ausschau nach dem Pfeil aus Gras!
  • ' + . '
  • Du kannst kleine Öffnungen überwinden indem du gegen eine Wand oder ein Objekt rennst. Der Rückstoß befördert dich einfach rüber.
  • ' + . '
  • Falls du dich im Bumper Cave befindest und den Enterhaken nicht besitzt, versuche am oberen Rand des Loches entlangen zu gehen - Enterhaken wird nicht benötigt!
  • ' + . '
  • Manche Schlüssel sind nicht erhältlich, wenn sie nicht von der Logik vorrausgesetzt werden um einen Dungeon abzuschließen. Als Beispiel: Im Skelettwald könnte der große Schlüssel in der großen Truhe sein.
  • ' + . '
', + 'Vergesse nicht im umfassenden ' . __('navigation.resources') . ' nachzuschauen für Tutorials und mehr Tipps!', + ] + ], + ], ]; diff --git a/resources/lang/de/watch.php b/resources/lang/de/watch.php index 7f4465212..ba1ba2bc0 100644 --- a/resources/lang/de/watch.php +++ b/resources/lang/de/watch.php @@ -1,40 +1,40 @@ 'Trete dem Abenteuer bei!', - 'cards' => [ - 'twitch' => [ - 'header' => 'Twitch', - 'content' => [ - 'Mit so vielen Sachen am laufen, wird es immer ein Rennen zum schauen geben! Folge diese Netzwerken und vermisse niemals ein Rennen!', - ], - 'button' => 'ALttP:R Twitch Community', - ], - 'tournament' => [ - 'header' => 'Turniere', - 'sections' => [ - [ - 'header' => 'Anstehende Turniere', - 'content' => [ - 'Trete uns bei für das kommende 2018 Spring Invitational das im März starten wird! Trete unserer Discord Community bei um immer auf dem neusten stand zu sein!', - ], - ], - [ - 'header' => '2018 Spring Invitational', - 'content' => [ - 'Das 2018 Spring Invitational ist zu Ende!', - 'Schaue alle Rennen hier an!', - '
', - ], - ], - ], + 'header' => 'Trete dem Abenteuer bei!', + 'cards' => [ + 'twitch' => [ + 'header' => 'Twitch', + 'content' => [ + 'Mit so vielen Sachen am laufen, wird es immer ein Rennen zum schauen geben! Folge diese Netzwerken und vermisse niemals ein Rennen!', + ], + 'button' => 'ALttP:R Twitch Community', + ], + 'tournament' => [ + 'header' => 'Turniere', + 'sections' => [ + [ + 'header' => 'Anstehende Turniere', + 'content' => [ + 'Trete uns bei für das kommende 2018 Spring Invitational das im März starten wird! Trete unserer Discord Community bei um immer auf dem neusten stand zu sein!', + ], + ], + [ + 'header' => '2018 Spring Invitational', + 'content' => [ + 'Das 2018 Spring Invitational ist zu Ende!', + 'Schaue alle Rennen hier an!', + '
', + ], + ], + ], - ], - 'youtube' => [ - 'header' => 'Youtube', - 'content' => [ - '', - 'Abonniere unseren Youtube Kanal für Updates, Turnier Highlights, und vieles mehr!', - ] - ], - ], + ], + 'youtube' => [ + 'header' => 'Youtube', + 'content' => [ + '', + 'Abonniere unseren Youtube Kanal für Updates, Turnier Highlights, und vieles mehr!', + ] + ], + ], ]; diff --git a/resources/lang/en/about.php b/resources/lang/en/about.php index 2038b9347..dd211b4df 100644 --- a/resources/lang/en/about.php +++ b/resources/lang/en/about.php @@ -1,7 +1,7 @@ [ - 'ALttP: Randomizer is a new take on the classic game The Legend of Zelda: A Link to the Past. Each playthrough shuffles the location of all the important items in the game. Will you find the Bow atop Death Mountain, the Fire Rod resting silently in the library, or even the Master Sword itself waiting in a chicken coop?', - 'Challenge your friends to get the fastest time on a particular shuffle or take part in the weekly speedrun competition. Hone your skills enough and maybe you’ll take home the crown in our twice-yearly invitational tournament. See you in Hyrule!', - ], + 'content' => [ + 'ALttP: Randomizer is a new take on the classic game The Legend of Zelda: A Link to the Past. Each playthrough shuffles the location of all the important items in the game. Will you find the Bow atop Death Mountain, the Fire Rod resting silently in the library, or even the Master Sword itself waiting in a chicken coop?', + 'Challenge your friends to get the fastest time on a particular shuffle or take part in the weekly speedrun competition. Hone your skills enough and maybe you’ll take home the crown in our annual invitational tournament. See you in Hyrule!', + ], ]; diff --git a/resources/lang/en/contribute.php b/resources/lang/en/contribute.php index d7bea0e67..2e880c8d3 100644 --- a/resources/lang/en/contribute.php +++ b/resources/lang/en/contribute.php @@ -1,34 +1,34 @@ 'Contribute', - 'subheader' => 'There are many ways to help out, join the Development channels on Discord!', - 'cards' => [ - 'sprite' => [ - 'header' => 'Sprite Development', - 'content' => [ - 'Want to see your own custom sprite take Link’s place? Checkout fatmanspanda’s documentation!', - 'For more information on sprite creation and getting a custom sprite into ALttP:R, check in with #sprite-dev on Discord!', - ] - ], - 'live' => [ - 'header' => 'Live Race Production', - 'content' => [ - 'Interested in joining our team of restreamers, commentators, and trackers?', - 'Fill out this form and keep an eye on Discord!', - '
', - ] - ], - 'other' => [ - 'header' => 'Other Contributions', - 'content' => [ - 'Have an idea for a feature? Find a bug while playing? Looking to put your technical skills to work? Join the #suggestions channel on Discord and introduce yourself!', - ] - ], - 'discord' => [ - 'header' => 'Join the Discord Community!', - 'content' => [ - 'Did we mention that you should join us on Discord? The best way to get involved is to join and introduce yourself!', - ] - ], - ], + 'header' => 'Contribute', + 'subheader' => 'There are many ways to help out, join the Development channels on Discord!', + 'cards' => [ + 'sprite' => [ + 'header' => 'Sprite Development', + 'content' => [ + 'Want to see your own custom sprite take Link’s place? Checkout fatmanspanda’s documentation!', + 'For more information on sprite creation and getting a custom sprite into ALttP:R, check in with #sprite-dev on Discord!', + ] + ], + 'live' => [ + 'header' => 'Live Race Production', + 'content' => [ + 'Interested in joining our team of restreamers, commentators, and trackers?', + 'Fill out this form and keep an eye on Discord!', + '
', + ] + ], + 'other' => [ + 'header' => 'Other Contributions', + 'content' => [ + 'Have an idea for a feature? Find a bug while playing? Looking to put your technical skills to work? Join the #suggestions channel on Discord and introduce yourself!', + ] + ], + 'discord' => [ + 'header' => 'Join the Discord Community!', + 'content' => [ + 'Did we mention that you should join us on Discord? The best way to get involved is to join and introduce yourself!', + ] + ], + ], ]; diff --git a/resources/lang/en/customizer.php b/resources/lang/en/customizer.php new file mode 100644 index 000000000..3246501d7 --- /dev/null +++ b/resources/lang/en/customizer.php @@ -0,0 +1,79 @@ + [ + 'timers' => [ + 'off' => 'Off', + 'stopwatch' => 'Stopwatch', + 'countdown-ohko' => 'Countdown OHKO', + 'countdown-continue' => 'Countdown Continue', + 'countdown-stop' => 'Countdown Stop', + ], + 'dungeon_count' => [ + 'off' => 'Off', + 'on' => 'Always On', + 'pickup' => 'On Compass Pickup', + ], + ], + 'glitches' => [ + 'canBombJump' => [ + 'title' => 'Bomb Jump', + 'description' => 'One may be required to Bomb jump over gaps.', + ], + 'canBootsClip' => [ + 'title' => 'Boots Clip', + 'description' => 'When one has the Boots, they may be required to clip through walls in the in overworld.', + ], + 'canBunnyRevive' => [ + 'title' => 'Bunny Revive', + 'description' => 'One may be required to go somewhere as bunny form and abuse death/fairy revive to be Link.', + ], + 'canBunnySurf' => [ + 'title' => 'Bunny Surf', + 'description' => 'One may be required to water walk in bunny state.', + ], + 'canDungeonRevive' => [ + 'title' => 'Dungeon Revive', + 'description' => 'One may be required to revive as a bunny in a dungeon to collect items as Link.', + ], + 'canFakeFlipper' => [ + 'title' => 'Fake Flipper', + 'description' => 'One may be required to use the fake flipper glitch to collect items.', + ], + 'canMirrorClip' => [ + 'title' => 'Mirror Clip', + 'description' => 'One may be required to abuse Mirror bouce to go out of bounds.', + ], + 'canMirrorWrap' => [ + 'title' => 'Mirror Wrap', + 'description' => 'One may be required to use Mirror to auto scroll to a different location.', + ], + 'canOneFrameClipOW' => [ + 'title' => 'One Frame Clip (overworld)', + 'description' => 'You don’t want this. Trust me.', + ], + 'canOWYBA' => [ + 'title' => 'YBA (overworld)', + 'description' => 'May be required to use bottles in the overworld to teleport to different locations.', + ], + 'canSuperBunny' => [ + 'title' => 'Super Bunny', + 'description' => 'One may be required to activate super bunny to access locations.', + ], + 'canSuperSpeed' => [ + 'title' => 'Super Speed', + 'description' => 'One may be required to super speed clip through edges in overworld.', + ], + 'canWaterFairyRevive' => [ + 'title' => 'Water Fairy Revive', + 'description' => 'This setup is silly and requires a bunch of items.', + ], + 'canWaterWalk' => [ + 'title' => 'Water walk', + 'description' => 'One may be required to use boots to walk on top of water.', + ], + 'noLogic' => [ + 'title' => 'Disable all logic checks', + 'description' => 'When this is selected all bets are off, and nothing below matters.', + ], + ] +]; diff --git a/resources/lang/en/daily.php b/resources/lang/en/daily.php index 99b1e8ef7..0ab794d03 100644 --- a/resources/lang/en/daily.php +++ b/resources/lang/en/daily.php @@ -1,8 +1,8 @@ 'Randomizer Game of the Day', - 'content' => [ - 'Can’t wait until the weekend for the next randomizer challenge? Want to see how you stack up against your favorite streamer? Introducing the Randomizer Game of the Day!', - 'The game type will be random every day! (Would you expect anything else?) Branch out and experience something new! Do you have the patience to persevere through an ' . __('randomizer.variation.options.ohko') . ' game, the cunning to solve the complexities of ' . __('randomizer.variation.options.key-sanity') . ', or the speed to pull the triforce from the pedestal? Find out today!', - ] + 'header' => 'Randomizer Game of the Day', + 'content' => [ + 'Can’t wait until the weekend for the next randomizer challenge? Want to see how you stack up against your favorite streamer? Introducing the Randomizer Game of the Day!', + 'The game type will be random every day! (Would you expect anything else?) Branch out and experience something new! Do you have the patience to persevere through a ' . __('randomizer.entrance_shuffle.options.crossed') . ' ' . __('randomizer.entrance_shuffle.title') . ' game, the cunning to solve the complexities of ' . __('randomizer.dungeon_items.options.full') . ', or the speed to pull the triforce from the pedestal? Find out today!', + ] ]; diff --git a/resources/lang/en/enemizer.php b/resources/lang/en/enemizer.php index fc8fd8683..6858a70f0 100644 --- a/resources/lang/en/enemizer.php +++ b/resources/lang/en/enemizer.php @@ -1,36 +1,36 @@ 'Enemizer', - 'enable' => 'Enable Enemizer', - 'disable' => 'Disable Enemizer', - 'enemy_health' => [ - 'title' => 'Enemy Health', - 'options' => [ - 0 => 'Default', - 1 => 'Easy (1-4 hp)', - 2 => 'Normal (2-15 hp)', - 3 => 'Hard (2-30 hp)', - 4 => 'Brick Wall (4-50 hp)', - ], - ], - 'enemy_damage' => [ - 'title' => 'Enemy Damage', - 'options' => [ - 'off' => 'Default', - 'shuffle' => 'Shuffled', - 'chaos' => 'Chaos', - ], - ], - 'bosses' => [ - 'title' => 'Boss Shuffle', - 'options' => [ - 'off' => 'Off', - 'basic' => 'Simple', - 'normal' => 'Full', - 'chaos' => 'Chaos', - ], - ], - 'palette_shuffle' => 'Palette Shuffle', - 'pot_shuffle' => 'Pot Shuffle', - 'enemy_shuffle' => 'Enemy Shuffle', + 'title' => 'Enemizer', + 'enable' => 'Enable Enemizer', + 'disable' => 'Disable Enemizer', + 'enemy_health' => [ + 'title' => 'Enemy Health', + 'options' => [ + 0 => 'Default', + 1 => 'Easy (1-4 hp)', + 2 => 'Normal (2-15 hp)', + 3 => 'Hard (2-30 hp)', + 4 => 'Brick Wall (4-50 hp)', + ], + ], + 'enemy_damage' => [ + 'title' => 'Enemy Damage', + 'options' => [ + 'off' => 'Default', + 'shuffle' => 'Shuffled', + 'chaos' => 'Chaos', + ], + ], + 'bosses' => [ + 'title' => 'Boss Shuffle', + 'options' => [ + 'off' => 'Off', + 'basic' => 'Simple', + 'normal' => 'Full', + 'chaos' => 'Chaos', + ], + ], + 'palette_shuffle' => 'Palette Shuffle', + 'pot_shuffle' => 'Pot Shuffle', + 'enemy_shuffle' => 'Enemy Shuffle', ]; diff --git a/resources/lang/en/enemizer_options.php b/resources/lang/en/enemizer_options.php deleted file mode 100644 index 249613f4b..000000000 --- a/resources/lang/en/enemizer_options.php +++ /dev/null @@ -1,112 +0,0 @@ - 'What is the Enemizer?', - 'subheader' => 'The Enemizer allows you to randomize the enemies and bosses in the game as well as some other options for alternate shuffling.', - 'cards' => [ - 'enemy_health' => [ - 'header' => __('enemizer.enemy_health.title'), - 'sections' => [ - [ - 'header' => __('enemizer.enemy_health.options.0'), - 'content' => [ - 'Enemy Health will not be randomized in any way.', - ], - ], - [ - 'header' => __('enemizer.enemy_health.options.1'), - 'content' => [ - 'All enemy health will be in the 1-4 hp range.', - ], - ], - [ - 'header' => __('enemizer.enemy_health.options.2'), - 'content' => [ - 'All enemy health will be in the 2-15 hp range.', - ], - ], - [ - 'header' => __('enemizer.enemy_health.options.3'), - 'content' => [ - 'All enemy health will be in the 2-30 hp range.', - ], - ], - [ - 'header' => __('enemizer.enemy_health.options.4'), - 'content' => [ - 'All enemy health will be in the 4-50 hp range.', - ], - ], - ], - ], - 'enemy_damage' => [ - 'header' => __('enemizer.enemy_damage.title'), - 'sections' => [ - [ - 'header' => __('enemizer.enemy_damage.options.off'), - 'content' => [ - 'Enemy damage will not be randomized in any way.', - ], - ], - [ - 'header' => __('enemizer.enemy_damage.options.shuffle'), - 'content' => [ - 'The damage enemies do will be shuffled.', - ], - ], - [ - 'header' => __('enemizer.enemy_damage.options.chaos'), - 'content' => [ - 'The damage enemies do will be completely randomized.', - ], - ], - ], - ], - 'bosses' => [ - 'header' => __('enemizer.bosses.title'), - 'sections' => [ - [ - 'header' => __('enemizer.bosses.options.off'), - 'content' => [ - 'Bosses will not be randomized in any way.', - ], - ], - [ - 'header' => __('enemizer.bosses.options.basic'), - 'content' => [ - 'The normal number of each boss shuffled in their different locations, so expect to see armos knights, lanmolas, and moldorm twice.', - ], - ], - [ - 'header' => __('enemizer.bosses.options.normal'), - 'content' => [ - 'Similar to ' . __('enemizer.bosses.options.basic') . ', except that 3 bosses are chosen at random to be seen twice.', - ], - ], - [ - 'header' => __('enemizer.bosses.options.chaos'), - 'content' => [ - 'All bosses chosen at random, you may see any boss multiple times as well as not see a boss at all.', - ], - ], - ], - ], - 'enemy_shuffle' => [ - 'header' => __('enemizer.enemy_shuffle'), - 'content' => [ - 'This mixes up all the enemies in dungeons and on the overworld.', - ], - ], - 'pot_shuffle' => [ - 'header' => __('enemizer.pot_shuffle'), - 'content' => [ - 'Shuffles the contents under pots to keep you guessing where keys and other consumables are.', - ], - ], - 'palette_shuffle' => [ - 'header' => __('enemizer.palette_shuffle'), - 'content' => [ - 'Shuffles the colors of the game around, an Enemizer staple.', - ], - ], - ], -]; diff --git a/resources/lang/en/entrance.php b/resources/lang/en/entrance.php index fd617b552..e5ec0bb5a 100644 --- a/resources/lang/en/entrance.php +++ b/resources/lang/en/entrance.php @@ -1,75 +1,75 @@ 'Entrance Randomizer', - 'switch' => [ - 'item' => 'Switch to Item Randomizer', - ], - 'rom' => [ - 'options' => 'ROM Options', - ], - 'difficulty' => [ - 'title' => 'Difficulty', - 'options' => [ - 'easy' => 'Easy', - 'normal' => 'Normal', - 'hard' => 'Hard', - 'expert' => 'Expert', - 'insane' => 'Insane', - ], - ], - 'goal' => [ - 'title' => 'Goal', - 'options' => [ - 'ganon' => 'Defeat Ganon', - 'crystals' => 'Crystals', - 'dungeons' => 'All Dungeons', - 'pedestal' => 'Master Sword Pedestal', - 'triforcehunt' => 'Triforce Pieces', - ], - ], - 'logic' => [ - 'title' => 'Logic', - 'options' => [ - 'NoGlitches' => 'No Glitches', - ], - ], - 'mode' => [ - 'title' => 'State', - 'options' => [ - 'swordless' => 'Swordless', - 'open' => 'Open', - ], - ], - 'shuffle' => [ - 'title' => 'Shuffle', - 'options' => [ - 'simple' => 'Simple', - 'restricted' => 'Restricted', - 'full' => 'Full', - 'crossed' => 'Crossed', - 'insanity' => 'Insanity', - ], - ], - 'variation' => [ - 'title' => 'Variation', - 'options' => [ - 'none' => 'None', - 'timed-race' => 'Timed Race', - 'timed-ohko' => 'Timed OHKO', - 'ohko' => 'OHKO', - 'triforce-hunt' => 'Triforce Piece Hunt', - 'key-sanity' => 'Keysanity', - 'retro' => 'Retro', - ], - ], - 'generate' => [ - 'race' => 'Generate Race ROM', - 'spoiler_race' => 'Spoiler Race ROM', - 'casual' => 'Generate ROM', - ], - 'details' => [ - 'title' => 'Game Details', - 'save_spoiler' => 'Save Spoiler', - 'save_rom' => 'Save Rom', - ], + 'title' => 'Entrance Randomizer', + 'switch' => [ + 'item' => 'Switch to Item Randomizer', + ], + 'rom' => [ + 'options' => 'ROM Options', + ], + 'difficulty' => [ + 'title' => 'Difficulty', + 'options' => [ + 'easy' => 'Easy', + 'normal' => 'Normal', + 'hard' => 'Hard', + 'expert' => 'Expert', + 'insane' => 'Insane', + ], + ], + 'goal' => [ + 'title' => 'Goal', + 'options' => [ + 'ganon' => 'Defeat Ganon', + 'crystals' => 'Crystals', + 'dungeons' => 'All Dungeons', + 'pedestal' => 'Master Sword Pedestal', + 'triforcehunt' => 'Triforce Pieces', + ], + ], + 'logic' => [ + 'title' => 'Logic', + 'options' => [ + 'NoGlitches' => 'No Glitches', + ], + ], + 'mode' => [ + 'title' => 'State', + 'options' => [ + 'swordless' => 'Swordless', + 'open' => 'Open', + ], + ], + 'shuffle' => [ + 'title' => 'Shuffle', + 'options' => [ + 'simple' => 'Simple', + 'restricted' => 'Restricted', + 'full' => 'Full', + 'crossed' => 'Crossed', + 'insanity' => 'Insanity', + ], + ], + 'variation' => [ + 'title' => 'Variation', + 'options' => [ + 'none' => 'None', + 'timed-race' => 'Timed Race', + 'timed-ohko' => 'Timed OHKO', + 'ohko' => 'OHKO', + 'triforce-hunt' => 'Triforce Piece Hunt', + 'key-sanity' => 'Keysanity', + 'retro' => 'Retro', + ], + ], + 'generate' => [ + 'race' => 'Generate Race ROM', + 'spoiler_race' => 'Spoiler Race ROM', + 'casual' => 'Generate ROM', + ], + 'details' => [ + 'title' => 'Game Details', + 'save_spoiler' => 'Save Spoiler', + 'save_rom' => 'Save Rom', + ], ]; diff --git a/resources/lang/en/entrance_options.php b/resources/lang/en/entrance_options.php deleted file mode 100644 index 4d86e171d..000000000 --- a/resources/lang/en/entrance_options.php +++ /dev/null @@ -1,38 +0,0 @@ - 'What is the Entrance Randomizer?', - 'subheader' => 'The Entrance Randomizer allows you to twist the world upside down and play the game. It should mostly follow the standard VT rules for settings on everything, but it introduces a new option “' . __('entrance.shuffle.title') . '”.', - 'cards' => [ - 'simple' => [ - 'header' => __('entrance.shuffle.options.simple'), - 'content' => [ - 'Shuffles dungeon entrances between each other and keeps all 4-entrance dungeons confined to one location such that dungeons will one to one swap with each other.', - 'Other than on Light World Death Mountain, interiors are shuffled but still connect the same points on the overworld. On Death Mountain, entrances are connected more freely.', - ], - ], - 'restricted' => [ - 'header' => __('entrance.shuffle.options.restricted'), - 'content' => [ - 'Uses dungeon shuffling from Simple but freely connects remaining entrances. Caves and dungeons with multiple entrances will be confined to one world.', - ], - ], - 'full' => [ - 'header' => __('entrance.shuffle.options.full'), - 'content' => [ - 'Mixes cave and dungeon entrances freely. Caves and dungeons with multiple entrances will be confined to one world.', - ], - ], - 'crossed' => [ - 'header' => __('entrance.shuffle.options.crossed'), - 'content' => [ - 'Mixes cave and dungeon entrances freely, but now connector caves and dungeons can link Light World and Dark World.', - ], - ], - 'insanity' => [ - 'header' => __('entrance.shuffle.options.insanity'), - 'content' => [ - 'Decouples entrances and exits from each other and shuffles them freely. Caves that were single entrance in vanilla still can only exit to the same location from which they were entered.', - ], - ], - ], -]; diff --git a/resources/lang/en/error.php b/resources/lang/en/error.php index 08e78fc15..765c1cb2c 100644 --- a/resources/lang/en/error.php +++ b/resources/lang/en/error.php @@ -1,8 +1,8 @@ 'Error', - '429' => 'While we apprecate your want to generate a lot of games, Other people would like to as well. Please come back later if you would like to generate more.', - 'failed_generation' => 'Failed Creating Game :(', - 'bad_file' => 'File not recognized', - 'quota_exceeded_error' => 'Your local storage quota has been exceeded.', + 'title' => 'Error', + '429' => 'While we apprecate your want to generate a lot of games, Other people would like to as well. Please come back later if you would like to generate more.', + 'failed_generation' => 'Failed Creating Game :(', + 'bad_file' => 'File not recognized', + 'quota_exceeded_error' => 'Your local storage quota has been exceeded.', ]; diff --git a/resources/lang/en/hint.php b/resources/lang/en/hint.php index 9657d37f3..416dd3034 100644 --- a/resources/lang/en/hint.php +++ b/resources/lang/en/hint.php @@ -2,435 +2,436 @@ // This is a special translation file, it can return arrays, generally you don't want to do this, things that use // this translation should expect to handle the array return! return [ - "item" => [ - "Nothing" => "Who knows", - "UncleSword" => "Something Sharp", - "L1Sword" => "Something Sharp", - "L1SwordAndShield" => "Something Sharp", - "L2Sword" => "Something Sharp", - "MasterSword" => "Something Sharp", - "L3Sword" => "Something Sharp", - "L4Sword" => "Something Sharp", - "BlueShield" => "A Shield", - "RedShield" => "A Shield", - "MirrorShield" => "A Shield", - "FireRod" => ["The Fire Rod", "A Unique Item"], - "IceRod" => ["The Ice Rod", "A Unique Item"], - "Hammer" => ["The Hammer", "A Unique Item"], - "Hookshot" => ["The Hookshot", "A Unique Item"], - "Bow" => ["The Bow", "A Unique Item"], - "Boomerang" => ["The Best Boomerang", "A Unique Item"], - "Powder" => ["The Magic Powder", "A Unique Item"], - "Bee" => "A Beetor", - "Bombos" => ["Bombos", "A Unique Item"], - "Ether" => ["Ether", "A Unique Item"], - "Quake" => ["Quake", "A Unique Item"], - "Lamp" => ["The Lamp", "A Unique Item"], - "Shovel" => ["A Shovel", "A Unique Item"], - "OcarinaInactive" => ["The Flute", "A Unique Item"], - "CaneOfSomaria" => ["The Cane Of Somaria", "A Unique Item"], - "Bottle" => "A Bottle", - "PieceOfHeart" => "A Piece Of Heart", - "CaneOfByrna" => ["The Cane Of Byrna", "A Unique Item"], - "Cape" => ["The Magic Cape", "A Unique Item"], - "MagicMirror" => ["The Magic Mirror", "A Unique Item"], - "PowerGlove" => ["The Power Glove", "A Unique Item"], - "TitansMitt" => ["The Titans Mitt", "A Unique Item"], - "BookOfMudora" => ["The Book Of Mudora", "A Unique Item"], - "Flippers" => ["The Flippers", "A Unique Item"], - "MoonPearl" => ["The Moon Pearl", "A Unique Item"], - "BugCatchingNet" => ["The Bug Catching Net", "A Unique Item"], - "BlueMail" => "Armor", - "RedMail" => "Armor", - "Key" => "A Key", - "Compass" => "A Compass", - "HeartContainerNoAnimation" => "A Heart Container", - "Bomb" => "some Bombs", - "ThreeBombs" => "some Bombs", - "Mushroom" => ["The Mushroom", "A Unique Item"], - "RedBoomerang" => ["A Boomerang", "A Unique Item"], - "BottleWithRedPotion" => "A Bottle", - "BottleWithGreenPotion" => "A Bottle", - "BottleWithBluePotion" => "A Bottle", - "RedPotion" => "A Potion", - "GreenPotion" => "A Potion", - "BluePotion" => "A Potion", - "TenBombs" => "some Bombs", - "BigKey" => "A Big Key", - "Map" => "A Map", - "OneRupee" => "Some cash", - "FiveRupees" => "Some cash", - "TwentyRupees" => "Some cash", - "PendantOfCourage" => "A pendant", - "PendantOfWisdom" => "A pendant", - "PendantOfPower" => "A pendant", - "BowAndArrows" => ["The Bow", "A Unique Item"], - "BowAndSilverArrows" => ["The Bow", "A Unique Item"], - "BottleWithBee" => "A Bottle", - "BottleWithFairy" => "A Bottle", - "BossHeartContainer" => "A Heart Container", - "HeartContainer" => "The Heart Container", - "OneHundredRupees" => "Some cash", - "FiftyRupees" => "Some cash", - "Heart" => "A Small Heart", - "Arrow" => ["The Single Arrow", "A Unique Item"], - "TenArrows" => "some Arrows", - "SmallMagic" => "Small Magic", - "ThreeHundredRupees" => "Some cash", - "TwentyRupees2" => "Some cash", - "BottleWithGoldBee" => "A Bottle", - "OcarinaActive" => ["The Flute", "A Unique Item"], - "PegasusBoots" => ["The Boots", "A Unique Item"], - "BombUpgrade5" => "A bomb bag", - "BombUpgrade10" => "A bomb bag", - "BombUpgrade50" => "A bomb bag", - "ArrowUpgrade5" => "A larger quiver", - "ArrowUpgrade10" => "A larger quiver", - "ArrowUpgrade70" => "A larger quiver", - "HalfMagic" => ["Half Magic", "A Unique Item"], - "QuarterMagic" => ["Quarter Magic", "A Unique Item"], - "Programmable1" => "Something", - "Programmable2" => "Something", - "Programmable3" => "Something", - "SilverArrowUpgrade" => ["Silver Arrows", "A Unique Item"], - "Rupoor" => "some Cash", - "RedClock" => "A Clock", - "BlueClock" => "A Clock", - "GreenClock" => "A Clock", - "ProgressiveSword" => "Something Sharp", - "ProgressiveShield" => "A Shield", - "ProgressiveArmor" => "Armor", - "ProgressiveGlove" => ["A Glove", "A Unique Item"], - "singleRNG" => "Something", - "multiRNG" => "Something", - "Triforce" => "The Triforce", - "PowerStar" => "A Power Star", - "TriforcePiece" => "A Triforce Piece", - "MapLW" => "A map", - "MapDW" => "A map", - "MapA2" => "A map", - "MapD7" => "A map", - "MapD4" => "A map", - "MapP3" => "A map", - "MapD5" => "A map", - "MapD3" => "A map", - "MapD6" => "A map", - "MapD1" => "A map", - "MapD2" => "A map", - "MapA1" => "A map", - "MapP2" => "A map", - "MapP1" => "A map", - "MapH1" => "A map", - "MapH2" => "A map", - "CompassA2" => "A compass", - "CompassD7" => "A compass", - "CompassD4" => "A compass", - "CompassP3" => "A compass", - "CompassD5" => "A compass", - "CompassD3" => "A compass", - "CompassD6" => "A compass", - "CompassD1" => "A compass", - "CompassD2" => "A compass", - "CompassA1" => "A compass", - "CompassP2" => "A compass", - "CompassP1" => "A compass", - "CompassH1" => "A compass", - "CompassH2" => "A compass", - "BigKeyA2" => "The Big Key of evils bane", - "BigKeyD7" => "The Turtle Rock Big Key", - "BigKeyD4" => "The Thieves Town Big Key", - "BigKeyP3" => "The Tower of Hera Big Key", - "BigKeyD5" => "The Ice Palace Big Key", - "BigKeyD3" => "The Skull Woods Big Key", - "BigKeyD6" => "The Misery Mire Big Key", - "BigKeyD1" => "The Palace of Darkness Big Key", - "BigKeyD2" => "The Swamp Palace Big Key", - "BigKeyA1" => "The Agahnims Tower Big Key", - "BigKeyP2" => "The Desert Palace Big Key", - "BigKeyP1" => "The Eastern Palace Big Key", - "BigKeyH1" => "The Hyrule Castle Big Key", - "BigKeyH2" => "The Sewers Big Key", - "KeyH2" => "A Sewers Key", - "KeyH1" => "A Hyrule Castle Key", - "KeyP1" => "A Eastern Palace Key", - "KeyP2" => "A Desert Palace Key", - "KeyA1" => "A Agahnims Tower Key", - "KeyD2" => "A Swamp Palace Key", - "KeyD1" => "A Palace of Darkness Key", - "KeyD6" => "A Misery Mire Key", - "KeyD3" => "A Skull Woods Key", - "KeyD5" => "A Ice Palace Key", - "KeyP3" => "A Tower of Hera Key", - "KeyD4" => "A Thieves Town Key", - "KeyD7" => "A Turtle Rock Key", - "KeyA2" => "A Ganons Tower Key", - "KeyGK" => "A Generic Key", - "Crystal1" => "Crystal 1", - "Crystal2" => "Crystal 2", - "Crystal3" => "Crystal 3", - "Crystal4" => "Crystal 4", - "Crystal5" => "Crystal 5", - "Crystal6" => "Crystal 6", - "Crystal7" => "Crystal 7", - "RescueZelda" => "Rescue Zelda", - "DefeatAgahnim" => "Defeat Agahnim", - "BigRedBomb" => "Big Red Bomb", - "DefeatAgahnim2" => "Defeat Agahnim 2", - "DefeatGanon" => "Defeat Ganon", + "item" => [ + "Nothing" => "Who knows", + "UncleSword" => "Something Sharp", + "L1Sword" => "Something Sharp", + "L1SwordAndShield" => "Something Sharp", + "L2Sword" => "Something Sharp", + "MasterSword" => "Something Sharp", + "L3Sword" => "Something Sharp", + "L4Sword" => "Something Sharp", + "BlueShield" => "A Shield", + "RedShield" => "A Shield", + "MirrorShield" => "A Shield", + "FireRod" => ["The Fire Rod", "A Unique Item"], + "IceRod" => ["The Ice Rod", "A Unique Item"], + "Hammer" => ["The Hammer", "A Unique Item"], + "Hookshot" => ["The Hookshot", "A Unique Item"], + "Bow" => ["The Bow", "A Unique Item"], + "Boomerang" => ["The Best Boomerang", "A Unique Item"], + "Powder" => ["The Magic Powder", "A Unique Item"], + "Bee" => "A Beetor", + "Bombos" => ["Bombos", "A Unique Item"], + "Ether" => ["Ether", "A Unique Item"], + "Quake" => ["Quake", "A Unique Item"], + "Lamp" => ["The Lamp", "A Unique Item"], + "Shovel" => ["A Shovel", "A Unique Item"], + "OcarinaInactive" => ["The Flute", "A Unique Item"], + "CaneOfSomaria" => ["The Cane Of Somaria", "A Unique Item"], + "Bottle" => "A Bottle", + "PieceOfHeart" => "A Piece Of Heart", + "CaneOfByrna" => ["The Cane Of Byrna", "A Unique Item"], + "Cape" => ["The Magic Cape", "A Unique Item"], + "MagicMirror" => ["The Magic Mirror", "A Unique Item"], + "PowerGlove" => ["The Power Glove", "A Unique Item"], + "TitansMitt" => ["The Titans Mitt", "A Unique Item"], + "BookOfMudora" => ["The Book Of Mudora", "A Unique Item"], + "Flippers" => ["The Flippers", "A Unique Item"], + "MoonPearl" => ["The Moon Pearl", "A Unique Item"], + "BugCatchingNet" => ["The Bug Catching Net", "A Unique Item"], + "BlueMail" => "Armor", + "RedMail" => "Armor", + "Key" => "A Key", + "Compass" => "A Compass", + "HeartContainerNoAnimation" => "A Heart Container", + "Bomb" => "some Bombs", + "ThreeBombs" => "some Bombs", + "Mushroom" => ["The Mushroom", "A Unique Item"], + "RedBoomerang" => ["A Boomerang", "A Unique Item"], + "BottleWithRedPotion" => "A Bottle", + "BottleWithGreenPotion" => "A Bottle", + "BottleWithBluePotion" => "A Bottle", + "RedPotion" => "A Potion", + "GreenPotion" => "A Potion", + "BluePotion" => "A Potion", + "TenBombs" => "some Bombs", + "BigKey" => "A Big Key", + "Map" => "A Map", + "OneRupee" => "Some cash", + "FiveRupees" => "Some cash", + "TwentyRupees" => "Some cash", + "PendantOfCourage" => "A pendant", + "PendantOfWisdom" => "A pendant", + "PendantOfPower" => "A pendant", + "BowAndArrows" => ["The Bow", "A Unique Item"], + "BowAndSilverArrows" => ["The Bow", "A Unique Item"], + "BottleWithBee" => "A Bottle", + "BottleWithFairy" => "A Bottle", + "BossHeartContainer" => "A Heart Container", + "HeartContainer" => "The Heart Container", + "OneHundredRupees" => "Some cash", + "FiftyRupees" => "Some cash", + "Heart" => "A Small Heart", + "Arrow" => ["The Single Arrow", "A Unique Item"], + "TenArrows" => "some Arrows", + "SmallMagic" => "Small Magic", + "ThreeHundredRupees" => "Some cash", + "TwentyRupees2" => "Some cash", + "BottleWithGoldBee" => "A Bottle", + "OcarinaActive" => ["The Flute", "A Unique Item"], + "PegasusBoots" => ["The Boots", "A Unique Item"], + "BombUpgrade5" => "A bomb bag", + "BombUpgrade10" => "A bomb bag", + "BombUpgrade50" => "A bomb bag", + "ArrowUpgrade5" => "A larger quiver", + "ArrowUpgrade10" => "A larger quiver", + "ArrowUpgrade70" => "A larger quiver", + "HalfMagic" => ["Half Magic", "A Unique Item"], + "QuarterMagic" => ["Quarter Magic", "A Unique Item"], + "Programmable1" => "Something", + "Programmable2" => "Something", + "Programmable3" => "Something", + "SilverArrowUpgrade" => ["Silver Arrows", "A Unique Item"], + "Rupoor" => "some Cash", + "RedClock" => "A Clock", + "BlueClock" => "A Clock", + "GreenClock" => "A Clock", + "ProgressiveSword" => "Something Sharp", + "ProgressiveShield" => "A Shield", + "ProgressiveArmor" => "Armor", + "ProgressiveGlove" => ["A Glove", "A Unique Item"], + "singleRNG" => "Something", + "multiRNG" => "Something", + "ProgressiveBow" => "A Bow", + "Triforce" => "The Triforce", + "PowerStar" => "A Power Star", + "TriforcePiece" => "A Triforce Piece", + "MapLW" => "A map", + "MapDW" => "A map", + "MapA2" => "A map", + "MapD7" => "A map", + "MapD4" => "A map", + "MapP3" => "A map", + "MapD5" => "A map", + "MapD3" => "A map", + "MapD6" => "A map", + "MapD1" => "A map", + "MapD2" => "A map", + "MapA1" => "A map", + "MapP2" => "A map", + "MapP1" => "A map", + "MapH1" => "A map", + "MapH2" => "A map", + "CompassA2" => "A compass", + "CompassD7" => "A compass", + "CompassD4" => "A compass", + "CompassP3" => "A compass", + "CompassD5" => "A compass", + "CompassD3" => "A compass", + "CompassD6" => "A compass", + "CompassD1" => "A compass", + "CompassD2" => "A compass", + "CompassA1" => "A compass", + "CompassP2" => "A compass", + "CompassP1" => "A compass", + "CompassH1" => "A compass", + "CompassH2" => "A compass", + "BigKeyA2" => "The Big Key of evils bane", + "BigKeyD7" => "The Turtle Rock Big Key", + "BigKeyD4" => "The Thieves Town Big Key", + "BigKeyP3" => "The Tower of Hera Big Key", + "BigKeyD5" => "The Ice Palace Big Key", + "BigKeyD3" => "The Skull Woods Big Key", + "BigKeyD6" => "The Misery Mire Big Key", + "BigKeyD1" => "The Palace of Darkness Big Key", + "BigKeyD2" => "The Swamp Palace Big Key", + "BigKeyA1" => "The Agahnims Tower Big Key", + "BigKeyP2" => "The Desert Palace Big Key", + "BigKeyP1" => "The Eastern Palace Big Key", + "BigKeyH1" => "The Hyrule Castle Big Key", + "BigKeyH2" => "The Sewers Big Key", + "KeyH2" => "A Sewers Key", + "KeyH1" => "A Hyrule Castle Key", + "KeyP1" => "A Eastern Palace Key", + "KeyP2" => "A Desert Palace Key", + "KeyA1" => "A Agahnims Tower Key", + "KeyD2" => "A Swamp Palace Key", + "KeyD1" => "A Palace of Darkness Key", + "KeyD6" => "A Misery Mire Key", + "KeyD3" => "A Skull Woods Key", + "KeyD5" => "A Ice Palace Key", + "KeyP3" => "A Tower of Hera Key", + "KeyD4" => "A Thieves Town Key", + "KeyD7" => "A Turtle Rock Key", + "KeyA2" => "A Ganons Tower Key", + "KeyGK" => "A Generic Key", + "Crystal1" => "Crystal 1", + "Crystal2" => "Crystal 2", + "Crystal3" => "Crystal 3", + "Crystal4" => "Crystal 4", + "Crystal5" => "Crystal 5", + "Crystal6" => "Crystal 6", + "Crystal7" => "Crystal 7", + "RescueZelda" => "Rescue Zelda", + "DefeatAgahnim" => "Defeat Agahnim", + "BigRedBomb" => "Big Red Bomb", + "DefeatAgahnim2" => "Defeat Agahnim 2", + "DefeatGanon" => "Defeat Ganon", - "Armos Knights" => "Armos Knights", - "Lanmolas" => "Lanmolas", - "Moldorm" => "Moldorm", - "Helmasaur King" => "Helmasaur King", - "Arrghus" => "Arrghus", - "Mothula" => "Mothula", - "Blind" => "Blind", - "Kholdstare" => "Kholdstare", - "Vitreous" => "Vitreous", - "Trinexx" => "Trinexx", - "Armos Knights" => "Armos Knights", - "Lanmolas" => "Lanmolas", - "Moldorm" => "Moldorm", - "Agahnim" => "Agahnim", - "Agahnim 2" => "Agahnim 2", - "Ganon" => "Ganon", - ], - "location" => [ - "Agahnim 2" => "Agahnim 2", - "Agahnim" => "Agahnim", - "Aginah's Cave" => ["is with a hermit", "requires a bomb"], - "Blacksmith" => ["can be forged", "held by someone friendly"], - "Blind's Hideout - Far Left" => "is in Blind's Hideout", - "Blind's Hideout - Far Right" => "is in Blind's Hideout", - "Blind's Hideout - Left" => "is in Blind's Hideout", - "Blind's Hideout - Right" => "is in Blind's Hideout", - "Blind's Hideout - Top" => ["is in Blind's Hideout", "requires a bomb"], - "Bombos Tablet" => ["is on a Tablet", "requires the book"], - "Bottle Merchant" => ["can be bought", "held by someone friendly"], - "Brewery" => "is in the dark village", - "Bumper Cave" => "requires the cape", - "C-Shaped House" => "is in the dark village", - "Castle Tower - Dark Maze" => ["is in Castle Tower", "is in the dark"], - "Castle Tower - Room 03" => "is in Castle Tower", - "Catfish" => ["is held with a grumpy fish", "is under water", "is held with the fishes", "held by someone friendly"], - "Cave 45" => "is near the haunted grove", - "Checkerboard Cave" => "is under a rock in the desert", - "Chest Game" => "is in the dark village", - "Chicken House" => "is with the Chickens", - "Desert Ledge" => "is in plain sight", - "Desert Palace - Big Chest" => "is in Desert Palace", - "Desert Palace - Big Key Chest" => "is in Desert Palace", - "Desert Palace - Compass Chest" => "is in Desert Palace", - "Desert Palace - Boss" => ["is in Desert Palace", "is on a boss"], - "Desert Palace - Map Chest" => "is in Desert Palace", - "Desert Palace - Prize" => "is in Desert Palace", - "Desert Palace - Torch" => ["is in Desert Palace", "is in plain sight", "requires the boots"], - "Digging Game" => "can be dug up", - "Eastern Palace - Boss" => ["is in Eastern Palace", "is on a boss"], - "Eastern Palace - Big Chest" => "is in Eastern Palace", - "Eastern Palace - Big Key Chest" => "is in Eastern Palace", - "Eastern Palace - Cannonball Chest" => "is in Eastern Palace", - "Eastern Palace - Compass Chest" => "is in Eastern Palace", - "Eastern Palace - Map Chest" => "is in Eastern Palace", - "Eastern Palace - Prize" => "is in Eastern Palace", - "Ether Tablet" => ["is on a Tablet", "requires the book"], - "Floating Island" => ["is on Floating Island", "is in plain sight"], - "Floodgate Chest" => "is near a water switch", - "Flute Spot" => ["can be dug up", "requires the shovel"], - "Ganon" => "Ganon", - "Ganon's Tower - Big Chest" => "is in Ganon's Tower", - "Ganon's Tower - Big Key Chest" => "is in Ganon's Tower", - "Ganon's Tower - Big Key Room - Left" => "is in Ganon's Tower", - "Ganon's Tower - Big Key Room - Right" => "is in Ganon's Tower", - "Ganon's Tower - Bob's Chest" => "is in Ganon's Tower", - "Ganon's Tower - Bob's Torch" => ["is in Ganon's Tower", "is in plain sight", "requires the boots"], - "Ganon's Tower - Compass Room - Bottom Left" => ["is in Ganon's Tower", "requires the cane of somaria"], - "Ganon's Tower - Compass Room - Bottom Right" => ["is in Ganon's Tower", "requires the cane of somaria"], - "Ganon's Tower - Compass Room - Top Left" => ["is in Ganon's Tower", "requires the cane of somaria"], - "Ganon's Tower - Compass Room - Top Right" => ["is in Ganon's Tower", "requires the cane of somaria"], - "Ganon's Tower - DMs Room - Bottom Left" => ["is in Ganon's Tower", "requires the hammer"], - "Ganon's Tower - DMs Room - Bottom Right" => ["is in Ganon's Tower", "requires the hammer"], - "Ganon's Tower - DMs Room - Top Left" => ["is in Ganon's Tower", "requires the hammer"], - "Ganon's Tower - DMs Room - Top Right" => ["is in Ganon's Tower", "requires the hammer"], - "Ganon's Tower - Firesnake Room" => ["is in Ganon's Tower", "requires the hammer"], - "Ganon's Tower - Hope Room - Left" => "is in Ganon's Tower", - "Ganon's Tower - Hope Room - Right" => "is in Ganon's Tower", - "Ganon's Tower - Map Chest" => ["is in Ganon's Tower", "requires the hammer"], - "Ganon's Tower - Mini Helmasaur Room - Left" => "is in Ganon's Tower", - "Ganon's Tower - Mini Helmasaur Room - Right" => "is in Ganon's Tower", - "Ganon's Tower - Moldorm Chest" => ["is in Ganon's Tower", "requires the hookshot"], - "Ganon's Tower - Pre-Moldorm Chest" => "is in Ganon's Tower", - "Ganon's Tower - Randomizer Room - Bottom Left" => ["is in Ganon's Tower", "requires the hammer", "requires a bomb"], - "Ganon's Tower - Randomizer Room - Bottom Right" => ["is in Ganon's Tower", "requires the hammer", "requires a bomb"], - "Ganon's Tower - Randomizer Room - Top Left" => ["is in Ganon's Tower", "requires the hammer", "requires a bomb"], - "Ganon's Tower - Randomizer Room - Top Right" => ["is in Ganon's Tower", "requires the hammer", "requires a bomb"], - "Ganon's Tower - Tile Room" => ["is in Ganon's Tower", "requires the cane of somaria"], - "Graveyard Ledge" => "is above the poes", - "Hammer Pegs" => "requires the Hammer", - "Hobo" => ["is under a bridge", "held by someone friendly"], - "Hookshot Cave - Bottom Left" => ["is in Hookshot Cave", "requires the hookshot"], - "Hookshot Cave - Bottom Right" => "is in Hookshot Cave", - "Hookshot Cave - Top Left" => ["is in Hookshot Cave", "requires the hookshot"], - "Hookshot Cave - Top Right" => ["is in Hookshot Cave", "requires the hookshot"], - "Hype Cave - Bottom" => ["is in the Hype cave", "requires a bomb"], - "Hype Cave - Middle Left" => ["is in the Hype cave", "requires a bomb"], - "Hype Cave - Middle Right" => ["is in the Hype cave", "requires a bomb"], - "Hype Cave - NPC" => ["is in the Hype cave", "requires a bomb", "held by someone friendly"], - "Hype Cave - Top" => ["is in the Hype cave", "requires a bomb"], - "Hyrule Castle - Boomerang Chest" => "is in the Castle", - "Hyrule Castle - Map Chest" => "is in the Castle", - "Hyrule Castle - Zelda's Cell" => "is in the Castle", - "Ice Palace - Big Chest" => "is in Ice Palace", - "Ice Palace - Big Key Chest" => ["is in Ice Palace", "requires the Hammer"], - "Ice Palace - Compass Chest" => "is in Ice Palace", - "Ice Palace - Freezor Chest" => "is in Ice Palace", - "Ice Palace - Iced T Room" => "is in Ice Palace", - "Ice Palace - Boss" => ["is in Ice Palace", "requires the Hammer", "is on a boss"], - "Ice Palace - Map Chest" => ["is in Ice Palace", "requires the Hammer"], - "Ice Palace - Prize" => "is in Ice Palace", - "Ice Palace - Spike Room" => "is in Ice Palace", - "Ice Rod Cave" => ["is in a cold Cave", "requires a bomb"], - "Kakariko Tavern" => "is in Kakariko Tavern", - "Kakariko Well - Bottom" => "is in Kakariko Well", - "Kakariko Well - Left" => "is in Kakariko Well", - "Kakariko Well - Middle" => "is in Kakariko Well", - "Kakariko Well - Right" => "is in Kakariko Well", - "Kakariko Well - Top" => ["is in Kakariko Well", "requires a bomb"], - "King Zora" => ["is held with a grumpy fish", "is under water", "is held with the fishes", "can be bought", "held by someone friendly"], - "King's Tomb" => ["sleeps in the Tomb", "requires the boots"], - "Lake Hylia Island" => "is in plain sight", - "Library" => ["is in plain sight", "requires the boots"], - "Link's House" => "is in your House, numpty", - "Link's Uncle" => ["is on your Uncle", "held by someone friendly"], - "Lost Woods Hideout" => "is in the Lost Woods", - "Lumberjack Tree" => ["is in plain sight", "requires the boots"], - "Magic Bat" => ["is with Magic Bat", "held by someone friendly"], - "Master Sword Pedestal" => ["requires three pendants", "is in the lost woods"], - "Maze Race" => "is in plain sight", - "Mimic Cave" => "is in Mimic Cave", - "Mini Moldorm Cave - Far Left" => ["is in Mini Moldorm Cave", "requires a bomb"], - "Mini Moldorm Cave - Far Right" => ["is in Mini Moldorm Cave", "requires a bomb"], - "Mini Moldorm Cave - Left" => ["is in Mini Moldorm Cave", "requires a bomb"], - "Mini Moldorm Cave - NPC" => ["is in Mini Moldorm Cave", "requires a bomb", "held by someone friendly"], - "Mini Moldorm Cave - Right" => ["is in Mini Moldorm Cave", "requires a bomb"], - "Mire Shed - Left" => "is near Misery Mire", - "Mire Shed - Right" => "is near Misery Mire", - "Misery Mire - Big Chest" => "is in Misery Mire", - "Misery Mire - Big Key Chest" => "is fire locked in Misery Mire", - "Misery Mire - Bridge Chest" => "is in Misery Mire", - "Misery Mire - Compass Chest" => "is fire locked in Misery Mire", - "Misery Mire - Main Lobby" => "is in Misery Mire", - "Misery Mire - Map Chest" => "is in Misery Mire", - "Misery Mire - Prize" => "is in Misery Mire", - "Misery Mire - Spike Chest" => "is in Misery Mire", - "Misery Mire - Boss" => ["is in Misery Mire", "requires the cane of somaria", "is on a boss"], - "Misery Mire Medallion" => "is required to enter Misery Mire", - "Mushroom" => "is in the Lost Woods", - "Old Man" => ["is held by an Old Man", "is in the dark", "held by someone friendly"], - "Palace of Darkness - Big Chest" => "is in Palace of Darkness", - "Palace of Darkness - Big Key Chest" => "is in Palace of Darkness", - "Palace of Darkness - Compass Chest" => "is in Palace of Darkness", - "Palace of Darkness - Dark Basement - Left" => ["is in Palace of Darkness", "is in the dark"], - "Palace of Darkness - Dark Basement - Right" => ["is in Palace of Darkness", "is in the dark"], - "Palace of Darkness - Dark Maze - Bottom" => ["is in Palace of Darkness", "is in the dark"], - "Palace of Darkness - Dark Maze - Top" => ["is in Palace of Darkness", "is in the dark"], - "Palace of Darkness - Harmless Hellway" => "is in Palace of Darkness", - "Palace of Darkness - Boss" => ["is in Palace of Darkness", "requires the Hammer", "requires the bow", "is on a boss"], - "Palace of Darkness - Map Chest" => "is in Palace of Darkness", - "Palace of Darkness - Prize" => "is in Palace of Darkness", - "Palace of Darkness - Shooter Room" => "is in Palace of Darkness", - "Palace of Darkness - Stalfos Basement" => "is in Palace of Darkness", - "Palace of Darkness - The Arena - Bridge" => "is in Palace of Darkness", - "Palace of Darkness - The Arena - Ledge" => "is in Palace of Darkness", - "Paradox Cave Lower - Far Left" => "is in Paradox Cave", - "Paradox Cave Lower - Far Right" => "is in Paradox Cave", - "Paradox Cave Lower - Left" => "is in Paradox Cave", - "Paradox Cave Lower - Middle" => "is in Paradox Cave", - "Paradox Cave Lower - Right" => "is in Paradox Cave", - "Paradox Cave Upper - Left" => ["is in Paradox Cave", "requires a bomb"], - "Paradox Cave Upper - Right" => ["is in Paradox Cave", "requires a bomb"], - "Pegasus Rocks" => ["is under some Rocks", "requires the boots"], - "Potion Shop" => ["is with the witch", "requires the mushroom"], - "Purple Chest" => "in a chest requiring a specialist to unlock", - "Pyramid Bottle" => "Pyramid Bottle", - "Pyramid Fairy - Bow" => ["requires a big red bomb", "is with a great fairy"], - "Pyramid Fairy - Left" => ["requires a big red bomb", "is with a great fairy"], - "Pyramid Fairy - Right" => ["requires a big red bomb", "is with a great fairy"], - "Pyramid Fairy - Sword" => ["requires a big red bomb", "is with a great fairy"], - "Pyramid" => "is in plain sight", - "Sahasrahla" => ["requires a green pendant", "is held by the Kakariko village elder", "held by someone friendly"], - "Sahasrahla's Hut - Left" => "is in a sages closet", - "Sahasrahla's Hut - Middle" => "is in a sages closet", - "Sahasrahla's Hut - Right" => "is in a sages closet", - "Sanctuary" => "is in the Sanctuary", - "Secret Passage" => "is near your Uncle", - "Sewers - Dark Cross" => ["is in the Sewers", "is in the dark"], - "Sewers - Secret Room - Left" => "is in the Sewers", - "Sewers - Secret Room - Middle" => "is in the Sewers", - "Sewers - Secret Room - Right" => "is in the Sewers", - "Sick Kid" => ["is with Sick Kid", "requires a bottle", "held by someone friendly"], - "Skull Woods - Big Chest" => "is in Skull Woods", - "Skull Woods - Big Key Chest" => "is in Skull Woods", - "Skull Woods - Bridge Room" => "is in Skull Woods", - "Skull Woods - Compass Chest" => "is in Skull Woods", - "Skull Woods - Map Chest" => "is in Skull Woods", - "Skull Woods - Boss" => ["is in Skull Woods", "is on a boss"], - "Skull Woods - Pinball Room" => "is in Skull Woods", - "Skull Woods - Pot Prison" => "is in Skull Woods", - "Skull Woods - Prize" => "is in Skull Woods", - "Spectacle Rock Cave" => ["is in Spectacle Rock", "is in plain sight"], - "Spectacle Rock" => ["is on Spectacle Rock", "is in plain sight"], - "Spike Cave" => ["is in the Spike Cave", "requires the hammer", "requires the gloves"], - "Spiral Cave" => "is in Spiral Cave", - "Stumpy" => ["can be found on a stump", "held by someone friendly"], - "Sunken Treasure" => "is under water", - "Superbunny Cave - Bottom" => "is in Superbunny Cave", - "Superbunny Cave - Top" => "is in Superbunny Cave", - "Swamp Palace - Boss" => ["is in Swamp Palace", "requires the hookshot", "requires the Hammer", "is on a boss"], - "Swamp Palace - Big Chest" => ["is in the Big Chest Swamp Palace", "requires the Hammer"], - "Swamp Palace - Big Key Chest" => ["is in western wing of Swamp Palace", "requires the Hammer"], - "Swamp Palace - Compass Chest" => ["is in Swamp Palace", "requires the Hammer"], - "Swamp Palace - Entrance" => "is in Swamp Palace", - "Swamp Palace - Flooded Room - Left" => ["is in Swamp Palace", "requires the hookshot", "requires the Hammer", "is under water"], - "Swamp Palace - Flooded Room - Right" => ["is in Swamp Palace", "requires the hookshot", "requires the Hammer", "is under water"], - "Swamp Palace - Map Chest" => ["is in Swamp Palace", "requires a bomb"], - "Swamp Palace - Prize" => "is in Swamp Palace", - "Swamp Palace - Waterfall Room" => ["is in Swamp Palace", "requires the hookshot", "requires the Hammer"], - "Swamp Palace - West Chest" => ["is in western wing of Swamp Palace", "requires the Hammer"], - "Thieves' Town - Ambush Chest" => "is in Thieves' Town", - "Thieves' Town - Attic" => "is in Thieves' Town", - "Thieves' Town - Big Chest" => ["is in Thieves' Town", "requires the Hammer"], - "Thieves' Town - Big Key Chest" => "is in Thieves' Town", - "Thieves' Town - Boss" => ["is in Thieves' Town", "is on a boss"], - "Thieves' Town - Blind's Cell" => "is in Thieves' Town", - "Thieves' Town - Compass Chest" => "is in Thieves' Town", - "Thieves' Town - Map Chest" => "is in Thieves' Town", - "Thieves' Town - Prize" => "is in Thieves' Town", - "Tower of Hera - Basement Cage" => ["is in Tower of Hera", "is in plain sight"], - "Tower of Hera - Big Chest" => "is in Tower of Hera", - "Tower of Hera - Big Key Chest" => "needs fire in Tower of Hera", - "Tower of Hera - Compass Chest" => "is in Tower of Hera", - "Tower of Hera - Map Chest" => "is in Tower of Hera", - "Tower of Hera - Boss" => ["is in Tower of Hera", "is on a boss"], - "Tower of Hera - Prize" => "is in Tower of Hera", - "Turtle Rock - Big Chest" => "is in Turtle Rock", - "Turtle Rock - Big Key Chest" => "is in Turtle Rock", - "Turtle Rock - Chain Chomps" => "is in Turtle Rock", - "Turtle Rock - Compass Chest" => ["is in Turtle Rock", "requires the cane of somaria"], - "Turtle Rock - Crystaroller Room" => "is in Turtle Rock", - "Turtle Rock - Eye Bridge - Bottom Left" => "is in Turtle Rock", - "Turtle Rock - Eye Bridge - Bottom Right" => "is in Turtle Rock", - "Turtle Rock - Eye Bridge - Top Left" => "is in Turtle Rock", - "Turtle Rock - Eye Bridge - Top Right" => "is in Turtle Rock", - "Turtle Rock - Prize" => "is in Turtle Rock", - "Turtle Rock - Roller Room - Left" => ["is in Turtle Rock", "requires the cane of somaria"], - "Turtle Rock - Roller Room - Right" => ["is in Turtle Rock", "requires the cane of somaria"], - "Turtle Rock - Boss" => ["is in Turtle Rock", "requires the cane of somaria", "is on a boss"], - "Turtle Rock Medallion" => ["is required to enter Turtle Rock", "am enters Turtle Rock"], - "Waterfall Bottle" => "Waterfall Bottle", - "Waterfall Fairy - Left" => ["awaits in the waterfall", "is with a great fairy", "is under water"], - "Waterfall Fairy - Right" => ["awaits in the waterfall", "is with a great fairy", "is under water"], - "Zelda" => "Zelda", - "Zora's Ledge" => "is in plain sight", - ], + "Armos Knights" => "Armos Knights", + "Lanmolas" => "Lanmolas", + "Moldorm" => "Moldorm", + "Helmasaur King" => "Helmasaur King", + "Arrghus" => "Arrghus", + "Mothula" => "Mothula", + "Blind" => "Blind", + "Kholdstare" => "Kholdstare", + "Vitreous" => "Vitreous", + "Trinexx" => "Trinexx", + "Armos Knights" => "Armos Knights", + "Lanmolas" => "Lanmolas", + "Moldorm" => "Moldorm", + "Agahnim" => "Agahnim", + "Agahnim 2" => "Agahnim 2", + "Ganon" => "Ganon", + ], + "location" => [ + "Agahnim 2" => "Agahnim 2", + "Agahnim" => "Agahnim", + "Aginah's Cave" => ["is with a hermit", "requires a bomb"], + "Blacksmith" => ["can be forged", "held by someone friendly"], + "Blind's Hideout - Far Left" => "is in Blind's Hideout", + "Blind's Hideout - Far Right" => "is in Blind's Hideout", + "Blind's Hideout - Left" => "is in Blind's Hideout", + "Blind's Hideout - Right" => "is in Blind's Hideout", + "Blind's Hideout - Top" => ["is in Blind's Hideout", "requires a bomb"], + "Bombos Tablet" => ["is on a Tablet", "requires the book"], + "Bottle Merchant" => ["can be bought", "held by someone friendly"], + "Brewery" => ["is in the dark village", "requires a bomb"], + "Bumper Cave" => "requires the cape", + "C-Shaped House" => "is in the dark village", + "Castle Tower - Dark Maze" => ["is in Castle Tower", "is in the dark"], + "Castle Tower - Room 03" => "is in Castle Tower", + "Catfish" => ["is held with a grumpy fish", "is under water", "is held with the fishes", "held by someone friendly"], + "Cave 45" => "is near the haunted grove", + "Checkerboard Cave" => ["is under a rock in the desert", "requires a glove"], + "Chest Game" => "is in the dark village", + "Chicken House" => ["is with the Chickens", "requires a bomb"], + "Desert Ledge" => "is in plain sight", + "Desert Palace - Big Chest" => "is in Desert Palace", + "Desert Palace - Big Key Chest" => "is in Desert Palace", + "Desert Palace - Compass Chest" => "is in Desert Palace", + "Desert Palace - Boss" => ["is in Desert Palace", "is on a boss"], + "Desert Palace - Map Chest" => "is in Desert Palace", + "Desert Palace - Prize" => "is in Desert Palace", + "Desert Palace - Torch" => ["is in Desert Palace", "is in plain sight", "requires the boots"], + "Digging Game" => "can be dug up", + "Eastern Palace - Boss" => ["is in Eastern Palace", "is on a boss"], + "Eastern Palace - Big Chest" => "is in Eastern Palace", + "Eastern Palace - Big Key Chest" => "is in Eastern Palace", + "Eastern Palace - Cannonball Chest" => "is in Eastern Palace", + "Eastern Palace - Compass Chest" => "is in Eastern Palace", + "Eastern Palace - Map Chest" => "is in Eastern Palace", + "Eastern Palace - Prize" => "is in Eastern Palace", + "Ether Tablet" => ["is on a Tablet", "requires the book"], + "Floating Island" => ["is on Floating Island", "is in plain sight"], + "Floodgate Chest" => "is near a water switch", + "Flute Spot" => ["can be dug up", "requires the shovel"], + "Ganon" => "Ganon", + "Ganon's Tower - Big Chest" => "is in Ganon's Tower", + "Ganon's Tower - Big Key Chest" => ["is in Ganon's Tower", "requires a bomb"], + "Ganon's Tower - Big Key Room - Left" => ["is in Ganon's Tower", "requires a bomb"], + "Ganon's Tower - Big Key Room - Right" => ["is in Ganon's Tower", "requires a bomb"], + "Ganon's Tower - Bob's Chest" => "is in Ganon's Tower", + "Ganon's Tower - Bob's Torch" => ["is in Ganon's Tower", "is in plain sight", "requires the boots"], + "Ganon's Tower - Compass Room - Bottom Left" => ["is in Ganon's Tower", "requires the cane of somaria"], + "Ganon's Tower - Compass Room - Bottom Right" => ["is in Ganon's Tower", "requires the cane of somaria"], + "Ganon's Tower - Compass Room - Top Left" => ["is in Ganon's Tower", "requires the cane of somaria"], + "Ganon's Tower - Compass Room - Top Right" => ["is in Ganon's Tower", "requires the cane of somaria"], + "Ganon's Tower - DMs Room - Bottom Left" => ["is in Ganon's Tower", "requires the hammer", "requires the hookshot"], + "Ganon's Tower - DMs Room - Bottom Right" => ["is in Ganon's Tower", "requires the hammer", "requires the hookshot"], + "Ganon's Tower - DMs Room - Top Left" => ["is in Ganon's Tower", "requires the hammer", "requires the hookshot"], + "Ganon's Tower - DMs Room - Top Right" => ["is in Ganon's Tower", "requires the hammer", "requires the hookshot"], + "Ganon's Tower - Firesnake Room" => ["is in Ganon's Tower", "requires the hammer", "requires the hookshot"], + "Ganon's Tower - Hope Room - Left" => "is in Ganon's Tower", + "Ganon's Tower - Hope Room - Right" => "is in Ganon's Tower", + "Ganon's Tower - Map Chest" => ["is in Ganon's Tower", "requires the hammer"], + "Ganon's Tower - Mini Helmasaur Room - Left" => "is in Ganon's Tower", + "Ganon's Tower - Mini Helmasaur Room - Right" => "is in Ganon's Tower", + "Ganon's Tower - Moldorm Chest" => ["is in Ganon's Tower", "requires the hookshot"], + "Ganon's Tower - Pre-Moldorm Chest" => "is in Ganon's Tower", + "Ganon's Tower - Randomizer Room - Bottom Left" => ["is in Ganon's Tower", "requires the hammer", "requires a bomb", "requires the hookshot"], + "Ganon's Tower - Randomizer Room - Bottom Right" => ["is in Ganon's Tower", "requires the hammer", "requires a bomb", "requires the hookshot"], + "Ganon's Tower - Randomizer Room - Top Left" => ["is in Ganon's Tower", "requires the hammer", "requires a bomb", "requires the hookshot"], + "Ganon's Tower - Randomizer Room - Top Right" => ["is in Ganon's Tower", "requires the hammer", "requires a bomb", "requires the hookshot"], + "Ganon's Tower - Tile Room" => ["is in Ganon's Tower", "requires the cane of somaria"], + "Graveyard Ledge" => "is above the poes", + "Hammer Pegs" => "requires the Hammer", + "Hobo" => ["is under a bridge", "held by someone friendly"], + "Hookshot Cave - Bottom Left" => ["is in Hookshot Cave", "requires the hookshot", "requires a glove"], + "Hookshot Cave - Bottom Right" => ["is in Hookshot Cave", "requires a glove"], + "Hookshot Cave - Top Left" => ["is in Hookshot Cave", "requires the hookshot", "requires a glove"], + "Hookshot Cave - Top Right" => ["is in Hookshot Cave", "requires the hookshot", "requires a glove"], + "Hype Cave - Bottom" => ["is in the Hype cave", "requires a bomb"], + "Hype Cave - Middle Left" => ["is in the Hype cave", "requires a bomb"], + "Hype Cave - Middle Right" => ["is in the Hype cave", "requires a bomb"], + "Hype Cave - NPC" => ["is in the Hype cave", "requires a bomb", "held by someone friendly"], + "Hype Cave - Top" => ["is in the Hype cave", "requires a bomb"], + "Hyrule Castle - Boomerang Chest" => "is in the Castle", + "Hyrule Castle - Map Chest" => "is in the Castle", + "Hyrule Castle - Zelda's Cell" => "is in the Castle", + "Ice Palace - Big Chest" => ["is in Ice Palace", "requires a bomb"], + "Ice Palace - Big Key Chest" => ["is in Ice Palace", "requires the Hammer", "requires a glove", "requires a bomb"], + "Ice Palace - Compass Chest" => "is in Ice Palace", + "Ice Palace - Freezor Chest" => ["is in Ice Palace", "requires a bomb"], + "Ice Palace - Iced T Room" => ["is in Ice Palace", "requires a bomb"], + "Ice Palace - Boss" => ["is in Ice Palace", "requires the Hammer", "is on a boss", "requires a glove", "requires a bomb"], + "Ice Palace - Map Chest" => ["is in Ice Palace", "requires the Hammer", "requires a glove", "requires a bomb"], + "Ice Palace - Prize" => "is in Ice Palace", + "Ice Palace - Spike Room" => ["is in Ice Palace", "requires a bomb"], + "Ice Rod Cave" => ["is in a cold Cave", "requires a bomb"], + "Kakariko Tavern" => "is in Kakariko Tavern", + "Kakariko Well - Bottom" => "is in Kakariko Well", + "Kakariko Well - Left" => "is in Kakariko Well", + "Kakariko Well - Middle" => "is in Kakariko Well", + "Kakariko Well - Right" => "is in Kakariko Well", + "Kakariko Well - Top" => ["is in Kakariko Well", "requires a bomb"], + "King Zora" => ["is held with a grumpy fish", "is under water", "is held with the fishes", "can be bought", "held by someone friendly"], + "King's Tomb" => ["sleeps in the Tomb", "requires the boots"], + "Lake Hylia Island" => "is in plain sight", + "Library" => ["is in plain sight", "requires the boots"], + "Link's House" => "is in your House, numpty", + "Link's Uncle" => ["is on your Uncle", "held by someone friendly"], + "Lost Woods Hideout" => "is in the Lost Woods", + "Lumberjack Tree" => ["is in plain sight", "requires the boots"], + "Magic Bat" => ["is with Magic Bat", "held by someone friendly"], + "Master Sword Pedestal" => ["requires three pendants", "is in the lost woods"], + "Maze Race" => "is in plain sight", + "Mimic Cave" => "is in Mimic Cave", + "Mini Moldorm Cave - Far Left" => ["is in Mini Moldorm Cave", "requires a bomb"], + "Mini Moldorm Cave - Far Right" => ["is in Mini Moldorm Cave", "requires a bomb"], + "Mini Moldorm Cave - Left" => ["is in Mini Moldorm Cave", "requires a bomb"], + "Mini Moldorm Cave - NPC" => ["is in Mini Moldorm Cave", "requires a bomb", "held by someone friendly"], + "Mini Moldorm Cave - Right" => ["is in Mini Moldorm Cave", "requires a bomb"], + "Mire Shed - Left" => "is near Misery Mire", + "Mire Shed - Right" => "is near Misery Mire", + "Misery Mire - Big Chest" => "is in Misery Mire", + "Misery Mire - Big Key Chest" => ["is in Misery Mire", "is fire locked in Misery Mire"], + "Misery Mire - Bridge Chest" => "is in Misery Mire", + "Misery Mire - Compass Chest" => ["is in Misery Mire", "is fire locked in Misery Mire"], + "Misery Mire - Main Lobby" => "is in Misery Mire", + "Misery Mire - Map Chest" => "is in Misery Mire", + "Misery Mire - Prize" => "is in Misery Mire", + "Misery Mire - Spike Chest" => "is in Misery Mire", + "Misery Mire - Boss" => ["is in Misery Mire", "requires the cane of somaria", "is on a boss"], + "Misery Mire Medallion" => "is required to enter Misery Mire", + "Mushroom" => "is in the Lost Woods", + "Old Man" => ["is held by an Old Man", "is in the dark", "held by someone friendly"], + "Palace of Darkness - Big Chest" => "is in Palace of Darkness", + "Palace of Darkness - Big Key Chest" => "is in Palace of Darkness", + "Palace of Darkness - Compass Chest" => "is in Palace of Darkness", + "Palace of Darkness - Dark Basement - Left" => ["is in Palace of Darkness", "is in the dark"], + "Palace of Darkness - Dark Basement - Right" => ["is in Palace of Darkness", "is in the dark"], + "Palace of Darkness - Dark Maze - Bottom" => ["is in Palace of Darkness", "is in the dark"], + "Palace of Darkness - Dark Maze - Top" => ["is in Palace of Darkness", "is in the dark"], + "Palace of Darkness - Harmless Hellway" => "is in Palace of Darkness", + "Palace of Darkness - Boss" => ["is in Palace of Darkness", "requires the Hammer", "requires the bow", "is on a boss"], + "Palace of Darkness - Map Chest" => "is in Palace of Darkness", + "Palace of Darkness - Prize" => "is in Palace of Darkness", + "Palace of Darkness - Shooter Room" => "is in Palace of Darkness", + "Palace of Darkness - Stalfos Basement" => "is in Palace of Darkness", + "Palace of Darkness - The Arena - Bridge" => "is in Palace of Darkness", + "Palace of Darkness - The Arena - Ledge" => "is in Palace of Darkness", + "Paradox Cave Lower - Far Left" => "is in Paradox Cave", + "Paradox Cave Lower - Far Right" => "is in Paradox Cave", + "Paradox Cave Lower - Left" => "is in Paradox Cave", + "Paradox Cave Lower - Middle" => "is in Paradox Cave", + "Paradox Cave Lower - Right" => "is in Paradox Cave", + "Paradox Cave Upper - Left" => ["is in Paradox Cave", "requires a bomb"], + "Paradox Cave Upper - Right" => ["is in Paradox Cave", "requires a bomb"], + "Pegasus Rocks" => ["is under some Rocks", "requires the boots"], + "Potion Shop" => ["is with the witch", "requires the mushroom"], + "Purple Chest" => "in a chest requiring a specialist to unlock", + "Pyramid Bottle" => "Pyramid Bottle", + "Pyramid Fairy - Bow" => ["requires a big red bomb", "is with a great fairy"], + "Pyramid Fairy - Left" => ["requires a big red bomb", "is with a great fairy"], + "Pyramid Fairy - Right" => ["requires a big red bomb", "is with a great fairy"], + "Pyramid Fairy - Sword" => ["requires a big red bomb", "is with a great fairy"], + "Pyramid" => "is in plain sight", + "Sahasrahla" => ["requires a green pendant", "is held by the Kakariko village elder", "held by someone friendly"], + "Sahasrahla's Hut - Left" => "is in a sages closet", + "Sahasrahla's Hut - Middle" => "is in a sages closet", + "Sahasrahla's Hut - Right" => "is in a sages closet", + "Sanctuary" => "is in the Sanctuary", + "Secret Passage" => "is near your Uncle", + "Sewers - Dark Cross" => ["is in the Sewers", "is in the dark"], + "Sewers - Secret Room - Left" => "is in the Sewers", + "Sewers - Secret Room - Middle" => "is in the Sewers", + "Sewers - Secret Room - Right" => "is in the Sewers", + "Sick Kid" => ["is with Sick Kid", "requires a bottle", "held by someone friendly"], + "Skull Woods - Big Chest" => "is in Skull Woods", + "Skull Woods - Big Key Chest" => "is in Skull Woods", + "Skull Woods - Bridge Room" => "is in Skull Woods", + "Skull Woods - Compass Chest" => "is in Skull Woods", + "Skull Woods - Map Chest" => "is in Skull Woods", + "Skull Woods - Boss" => ["is in Skull Woods", "is on a boss"], + "Skull Woods - Pinball Room" => "is in Skull Woods", + "Skull Woods - Pot Prison" => "is in Skull Woods", + "Skull Woods - Prize" => "is in Skull Woods", + "Spectacle Rock Cave" => ["is in Spectacle Rock", "is in plain sight"], + "Spectacle Rock" => ["is on Spectacle Rock", "is in plain sight"], + "Spike Cave" => ["is in the Spike Cave", "requires the hammer", "requires a glove"], + "Spiral Cave" => "is in Spiral Cave", + "Stumpy" => ["can be found on a stump", "held by someone friendly"], + "Sunken Treasure" => "is under water", + "Superbunny Cave - Bottom" => "is in Superbunny Cave", + "Superbunny Cave - Top" => "is in Superbunny Cave", + "Swamp Palace - Boss" => ["is in Swamp Palace", "requires the hookshot", "requires the Hammer", "is on a boss"], + "Swamp Palace - Big Chest" => ["is in Swamp Palace", "is in the Big Chest Swamp Palace", "requires the Hammer"], + "Swamp Palace - Big Key Chest" => ["is in Swamp Palace", "is in western wing of Swamp Palace", "requires the Hammer"], + "Swamp Palace - Compass Chest" => ["is in Swamp Palace", "requires the Hammer"], + "Swamp Palace - Entrance" => "is in Swamp Palace", + "Swamp Palace - Flooded Room - Left" => ["is in Swamp Palace", "requires the hookshot", "requires the Hammer", "is under water"], + "Swamp Palace - Flooded Room - Right" => ["is in Swamp Palace", "requires the hookshot", "requires the Hammer", "is under water"], + "Swamp Palace - Map Chest" => ["is in Swamp Palace", "requires a bomb"], + "Swamp Palace - Prize" => "is in Swamp Palace", + "Swamp Palace - Waterfall Room" => ["is in Swamp Palace", "requires the hookshot", "requires the Hammer"], + "Swamp Palace - West Chest" => ["is in Swamp Palace", "is in western wing of Swamp Palace", "requires the Hammer"], + "Thieves' Town - Ambush Chest" => "is in Thieves' Town", + "Thieves' Town - Attic" => "is in Thieves' Town", + "Thieves' Town - Big Chest" => ["is in Thieves' Town", "requires the Hammer"], + "Thieves' Town - Big Key Chest" => "is in Thieves' Town", + "Thieves' Town - Boss" => ["is in Thieves' Town", "is on a boss"], + "Thieves' Town - Blind's Cell" => "is in Thieves' Town", + "Thieves' Town - Compass Chest" => "is in Thieves' Town", + "Thieves' Town - Map Chest" => "is in Thieves' Town", + "Thieves' Town - Prize" => "is in Thieves' Town", + "Tower of Hera - Basement Cage" => ["is in Tower of Hera", "is in plain sight"], + "Tower of Hera - Big Chest" => "is in Tower of Hera", + "Tower of Hera - Big Key Chest" => ["is in Tower of Hera", "needs fire in Tower of Hera"], + "Tower of Hera - Compass Chest" => "is in Tower of Hera", + "Tower of Hera - Map Chest" => "is in Tower of Hera", + "Tower of Hera - Boss" => ["is in Tower of Hera", "is on a boss"], + "Tower of Hera - Prize" => "is in Tower of Hera", + "Turtle Rock - Big Chest" => "is in Turtle Rock", + "Turtle Rock - Big Key Chest" => "is in Turtle Rock", + "Turtle Rock - Chain Chomps" => "is in Turtle Rock", + "Turtle Rock - Compass Chest" => ["is in Turtle Rock", "requires the cane of somaria"], + "Turtle Rock - Crystaroller Room" => "is in Turtle Rock", + "Turtle Rock - Eye Bridge - Bottom Left" => "is in Turtle Rock", + "Turtle Rock - Eye Bridge - Bottom Right" => "is in Turtle Rock", + "Turtle Rock - Eye Bridge - Top Left" => "is in Turtle Rock", + "Turtle Rock - Eye Bridge - Top Right" => "is in Turtle Rock", + "Turtle Rock - Prize" => "is in Turtle Rock", + "Turtle Rock - Roller Room - Left" => ["is in Turtle Rock", "requires the cane of somaria"], + "Turtle Rock - Roller Room - Right" => ["is in Turtle Rock", "requires the cane of somaria"], + "Turtle Rock - Boss" => ["is in Turtle Rock", "requires the cane of somaria", "is on a boss"], + "Turtle Rock Medallion" => ["is required to enter Turtle Rock", "am enters Turtle Rock"], + "Waterfall Bottle" => "Waterfall Bottle", + "Waterfall Fairy - Left" => ["awaits in the waterfall", "is with a great fairy", "is under water"], + "Waterfall Fairy - Right" => ["awaits in the waterfall", "is with a great fairy", "is under water"], + "Zelda" => "Zelda", + "Zora's Ledge" => "is in plain sight", + ], ]; diff --git a/resources/lang/en/item.php b/resources/lang/en/item.php index 4d12eeeee..54c675460 100644 --- a/resources/lang/en/item.php +++ b/resources/lang/en/item.php @@ -1,208 +1,215 @@ 'Nothing', - 'UncleSword' => 'Progressive Sword', - 'L1Sword' => 'Fighters Sword', - 'L1SwordAndShield' => 'Fighters Sword and Shield', - 'L2Sword' => 'Master Sword', - 'MasterSword' => 'Master Sword', - 'L3Sword' => 'Tempered Sword', - 'L4Sword' => 'Golden Sword', - 'BlueShield' => 'Fighters Shield', - 'RedShield' => 'Fire Shield', - 'MirrorShield' => 'Mirror Shield', - 'FireRod' => 'Fire Rod', - 'IceRod' => 'Ice Rod', - 'Hammer' => 'Hammer', - 'Hookshot' => 'Hookshot', - 'Bow' => 'Bow', - 'Boomerang' => 'Blue Boomerang', - 'Powder' => 'Magic Powder', - 'Bee' => 'Bee', - 'Bombos' => 'Bombos', - 'Ether' => 'Ether', - 'Quake' => 'Quake', - 'Lamp' => 'Lamp', - 'Shovel' => 'Shovel', - 'OcarinaInactive' => 'Flute', - 'CaneOfSomaria' => 'Cane Of Somaria', - 'Bottle' => 'Bottle (Empty)', - 'PieceOfHeart' => 'Piece Of Heart', - 'CaneOfByrna' => 'Cane Of Byrna', - 'Cape' => 'Magic Cape', - 'MagicMirror' => 'Magic Mirror', - 'PowerGlove' => 'Power Glove', - 'TitansMitt' => 'Titans Mitt', - 'BookOfMudora' => 'Book Of Mudora', - 'Flippers' => 'Flippers', - 'MoonPearl' => 'Moon Pearl', - 'BugCatchingNet' => 'Bug Catching Net', - 'BlueMail' => 'Blue Mail', - 'RedMail' => 'Red Mail', - 'Key' => 'Key', - 'Compass' => 'Compass', - 'HeartContainerNoAnimation' => 'Heart Container (no animation)', - 'Bomb' => 'Single Bomb', - 'ThreeBombs' => 'Three Bombs', - 'Mushroom' => 'Mushroom', - 'RedBoomerang' => 'Magical Boomerang', - 'BottleWithRedPotion' => 'Bottle (Red Potion)', - 'BottleWithGreenPotion' => 'Bottle (Green Potion)', - 'BottleWithBluePotion' => 'Bottle (Blue Potion)', - 'RedPotion' => 'Red Potion', - 'GreenPotion' => 'Green Potion', - 'BluePotion' => 'Blue Potion', - 'TenBombs' => 'Ten Bombs', - 'BigKey' => 'Big Key', - 'Map' => 'Dungeon Map', - 'OneRupee' => 'One Rupee', - 'FiveRupees' => 'Five Rupees', - 'TwentyRupees' => 'Twenty Rupees', - 'PendantOfCourage' => 'Pendant Of Courage', - 'PendantOfWisdom' => 'Pendant Of Wisdom', - 'PendantOfPower' => 'Pendant Of Power', - 'BowAndArrows' => 'Bow And Arrows', - 'BowAndSilverArrows' => 'Bow And Silver Arrows', - 'BottleWithBee' => 'Bottle (Bee)', - 'BottleWithFairy' => 'Bottle (Fairy)', - 'BossHeartContainer' => 'Heart Container', - 'HeartContainer' => 'Sanctuary Heart Container', - 'OneHundredRupees' => 'One Hundred Rupees', - 'FiftyRupees' => 'Fifty Rupees', - 'Heart' => 'Small Heart', - 'Arrow' => 'Single Arrow', - 'ShopArrow' => 'Arrows', - 'TenArrows' => 'Ten Arrows', - 'SmallMagic' => 'Small Magic', - 'ThreeHundredRupees' => 'Three Hundred Rupees', - 'TwentyRupees2' => 'Twenty Rupees', - 'BottleWithGoldBee' => 'Bottle (Golden Bee)', - 'OcarinaActive' => 'Flute (active)', - 'PegasusBoots' => 'Pegasus Boots', - 'BombUpgrade5' => 'Bomb Upgrade (+5)', - 'BombUpgrade10' => 'Bomb Upgrade (+10)', - 'BombUpgrade50' => 'Bomb Upgrade (+50)', - 'ArrowUpgrade5' => 'Arrow Upgrade (+5)', - 'ArrowUpgrade10' => 'Arrow Upgrade (+10)', - 'ArrowUpgrade70' => 'Arrow Upgrade (+70)', - 'HalfMagic' => 'Half Magic', - 'QuarterMagic' => 'Quarter Magic', - 'Programmable1' => 'Programmable 1', - 'Programmable2' => 'Programmable 2', - 'Programmable3' => 'Programmable 3', - 'SilverArrowUpgrade' => 'Silver Arrows Upgrade', - 'Rupoor' => 'Rupoor', - 'RedClock' => 'Red Clock', - 'BlueClock' => 'Blue Clock', - 'GreenClock' => 'Green Clock', - 'ProgressiveSword' => 'Progressive Sword', - 'ProgressiveShield' => 'Progressive Shield', - 'ProgressiveArmor' => 'Progressive Armor', - 'ProgressiveGlove' => 'Progressive Glove', - 'singleRNG' => 'Unique RNG Item', - 'multiRNG' => 'Non-Unique RNG Item', - 'Triforce' => 'Triforce', - 'PowerStar' => 'Power Star', - 'TriforcePiece' => 'Triforce Piece', - 'MapLW' => 'Light World Map', - 'MapDW' => 'Dark World Map', - 'MapA2' => 'Ganons Tower Map', - 'MapD7' => 'Turtle Rock Map', - 'MapD4' => 'Thieves Town Map', - 'MapP3' => 'Tower of Hera Map', - 'MapD5' => 'Ice Palace Map', - 'MapD3' => 'Skull Woods Map', - 'MapD6' => 'Misery Mire Map', - 'MapD1' => 'Palace of Darkness Map', - 'MapD2' => 'Swamp Palace Map', - 'MapA1' => 'Agahnims Tower Map', - 'MapP2' => 'Desert Palace Map', - 'MapP1' => 'Eastern Palace Map', - 'MapH1' => 'Hyrule Castle Map', - 'MapH2' => 'Sewers Map', - 'CompassA2' => 'Ganons Tower Compass', - 'CompassD7' => 'Turtle Rock Compass', - 'CompassD4' => 'Thieves Town Compass', - 'CompassP3' => 'Tower of Hera Compass', - 'CompassD5' => 'Ice Palace Compass', - 'CompassD3' => 'Skull Woods Compass', - 'CompassD6' => 'Misery Mire Compass', - 'CompassD1' => 'Palace of Darkness Compass', - 'CompassD2' => 'Swamp Palace Compass', - 'CompassA1' => 'Agahnims Tower Compass', - 'CompassP2' => 'Desert Palace Compass', - 'CompassP1' => 'Eastern Palace Compass', - 'CompassH1' => 'Hyrule Castle Compass', - 'CompassH2' => 'Sewers Compass', - 'BigKeyA2' => 'Ganons Tower Big Key', - 'BigKeyD7' => 'Turtle Rock Big Key', - 'BigKeyD4' => 'Thieves Town Big Key', - 'BigKeyP3' => 'Tower of Hera Big Key', - 'BigKeyD5' => 'Ice Palace Big Key', - 'BigKeyD3' => 'Skull Woods Big Key', - 'BigKeyD6' => 'Misery Mire Big Key', - 'BigKeyD1' => 'Palace of Darkness Big Key', - 'BigKeyD2' => 'Swamp Palace Big Key', - 'BigKeyA1' => 'Agahnims Tower Big Key', - 'BigKeyP2' => 'Desert Palace Big Key', - 'BigKeyP1' => 'Eastern Palace Big Key', - 'BigKeyH1' => 'Hyrule Castle Big Key', - 'BigKeyH2' => 'Sewers Big Key', - 'KeyH2' => 'Sewers Key', - 'KeyH1' => 'Hyrule Castle Key', - 'KeyP1' => 'Eastern Palace Key', - 'KeyP2' => 'Desert Palace Key', - 'KeyA1' => 'Agahnims Tower Key', - 'KeyD2' => 'Swamp Palace Key', - 'KeyD1' => 'Palace of Darkness Key', - 'KeyD6' => 'Misery Mire Key', - 'KeyD3' => 'Skull Woods Key', - 'KeyD5' => 'Ice Palace Key', - 'KeyP3' => 'Tower of Hera Key', - 'KeyD4' => 'Thieves Town Key', - 'KeyD7' => 'Turtle Rock Key', - 'KeyA2' => 'Ganons Tower Key', - 'KeyGK' => 'Generic Key', - 'ShopKey' => 'Key', - 'Crystal1' => 'Crystal 1', - 'Crystal2' => 'Crystal 2', - 'Crystal3' => 'Crystal 3', - 'Crystal4' => 'Crystal 4', - 'Crystal5' => 'Crystal 5', - 'Crystal6' => 'Crystal 6', - 'Crystal7' => 'Crystal 7', - 'RescueZelda' => 'Rescue Zelda', - 'DefeatAgahnim' => 'Defeat Agahnim', - 'BigRedBomb' => 'Big Red Bomb', - 'DefeatAgahnim2' => 'Defeat Agahnim 2', - 'DefeatGanon' => 'Defeat Ganon', + 'Random' => 'Random', + 'BottleWithRandom' => 'Bottle (Random)', + 'Nothing' => 'Nothing', + 'UncleSword' => 'Progressive Sword', + 'L1Sword' => 'Fighters Sword', + 'L1SwordAndShield' => 'Fighters Sword and Shield', + 'L2Sword' => 'Master Sword', + 'MasterSword' => 'Master Sword', + 'L3Sword' => 'Tempered Sword', + 'L4Sword' => 'Golden Sword', + 'BlueShield' => 'Fighters Shield', + 'RedShield' => 'Fire Shield', + 'MirrorShield' => 'Mirror Shield', + 'FireRod' => 'Fire Rod', + 'IceRod' => 'Ice Rod', + 'Hammer' => 'Hammer', + 'Hookshot' => 'Hookshot', + 'Bow' => 'Bow', + 'Boomerang' => 'Blue Boomerang', + 'Powder' => 'Magic Powder', + 'Bee' => 'Bee', + 'Bombos' => 'Bombos', + 'Ether' => 'Ether', + 'Quake' => 'Quake', + 'Lamp' => 'Lamp', + 'Shovel' => 'Shovel', + 'OcarinaInactive' => 'Flute', + 'CaneOfSomaria' => 'Cane Of Somaria', + 'Bottle' => 'Bottle (Empty)', + 'PieceOfHeart' => 'Piece Of Heart', + 'CaneOfByrna' => 'Cane Of Byrna', + 'Cape' => 'Magic Cape', + 'MagicMirror' => 'Magic Mirror', + 'PowerGlove' => 'Power Glove', + 'TitansMitt' => 'Titans Mitt', + 'BookOfMudora' => 'Book Of Mudora', + 'Flippers' => 'Flippers', + 'MoonPearl' => 'Moon Pearl', + 'BugCatchingNet' => 'Bug Catching Net', + 'BlueMail' => 'Blue Mail', + 'RedMail' => 'Red Mail', + 'Key' => 'Key', + 'Compass' => 'Compass', + 'HeartContainerNoAnimation' => 'Heart Container (no animation)', + 'Bomb' => 'Single Bomb', + 'ThreeBombs' => 'Three Bombs', + 'Mushroom' => 'Mushroom', + 'RedBoomerang' => 'Magical Boomerang', + 'BottleWithRedPotion' => 'Bottle (Red Potion)', + 'BottleWithGreenPotion' => 'Bottle (Green Potion)', + 'BottleWithBluePotion' => 'Bottle (Blue Potion)', + 'RedPotion' => 'Red Potion', + 'GreenPotion' => 'Green Potion', + 'BluePotion' => 'Blue Potion', + 'TenBombs' => 'Ten Bombs', + 'BigKey' => 'Big Key', + 'Map' => 'Dungeon Map', + 'OneRupee' => 'One Rupee', + 'FiveRupees' => 'Five Rupees', + 'TwentyRupees' => 'Twenty Rupees', + 'PendantOfCourage' => 'Pendant Of Courage', + 'PendantOfWisdom' => 'Pendant Of Wisdom', + 'PendantOfPower' => 'Pendant Of Power', + 'BowAndArrows' => 'Bow And Arrows', + 'BowAndSilverArrows' => 'Bow And Silver Arrows', + 'BottleWithBee' => 'Bottle (Bee)', + 'BottleWithFairy' => 'Bottle (Fairy)', + 'BossHeartContainer' => 'Heart Container', + 'HeartContainer' => 'Sanctuary Heart Container', + 'OneHundredRupees' => 'One Hundred Rupees', + 'FiftyRupees' => 'Fifty Rupees', + 'Heart' => 'Small Heart', + 'Arrow' => 'Single Arrow', + 'ShopArrow' => 'Arrows', + 'TenArrows' => 'Ten Arrows', + 'SmallMagic' => 'Small Magic', + 'ThreeHundredRupees' => 'Three Hundred Rupees', + 'TwentyRupees2' => 'Twenty Rupees', + 'BottleWithGoldBee' => 'Bottle (Golden Bee)', + 'OcarinaActive' => 'Flute (active)', + 'PegasusBoots' => 'Pegasus Boots', + 'BombUpgrade5' => 'Bomb Upgrade (+5)', + 'BombUpgrade10' => 'Bomb Upgrade (+10)', + 'BombUpgrade50' => 'Bomb Upgrade (+50)', + 'ArrowUpgrade5' => 'Arrow Upgrade (+5)', + 'ArrowUpgrade10' => 'Arrow Upgrade (+10)', + 'ArrowUpgrade70' => 'Arrow Upgrade (+70)', + 'HalfMagic' => 'Half Magic', + 'QuarterMagic' => 'Quarter Magic', + 'Programmable1' => 'Programmable 1', + 'Programmable2' => 'Programmable 2', + 'Programmable3' => 'Programmable 3', + 'SilverArrowUpgrade' => 'Silver Arrows Upgrade', + 'Rupoor' => 'Rupoor', + 'RedClock' => 'Red Clock', + 'BlueClock' => 'Blue Clock', + 'GreenClock' => 'Green Clock', + 'ProgressiveSword' => 'Progressive Sword', + 'ProgressiveShield' => 'Progressive Shield', + 'ProgressiveArmor' => 'Progressive Armor', + 'ProgressiveGlove' => 'Progressive Glove', + 'singleRNG' => 'Unique RNG Item', + 'multiRNG' => 'Non-Unique RNG Item', + 'ProgressiveBow' => 'Progressive Bow', + 'Triforce' => 'Triforce', + 'PowerStar' => 'Power Star', + 'TriforcePiece' => 'Triforce Piece', + 'MapLW' => 'Light World Map', + 'MapDW' => 'Dark World Map', + 'MapA2' => 'Ganons Tower Map', + 'MapD7' => 'Turtle Rock Map', + 'MapD4' => 'Thieves Town Map', + 'MapP3' => 'Tower of Hera Map', + 'MapD5' => 'Ice Palace Map', + 'MapD3' => 'Skull Woods Map', + 'MapD6' => 'Misery Mire Map', + 'MapD1' => 'Palace of Darkness Map', + 'MapD2' => 'Swamp Palace Map', + 'MapA1' => 'Agahnims Tower Map', + 'MapP2' => 'Desert Palace Map', + 'MapP1' => 'Eastern Palace Map', + 'MapH1' => 'Hyrule Castle Map', + 'MapH2' => 'Sewers Map', + 'CompassA2' => 'Ganons Tower Compass', + 'CompassD7' => 'Turtle Rock Compass', + 'CompassD4' => 'Thieves Town Compass', + 'CompassP3' => 'Tower of Hera Compass', + 'CompassD5' => 'Ice Palace Compass', + 'CompassD3' => 'Skull Woods Compass', + 'CompassD6' => 'Misery Mire Compass', + 'CompassD1' => 'Palace of Darkness Compass', + 'CompassD2' => 'Swamp Palace Compass', + 'CompassA1' => 'Agahnims Tower Compass', + 'CompassP2' => 'Desert Palace Compass', + 'CompassP1' => 'Eastern Palace Compass', + 'CompassH1' => 'Hyrule Castle Compass', + 'CompassH2' => 'Sewers Compass', + 'BigKeyA2' => 'Ganons Tower Big Key', + 'BigKeyD7' => 'Turtle Rock Big Key', + 'BigKeyD4' => 'Thieves Town Big Key', + 'BigKeyP3' => 'Tower of Hera Big Key', + 'BigKeyD5' => 'Ice Palace Big Key', + 'BigKeyD3' => 'Skull Woods Big Key', + 'BigKeyD6' => 'Misery Mire Big Key', + 'BigKeyD1' => 'Palace of Darkness Big Key', + 'BigKeyD2' => 'Swamp Palace Big Key', + 'BigKeyA1' => 'Agahnims Tower Big Key', + 'BigKeyP2' => 'Desert Palace Big Key', + 'BigKeyP1' => 'Eastern Palace Big Key', + 'BigKeyH1' => 'Hyrule Castle Big Key', + 'BigKeyH2' => 'Sewers Big Key', + 'KeyH2' => 'Sewers Key', + 'KeyH1' => 'Hyrule Castle Key', + 'KeyP1' => 'Eastern Palace Key', + 'KeyP2' => 'Desert Palace Key', + 'KeyA1' => 'Agahnims Tower Key', + 'KeyD2' => 'Swamp Palace Key', + 'KeyD1' => 'Palace of Darkness Key', + 'KeyD6' => 'Misery Mire Key', + 'KeyD3' => 'Skull Woods Key', + 'KeyD5' => 'Ice Palace Key', + 'KeyP3' => 'Tower of Hera Key', + 'KeyD4' => 'Thieves Town Key', + 'KeyD7' => 'Turtle Rock Key', + 'KeyA2' => 'Ganons Tower Key', + 'KeyGK' => 'Generic Key', + 'ShopKey' => 'Key', + 'Crystal1' => 'Crystal 1', + 'Crystal2' => 'Crystal 2', + 'Crystal3' => 'Crystal 3', + 'Crystal4' => 'Crystal 4', + 'Crystal5' => 'Crystal 5', + 'Crystal6' => 'Crystal 6', + 'Crystal7' => 'Crystal 7', + 'RescueZelda' => 'Rescue Zelda', + 'DefeatAgahnim' => 'Defeat Agahnim', + 'BigRedBomb' => 'Big Red Bomb', + 'DefeatAgahnim2' => 'Defeat Agahnim 2', + 'DefeatGanon' => 'Defeat Ganon', - 'NoSlipBoots' => 'Ice Cleats', - 'Reindeer1' => 'Dasher', - 'Reindeer2' => 'Dancer', - 'Reindeer3' => 'Prancer', - 'Reindeer4' => 'Vixen', - 'Reindeer5' => 'Comet', - 'Reindeer6' => 'Cupid', - 'Reindeer7' => 'Donner', - 'Reindeer8' => 'Blitzen', - 'Coal1' => 'Coal', - 'Coal2' => 'Coal', + 'ChocoboEgg' => 'Chocobo Egg', - 'Armos Knights' => 'Armos Knights', - 'Lanmolas' => 'Lanmolas', - 'Moldorm' => 'Moldorm', - 'Helmasaur King' => 'Helmasaur King', - 'Arrghus' => 'Arrghus', - 'Mothula' => 'Mothula', - 'Blind' => 'Blind', - 'Kholdstare' => 'Kholdstare', - 'Vitreous' => 'Vitreous', - 'Trinexx' => 'Trinexx', - 'Armos Knights' => 'Armos Knights', - 'Lanmolas' => 'Lanmolas', - 'Moldorm' => 'Moldorm', - 'Agahnim' => 'Agahnim', - 'Agahnim 2' => 'Agahnim 2', - 'Ganon' => 'Ganon', + 'NoSlipBoots' => 'Ice Cleats', + 'Reindeer1' => 'Dasher', + 'Reindeer2' => 'Dancer', + 'Reindeer3' => 'Prancer', + 'Reindeer4' => 'Vixen', + 'Reindeer5' => 'Comet', + 'Reindeer6' => 'Cupid', + 'Reindeer7' => 'Donner', + 'Reindeer8' => 'Blitzen', + 'Coal1' => 'Coal', + 'Coal2' => 'Coal', + + 'Armos Knights' => 'Armos Knights', + 'Lanmolas' => 'Lanmolas', + 'Moldorm' => 'Moldorm', + 'Helmasaur King' => 'Helmasaur King', + 'Arrghus' => 'Arrghus', + 'Mothula' => 'Mothula', + 'Blind' => 'Blind', + 'Kholdstare' => 'Kholdstare', + 'Vitreous' => 'Vitreous', + 'Trinexx' => 'Trinexx', + 'Armos Knights' => 'Armos Knights', + 'Lanmolas' => 'Lanmolas', + 'Moldorm' => 'Moldorm', + 'Agahnim' => 'Agahnim', + 'Agahnim 2' => 'Agahnim 2', + 'Ganon' => 'Ganon', + + 'Test' => 'Testing Item', ]; diff --git a/resources/lang/en/navigation.php b/resources/lang/en/navigation.php index e749a8cea..dac115825 100644 --- a/resources/lang/en/navigation.php +++ b/resources/lang/en/navigation.php @@ -1,27 +1,25 @@ 'Start Playing', - 'start_watching' => 'Start Watching', - 'generate' => 'Generate Game', - 'randomizer' => 'Generate Randomized Game', - 'entrance' => 'Entrance Randomizer', - 'daily' => 'Daily Challenge', - 'customizer' => 'Create Custom Game', + 'start_playing' => 'Start Playing', + 'start_watching' => 'Start Watching', + 'generate' => 'Generate Game', + 'randomizer' => 'Generate Randomized Game', + 'entrance' => 'Entrance Randomizer', + 'daily' => 'Daily Challenge', + 'customizer' => 'Create Custom Game', - 'calendar' => 'Events Calendar', + 'calendar' => 'Events Calendar', - 'language' => ' Language', + 'language' => ' Language', - 'help' => 'Help', - 'resources' => 'Resources', - 'options' => 'Game Options', - 'races' => 'Organized Play', - 'updates' => 'Updates', - 'game_entrance' => 'Entrance Randomizer', - 'game_enemizer' => 'Enemizer', - 'sprite_preview' => 'Sprite Options', - 'contribute' => 'Contribute', - 'discord' => 'Join us on Discord', - 'report_issue' => 'Report Issue', + 'help' => 'Help', + 'resources' => 'Resources', + 'options' => 'Game Options', + 'races' => 'Organized Play', + 'updates' => 'Updates', + 'sprite_preview' => 'Sprite Options', + 'contribute' => 'Contribute', + 'discord' => 'Join us on Discord', + 'report_issue' => 'Report Issue', ]; diff --git a/resources/lang/en/options.php b/resources/lang/en/options.php index aa21b56e8..b3c425372 100644 --- a/resources/lang/en/options.php +++ b/resources/lang/en/options.php @@ -1,369 +1,618 @@ 'Options', - 'subheader' => 'There are many ways to play ALttP:Randomizer!', - 'cards' => [ - 'mode' => [ - 'header' => __('randomizer.mode.title'), - 'sections' => [ - [ - 'header' => __('randomizer.mode.options.standard'), - 'content' => [ - 'This mode is closest to the original game. You will start in Link’s bed, get a weapon from Uncle (depending on your Swords option, see below), and rescue Zelda before continuing with the rest of the game.', - ], - ], - [ - 'header' => __('randomizer.mode.options.open'), - 'content' => [ - 'This mode starts with the option to start in your house or the sanctuary, and you are free to explore. There are a few point to note in this mode:', - '
    ' - . '
  • Uncle is already in the sewers and has an item.
  • ' - . '
  • Dark rooms don’t get a free light cone, not even the sewers.
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.mode.options.inverted'), - 'content' => [ - 'Tired of starting in the Light World and working your way to Ganon on top of Death Mountain? Well have we got the mode for you!', - 'Introducing inverted, the game state where we flip the game on its head just to really mess with things.', - 'This mode is really hard in the beginning so we really don’t suggest it for your first playthrough. Enemies in the Dark World hit like a truck, well a bunch of trucks really, and starting with 3 hearts is enough to get gone in a single hit or two', - 'But what does this all mean? Well we had to make some serious modifications to the game to have Link start in the Dark World and get to the light world to complete the game:', - '
    ' - . '
  • Link’s house is now located in the place that the Bomb shop used to reside
  • ' - . '
  • The Bomb shop has been transported to the light world where Link’s house used to be
  • ' - . '
  • The ' . __('item.MagicMirror') . ' works in the Light World to take you back to the Dark World
  • ' - . '
  • The ' . __('item.OcarinaInactive') . ' only works in the Dark World, but you still have to find a way to activate it in the Light world
  • ' - . '
  • Lots of terrain in the Light World has been modified to allow you to get to those pesky ' . __('item.MagicMirror') . ' locations
  • ' - . '
  • The old man has decided to “get lost” in the Dark World. You’ll still have to return him to his cave in the Light World
  • ' - . '
  • Portals? All the ones you used to see in the Light World will be in the Dark World with the same requirements to use them
  • ' - . '
  • Agahnim has really gotten tired of his place in Hyrule Castle and decided to move on up to the Tower formally known as Ganon’s on Dark Death Mountain. No silly bat barrier to get in, oh and he added some stairs so you can get to East Dark Death Mountain or his place pretty quickly
  • ' - . '
  • Since Agahnim decided to move on up, that means Ganon’s Tower came on down to Hyrule Castle, that center door being in the entrance, you’ll still need those 7 crystals though
  • ' - . '
  • Ice Palace tore down the wall so you can swim there pretty early now
  • ' - . '
  • Remember a bunny can use the ' . __('item.BookOfMudora') . ' as well as talk to people, and collect items it sees lying on the ground
  • ' - . '
  • The top of Turtle Rock can be accessed by walking on it’s tail
  • ' - . '
', - ], - ], - ], - ], - 'weapons' => [ - 'header' => __('randomizer.weapons.title'), - 'sections' => [ - [ - 'header' => __('randomizer.weapons.options.randomized'), - 'content' => [ - 'All sword upgrades are randomized. You won’t start with a sword, and it might be a while before you find one. Bombs are a great early weapon, as are bushes and signs! Use whatever items you find to defend yourself.', - 'If this option is combined with Standard Mode (see above), your uncle will graciously give you one of the following items to ensure you can complete the escape sequence:', - '
    ' - . '
  • Sword Upgrade (yes, it’s still possible)
  • ' - . '
  • Hammer
  • ' - . '
  • Bow + Full Arrow Refill
  • ' - . '
  • Full Bomb Refill
  • ' - . '
  • Fire Rod + Full Magic Refill
  • ' - . '
  • Cane of Somaria + Full Magic Refill
  • ' - . '
  • Cane of Byrna + Full Magic Refill
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.weapons.options.uncle'), - 'content' => [ - 'Uncle always has a sword. The remaining upgrades are randomized.', - ], - ], - [ - 'header' => __('randomizer.weapons.options.swordless'), - 'content' => [ - 'All swords are removed from the game. Because the game expects you to have a sword, the following changes are present only in swordless mode:', - '
    ' - . '
  • Swords have been replaced with four copies of 20 rupees (a green rupee sprite with “20” on it).
  • ' - . '
  • The barrier blocking access to Agahnim’s Tower can be broken with the Hammer.
  • ' - . '
  • The curtains blocking progress in Agahnim’s Tower are pre-opened, as are the vines in Skull Woods.
  • ' - . '
  • Medallions can only be used to open Misery Mire or Turtle Rock, or to progress through Ice Palace. Normally, they require a sword to use.
  • ' - . '
  • Ganon now takes damage from the hammer.
  • ' - . '
  • Silver arrows are available in all difficulties.
  • ' - . '
  • Ether and Bombos tablets require the Hammer and Book of Mudora.
  • ' - . '
', - ], - ], - ], - ], - 'logic' => [ - 'header' => __('randomizer.logic.title'), - 'sections' => [ - [ - 'header' => __('randomizer.logic.options.NoGlitches'), - 'content' => [ - 'This mode requires no advanced knowledge of the game. It’s designed as if you were playing the original game for the first time.', - 'Under this mode, you’re prevented from getting stuck anywhere, regardless of how you use small keys within dungeons.', - 'You may be required to save and quit in certain situations, like getting back to the light world when you’re in the dark world without the mirror.', - ], - ], - [ - 'header' => __('randomizer.logic.options.OverworldGlitches'), - 'content' => [ - 'This mode requires some of the easier-to-execute overworld glitches. It’s more difficult than simply using fake flippers to visit the hobo! The two types of major glitches are required:', - '
    ' - . '
  • Overworld boots clipping
  • ' - . '
  • Mirror clipping (DMD, TR Middle Clip, and Fluteless Mire)
  • ' - . '
', - 'Most minor glitches are also accounted for:', - '
    ' - . '
  • Fake Flippers (allows access to Ice Palace, King Zora, Lake Hylia Heart Piece, and Hobo without Flippers)
  • ' - . '
  • Dungeon Bunny Revival (allows access to Ice Palace without the Moon Pearl)
  • ' - . '
  • Overworld Bunny Revival (allows access to Misery Mire and Misery Mire shed without the Moon Pearl and without doing DMD)
  • ' - . '
  • Super Bunny (allows access to two chests in Dark World Death Mountain without the Moon Pearl)
  • ' - . '
  • Surfing Bunny (allows access to Lake Hylia Heart Piece without the Moon Pearl)
  • ' - . '
  • Walk on Water (allows access to Zora’s Domain Ledge Heart Piece without the Flippers)
  • ' - . '
', - 'The following are NOT accounted for by the logic, so you’ll never be forced to do any:', - '
    ' - . '
  • Bootless Clips
  • ' - . '
  • Mirror Screenwraps
  • ' - . '
  • Overworld YBAs
  • ' - . '
  • Underworld Clips
  • ' - . '
  • Dark Room Navigation
  • ' - . '
  • Hovering
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.logic.options.MajorGlitches'), - 'content' => [ - 'This mode accounts for everything besides EG and semi-EG. This mode is extremely difficult and requires advanced knowledge of major glitches, including:', - '
    ' - . '
  • Overworld YBA
  • ' - . '
  • Clipping out of bounds
  • ' - . '
  • Screenwraps
  • ' - . '
', - 'Some additional changes have been made in order to ensure that the game functions correctly under this logic:', - '
    ' - . '
  • The fake dark world is no longer patched out. Crystals always drop, irrespective of pendant conflicts.
  • ' - . '
  • Swamp Palace water levels do not drain when you exit the overworld screen, except for the first room.
  • ' - . '
  • You will always save and quit to the Pyramid after defeating Agahnim when in the Dark World.
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.logic.options.None'), - 'content' => [ - 'There is seriously no checking whatsoever of where items end up, Good Luck if you try this option.', - ], - ], - ], - ], - 'goal' => [ - 'header' => __('randomizer.goal.title'), - 'sections' => [ - [ - 'header' => __('randomizer.goal.options.ganon'), - 'content' => [ - 'Just like the vanilla game, your goal will be to collect all seven crystals, fight your way through Ganon’s Tower, and defeat Ganon.', - ], - ], - [ - 'header' => __('entrance.goal.options.crystals'), - 'content' => [ - 'Similar to ' . __('randomizer.goal.options.ganon') . ', your goal will be to collect all seven crystals and defeat Ganon, but you might not have to fight your way through Ganon’s Tower.', - ], - ], - [ - 'header' => __('randomizer.goal.options.dungeons'), - 'content' => [ - 'You’ll need to defeat all of Hyrule’s dungeon bosses, including both incarnations of Agahnim. Only once they’re defeated will you be able to face Ganon.', - ], - ], - [ - 'header' => __('randomizer.goal.options.pedestal'), - 'content' => [ - 'Collect the Pendants of Courage, Wisdom, and Power, and pull the Triforce from the Pedestal! Beware, you may have to venture all over Hyrule, including Ganon’s Tower, in order to complete your quest.', - ], - ], - [ - 'header' => __('randomizer.goal.options.triforce-hunt'), - 'content' => [ - 'The Triforce has been shattered and scattered into 30 pieces throughout Hyrule! Collect 20 pieces to win!', - ], - ], - ], - ], - 'difficulty' => [ - 'header' => __('randomizer.difficulty.title'), - 'sections' => [ - [ - 'header' => __('randomizer.difficulty.options.easy'), - 'content' => [ - 'This mode is recommended for newer players. Easy makes travelling through Hyrule a little safer.', - 'Finding the second ½ Magic will upgrade you to ¼ Magic.', - 'While in Standard Mode, if Uncle has the Bow, Bombs, Fire Rod, Cane of Somaria, or Cane of Byrna, Link will be granted unlimited ammo for that item for the duration of the escape sequence.', - 'See the Difficulty Comparison table below for full details.', - ], - ], - [ - 'header' => __('randomizer.difficulty.options.normal'), - 'content' => [ - 'In this mode you’ll find all the items from the original game.', - ], - ], - [ - 'header' => sprintf('%s, %s, and %s', __('randomizer.difficulty.options.hard'), __('randomizer.difficulty.options.expert'), __('randomizer.difficulty.options.insane')), - 'content' => [ - 'Looking for a challenge? These advanced difficulties adjust the game even further to test your skills! Check out the comparison below for details.', - ], - ], - [ - 'header' => __('randomizer.difficulty.options.crowdControl'), - 'content' => [ - 'A special difficulty intended for use with the Crowd Control Twitch extension.', - 'The item pool is based on the Hard difficulty but with special considerations for what’s available in the the Crowd Control shop.', - 'Find out more at crowdcontrol.live', - ], - ], - ], - 'comparison' => [ - 'header' => 'Difficulty Comparison', - 'maximum_health' => 'Maximum Health', - 'heart_containers' => 'Heart Containers', - 'heart_pieces' => 'Heart Pieces', - 'maximum_mail' => 'Maximum Mail', - 'number_in_pool' => '# in Pool', - 'maximum_sword' => 'Maximum Sword', - 'maximum_shield' => 'Maximum Shield', - 'shields_store' => 'Shields Purchasable', - 'maximum_magic' => 'Maximum Magic Capacity', - 'number_silvers' => '# of Silver Arrows', - 'number_silvers_swordless' => '# of Silver Arrows (Swordless)', - 'number_bottles' => '# of Bottles', - 'number_lamps' => '# of Lamps', - 'potion_magic' => 'Potion Magic Refill', - 'potion_health' => 'Potion Hearts Refill', - 'bug_net_fairy' => 'Bug Net Catches Faeries', - 'powder_bubble' => 'Magic Powder on Bubbles', - 'cape_consumption' => 'Cape Magic Consumption Rate', - 'byrna_invincible' => 'Byrna Grants Invincibility', - 'stun_boomerang' => 'Boomerangs Stun Enemies', - 'stun_hookshot' => 'Hookshot Stuns Enemies', - 'capacity_upgrade' => 'Arrow / Bomb Capacity Upgrades', - 'drop_rates' => 'Enemy Drop Rates', - 'quarter' => 'Quarter', - 'half' => 'Half', - 'normal' => 'Normal', - 'shield_3' => 'Mirror', - 'shield_2' => 'Fire', - 'shield_1' => 'Fighter’s', - 'none' => 'None', - 'sword_4' => 'Gold', - 'sword_3' => 'Tempered', - 'sword_2' => 'Master', - 'mail_3' => 'Red', - 'mail_2' => 'Blue', - 'mail_1' => 'Green', - 'fairy' => 'Faerie', - 'heart' => 'Heart', - 'bee' => 'Bees', - 'yes' => 'Yes', - 'no' => 'No', - 'tooltip' => [ - 'silvers' => 'Silver Arrows only function in Ganon’s room.', - 'bottles' => 'Once 4 Bottles have been collected, the remaining Bottles will revert to rupees.', - 'potion_magic' => 'Potions will fill 100% magic in Spike Cave.', - 'potion_health' => 'Potions will fill 20 hearts in Spike Cave.', - ], - ], - ], - 'variation' => [ - 'header' => __('randomizer.variation.title'), - 'sections' => [ - [ - 'header' => __('randomizer.variation.options.none'), - 'content' => [ - 'The closest option to the vanilla game.', - ], - ], - [ - 'header' => __('randomizer.variation.options.timed-race'), - 'content' => [ - 'The timer counts up from 0, with the goal being to finish the game with the best time on the timer. There are items throughout the world that will affect your timer, so finishing first doesn’t necessarily mean you’re the winner.', - 'Do you spend time looking for a clock to get your timer down, or do you race to the end?', - 'The following items have been added to the item pool:', - '
    ' - . '
  • 20 Green Clocks that subtract 4 minutes from the timer
  • ' - . '
  • 10 Blue Clocks that subtract 2 minutes from the timer
  • ' - . '
  • 10 Red Clocks that add 2 minutes to the timer
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.variation.options.timed-ohko') . ' (One Hit Knockout)', - 'content' => [ - 'In this mode you start with time on the timer, and found green clocks add time to the timer.', - 'If your timer reaches zero, you’ll enter One Hit Knockout mode, where anything will kill you.', - 'Don’t despair, though. If you are in OHKO mode and find another clock, you’ll exit OHKO mode and get time on your clock, no matter how long you’ve been in OHKO mode.', - ], - 'ohko_table' => [ - 'minutes' => 'minutes', - 'start_time' => 'Starting Time', - 'green_clock' => 'Green Clocks (+4 minutes)', - 'red_clock' => 'Red Clocks (instant OHKO)', - ], - ], - [ - 'header' => __('randomizer.variation.options.ohko') . ' (One Hit Knockout)', - 'content' => [ - 'Take any damage, and Link is a goner. Not for the faint of heart.', - ], - ], - [ - 'header' => __('randomizer.variation.options.key-sanity'), - 'content' => [ - 'Game not random enough for you? Looking for the real challenge?', - 'FINE!', - 'All Maps, Compasses, and Keys found in chests are no longer tied to their dungeons!', - 'You will have to search high and low to find the keys you need to progress in dungeons. Keys found on enemies or under pots will remain the same.', - 'Also, Maps and Compasses worth more: Your overworld map won’t show any dungeon information until you collect the map for that dungeon (and if you thought the music would get you by, think again, that’s been randomized). Compasses, well, those will show you how many chests you have checked in a dungeon after you collect it.', - 'You’re probably wondering how you know which key / map / compass you found. We’ve got you covered: There will be a text box that lets you know which dungeon it belongs to. The menu will also have a table to help you if you lose track.', - 'Maps and Compasses are required by the logic to complete their respective dungeons.', - ], - ], - [ - 'header' => __('randomizer.variation.options.retro'), - 'content' => [ - 'A callback to the first entry in the Legend of Zelda series, ' . __('randomizer.variation.options.retro') . ' ' . __('randomizer.variation.title') . ' links us even closer to the past.', - [ - 'header' => 'Rupee Bow', - 'content' => [ - 'The Bow no longer uses arrows for ammo. Instead it uses rupees! Each Wooden Arrow costs 10 rupees to fire while each Silver Arrow costs 50 rupees.', - 'Wooden Arrows are now independent of the Bow, just like Silver Arrows; you must acquire both the Bow and either Wooden Arrows or Silver Arrows in order to use the Bow.', - 'The Wooden Arrows are now an item to be acquired, and must be bought, once, from a shop. They are NOT available in regular chests or anywhere outside of shops.', - 'If you find Silver Arrows without buying Wooden Arrows, you will only be able to fire Silver Arrows.', - ], - ], - [ - 'header' => 'Overworld Shops', - 'content' => [ - 'Five shops out of a possible nine will be randomly chosen when the ROM is generated to have new stock. This does NOT include the Big Bomb Shop or the Witch’s Potion Shop. The Wooden Arrow item will be available for 80 rupees, and Small Keys will be available for 100 rupees each. Small Keys will be able to be purchased multiple times.', - ], - ], - [ - 'header' => 'Small Keys', - 'content' => [ - 'Small Keys are no longer dungeon-specific. They are now shuffled into the general item pool and will be found outside of dungeons. Keys under pots or dropped by enemies have not been changed.', - 'Ten keys have been removed from the item pool in Easy and Normal modes; fifteen have been removed from Hard, Expert, and Insane modes. Think carefully before using keys, and remember you can purchase some if you get stuck!', - 'Big Keys, Maps, and Compasses remain dungeon-specific and have not been randomized outside their dungeons.', - ], - ], - [ - 'header' => 'Take-Any Caves', - 'content' => [ - 'Four random single-entrace caves and houses which do not lead to an item location now lead to Take-Any Caves where players are given a choice between a Heart Container or Blue Potion refill. The Heart Containers have not been removed from the general item pool; they are bonus heart containers. However, you will not be able to have more than 20 hearts at once.', - 'One random single-entrace cave will contain a mysterious yet familiar old man with a sword upgrade. This sword upgrade takes the place of one in the item pool.', - ], - ], - ], - ], - ], - ], - 'item_pool' => 'Item Pool', - ], + 'header' => 'Randomizer Options', + 'subheader' => 'There are many ways to play ALttP:Randomizer!', + 'cards' => [ + 'glitches_required' => [ + 'header' => __('randomizer.glitches_required.title'), + 'sections' => [ + [ + 'header' => __('randomizer.glitches_required.options.none'), + 'content' => [ + 'This setting requires no knowledge of any glitches.', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.overworld_glitches'), + 'content' => [ + 'This setting requires knowledge of certain major glitches (on the overworld) as well as knowledge of most minor glitches. Specifically:', + '
    ' + . '
  • Overworld boots clipping
  • ' + . '
  • Overworld mirror clips
  • ' + . '
  • Dungeon bunny revival
  • ' + . '
  • Super Bunny
  • ' + . '
  • Surfing Bunny
  • ' + . '
  • Water Walk
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.major_glitches'), + 'content' => [ + 'This setting requires knowledge of more advanced major glitches. Specifically:', + '
    ' + . '
  • Overworld fake flutes
  • ' + . '
  • Overworld screenwraps
  • ' + . '
  • Overworld and Underworld bootless clips (including 1-frame clips requiring buffering)
  • ' + . '
', + 'Some additional changes have also been made:', + '
    ' + . '
  • Fake worlds exist as per the original game (e.g. dying in a Dark World dungeon without defeating Agahnim will put you in the fake Dark World)
  • ' + . '
  • Crystals always drop regardless of pendant conflicts (QoL fix from the original)
  • ' + . '
  • Swamp Palace water levels do not drain when you exit the overworld screen (except for the first room)
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.no_logic'), + 'content' => [ + 'There is seriously no checking whatsoever of where items end up, Good Luck if you try this option.', + ], + ], + ], + ], + 'item_placement' => [ + 'header' => __('randomizer.item_placement.title'), + 'sections' => [ + [ + 'header' => __('randomizer.item_placement.options.basic'), + 'content' => [ + 'This setting is aimed at new players or people looking for a more casual experience. Logical restrictions are in place to prevent items being placed in obscure locations which require niche knowledge to access (e.g. accessing Bumper Cave ledge without the Hookshot). Other logical restrictions also ensure excessively difficult execution is not required in order to progress. For example if you need to beat a late-game Dark World dungeon you will always have access to some sword and defense upgrades somewhere in the world.', + ], + ], + [ + 'header' => __('randomizer.item_placement.options.advanced'), + 'content' => [ + 'This setting is aimed at regular players and racers. The intention of this setting is to maximize glitchless item placement reach. However one exception is made to prevent navigation through dark rooms. No other consideration is given to the obscurity of item placements or the level of execution required to access locations. The expectation is a player choosing this setting is decently familiar and practiced with the original game.', + ], + ], + ], + ], + 'dungeon_items' => [ + 'header' => __('randomizer.dungeon_items.title'), + 'sections' => [ + [ + 'header' => __('randomizer.dungeon_items.options.standard'), + 'content' => [ + 'All dungeons items are locked to their respective dungeons but are randomized within each dungeon.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.mc'), + 'content' => [ + 'Maps and compasses are no longer locked to their respective dungeons (although may still end up there). All keys remain locked to their respective dungeons.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.mcs'), + 'content' => [ + 'Maps, compasses and small keys are no longer locked to their respective dungeons (although may still end up there). All big keys remain locked to their respective dungeons.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.full'), + 'content' => [ + 'Maps, compasses, small keys and big keys are no longer locked to their respective dungeons (although may still end up there).', + ], + ], + ], + ], + 'accessibility' => [ + 'header' => __('randomizer.accessibility.title'), + 'sections' => [ + [ + 'header' => __('randomizer.accessibility.options.items'), + 'content' => [ + 'This setting ensures all inventory items can be obtained but retains the possibility for certain keys to be unobtainable. For example non-required big keys may be in big chests and certain small keys may be locked behind key doors (which you could lock yourself out of depending on how you use small keys). In practice you will be able to reach almost every location with this setting.', + ], + ], + [ + 'header' => __('randomizer.accessibility.options.locations'), + 'content' => [ + 'This setting ensures all 216 locations can always be reached regardless of how inefficiently keys are used within dungeons. Specifically, big keys cannot be in big chests and certain chests behind key doors cannot contain small keys.', + ], + ], + [ + 'header' => __('randomizer.accessibility.options.none'), + 'content' => [ + 'This setting only ensures the game can be beaten. You may be locked out of non-required items (e.g. Fire Rod if it is not needed to complete the goal) and even non-required dungeons.', + ], + ], + ], + ], + 'goal' => [ + 'header' => __('randomizer.goal.title'), + 'sections' => [ + [ + 'header' => __('randomizer.goal.options.ganon'), + 'content' => [ + 'This setting requires full completion of Ganon’s Tower in addition to defeating Ganon. The number of required crystals for each depends on the requirements chosen.', + ], + ], + [ + 'header' => __('randomizer.goal.options.fast_ganon'), + 'content' => [ + 'This setting only requires defeating Ganon and does not require completion of Ganon’s Tower. For this to work the hole leading to Ganon has been made permanently accessible (except if entrances are randomized). The number of required crystal depends on the requirements chosen.', + ], + ], + [ + 'header' => __('randomizer.goal.options.dungeons'), + 'content' => [ + 'This setting requires full completion of all dungeons. This includes the 3 Light World pendant dungeons, the 7 Dark World crystal dungeons, Agahnim’s Tower and Ganon’s Tower.', + ], + ], + [ + 'header' => __('randomizer.goal.options.pedestal'), + 'content' => [ + 'This setting requires collection of the 3 pendants in order to pull the Triforce from the pedestal in the Lost Woods. ', + ], + ], + [ + 'header' => __('randomizer.goal.options.triforce-hunt'), + 'content' => [ + 'The Triforce has been shattered into 30 pieces and scattered throughout Hyrule! You must collect 20 of the 30 pieces and take them to Murahdahla to receive the Triforce. Who is Murahdahla I hear you ask? Why, he is obviously the younger brother of Sahasrahla and Aginah! Back from his vacation in Lorule you can find him hanging out around Hyrule Castle courtyard.', + ], + ], + ], + ], + 'tower_open' => [ + 'header' => __('randomizer.tower_open.title'), + 'content' => [ + 'This settings lets you choose the number of crystals required to open Ganon’s Tower. If 0 is chosen then the dungeon is freely accessible. If Random is chosen there will be a sign outside Ganon’s Tower informing you of how many crystals are required. In Inverted this sign will be outside Hyrule Castle accordingly.', + ], + ], + 'ganon_open' => [ + 'header' => __('randomizer.ganon_open.title'), + 'content' => [ + 'This settings lets you choose the number of crystals required to make Ganon vulnerable to your attacks. If 0 is chosen then he can be beaten as soon as you can reach him! If Random is chosen then there will be a sign on the Pyramid informing you of how many crystals are required. In Inverted this sign will be outside Hyrule Castle accordingly.', + ], + ], + 'world_state' => [ + 'header' => __('randomizer.world_state.title'), + 'sections' => [ + [ + 'header' => __('randomizer.world_state.options.standard'), + 'content' => [ + 'This setting is the closest to the original game. It retains the initial prologue of rescuing Zelda in Hyrule Castle and delivering her to the Sanctuary. This must be completed before you are free to explore Hyrule. Your uncle is guaranteed to give you an item which lets you clear the prologue (although not necessarily a sword). You are given a light cone for navigating the dark rooms of the Sewers even without the Lamp (although any future visits to dark rooms, including the Sewers, will be in total darkness until you find the Lamp).', + ], + ], + [ + 'header' => __('randomizer.world_state.options.open'), + 'content' => [ + 'This setting starts as if the initial prologue has already been beaten. Zelda has already been rescued and you are free to start in either Link’s House or at the Sanctuary. All the chests in Hyrule Castle have not been opened so you must decide when and whether to visit.', + ], + ], + [ + 'header' => __('randomizer.world_state.options.inverted'), + 'content' => [ + 'In this setting Link starts in the Dark World and must navigate his way to the Light World in order to defeat Ganon! There are several major changes for this to work:', + '
    ' + . '
  • Ganon’s Tower and Agahnim’s Tower have traded places.
  • ' + . '
  • Ganon has abandoned the Pyramid and is hiding underneath Hyrule Castle.
  • ' + . '
  • All portals now take you from the Dark World to the Light World.
  • ' + . '
  • Link will be a bunny in the Light World without the Moon Pearl.
  • ' + . '
  • The Magic Mirror now transports you from the Light World to the Dark World.
  • ' + . '
  • The crystals now unlock the door to Hyrule Castle Tower (not Ganon’s Tower).
  • ' + . '
', + 'However there are other modifications to the game world which were required in order to ensure this concept worked properly:', + '
    ' + . '
  • Link’s House and the Bomb Shop have traded places.
  • ' + . '
  • The flute only works in the Dark World and must still be activated in Kakariko.
  • ' + . '
  • Lots of terrain in the Light World has been modified in order to retain accessibility without being able to mirror from the Dark World.
  • ' + . '
  • The Death Mountain cave system has changed considerably. It is now possible to access Dark World Death Mountain from the Dark World mainland.
  • ' + . '
  • The Old Man on Death Mountain is now lost wandering in the Dark World and you will have to return him to his home in the Light World.
  • ' + . '
  • Dark World Death Mountain now has some stairs allowing access to Ganon’s Tower and East Dark World Death Mountain.
  • ' + . '
  • Ice Palace is now accessible directly from the Dark World.
  • ' + . '
  • Turtle Rock is now accessible by jumping from its tail!
  • ' + . '
', + 'Remember that bunny Link can use the Book of Mudora, as well as talk to NPC’s and collection freestanding items. Inverted games can be really difficult so we recommend starting with some of the other world states.', + ], + ], + [ + 'header' => __('randomizer.world_state.options.retro'), + 'content' => [ + 'This setting is a throwback to the original The Legend of Zelda. The main concept includes:', + [ + 'header' => 'Rupee Bow', + 'content' => [ + '
    ' + . '
  • They no longer use arrows for ammo and instead uses rupees!
  • ' + . '
  • The first Progressive Bow only shoots Wooden Arrows.
  • ' + . '
  • The second Progressive Bow can shoot Wooden Arrows and Silver Arrows.
  • ' + . '
  • However neither Bow can be used until a Rupee Quiver has been purchased.
  • ' + . '
  • The Rupee Quiver costs 80 rupees and only appears in one randomly chosen shop!
  • ' + . '
  • Each Wooden Arrow costs 10 rupee sand each Silver Arrow costs 50 rupees.
  • ' + . '
', + ], + ], + [ + 'header' => 'Shops', + 'content' => [ + 'Five shops out of a possible nine will be randomly chosen to contain new stock. This does not include the Bomb Shop or the Potion Shop. One of these shops will contain the Rupee Quiver at a price of 80 rupees. Additionally, small keys will be available in multiple shops for a price of 100 rupees and there is no limit on how many may be purchased.', + ], + ], + [ + 'header' => 'Small Keys', + 'content' => [ + 'Small keys are no longer dungeon-specific and can be used to open key doors in any dungeon. They are no longer locked to their respective dungeons and may be found anywhere (e.g. in the overworld). Keys under pots and keys dropped by enemies remain unchanged. Ten keys have been removed from the item pool (fifteen on harder difficulties). Big keys, maps and compasses remain dungeon-specific and have not been randomized outside of their respective dungeons.', + ], + ], + [ + 'header' => 'Take-Any Caves', + 'content' => [ + 'Five randomly chosen single-entrance caves/houses (which do not ordinarily lead to an item location) now lead to take-any caves. Four of these caves offer players the choice between a Heart Container and a Blue Potion refill, and the fifth leads to a sword upgrade (which has been taken from the item pool). This means there are only 3 swords to be found in the regular item pool. The Heart Containers are bonus ones in addition to the ones existing in the item pool. However it is not possible to have more than a total of 20 hearts. The Blue Potion refills require you to already have an empty bottle.', + ], + ], + ], + ], + ], + ], + 'entrance_shuffle' => [ + 'header' => __('randomizer.entrance_shuffle.title'), + 'subheader' => [ + 'This setting randomizes where entrances lead. For example walking into Kakariko shop might take you to a fairy fountain, and so on. Different entrance types are grouped together and then each group is randomized. How entrances are grouped depends on which shuffle you choose. Overworld transitions are never randomized.', + 'Multi-entrance caves/dungeons exhibit some specific behaviours, unless noted otherwise:', + '
    ' + . '
  • All entrances remain coupled. This means exiting one of these caves/dungeons will take you back to the entrance from which it was entered.
  • ' + . '
  • All entrances for a given multi-entrance cave/dungeon are confined to appear within the same world (i.e. they do not connect the Light World and the Dark World).
  • ' + . '
', + 'Link’s House and the south-facing entrance leading to the back of Kakariko bar are not randomized. However on ' . __('randomizer.world_state.options.inverted') . ' ' . __('randomizer.world_state.title') . ' note that Link’s House (in the Dark World) and the Bomb Shop (in the Light World) are both randomized.', + ], + 'sections' => [ + 'none' => [ + 'header' => __('randomizer.entrance_shuffle.options.none'), + 'content' => [ + 'No entrances are randomized. All entrances lead to their original locations.', + ], + ], + 'simple' => [ + 'header' => __('randomizer.entrance_shuffle.options.simple'), + 'content' => [ + 'This setting uses the highest number of entrance type groupings. This restricts how thoroughly different entrances are randomized with the intention of keeping things simple.', + [ + 'header' => 'Single-Entrance Dungeons', + 'content' => [ + 'All entrances are grouped and randomized with each other. This includes the final section of Skull Woods (leading to the boss) but does not include any other Skull Woods entrances.', + ], + ], + [ + 'header' => 'Multi-Entrance Dungeons (excluding Skull Woods)', + 'content' => [ + 'Each of the 4 entrances of Hyrule Castle, Desert Palace and Turtle Rock remain grouped together. Each group of 4 are randomized with each other using a static mapping. For example if Hyrule Castle and Desert Palace are randomized with each other, the main entrance of Desert Palace will lead to the main entrance of Hyrule Castle, the left entrance of Desert Palace will lead to the left entrance of Hyrule Castle, and so on. However Hyrule Castle is not randomized on ' . __('randomizer.world_state.options.standard') . ' ' . __('randomizer.world_state.title') . '.', + ], + ], + [ + 'header' => 'Skull Woods (excluding final dungeon entrance)', + 'content' => [ + 'All entrances (including all of the holes) remain confined to the Skull Woods overworld region and are randomized with each other. Skull-entrances are randomized with skull-entrances; and holes are randomized with holes.', + ], + ], + [ + 'header' => 'Single-Entrance Caves', + 'content' => [ + 'All entrances are grouped and randomized with each other. This does not include any of Light World Death Mountain. Example: houses.', + ], + ], + [ + 'header' => 'Multi-Entrance Caves', + 'content' => [ + 'All entrances are grouped and randomized with each other. Locations that are originally spanned by two-entrance caves (e.g. Kakariko Elder’s House) will remain connected to each other via a two-entrance cave. This does not include any of Light World Death Mountain.', + ], + ], + [ + 'header' => 'Light World Death Mountain', + 'content' => [ + 'All entrances remain confined to the Light World Death Mountain overworld region and are randomized with each other. Note that the entrance to Death Mountain (via the cave where the Old Man is lost) is also not randomized.', + ], + ], + [ + 'header' => 'Overworld Holes (excluding those in Skull Woods)', + 'content' => [ + 'All holes are grouped and randomized with each other. Holes and their associated cave entrance remain paired together. For example falling in a hole and exiting will take you to the overworld cave associated with that hole, regardless of which interior rooms the hole led to. ', + ], + ], + ], + ], + 'restricted' => [ + 'header' => __('randomizer.entrance_shuffle.options.restricted'), + 'content' => [ + 'As in ' . __('randomizer.entrance_shuffle.options.simple') . ' except all non-dungeon entrances (including all single-entrance caves, all multi-entrance caves, and all of Light World Death Mountain) are grouped together and randomized with each other. This includes the entrance to Death Mountain.', + ], + ], + 'full' => [ + 'header' => __('randomizer.entrance_shuffle.options.full'), + 'content' => [ + 'As in ' . __('randomizer.entrance_shuffle.options.restricted') . ' except all dungeons (including single-entrance and multi-entrance) are also grouped together with all non-dungeon entrances and randomized with each other.', + ], + ], + 'crossed' => [ + 'header' => __('randomizer.entrance_shuffle.options.crossed'), + 'content' => [ + 'As in ' . __('randomizer.entrance_shuffle.options.full') . ' except caves and dungeons with multiple entrances are no longer confined to all appear within the same world. This means they can link the Light World to the Dark World.', + ], + ], + 'insanity' => [ + 'header' => __('randomizer.entrance_shuffle.options.insanity'), + 'content' => [ + 'As in ' . __('randomizer.entrance_shuffle.options.crossed') . ' except all entrances and holes are decoupled from each other (excluding single-entrance caves and the Skull Woods overworld region). This means exiting the way you entered will take you somewhere entirely different. However all single-entrance caves can still only exit to the same location from which they were entered. All overworld holes are no longer paired. All Skull Woods entrances remain confined to the Skull Woods overworld region (excluding the final dungeon entrance).', + ], + ], + ], + ], + 'bosses' => [ + 'header' => __('randomizer.boss_shuffle.title'), + 'sections' => [ + [ + 'header' => __('randomizer.boss_shuffle.options.none'), + 'content' => [ + 'Bosses are not randomized. All bosses remain in their original dungeons.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.simple'), + 'content' => [ + 'All original bosses (except both Agahnim’s and Ganon) are randomized including the 3 Ganon’s Tower refights. Therefore the shuffle includes two sets of Armos Knights, Lanmolas’ and Moldorm. This means Ganon’s Tower can contain 3 random bosses!', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.full'), + 'content' => [ + 'Same as ' . __('randomizer.boss_shuffle.options.simple') . ' except the 3 bosses which appear twice are chosen randomly.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.random'), + 'content' => [ + 'All bosses are chosen entirely at random. You may see one boss multiple times and some bosses may not feature at all.', + ], + ], + ], + ], + 'enemy_shuffle' => [ + 'header' => __('randomizer.enemy_shuffle.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_shuffle.options.none'), + 'content' => [ + 'Enemies are not randomized. All enemies remain in their original locations.', + ], + ], + [ + 'header' => __('randomizer.enemy_shuffle.options.shuffled'), + 'content' => [ + 'All enemies are randomized but there are some caveats to note:', + '
    ' + . '
  • Not all enemies can appear everywhere due to game limitations.
  • ' + . '
  • Rooms where killing all enemies is required will never include enemies which need specific weapons to kill (e.g. Mimics requiring Bow, etc)
  • ' + . '
  • Thieves’ can now be killed.
  • ' + . '
  • Tile rooms are not randomized.
  • ' + . '
  • Enemies under bushes are not randomized.
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.enemy_shuffle.options.random'), + 'content' => [ + 'Same as ' . __('randomizer.enemy_shuffle.options.shuffled') . ' except enemies under bushes, as well as the percentage chance that they spawn an enemy, are also randomized. This may not seem like much of a difference but in practice it affects playability drastically. In addition tile rooms spawn tiles in random patterns and Thieves’ have a 50% chance for being killable or invincible.', + ], + ], + ], + ], + 'hints' => [ + 'header' => __('randomizer.hints.title'), + 'content' => [ + 'Enable or disable hints which can be found on the telepathic throughout the world.', + ], + ], + 'difficulty' => [ + 'header' => __('randomizer.difficulty.title'), + 'item_pool' => __('randomizer.item_pool.title'), + 'item_functionality' => __('randomizer.item_functionality.title'), + 'comparison' => [ + 'header' => 'Difficulty Comparison', + 'maximum_health' => 'Maximum Health', + 'heart_containers' => 'Heart Containers', + 'heart_pieces' => 'Heart Pieces', + 'maximum_mail' => 'Maximum Mail', + 'number_in_pool' => '# in Pool', + 'maximum_sword' => 'Maximum Sword', + 'maximum_shield' => 'Maximum Shield', + 'shields_store' => 'Shields Purchasable', + 'maximum_magic' => 'Maximum Magic Capacity', + 'number_silvers' => 'Maximum Bow', + 'number_silvers_swordless' => 'Maximum Bow (Swordless)', + 'number_bottles' => '# of Bottles', + 'number_lamps' => '# of Lamps', + 'potion_magic' => 'Potion Magic Refill', + 'potion_health' => 'Potion Hearts Refill', + 'bug_net_fairy' => 'Bug Net Catches Faeries', + 'powder_bubble' => 'Magic Powder on Bubbles', + 'cape_consumption' => 'Cape Magic Consumption Rate', + 'byrna_invincible' => 'Byrna Grants Invincibility', + 'stun_boomerang' => 'Boomerangs Stun Enemies', + 'stun_hookshot' => 'Hookshot Stuns Enemies', + 'capacity_upgrade' => 'Arrow / Bomb Capacity Upgrades', + 'drop_rates' => 'Enemy Drop Rates', + 'quarter' => 'Quarter', + 'half' => 'Half', + 'normal' => 'Normal', + 'silver' => 'Silver', + 'shield_3' => 'Mirror', + 'shield_2' => 'Fire', + 'shield_1' => 'Fighter’s', + 'none' => 'None', + 'sword_4' => 'Gold', + 'sword_3' => 'Tempered', + 'sword_2' => 'Master', + 'mail_3' => 'Red', + 'mail_2' => 'Blue', + 'mail_1' => 'Green', + 'fairy' => 'Faerie', + 'heart' => 'Heart', + 'bee' => 'Bees', + 'yes' => 'Yes', + 'no' => 'No', + 'tooltip' => [ + 'silvers' => 'Swordless retains Silver Arrows but they only function in Ganon’s room.', + 'bottles' => 'Once 4 Bottles have been collected, the remaining Bottles will revert to rupees.', + 'potion_magic' => 'Potions will fill 100% magic in Spike Cave.', + 'potion_health' => 'Potions will fill 20 hearts in Spike Cave.', + ], + ], + ], + 'weapons' => [ + 'header' => __('randomizer.weapons.title'), + 'sections' => [ + [ + 'header' => __('randomizer.weapons.options.randomized'), + 'content' => [ + 'All four Progressive Swords are randomly shuffled into the game. If this setting is combined with ' . __('randomizer.world_state.options.standard') . ' ' . __('randomizer.world_state.title') . ' then your Uncle will always have one of the following:', + '
    ' + . '
  • Sword
  • ' + . '
  • Hammer
  • ' + . '
  • Bow + Full Arrow Refill
  • ' + . '
  • 10 Bombs
  • ' + . '
  • Fire Rod + Full Magic Refill
  • ' + . '
  • Cane of Somaria + Full Magic Refill
  • ' + . '
  • Cane of Byrna + Full Magic Refill
  • ' + . '
', + 'If you run out of ammo or magic then a save and quit will partially refill you so that you may progress.', + ], + ], + [ + 'header' => __('randomizer.weapons.options.assured'), + 'content' => [ + 'Link starts with a sword already equipped! Perhaps he hid it under his pillow?', + ], + ], + [ + 'header' => __('randomizer.weapons.options.vanilla'), + 'content' => [ + 'All four swords are in their original game locations. These are:', + '
    ' + . '
  • Link’s Uncle
  • ' + . '
  • Master Sword Pedestal
  • ' + . '
  • Rescuing Blacksmith
  • ' + . '
  • Pyramid Faerie
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.weapons.options.swordless'), + 'content' => [ + 'All swords are removed from the game and replaced with 20 rupees. Multiple changes have been made for this to work:', + '
    ' + . '
  • Ganon can be damaged with the Hammer.
  • ' + . '
  • Both Progressive Bows are always in the item pool.
  • ' + . '
  • The bat barrier outside Aghanim’s Tower can now be broken with the Hammer.
  • ' + . '
  • The curtains/vines inside Skull Woods and Agahnim’s Tower are already open.
  • ' + . '
  • Ether and Bombos tablets require the Hammer and the Book of Mudora.
  • ' + . '
  • Medallions can only be used to open Misery Mire and Turtle Rock, or to progress through Ice Palace. They only work where their emblems indicate.
  • ' + . '
  • Swords have been replaced with copies of 20 rupees
  • ' + . '
', + ], + ], + ], + ], + 'enemy_health' => [ + 'header' => __('randomizer.enemy_health.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_health.options.default'), + 'content' => [ + 'The health of enemies are not randomized.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.easy'), + 'content' => [ + 'All enemy health will be in the 1hp-4hp range (1-2 Fighter’s Sword slashes).', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.hard'), + 'content' => [ + 'All enemy health will be in the 2hp-15hp range (1-8 Fighter’s Sword slashes). Note that on average enemies will have more health than in the original.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.expert'), + 'content' => [ + 'All enemy health will be in the 2hp-30hp range (1-15 Fighter’s Sword slashes). Almost all enemies will have considerably more health than in the original.', + ], + ], + ], + ], + 'enemy_damage' => [ + 'header' => __('randomizer.enemy_damage.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_damage.options.default'), + 'content' => [ + 'The damage dealt by enemies are not randomized.', + ], + ], + [ + 'header' => __('randomizer.enemy_damage.options.shuffled'), + 'content' => [ + 'The damage dealt by enemies are randomized between enemy types. For example the damage dealt by Octoroks and Ganon might be shuffled, meaning all Octoroks deal 8 hearts and Ganon only deals just 1 heart! Mail Upgrades still work as expected to reduce damage.', + ], + ], + [ + 'header' => __('randomizer.enemy_damage.options.random'), + 'content' => [ + 'The damage dealt by enemies are entirely random. A value is chosen for each Mail Upgrade so they therefore do not work to reduce damage. No mapping exists between different enemy types. All enemies could deal massive damage.', + ], + ], + ], + ], + 'post_generation' => [ + 'header' => 'Cosmetic Settings (post generation)', + 'cards' => [ + 'heart_speed' => [ + 'header' => __('rom.settings.heart_speed'), + 'content' => [ + 'Change the speed of the beep when Link is low on health.', + ], + ], + 'play_as' => [ + 'header' => __('rom.settings.play_as'), + 'content' => [ + 'Change the sprite you play as (e.g. play as a tea cup instead of Link).', + ], + ], + 'menu_speed' => [ + 'header' => __('rom.settings.menu_speed'), + 'content' => [ + 'Change the speed of opening and closing the item menu. This is not available for race ROMS.', + ], + ], + 'heart_color' => [ + 'header' => __('rom.settings.heart_color'), + 'content' => [ + 'Change the color of your hearts. Choices are restricted due to game limitations.', + ], + ], + 'music' => [ + 'header' => __('rom.settings.music'), + 'content' => [ + 'Enable or disable the original background music. You do not have to disable this if you wish to use MSU-1 packs. If left enabled and using an MSU-1 pack then the original music will act as an SPC fallback and will only play should an MSU-1 track fail (i.e. instead of silence).', + ], + ], + 'quickswap' => [ + 'header' => __('rom.settings.quickswap'), + 'content' => [ + 'Allow items to be changed with the L and R buttons without opening the menu. This is not available for race ROMS (except when entrances are randomized).', + ], + ], + 'palette_shuffle' => [ + 'header' => __('rom.settings.palette_shuffle'), + 'content' => [ + 'Randomizes the colour palettes within the game. This means everything can look extremely bizarre. Enable with caution!', + ], + ], + ], + ], + 'item_pool' => 'Item Pool', + ], ]; diff --git a/resources/lang/en/races.php b/resources/lang/en/races.php index 87da7785a..634a34a61 100644 --- a/resources/lang/en/races.php +++ b/resources/lang/en/races.php @@ -1,73 +1,65 @@ 'Organized Play', - 'cards' => [ - 'races' => [ - 'header' => 'Races', - 'sections' => [ - [ - 'header' => '', - 'content' => [ - 'Most races are done through SpeedRacing.tv or SpeedRunsLive.com. Be sure to check them out for more info on how to get in on the action!', - ], - ], - [ - 'header' => 'Weekly Standard Mode Race, Saturdays at 3pm US Eastern Time', - 'content' => [ - 'The premier community event, the weekly race has many competitors!', - ], - ], - [ - 'header' => 'Weekly Open Mode Race, Sundays at 5pm US Eastern Time', - 'content' => [ - 'Join us Sundays for another popular weekly community race.', - ], - ], - [ - 'header' => 'The Community Nightly Race, 10pm US Eastern Time', - 'content' => [ - 'We also have a nightly race for anyone looking to play every day!', - ], - ], - [ - 'header' => 'Pickup Races', - 'content' => [ - 'Scheduled races not fitting in with your schedule? Looking to race with some more uncommon options? Join a pickup race! You’ll find willing players at all hours of the day. Join the #race-planning channel in our Discord!', - ], - ], - ], - ], - 'watch' => [ - 'header' => 'Watch', - 'content' => [ - 'With so much going on, there’s always a race to watch! Follow these networks and never miss a match!', - ], - ], - 'network' => [ - 'header' => 'Racing Networks', - 'content' => [ - 'Racing is typically done on a racing network. These sites facilitate in organizing races, adding an official timer, and making it easier for both racers and viewers to find races.', - 'Be sure to check out both SpeedRunsLive.com and SpeedRacing.tv for more info!', - ], - ], - 'tournament' => [ - 'header' => 'Tournaments', - 'sections' => [ - [ - 'header' => '', - 'content' => [ - 'Join us for exciting tournament action with expert commentary alongside elite play!', - ], - ], - [ - 'header' => 'Twice-Yearly Invitational Tournament', - 'content' => [ - 'Witness the best racers compete for the trophy! Think you have what it takes to go toe-to-toe with the best? Join Discord and keep an eye out for qualifying races!', - 'The Spring Invitational runs from March to June.', - 'The Fall Invitational runs from September to December.', - ], - ], - ], - ], - ], + 'header' => 'Organized Play', + 'cards' => [ + 'races' => [ + 'header' => 'Races', + 'sections' => [ + [ + 'header' => '', + 'content' => [ + 'Most races are done through SpeedRacing.tv or SpeedRunsLive.com. Be sure to check them out for more info on how to get in on the action!', + ], + ], + [ + 'header' => 'Weekly Standard Mode Race, Saturdays at 3pm US Eastern Time', + 'content' => [ + 'The premier community event, the weekly race has many competitors!', + ], + ], + [ + 'header' => 'Weekly Open Mode Race, Sundays at 5:30pm US Eastern Time', + 'content' => [ + 'Join us Sundays for another popular weekly community race.', + ], + ], + [ + 'header' => 'Pickup Races', + 'content' => [ + 'Scheduled races not fitting in with your schedule? Looking to race with some more uncommon options? Join a pickup race! You’ll find willing players at all hours of the day. Join the #race-planning channel in our Discord!', + ], + ], + ], + ], + 'watch' => [ + 'header' => 'Watch', + 'content' => [ + 'With so much going on, there’s always a race to watch! Follow these networks and never miss a match!', + ], + ], + 'network' => [ + 'header' => 'Racing Networks', + 'content' => [ + 'Racing is typically done on a racing network. These sites facilitate in organizing races, adding an official timer, and making it easier for both racers and viewers to find races.', + 'Be sure to check out both SpeedRunsLive.com and SpeedRacing.tv for more info!', + ], + ], + 'tournament' => [ + 'header' => 'Tournaments', + 'sections' => [ + [ + 'header' => '', + 'content' => [ + 'Join us for exciting tournament action with expert commentary alongside elite play!', + ], + ], + [ + 'header' => 'Annual Main Tournament', + 'content' => [ + 'Witness the best racers compete for the trophy! Think you have what it takes to go toe-to-toe with the best? Join Discord and keep an eye out for qualifying races!', + ], + ], + ], + ], + ], ]; diff --git a/resources/lang/en/randomizer.php b/resources/lang/en/randomizer.php index 765da0a21..3870f3192 100644 --- a/resources/lang/en/randomizer.php +++ b/resources/lang/en/randomizer.php @@ -1,90 +1,214 @@ 'Item Randomizer', - 'switch' => [ - 'entrance' => 'Switch to Entrance Randomizer', - ], - 'difficulty' => [ - 'title' => 'Difficulty', - 'options' => [ - 'easy' => 'Easy', - 'normal' => 'Normal', - 'hard' => 'Hard', - 'expert' => 'Expert', - 'insane' => 'Insane', - 'crowdControl' => 'Crowd Control', - ], - ], - 'difficulty_adjustments' => [ - 'title' => 'Difficulty “Fixes”', - 'options' => [ - -1 => 'Easy', - 0 => 'Normal', - 1 => 'Hard', - 2 => 'Expert', - 3 => 'Insane', - ], - ], - 'goal' => [ - 'title' => 'Goal', - 'options' => [ - 'ganon' => 'Defeat Ganon', - 'dungeons' => 'All Dungeons', - 'pedestal' => 'Master Sword Pedestal', - 'triforce-hunt' => 'Triforce Pieces', - ], - ], - 'logic' => [ - 'title' => 'Logic', - 'options' => [ - 'NoGlitches' => 'No Glitches', - 'OverworldGlitches' => 'Overworld Glitches', - 'MajorGlitches' => 'Major Glitches', - 'None' => 'None (I know what I’m doing)', - ], - 'glitch_warning' => 'This Logic requires knowledge of Major Glitches**', - ], - 'mode' => [ - 'title' => 'State', - 'options' => [ - 'standard' => 'Standard', - 'open' => 'Open', - 'inverted' => 'Inverted', - ], - ], - 'weapons' => [ - 'title' => 'Swords', - 'options' => [ - 'randomized' => 'Randomized', - 'uncle' => 'Uncle Assured', - 'swordless' => 'Swordless', - ], - ], - 'variation' => [ - 'title' => 'Variation', - 'options' => [ - 'none' => 'None', - 'timed-race' => 'Timed Race', - 'timed-ohko' => 'Timed OHKO', - 'ohko' => 'OHKO', - 'key-sanity' => 'Keysanity', - 'retro' => 'Retro', - ], - 'ohko_enemizer_warning' => 'OHKO may not be completable with Enemizer enabled**', - ], - 'generate' => [ - 'race' => 'Generate Race ROM', - 'race_warning' => 'Spoilers will never be available for this option.', - 'spoiler_race' => 'Spoiler Race ROM', - 'casual' => 'Generate ROM', - 'back' => 'Change Settings', - 'regenerate' => 'Generate Again', - 'regenerate_tooltip' => 'Generate new game with same settings', - 'generating' => 'Generating...', - ], - 'details' => [ - 'title' => 'Game Details', - 'save_spoiler' => 'Save Spoiler', - 'save_rom' => 'Save Rom', - ], + 'title' => 'Randomizer', + 'preset' => [ + 'title' => 'Select Preset', + 'customize' => 'Customize', + 'options' => [ + 'default' => 'Default', + 'beginner' => 'Beginner', + 'veetorp' => 'OWG (Veetorp’s Favorite)', + 'crosskeys' => 'Crosskeys', + 'quick' => 'Super Quick', + 'nightmare' => 'Nightmare', + 'custom' => 'Custom', + ], + ], + 'placement' => [ + 'title' => 'Item Placement', + ], + 'item_placement' => [ + 'title' => 'Item Placement', + 'options' => [ + 'basic' => 'Basic', + 'advanced' => 'Advanced', + ], + ], + 'dungeon_items' => [ + 'title' => 'Dungeon Items', + 'options' => [ + 'standard' => 'Standard', + 'mc' => 'Maps/Compasses', + 'mcs' => 'Maps/Compasses/Small Keys', + 'full' => 'Keysanity', + ], + ], + 'accessibility' => [ + 'title' => 'Accessibility', + 'options' => [ + 'items' => '100% Inventory', + 'locations' => '100% Locations', + 'none' => 'Beatable', + ], + ], + 'glitches_required' => [ + 'title' => 'Glitches Required', + 'options' => [ + 'none' => 'None', + 'overworld_glitches' => 'Overworld Glitches', + 'major_glitches' => 'Major Glitches', + 'no_logic' => 'No Logic', + ], + 'glitch_warning' => 'These settings require knowledge of Major Glitches**', + ], + 'goal' => [ + 'title' => 'Goal', + 'options' => [ + 'ganon' => 'Defeat Ganon', + 'fast_ganon' => 'Fast Ganon', + 'dungeons' => 'All Dungeons', + 'pedestal' => 'Master Sword Pedestal', + 'triforce-hunt' => 'Triforce Pieces', + ], + ], + 'tower_open' => [ + 'title' => 'Open Tower', + 'options' => [ + '0' => '0 Crystals', + '1' => '1 Crystal', + '2' => '2 Crystals', + '3' => '3 Crystals', + '4' => '4 Crystals', + '5' => '5 Crystals', + '6' => '6 Crystals', + '7' => '7 Crystals', + 'random' => 'Random' + ], + ], + 'ganon_open' => [ + 'title' => 'Ganon Vulnerable', + 'options' => [ + '0' => '0 Crystals', + '1' => '1 Crystal', + '2' => '2 Crystals', + '3' => '3 Crystals', + '4' => '4 Crystals', + '5' => '5 Crystals', + '6' => '6 Crystals', + '7' => '7 Crystals', + 'random' => 'Random' + ], + ], + 'gameplay' => [ + 'title' => 'Gameplay', + ], + "world_state" => [ + 'title' => 'World State', + 'options' => [ + 'standard' => 'Standard', + 'open' => 'Open', + 'inverted' => 'Inverted', + 'retro' => 'Retro', + ], + ], + "entrance_shuffle" => [ + 'title' => 'Entrance Shuffle', + 'options' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'restricted' => 'Restricted', + 'full' => 'Full', + 'crossed' => 'Crossed', + 'insanity' => 'Insanity', + ], + ], + "boss_shuffle" => [ + 'title' => 'Boss Shuffle', + 'options' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'full' => 'Full', + 'random' => 'Random', + ], + ], + "enemy_shuffle" => [ + 'title' => 'Enemy Shuffle', + 'options' => [ + 'none' => 'None', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + ], + "hints" => [ + 'title' => 'Hints', + 'options' => [ + 'on' => 'On', + 'off' => 'Off', + ], + ], + 'weapons' => [ + 'title' => 'Swords', + 'options' => [ + 'randomized' => 'Randomized', + 'assured' => 'Assured', + 'vanilla' => 'Vanilla', + 'swordless' => 'Swordless', + ], + ], + 'item_pool' => [ + 'title' => 'Item Pool', + 'options' => [ + 'easy' => 'Easy', + 'normal' => 'Normal', + 'hard' => 'Hard', + 'expert' => 'Expert', + 'crowd_control' => 'Crowd Control', + ], + 'crowd_control_warning' => '* This setting is meant to be used with the Crowd Control Twitch extension. find out more: https://crowdcontrol.live/', + ], + 'item_functionality' => [ + 'title' => 'Item Functionality', + 'options' => [ + 'easy' => 'Easy', + 'normal' => 'Normal', + 'hard' => 'Hard', + 'expert' => 'Expert', + ], + ], + 'enemy_damage' => [ + 'title' => 'Enemy Damage', + 'options' => [ + 'default' => 'Default', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + ], + 'enemy_health' => [ + 'title' => 'Enemy Health', + 'options' => [ + 'default' => 'Default', + 'easy' => 'Easy', + 'hard' => 'Hard', + 'expert' => 'Expert', + ], + ], + 'generate' => [ + 'race' => 'Generate ROM', + 'race_warning' => 'Spoilers will never be available for this option.', + 'spoiler_race' => 'Generate ROM (with spoilers)', + 'back' => 'Change Settings', + 'regenerate' => 'Generate Again', + 'regenerate_tooltip' => 'Generate new game with same settings', + 'generating' => 'Generating...', + ], + 'details' => [ + 'title' => 'Game Details', + 'save_spoiler' => 'Save Spoiler', + 'save_rom' => 'Save Rom', + ], + // depricated + 'variation' => [ + 'title' => 'Variation', + ], + 'difficulty' => [ + 'title' => 'Difficulty', + 'options' => [ + 'easy' => 'Easy', + 'normal' => 'Normal', + 'hard' => 'Hard', + 'expert' => 'Expert', + 'insane' => 'Insane', + 'crowdControl' => 'Crowd Control', + ], + ], ]; diff --git a/resources/lang/en/region.php b/resources/lang/en/region.php new file mode 100644 index 000000000..eb26c4cb9 --- /dev/null +++ b/resources/lang/en/region.php @@ -0,0 +1,21 @@ + 'All Regions', + 'Light World' => 'Light World', + 'Hyrule Castle' => 'Hyrule Castle', + 'Eastern Palace' => 'Eastern Palace', + 'Desert Palace' => 'Desert Palace', + 'Death Mountain' => 'Death Mountain', + 'Tower Of Hera' => 'Tower Of Hera', + 'Castle Tower' => 'Castle Tower', + 'Dark World' => 'Dark World', + 'Dark Palace' => 'Dark Palace', + 'Swamp Palace' => 'Swamp Palace', + 'Skull Woods' => 'Skull Woods', + 'Thieves Town' => 'Thieves Town', + 'Ice Palace' => 'Ice Palace', + 'Misery Mire' => 'Misery Mire', + 'Turtle Rock' => 'Turtle Rock', + 'Ganons Tower' => 'Ganons Tower', + 'Special' => 'Special', +]; diff --git a/resources/lang/en/resources.php b/resources/lang/en/resources.php index e3973d6f0..72c590fec 100644 --- a/resources/lang/en/resources.php +++ b/resources/lang/en/resources.php @@ -1,95 +1,95 @@ 'Resources', - 'cards' => [ - 'discord' => [ - 'header' => 'Discord', - 'content' => [ - '', - 'Join our Discord community! We’ve got friendly and helpful people, community event news, ALttP: Randomizer updates, helpful guides, tips, and tricks, and more! Come say hello, and checkout the #resources channel!', - ], - ], - 'learn' => [ - 'header' => 'Learn-to-Play Videos', - 'content' => [ - '', - 'Check out our routing guides, glitch tutorials, update announcements, tournament highlights, and more! Great for both new players looking to learn the ropes, and experienced runners looking to hone their skills!', - ], - ], - 'external' => [ - 'header' => 'External Resources', - 'content' => [ - '', - ], - ], - 'pitfalls' => [ - 'header' => 'Common Pitfalls', - 'content' => [ - '
    ' - . '
  • You can use the Y button to swap between Silver Arrows and Normal Arrows, the Red and Blue Boomerangs, the Mushroom and the Magic Powder, and the Shovel and the Flute.
  • ' - . '
  • In the dark world, you can hookshot over the river north of the pyramid. Look for the arrow made out of grass!
  • ' - . '
  • If you find yourself at bumper cave with the Cape but without the Hookshot, try walking over the top left of the gap—no Hookshot needed!
  • ' - . '
  • Agahnim’s barrier can be bypassed with the Magic Cape or destroyed with an upgraded sword.
  • ' - . '
  • If you have the Magic Mirror, Desert Palace can be reached from Misery Mire without the Book of Mudora.
  • ' - . '
  • Bombos melts things as well as the Fire Rod, which is useful in Ice Palace.
  • ' - . '
  • You can cross small gaps by rebounding off of walls or objects using the Pegasus Boots.
  • ' - . '
  • Sahasrahla gives you his item when you speak to him with the Pendant of Courage.
  • ' - . '
  • The Super Bomb spawns when you have acquired crystals 5 and 6.
  • ' - . '
  • The Smith and the Purple Chest will stay following you through Save and Quit.
  • ' - . '
  • You are never required to navigate a dark room; the lamp will be available to light your way, so go out and find it!
  • ' - . '
  • Keys might not be accessible if they are not required to finish the game. For instance, the Skull Woods big key might be in the big chest.
  • ' - . '
', - ], - ], - 'changes' => [ - 'header' => 'Differences', - 'sections' => [ - [ - 'header' => 'What has been randomized?', - 'content' => [ - '
    ' - . '
  • Nearly all unique item locations
  • ' - . '
  • Pendants and crystals (check your map!)
  • ' - . '
  • The medallions required to open Misery Mire and Turtle Rock
  • ' - . '
  • Enemy drops and prize pulls (e.g. trees)
  • ' - . '
', - ], - ], - [ - 'header' => 'What has stayed the same?', - 'content' => [ - '
    ' - . '
  • All shops throughout Hyrule
  • ' - . '
  • The archery game and various rupee chest games
  • ' - . '
  • Small keys underneath pots or held by enemies
  • ' - . '
', - ], - ], - [ - 'header' => 'What changed from the original game?', - 'content' => [ - 'There are a few changes from the original game which enhance gameplay and prevent you from getting stuck. The Japanese 1.0 version is used as a base ROM because it allows use of some exclusive glitches in some of the advanced game modes.', - '
    ' - . '
  • You no longer need the Lamp to push the bookshelf during the prologue.
  • ' - . '
  • You can now see in dark rooms in the Sewers without the Lamp (except in Open mode).
  • ' - . '
  • You can toggle between items which share the same slot in the menu by pressing Y. For example, you can now hold both the Shovel and Flute and switch between them.
  • ' - . '
  • The submenu for the Bottles no longer automatically opens. You can open it with X or toggle between bottles with Y.
  • ' - . '
  • The water levels within Swamp Palace will always revert to being drained when you exit the overworld screen. This prevents you from accidentally drowning keys underwater and getting stuck!
  • ' - . '
  • The file select screen has a random row of symbols at the top. These are a unique identifier for each seed generated to ensure that all racers have the correct file loaded. They do not have any other relevance.
  • ' - . '
  • The Pyramid and Waterfall of Wishing Faeries no longer upgrade your items. Instead their caves contains two chests each which account for the usual upgrades having been shuffled into the mix.
  • ' - . '
  • You’re guaranteed to get the digging game item by the 30th dig.
  • ' - . '
  • You’re guaranteed to get the Village of Outcasts chest game item on the 1st attempt (can be 1st or 2nd chest).
  • ' - . '
', - ], - ], - ], + 'header' => 'Resources', + 'cards' => [ + 'discord' => [ + 'header' => 'Discord', + 'content' => [ + '', + 'Join our Discord community! We’ve got friendly and helpful people, community event news, ALttP: Randomizer updates, helpful guides, tips, and tricks, and more! Come say hello, and checkout the #resources channel!', + ], + ], + 'learn' => [ + 'header' => 'Learn-to-Play Videos', + 'content' => [ + '', + 'Check out our routing guides, glitch tutorials, update announcements, tournament highlights, and more! Great for both new players looking to learn the ropes, and experienced runners looking to hone their skills!', + ], + ], + 'external' => [ + 'header' => 'External Resources', + 'content' => [ + '', + ], + ], + 'pitfalls' => [ + 'header' => 'Common Pitfalls', + 'content' => [ + '
    ' + . '
  • You can use the Y button to swap between Silver Arrows and Normal Arrows, the Red and Blue Boomerangs, the Mushroom and the Magic Powder, and the Shovel and the Flute.
  • ' + . '
  • In the dark world, you can hookshot over the river north of the pyramid. Look for the arrow made out of grass!
  • ' + . '
  • If you find yourself at bumper cave with the Cape but without the Hookshot, try walking over the top left of the gap—no Hookshot needed!
  • ' + . '
  • Agahnim’s barrier can be bypassed with the Magic Cape or destroyed with an upgraded sword.
  • ' + . '
  • If you have the Magic Mirror, Desert Palace can be reached from Misery Mire without the Book of Mudora.
  • ' + . '
  • Bombos melts things as well as the Fire Rod, which is useful in Ice Palace.
  • ' + . '
  • You can cross small gaps by rebounding off of walls or objects using the Pegasus Boots.
  • ' + . '
  • Sahasrahla gives you his item when you speak to him with the Pendant of Courage.
  • ' + . '
  • The Super Bomb spawns when you have acquired crystals 5 and 6.
  • ' + . '
  • The Smith and the Purple Chest will stay following you through Save and Quit.
  • ' + . '
  • You are never required to navigate a dark room; the lamp will be available to light your way, so go out and find it!
  • ' + . '
  • Keys might not be accessible if they are not required to finish the game. For instance, the Skull Woods big key might be in the big chest.
  • ' + . '
', + ], + ], + 'changes' => [ + 'header' => 'Differences', + 'sections' => [ + [ + 'header' => 'What has been randomized?', + 'content' => [ + '
    ' + . '
  • Nearly all unique item locations
  • ' + . '
  • Pendants and crystals (check your map!)
  • ' + . '
  • The medallions required to open Misery Mire and Turtle Rock
  • ' + . '
  • Enemy drops and prize pulls (e.g. trees)
  • ' + . '
', + ], + ], + [ + 'header' => 'What has stayed the same?', + 'content' => [ + '
    ' + . '
  • All shops throughout Hyrule
  • ' + . '
  • The archery game and various rupee chest games
  • ' + . '
  • Small keys underneath pots or held by enemies
  • ' + . '
', + ], + ], + [ + 'header' => 'What changed from the original game?', + 'content' => [ + 'There are a few changes from the original game which enhance gameplay and prevent you from getting stuck. The Japanese 1.0 version is used as a base ROM because it allows use of some exclusive glitches in some of the advanced game modes.', + '
    ' + . '
  • You no longer need the Lamp to push the bookshelf during the prologue.
  • ' + . '
  • You can now see in dark rooms in the Sewers without the Lamp (except in Open mode).
  • ' + . '
  • You can toggle between items which share the same slot in the menu by pressing Y. For example, you can now hold both the Shovel and Flute and switch between them.
  • ' + . '
  • The submenu for the Bottles no longer automatically opens. You can open it with X or toggle between bottles with Y.
  • ' + . '
  • The water levels within Swamp Palace will always revert to being drained when you exit the overworld screen. This prevents you from accidentally drowning keys underwater and getting stuck!
  • ' + . '
  • The file select screen has a random row of symbols at the top. These are a unique identifier for each seed generated to ensure that all racers have the correct file loaded. They do not have any other relevance.
  • ' + . '
  • The Pyramid and Waterfall of Wishing Faeries no longer upgrade your items. Instead their caves contains two chests each which account for the usual upgrades having been shuffled into the mix.
  • ' + . '
  • You’re guaranteed to get the digging game item by the 30th dig.
  • ' + . '
  • You’re guaranteed to get the Village of Outcasts chest game item on the 1st attempt (can be 1st or 2nd chest).
  • ' + . '
', + ], + ], + ], - ], - ], + ], + ], ]; diff --git a/resources/lang/en/rom.php b/resources/lang/en/rom.php index 56aa50997..831e97191 100644 --- a/resources/lang/en/rom.php +++ b/resources/lang/en/rom.php @@ -1,56 +1,58 @@ [ - 'title' => 'Getting Started', - 'file_select' => 'Select ROM File', - 'content' => '
    ' - . '
  1. Select your rom file and load it into the browser (Please use a Zelda no Densetsu: Kamigami no Triforce v1.0 ROM with an .smc or .sfc extension)
  2. ' - . '
  3. Select the ' . __('navigation.options') . ' for how you would like your game randomized
  4. ' - . '
  5. Click ' . __('randomizer.generate.casual') . '
  6. ' - . '
  7. Then Save your rom and get to playing
  8. ' - . '
', - ], - 'info' => [ - 'logic' => __('randomizer.logic.title'), - 'build' => 'ROM build', - 'difficulty' => __('randomizer.difficulty.title'), - 'variation' => __('randomizer.variation.title'), - 'shuffle' => __('entrance.shuffle.title'), - 'mode' => __('randomizer.mode.title'), - 'weapons' => __('randomizer.weapons.title'), - 'goal' => __('randomizer.goal.title'), - 'permalink' => 'Permalink', - 'special' => 'Special', - 'notes' => 'Notes', - 'generated' => 'Created', - ], - 'settings' => [ - 'heart_speed' => 'Heart Speed', - 'heart_speeds' => [ - 'off' => 'Off', - 'double' => 'Double Speed', - 'normal' => 'Normal Speed', - 'half' => 'Half Speed', - 'quarter' => 'Quarter Speed', - ], - 'menu_speed' => 'Menu Speed', - 'menu_speeds' => [ - 'instant' => 'Instant', - 'fast' => 'Fast', - 'normal' => 'Normal', - 'slow' => 'Slow', - ], - 'heart_color' => 'Heart Color', - 'heart_colors' => [ - 'blue' => 'Blue', - 'green' => 'Green', - 'red' => 'Red', - 'yellow' => 'Yellow', - ], - 'play_as' => 'Play As', - 'music' => 'Background Music', - 'music_info' => '(set to "No" for MSU-1 support)', - 'quickswap' => 'Item Quickswap', - 'race_warning' => 'Does not work in Race Roms', - ], + 'loader' => [ + 'title' => 'Getting Started', + 'file_select' => 'Select ROM File', + 'content' => '
    ' + . '
  1. Select your rom file and load it into the browser (Please use a Zelda no Densetsu: Kamigami no Triforce v1.0 ROM with an .smc or .sfc extension)
  2. ' + . '
  3. Select the ' . __('navigation.options') . ' for how you would like your game randomized
  4. ' + . '
  5. Click ' . __('randomizer.generate.race') . '
  6. ' + . '
  7. Then Save your rom and get to playing
  8. ' + . '
', + ], + 'info' => [ + 'spoilerwarning' => 'WARNING: The generator of this game viewed the spoiler log.', + 'logic' => __('randomizer.glitches_required.title'), + 'build' => 'ROM build', + 'difficulty' => __('randomizer.difficulty.title'), + 'variation' => __('randomizer.variation.title'), + 'shuffle' => __('entrance.shuffle.title'), + 'mode' => __('randomizer.world_state.title'), + 'weapons' => __('randomizer.weapons.title'), + 'goal' => __('randomizer.goal.title'), + 'permalink' => 'Permalink', + 'special' => 'Special', + 'notes' => 'Notes', + 'generated' => 'Created', + ], + 'settings' => [ + 'heart_speed' => 'Heart Speed', + 'heart_speeds' => [ + 'off' => 'Off', + 'double' => 'Double Speed', + 'normal' => 'Normal Speed', + 'half' => 'Half Speed', + 'quarter' => 'Quarter Speed', + ], + 'menu_speed' => 'Menu Speed', + 'menu_speeds' => [ + 'instant' => 'Instant', + 'fast' => 'Fast', + 'normal' => 'Normal', + 'slow' => 'Slow', + ], + 'heart_color' => 'Heart Color', + 'heart_colors' => [ + 'blue' => 'Blue', + 'green' => 'Green', + 'red' => 'Red', + 'yellow' => 'Yellow', + ], + 'play_as' => 'Play As', + 'music' => 'Background Music', + 'music_info' => '(set to "No" for MSU-1 support)', + 'quickswap' => 'Item Quickswap', + 'palette_shuffle' => 'Palette Shuffle', + 'race_warning' => 'Does not work in Race Roms', + ], ]; diff --git a/resources/lang/en/sprite.php b/resources/lang/en/sprite.php new file mode 100644 index 000000000..efb280152 --- /dev/null +++ b/resources/lang/en/sprite.php @@ -0,0 +1,246 @@ + "Raven", + "Vulture" => "Vulture", + "FlyingStalfosHead" => "Flying Stalfos Head", + "Empty" => "Empty", + "PullSwitchGood" => "Pull Switch (Good)", + "PullSwitch1" => "Pull Switch (Unused)", + "PullSwitchBad" => "Pull Switch (Bad)", + "PullSwitch2" => "Pull Switch (Unused)", + "Octorok1" => "Octorok (One Way)", + "Moldorm" => "Moldorm (Boss)", + "Octorok4" => "Octorok (Four Way)", + "Chicken" => "Chicken", + "Octorok" => "Octorok (?)", + "Buzzblob" => "Buzzblob", + "Snapdragon" => "Snapdragon", + "Octoballoon" => "Octoballoon", + "OctoballoonHatchlings" => "Octoballoon Hatchlings", + "Hinox" => "Hinox", + "Moblin" => "Moblin", + "MiniHelmasaur" => "Mini Helmasaur", + "ForkGate" => "Gargoyle's Domain Gate", + "Antifairy" => "Antifairy", + "Sahasrahla" => "Sahasrahla / Aginah", + "BushHoarder" => "Bush Hoarder", + "MiniMoldorm" => "Mini Moldorm", + "Poe" => "Poe", + "Dwarves" => "Dwarves", + "WallArrow" => "Arrow in wall?", + "Statue" => "Statue", + "Weathervane" => "Weathervane", + "CrystalSwitch" => "Crystal Switch", + "SickKid" => "Bug-Catching Kid", + "Sluggula" => "Sluggula", + "PushSwitch" => "Push Switch", + "Ropa" => "Ropa", + "RedBari" => "Red Bari", + "BlueBari" => "Blue Bari", + "TalkingTree" => "Talking Tree", + "HardhatBeetle" => "Hardhat Beetle", + "Deadrock" => "Deadrock", + "Storytellers" => "Storytellers", + "BlindHistorian" => "Blind Hideout attendant", + "SweepingLady" => "Sweeping Lady", + "Multipurpose" => "Multipurpose Sprite", + "Lumberjacks" => "Lumberjacks", + "TelepathicStones" => "Telepathic stones? (No idea what this actually is, likely unused)", + "FluteBoyNotes" => "Flute Boy's Notes", + "RaceNPCs" => "Race HP NPCs", + "Person" => "Person?", + "FortuneTeller" => "Fortune Teller", + "AngryBrothers" => "Angry Brothers", + "PullForRupees" => "Pull For Rupees Sprite", + "ScaredGirl2" => "Scared Girl 2", + "Innkeeper" => "Innkeeper", + "Potion =>hop", "Potion Shop", + "Waterfall" => "Waterfall", + "ArrowTarget" => "Arrow Target", + "AverageMan" => "Average Middle-Aged Man", + "MagicBat" => "Half Magic Bat", + "DashItem" => "Dash Item", + "VillageKid" => "Village Kid", + "Sign" => "Signs? Chicken lady also showed up / Scared ladies outside houses.", + "RockHoarder" => "Rock Hoarder", + "TutorialSoldier" => "Tutorial Soldier", + "LightningLock" => "Lightning Lock", + "BlueSwordSoldier" => "Blue Sword Soldier / Used by guards to detect player", + "GreenSwordSoldier" => "Green Sword Soldier", + "RedSpearSoldier" => "Red Spear Soldier", + "AssaultSwordSoldier" => "Assault Sword Soldier", + "GreenSpearSoldier" => "Green Spear Soldier", + "BlueArcher" => "Blue Archer", + "GreenArcher" => "Green Archer", + "RedJavelinSolider" => "Red Javelin Soldier", + "RedJavelinSolider2" => "Red Javelin Soldier 2", + "RedBombSolider" => "Red Bomb Soldiers", + "GreenSoldierRecruit" => "Green Soldier Recruits", + "Geldman" => "Geldman", + "Rabbit" => "Rabbit", + "Popo" => "Popo", + "Popo2" => "Popo 2", + "CannonBall" => "Cannon Balls", + "Armos" => "Armos", + "KingZora" => "Giant Zora", + "ArmosKnights" => "Armos Knights (Boss)", + "Lanmolas" => "Lanmolas (Boss)", + "FireballZora" => "Fireball Zora", + "WalkingZora" => "Walking Zora", + "DesertPalaceBarrier" => "Desert Palace Barriers", + "Crab" => "Crab", + "Bird" => "Bird", + "Squirrel" => "Squirrel", + "SparkLR" => "Spark (Left to Right)", + "SparkRL" => "Spark (Right to Left)", + "RollerV1" => "Roller (vertical moving)", + "RollerV2" => "Roller (vertical moving)", + "Roller" => "Roller", + "RollerH" => "Roller (horizontal moving)", + "Beamos" => "Beamos", + "MasterSword" => "Master Sword", + "Devalant" => "Devalant (Non-shooter)", + "DevalantShooter" => "Devalant (Shooter)", + "ShootingGalleryNPC" => "Shooting Gallery Proprietor", + "CannonBallShooterR" => "Moving Cannon Ball Shooters (Right)", + "CannonBallShooterL" => "Moving Cannon Ball Shooters (Left)", + "CannonBallShooterD" => "Moving Cannon Ball Shooters (Down)", + "CannonBallShooterU" => "Moving Cannon Ball Shooters (Up)", + "BallNChainTrooper" => "Ball N' Chain Trooper", + "CannonSoldier" => "Cannon Soldier", + "MirrorPortal" => "Mirror Portal", + "Rat" => "Rat", + "Rope" => "Rope", + "Keese" => "Keese", + "HelmasaurFireball" => "Helmasaur King Fireball", + "Leever" => "Leever", + "PondActivation" => "Activator for the ponds (where you throw in items)", + "Link' => Uncle", "Uncle / Priest", + "RunningMan" => "Running Man", + "BottleSalesman" => "Bottle Salesman", + "Zelda" => "Princess Zelda", + "Antifairy2" => "Antifairy (Alternate)", + "VillageElder" => "Village Elder", + "Bee" => "Bee Swarm", + "Agahnim" => "Agahnim", + "AgahnimBall" => "Agahnim Energy Ball", + "Hyu" => "Hyu", + "BigSpikeTrap" => "Big Spike Trap", + "GuruguruBarCW" => "Guruguru Bar (Clockwise)", + "GuruguruBarCCW" => "Guruguru Bar (Counter Clockwise)", + "Winder" => "Winder", + "WaterTektite" => "Water Tektite", + "AntifairyCircle" => "Antifairy Circle", + "EyegoreGreen" => "Green Eyegore", + "EyegoreRed" => "Red Eyegore", + "StalfosYellow" => "Yellow Stalfos", + "Kodongos" => "Kodongos", + "Flames" => "Flames", + "Mothula" => "Mothula (Boss)", + "MothulaBeam" => "Mothula's Beam", + "SpikeTrap" => "Spike Trap", + "Gibdo" => "Gibdo", + "Arrghus" => "Arrghus (Boss)", + "ArrghusSpawn" => "Arrghus spawn", + "Terrorpin" => "Terrorpin", + "Slime" => "Slime", + "Wallmaster" => "Wallmaster", + "StalfosKnight" => "Stalfos Knight", + "Helmasaur" => "Helmasaur King", + "Bumper" => "Bumper", + "Swimmers" => "Swimmers", + "EyeLaserR" => "Eye Laser (Right)", + "EyeLaserL" => "Eye Laser (Left)", + "EyeLaserD" => "Eye Laser (Down)", + "EyeLaserU" => "Eye Laser (Up)", + "Pengator" => "Pengator", + "Kyameron" => "Kyameron", + "Wizzrobe" => "Wizzrobe", + "Tadpoles" => "Tadpoles", + "Tadpoles2" => "Tadpoles", + "Ostrich" => "Ostrich (Haunted Grove)", + "Flute" => "Flute", + "Bird" => "Birds (Haunted Grove)", + "Freezor" => "Freezor", + "Kholdstare" => "Kholdstare (Boss)", + "KholdstareShell" => "Kholdstare's Shell", + "FallingIce" => "Falling Ice", + "ZazakFireball" => "Zazak Fireball", + "ZazakRed" => "Red Zazak", + "Stalfos" => "Stalfos", + "Zirro" => "Bomber Flying Creatures from Darkworld", + "Zirro2" => "Bomber Flying Creatures from Darkworld", + "Pikit" => "Pikit", + "Maiden" => "Maiden", + "Apple" => "Apple", + "LostOldMan" => "Lost Old Man", + "PipeD" => "Down Pipe", + "PipeU" => "Up Pipe", + "PipeR" => "Right Pipe", + "PipeL" => "Left Pipe", + "BeeGood" => "Good Bee", + "HylianInscription" => "Hylian Inscription", + "PurpleChest" => "Thief's chest (not the one that follows you, the one that you grab from the DW smithy house)", + "BombSalesman" => "Bomb Salesman", + "Kiki" => "Kiki", + "BlindMaiden" => "Maiden following you in Blind Dungeon", + "Monologue" => "Monologue Testing Sprite", + "FeudingFriends" => "Feuding Friends on Death Mountain", + "Whirlpool" => "Whirlpool", + "Salesman" => "Salesman / chestgame guy / 300 rupee giver guy / Chest game thief", + "Drunk" => "Drunk in the inn", + "Vitreous" => "Vitreous (Large Eyeball)", + "VitreousSmallEyeball" => "Vitreous (Small Eyeball)", + "VitreousLightning" => "Vitreous' Lightning", + "Catfish" => "Monster in Lake of Ill Omen / Quake Medallion", + "AgahnimTeleporting" => "Agahnim teleporting Zelda to dark world", + "Boulders" => "Boulders", + "Gibo" => "Gibo", + "Thief" => "Thief", + "Medusa" => "Medusa", + "YomoMedusa" => "Yomo Medusa", + "HokkuBokku" => "Hokku-Bokku", + "FairyBig" => "Big Fairy who heals you", + "Tektite" => "Tektite", + "ChainChomp" => "Chain Chomp", + "Trinexx" => "Trinexx", + "TrinexxHeadFire" => "Another part of trinexx", + "TrinexxHeadIce" => "Yet another part of trinexx", + "Blind" => "Blind The Thief (Boss)", + "Swamola" => "Swamola", + "Lynel" => "Lynel", + "BunnyBeam" => "Bunny Beam", + "FloppingFish" => "Flopping Fish", + "Stal" => "Stal", + "Landmine" => "Landmine", + "DiggingGameNPC" => "Digging Game Proprietor", + "Ganon" => "Ganon", + "GanonInvisible" => "Copy of Ganon, except invincible?", + "Heart" => "Heart", + "RupeeGreen" => "Green Rupee", + "RupeeBlue" => "Blue Rupee", + "RupeeRed" => "Red Rupee", + "BombRefill1" => "Bomb Refill (1)", + "BombRefill4" => "Bomb Refill (4)", + "BombRefill8" => "Bomb Refill (8)", + "MagicRefillSmall" => "Small Magic Refill", + "MagicRefillFull" => "Full Magic Refill", + "ArrowRefill5" => "Arrow Refill (5)", + "ArrowRefill10" => "Arrow Refill (10)", + "Fairy" => "Fairy", + "Key" => "Key", + "BigKey" => "Big Key", + "Shield" => "Shield", + "Mushroom" => "Mushroom", + "FakeMasterSword" => "Fake Master Sword", + "MagicShopDude" => "Magic Shop dude / His items, including the magic powder", + "HeartContainer" => "Heart Container", + "HeartPiece" => "Heart Piece", + "Bush" => "Bushes", + "SomariaPlatform" => "Cane Of Somaria Platform", + "Mantle" => "Mantle", + "SomariaPlatform1" => "Cane of Somaria Platform (Unused)", + "SomariaPlatform2" => "Cane of Somaria Platform (Unused)", + "SomariaPlatform3" => "Cane of Somaria Platform (Unused)", + "MedallionTablet" => "Medallion Tablet", +]; diff --git a/resources/lang/en/start.php b/resources/lang/en/start.php index c4c584915..8dde5adb5 100644 --- a/resources/lang/en/start.php +++ b/resources/lang/en/start.php @@ -1,52 +1,53 @@ 'Start Your Adventure!', - 'subheader' => 'Want to test your skills in a shuffled Hyrule? You’ve come to the right place!', - 'cards' => [ - 'discord' => [ - 'header' => '1. Join our Discord Community', - 'content' => [ - '', - 'Join our Discord community! We’ve got friendly and helpful people, community event news, ALttP: Randomizer updates, helpful guides, tips and tricks, and more! Come say hello!', - ] - ], - 'rom' => [ - 'header' => '2. Get the ROM', - 'content' => [ - 'You’ll need the base ROM. This should be a Zelda no Densetsu: Kamigami no Triforce v1.0 ROM. Don’t worry if you can’t read Japanese; the patching process provides English text while keeping the glitches unique to the original version intact.', - 'If you run into trouble, ask in Discord!', - ] - ], - 'randomize' => [ - 'header' => '3. Choose Your Game Options', - 'content' => [ - 'Head on over to ' . __('navigation.randomizer') . ' and provide your ROM. The next screen will show a variety of game options. For your first few runs, we recommend changing “' . __('randomizer.difficulty.title') . '” to “' . __('randomizer.difficulty.options.easy') . '” and leaving the rest of the settings as is. Then click “' . __('randomizer.generate.casual') . '” and you’ll be given a newly minted randomized game!', - 'A more in-depth guide to all the available options can be found here.', - ] - ], - 'emulator' => [ - 'header' => '4. Get a Way to Play', - 'content' => [ - 'First, you’ll need something to run your newly minted game on. We recommend using an emulator. An emulator is a program that closely replicates SNES hardware, allowing you to run SNES games on your computer. You can get the recommended emulator, SNES9x, at their website here.', - 'While you can play using only your keyboard, a controller makes for a better experience. While most USB controllers will work, we recommend an iBuffalo Classic USB Gamepad or an 8Bitdo SFC30 Wireless Bluetooth Controller.', - 'There are other supported ways to play, including on original SNES hardware. There are also certain emulators, such as zsnes, that won’t work correctly with the randomizer. Join us on Discord to learn more!', - 'NOTE FOR SNESMINI PLAYERS: Rename your ROM file to have 61 characters or fewer as the SNESMini can’t handle long file names.', - ] - ], - 'play' => [ - 'header' => '5. Get Playing!', - 'content' => [ - 'You’re finally ready to go! The best way to learn is to load up your new ROM and start playing. If you feel like you’re stuck, check out this list of common pitfalls, or ask on Discord.', - '
    ' - . '
  • You can use the Y button to swap between Silver Arrows and Normal Arrows, the Red and Blue Boomerangs, the Mushroom and the Magic Powder, and the Shovel and the Flute.
  • ' - . '
  • You can save and quit with either the Frog or Purple Chest following you to bring it back to the light world without the Mirror.
  • ' - . '
  • In the dark world, you can hookshot over the river north of the pyramid. Look for the arrow made out of grass!
  • ' - . '
  • You can use the boots to dash into walls, blocks, and pots, knocking you backwards, in order to cross a gap.
  • ' - . '
  • If you find yourself at bumper cave with the Cape but without the Hookshot, try walking over the top left of the gap—no Hookshot needed!
  • ' - . '
  • Keys might not be accessible if they are not required to finish the game. For instance, the Skull Woods big key might be in the big chest.
  • ' - . '
', - 'Don’t forget to check out the comprehensive ' . __('navigation.resources') . ' with tutorials and more tips!', - ] - ], - ], + 'header' => 'Start Your Adventure!', + 'subheader' => 'Want to test your skills in a shuffled Hyrule? You’ve come to the right place!', + 'cards' => [ + 'discord' => [ + 'header' => '1. Join our Discord Community', + 'content' => [ + '', + 'Join our Discord community! We’ve got friendly and helpful people, community event news, ALttP: Randomizer updates, helpful guides, tips and tricks, and more! Come say hello!', + ] + ], + 'rom' => [ + 'header' => '2. Get the ROM', + 'content' => [ + 'You’ll need the base ROM. This should be a Zelda no Densetsu: Kamigami no Triforce v1.0 ROM. Don’t worry if you can’t read Japanese; the patching process provides English text while keeping the glitches unique to the original version intact.', + 'One can verify they have the correct rom on this site.', + 'If you run into trouble, ask in Discord!', + ] + ], + 'randomize' => [ + 'header' => '3. Choose Your Game Options', + 'content' => [ + 'Head on over to ' . __('navigation.randomizer') . ' and provide your ROM. The next screen will show a variety of game options. For your first few runs, we recommend using “' . __('randomizer.preset.options.beginner') . '” in the “' . __('randomizer.preset.title') . '” and leaving the rest of the settings as is. Then click “' . __('randomizer.generate.race') . '” and you’ll be given a newly minted randomized game!', + 'A more in-depth guide to all the available options can be found here.', + ] + ], + 'emulator' => [ + 'header' => '4. Get a Way to Play', + 'content' => [ + 'First, you’ll need something to run your newly minted game on. We recommend using an emulator. An emulator is a program that closely replicates SNES hardware, allowing you to run SNES games on your computer. You can get the recommended emulator, SNES9x, at their website here.', + 'While you can play using only your keyboard, a controller makes for a better experience. While most USB controllers will work, we recommend an iBuffalo Classic USB Gamepad or an 8Bitdo SF30 Wireless Bluetooth Controller.', + 'There are other supported ways to play, including on original SNES hardware. There are also certain emulators, such as zsnes, that won’t work correctly with the randomizer. Join us on Discord to learn more!', + 'NOTE FOR SNESMINI PLAYERS: Rename your ROM file to have 61 characters or fewer as the SNESMini can’t handle long file names.', + ] + ], + 'play' => [ + 'header' => '5. Get Playing!', + 'content' => [ + 'You’re finally ready to go! The best way to learn is to load up your new ROM and start playing. If you feel like you’re stuck, check out this list of common pitfalls, or ask on Discord.', + '
    ' + . '
  • You can use the Y button to swap between Silver Arrows and Normal Arrows, the Red and Blue Boomerangs, the Mushroom and the Magic Powder, and the Shovel and the Flute.
  • ' + . '
  • You can save and quit with either the Frog or Purple Chest following you to bring it back to the light world without the Mirror.
  • ' + . '
  • In the dark world, you can hookshot over the river north of the pyramid. Look for the arrow made out of grass!
  • ' + . '
  • You can use the boots to dash into walls, blocks, and pots, knocking you backwards, in order to cross a gap.
  • ' + . '
  • If you find yourself at bumper cave with the Cape but without the Hookshot, try walking over the top left of the gap—no Hookshot needed!
  • ' + . '
  • Keys might not be accessible if they are not required to finish the game. For instance, the Skull Woods big key might be in the big chest.
  • ' + . '
', + 'Don’t forget to check out the comprehensive ' . __('navigation.resources') . ' with tutorials and more tips!', + ] + ], + ], ]; diff --git a/resources/lang/en/watch.php b/resources/lang/en/watch.php index 36e86dd9e..a2f4550d8 100644 --- a/resources/lang/en/watch.php +++ b/resources/lang/en/watch.php @@ -1,40 +1,40 @@ 'Join the Adventure!', - 'cards' => [ - 'twitch' => [ - 'header' => 'Twitch', - 'content' => [ - 'With so much going on, there’s always a race to watch! Follow these networks and never miss a match!', - ], - 'button' => 'ALttP:R Twitch Community', - ], - 'tournament' => [ - 'header' => 'Tournaments', - 'sections' => [ - [ - 'header' => 'Upcoming Tournaments', - 'content' => [ - 'Join us for the 2018 Spring Invitational starting this March! Join our Discord community to stay up to date!', - ], - ], - [ - 'header' => '2018 Spring Invitational', - 'content' => [ - 'The 2018 Spring Invitational has wrapped up!', - 'Watch all the matches here!', - '
', - ], - ], - ], + 'header' => 'Join the Adventure!', + 'cards' => [ + 'twitch' => [ + 'header' => 'Twitch', + 'content' => [ + 'With so much going on, there’s always a race to watch! Follow these networks and never miss a match!', + ], + 'button' => 'ALttP:R Twitch Community', + ], + 'tournament' => [ + 'header' => 'Tournaments', + 'sections' => [ + [ + 'header' => 'Upcoming Tournaments', + 'content' => [ + 'Join us for the 2019 Main Tournament starting this October! Join our Discord community to stay up to date!', + ], + ], + [ + 'header' => '2018 Spring Invitational', + 'content' => [ + 'The 2018 Spring Invitational has wrapped up!', + 'Watch all the matches here!', + '
', + ], + ], + ], - ], - 'youtube' => [ - 'header' => 'Youtube', - 'content' => [ - '', - 'Subscribe to our Youtube channel for updates, tournament highlights, and more!', - ] - ], - ], + ], + 'youtube' => [ + 'header' => 'Youtube', + 'content' => [ + '', + 'Subscribe to our Youtube channel for updates, tournament highlights, and more!', + ] + ], + ], ]; diff --git a/resources/lang/es/about.php b/resources/lang/es/about.php index 48921a1bd..8234f48df 100644 --- a/resources/lang/es/about.php +++ b/resources/lang/es/about.php @@ -1,7 +1,7 @@ [ - 'ALttP: Randomizer es una nueva forma de jugar al clásico The Legend of Zelda: A Link to the Past. Cada partida cambia aleatoriamente la localización de todos los objetos importantes en el juego. ¿Encontrarás el Arco en la Montaña de la Muerte, la Vara de Fuego descansando tranquilamente en la biblioteca, o incluso la mismísima Espada Maestra esperando en un corral de gallinas?', - 'Desafía a tus amigos a conseguir el mejor tiempo en un resultado concreto o participa en las competiciones de speedrun semanales. Mejora tus habilidades lo suficiente y tal vez te lleves el primer puesto en nuestro torneo invitacional bianual. ¡Nos vemos en Hyrule!', - ], + 'content' => [ + 'ALttP: Randomizer es una nueva forma de jugar al clásico The Legend of Zelda: A Link to the Past. Cada partida cambia aleatoriamente la localización de todos los objetos importantes en el juego. ¿Encontrarás el Arco en la Montaña de la Muerte, la Vara de Fuego descansando tranquilamente en la biblioteca, o incluso la mismísima Espada Maestra esperando en un corral de gallinas?', + 'Desafía a tus amigos a conseguir el mejor tiempo en un resultado concreto o participa en las competiciones de speedrun semanales. Mejora tus habilidades lo suficiente y tal vez te lleves el primer puesto en nuestro torneo invitacional bianual. ¡Nos vemos en Hyrule!', + ], ]; diff --git a/resources/lang/es/contribute.php b/resources/lang/es/contribute.php index 20a46c7c6..c8422e122 100644 --- a/resources/lang/es/contribute.php +++ b/resources/lang/es/contribute.php @@ -1,34 +1,34 @@ 'Contribuir', - 'subheader' => 'Hay muchas formas de ayudar, ¡únete a los canales de desarrollo en Discord!', - 'cards' => [ - 'sprite' => [ - 'header' => 'Creación de sprites', - 'content' => [ - '¿Quiéres ver tu propio sprite customizado en lugar de Link? ¡Lee documentación de fatmanspanda! (en inglés)', - 'Para más información sobre creación de sprites y sobre meter un sprite en ALttP:R, ¡entra en #sprite-dev en Discord!', - ] - ], - 'live' => [ - 'header' => 'Producción de carreras en directo', - 'content' => [ - '¿Interesado en unirte al equipo de restreamers, comentaristas o trackers?', - '¡Rellena este formulario y mantente atento a Discord!', - '
', - ] - ], - 'other' => [ - 'header' => 'Otras contribuciones', - 'content' => [ - '¿Tienes una idea para una nueva prestación? ¿Has encontrado un bug mientras jugabas? ¿Quieres poner a trabajar tus habilidades técnicas? ¡Entra al canal #suggestions en Discord y preséntate!', - ] - ], - 'discord' => [ - 'header' => '¡Únete a la comunidad de Discord!', - 'content' => [ - '¿Hemos mencionado ya que deberías unirte a nuestro Discord? ¡La mejor forma de involucrarte es entrar y presentarte!', - ] - ], - ], + 'header' => 'Contribuir', + 'subheader' => 'Hay muchas formas de ayudar, ¡únete a los canales de desarrollo en Discord!', + 'cards' => [ + 'sprite' => [ + 'header' => 'Creación de sprites', + 'content' => [ + '¿Quiéres ver tu propio sprite customizado en lugar de Link? ¡Lee documentación de fatmanspanda! (en inglés)', + 'Para más información sobre creación de sprites y sobre meter un sprite en ALttP:R, ¡entra en #sprite-dev en Discord!', + ] + ], + 'live' => [ + 'header' => 'Producción de carreras en directo', + 'content' => [ + '¿Interesado en unirte al equipo de restreamers, comentaristas o trackers?', + '¡Rellena este formulario y mantente atento a Discord!', + '
', + ] + ], + 'other' => [ + 'header' => 'Otras contribuciones', + 'content' => [ + '¿Tienes una idea para una nueva prestación? ¿Has encontrado un bug mientras jugabas? ¿Quieres poner a trabajar tus habilidades técnicas? ¡Entra al canal #suggestions en Discord y preséntate!', + ] + ], + 'discord' => [ + 'header' => '¡Únete a la comunidad de Discord!', + 'content' => [ + '¿Hemos mencionado ya que deberías unirte a nuestro Discord? ¡La mejor forma de involucrarte es entrar y presentarte!', + ] + ], + ], ]; diff --git a/resources/lang/es/customizer.php b/resources/lang/es/customizer.php new file mode 100644 index 000000000..3246501d7 --- /dev/null +++ b/resources/lang/es/customizer.php @@ -0,0 +1,79 @@ + [ + 'timers' => [ + 'off' => 'Off', + 'stopwatch' => 'Stopwatch', + 'countdown-ohko' => 'Countdown OHKO', + 'countdown-continue' => 'Countdown Continue', + 'countdown-stop' => 'Countdown Stop', + ], + 'dungeon_count' => [ + 'off' => 'Off', + 'on' => 'Always On', + 'pickup' => 'On Compass Pickup', + ], + ], + 'glitches' => [ + 'canBombJump' => [ + 'title' => 'Bomb Jump', + 'description' => 'One may be required to Bomb jump over gaps.', + ], + 'canBootsClip' => [ + 'title' => 'Boots Clip', + 'description' => 'When one has the Boots, they may be required to clip through walls in the in overworld.', + ], + 'canBunnyRevive' => [ + 'title' => 'Bunny Revive', + 'description' => 'One may be required to go somewhere as bunny form and abuse death/fairy revive to be Link.', + ], + 'canBunnySurf' => [ + 'title' => 'Bunny Surf', + 'description' => 'One may be required to water walk in bunny state.', + ], + 'canDungeonRevive' => [ + 'title' => 'Dungeon Revive', + 'description' => 'One may be required to revive as a bunny in a dungeon to collect items as Link.', + ], + 'canFakeFlipper' => [ + 'title' => 'Fake Flipper', + 'description' => 'One may be required to use the fake flipper glitch to collect items.', + ], + 'canMirrorClip' => [ + 'title' => 'Mirror Clip', + 'description' => 'One may be required to abuse Mirror bouce to go out of bounds.', + ], + 'canMirrorWrap' => [ + 'title' => 'Mirror Wrap', + 'description' => 'One may be required to use Mirror to auto scroll to a different location.', + ], + 'canOneFrameClipOW' => [ + 'title' => 'One Frame Clip (overworld)', + 'description' => 'You don’t want this. Trust me.', + ], + 'canOWYBA' => [ + 'title' => 'YBA (overworld)', + 'description' => 'May be required to use bottles in the overworld to teleport to different locations.', + ], + 'canSuperBunny' => [ + 'title' => 'Super Bunny', + 'description' => 'One may be required to activate super bunny to access locations.', + ], + 'canSuperSpeed' => [ + 'title' => 'Super Speed', + 'description' => 'One may be required to super speed clip through edges in overworld.', + ], + 'canWaterFairyRevive' => [ + 'title' => 'Water Fairy Revive', + 'description' => 'This setup is silly and requires a bunch of items.', + ], + 'canWaterWalk' => [ + 'title' => 'Water walk', + 'description' => 'One may be required to use boots to walk on top of water.', + ], + 'noLogic' => [ + 'title' => 'Disable all logic checks', + 'description' => 'When this is selected all bets are off, and nothing below matters.', + ], + ] +]; diff --git a/resources/lang/es/daily.php b/resources/lang/es/daily.php index e21e014fa..95c3cd83d 100644 --- a/resources/lang/es/daily.php +++ b/resources/lang/es/daily.php @@ -1,8 +1,8 @@ 'Partida de Randomizer del día', - 'content' => [ - '¿No puedes esperar hasta el fin de semana para el próximo reto de randomizer? ¿Quiéres compararte a tu streamer favorito? ¡Presentamos la Partida de Randomizer del día!', - '¡El modo de juego será aleatorio cada día! (¿Qué esperabas?) ¡Diversifícate y prueba nuevas cosas! ¿Tienes la paciencia para atravesar una partida de ' . __('randomizer.variation.options.ohko') . ', el ingenio para resolver el complejo ' . __('randomizer.variation.options.key-sanity') . ', o la velocidad para sacar la Trifuerza del pedestal? ¡Descúbrelo hoy!', - ] + 'header' => 'Partida de Randomizer del día', + 'content' => [ + '¿No puedes esperar hasta el fin de semana para el próximo reto de randomizer? ¿Quiéres compararte a tu streamer favorito? ¡Presentamos la Partida de Randomizer del día!', + '¡El modo de juego será aleatorio cada día! (¿Qué esperabas?) ¡Diversifícate y prueba nuevas cosas! ¿Tienes la paciencia para atravesar una partida de ' . __('randomizer.variation.options.ohko') . ', el ingenio para resolver el complejo ' . __('randomizer.variation.options.key-sanity') . ', o la velocidad para sacar la Trifuerza del pedestal? ¡Descúbrelo hoy!', + ] ]; diff --git a/resources/lang/es/enemizer.php b/resources/lang/es/enemizer.php index cb5cea86f..dfdb18448 100644 --- a/resources/lang/es/enemizer.php +++ b/resources/lang/es/enemizer.php @@ -1,36 +1,36 @@ 'Enemizer', - 'enable' => 'Activar Enemizer', - 'disable' => 'Desactivar Enemizer', - 'enemy_health' => [ - 'title' => 'Vida de enemigos', - 'options' => [ - 0 => 'Normal', - 1 => 'Fácil (1-4 hp)', - 2 => 'Medio (2-15 hp)', - 3 => 'Difícil (2-30 hp)', - 4 => 'Locura (4-50 hp)', - ], - ], - 'enemy_damage' => [ - 'title' => 'Daño de enemigos', - 'options' => [ - 'off' => 'Normal', - 'shuffle' => 'Aleatorio', - 'chaos' => 'Caos', - ], - ], - 'bosses' => [ - 'title' => 'Jefes', - 'options' => [ - 'off' => 'Normal', - 'basic' => 'Básico', - 'normal' => 'Normal', - 'chaos' => 'Caos', - ], - ], - 'palette_shuffle' => 'Paleta aleatorias', - 'pot_shuffle' => 'Vasijas aleatorias', - 'enemy_shuffle' => 'Enemigos aleatorios', + 'title' => 'Enemizer', + 'enable' => 'Activar Enemizer', + 'disable' => 'Desactivar Enemizer', + 'enemy_health' => [ + 'title' => 'Vida de enemigos', + 'options' => [ + 0 => 'Normal', + 1 => 'Fácil (1-4 hp)', + 2 => 'Medio (2-15 hp)', + 3 => 'Difícil (2-30 hp)', + 4 => 'Locura (4-50 hp)', + ], + ], + 'enemy_damage' => [ + 'title' => 'Daño de enemigos', + 'options' => [ + 'off' => 'Normal', + 'shuffle' => 'Aleatorio', + 'chaos' => 'Caos', + ], + ], + 'bosses' => [ + 'title' => 'Jefes', + 'options' => [ + 'off' => 'Normal', + 'basic' => 'Básico', + 'normal' => 'Normal', + 'chaos' => 'Caos', + ], + ], + 'palette_shuffle' => 'Paleta aleatorias', + 'pot_shuffle' => 'Vasijas aleatorias', + 'enemy_shuffle' => 'Enemigos aleatorios', ]; diff --git a/resources/lang/es/entrance.php b/resources/lang/es/entrance.php index 83afed8fc..ab6ae8041 100644 --- a/resources/lang/es/entrance.php +++ b/resources/lang/es/entrance.php @@ -1,75 +1,75 @@ 'Randomizer de Entradas', - 'switch' => [ - 'item' => 'Cambiar a randomizer de objetos', - ], - 'rom' => [ - 'options' => 'Opciones de ROM', - ], - 'difficulty' => [ - 'title' => 'Dificultad', - 'options' => [ - 'easy' => 'Fácil', - 'normal' => 'Normal', - 'hard' => 'Difícil', - 'expert' => 'Experto', - 'insane' => 'Locura', - ], - ], - 'goal' => [ - 'title' => 'Objetivo', - 'options' => [ - 'ganon' => 'Derrotar a Ganon', - 'crystals' => 'Cristales', - 'dungeons' => 'Todas las mazmorras', - 'pedestal' => 'Pedestal de la Espada Maestra', - 'triforcehunt' => 'Piezas de la Trifuerza', - ], - ], - 'logic' => [ - 'title' => 'Lógica', - 'options' => [ - 'NoGlitches' => 'Sin Glitches', - ], - ], - 'mode' => [ - 'title' => 'Tipo', - 'options' => [ - 'swordless' => 'Sin espadas', - 'open' => 'Abierto', - ], - ], - 'shuffle' => [ - 'title' => 'Orden', - 'options' => [ - 'simple' => 'Simple', - 'restricted' => 'Restringido', - 'full' => 'Completo', - 'crossed' => 'Cruzado', - 'insanity' => 'Locura', - ], - ], - 'variation' => [ - 'title' => 'Variación', - 'options' => [ - 'none' => 'Ninguna', - 'timed-race' => 'Carrera cronometrada', - 'timed-ohko' => 'Muerte Súbita cronometrada', - 'ohko' => 'Muerte Súbita', - 'triforce-hunt' => 'Caza de la Trifuerza', - 'key-sanity' => 'Keysanity', - 'retro' => 'Retro', - ], - ], - 'generate' => [ - 'race' => 'Generar ROM para carreras', - 'spoiler_race' => 'Generar ROM para carreras', - 'casual' => 'Generar ROM', - ], - 'details' => [ - 'title' => 'Detalles del juego', - 'save_spoiler' => 'Guardar spoiler', - 'save_rom' => 'Guardar ROM', - ], + 'title' => 'Randomizer de Entradas', + 'switch' => [ + 'item' => 'Cambiar a randomizer de objetos', + ], + 'rom' => [ + 'options' => 'Opciones de ROM', + ], + 'difficulty' => [ + 'title' => 'Dificultad', + 'options' => [ + 'easy' => 'Fácil', + 'normal' => 'Normal', + 'hard' => 'Difícil', + 'expert' => 'Experto', + 'insane' => 'Locura', + ], + ], + 'goal' => [ + 'title' => 'Objetivo', + 'options' => [ + 'ganon' => 'Derrotar a Ganon', + 'crystals' => 'Cristales', + 'dungeons' => 'Todas las mazmorras', + 'pedestal' => 'Pedestal de la Espada Maestra', + 'triforcehunt' => 'Piezas de la Trifuerza', + ], + ], + 'logic' => [ + 'title' => 'Lógica', + 'options' => [ + 'NoGlitches' => 'Sin Glitches', + ], + ], + 'mode' => [ + 'title' => 'Tipo', + 'options' => [ + 'swordless' => 'Sin espadas', + 'open' => 'Abierto', + ], + ], + 'shuffle' => [ + 'title' => 'Orden', + 'options' => [ + 'simple' => 'Simple', + 'restricted' => 'Restringido', + 'full' => 'Completo', + 'crossed' => 'Cruzado', + 'insanity' => 'Locura', + ], + ], + 'variation' => [ + 'title' => 'Variación', + 'options' => [ + 'none' => 'Ninguna', + 'timed-race' => 'Carrera cronometrada', + 'timed-ohko' => 'Muerte Súbita cronometrada', + 'ohko' => 'Muerte Súbita', + 'triforce-hunt' => 'Caza de la Trifuerza', + 'key-sanity' => 'Keysanity', + 'retro' => 'Retro', + ], + ], + 'generate' => [ + 'race' => 'Generar ROM para carreras', + 'spoiler_race' => 'Generar ROM para carreras', + 'casual' => 'Generar ROM', + ], + 'details' => [ + 'title' => 'Detalles del juego', + 'save_spoiler' => 'Guardar spoiler', + 'save_rom' => 'Guardar ROM', + ], ]; diff --git a/resources/lang/es/entrance_options.php b/resources/lang/es/entrance_options.php deleted file mode 100644 index 102976160..000000000 --- a/resources/lang/es/entrance_options.php +++ /dev/null @@ -1,38 +0,0 @@ - '¿Qué es el Randomizer de Entradas?', - 'subheader' => 'El Randomizer de Entradas te permite poner el mundo patas arriba y jugar al juego. Debería seguir las normas estándar de VT para todas las opciones, pero introduce le nueva opción “' . __('entrance.shuffle.title') . '”.', - 'cards' => [ - 'simple' => [ - 'header' => __('entrance.shuffle.options.simple'), - 'content' => [ - 'Mezcla las entradas a mazmorras entre ellas y mantiene todas las mazmorras con 4 entradas en una sola localización, de forma que las mazmorras se intercambian completamente entre ellas.', - 'Aparte de la Montaña de la Muerte en el Mundo de la Luz, los interiores están randomizados pero siguen conectando a los mismos puntos en en mapa. En la Montaña de la Muerte, las entradas están conectadas de forma más libre.', - ], - ], - 'restricted' => [ - 'header' => __('entrance.shuffle.options.restricted'), - 'content' => [ - 'Utiliza la mezcla de mazmorras de "Simple", pero conecta de forma libre el resto de entradas. Las cuevas y mazmorras con múltiples entradas estarán restringidas al mismo mundo.', - ], - ], - 'full' => [ - 'header' => __('entrance.shuffle.options.full'), - 'content' => [ - 'Mezcla entradas de cuevas y mazmorras libremente. Las cuevas y mazmorras con múltiples entradas estarán restringidas al mismo mundo.', - ], - ], - 'crossed' => [ - 'header' => __('entrance.shuffle.options.crossed'), - 'content' => [ - 'Mezcla entradas de cuevas y mazmorras libremente, pero las cuevas o mazmorras con las que conecten pueden ir tanto al Mundo de la Luz como al Mundo Oscuro.', - ], - ], - 'insanity' => [ - 'header' => __('entrance.shuffle.options.insanity'), - 'content' => [ - 'Separa entradas de sus salidad y las mezcla de forma libre. Las cuevas con una sola entrada en vanilla solo pueden salir por la misma localización en la que se entraron.', - ], - ], - ], -]; diff --git a/resources/lang/es/error.php b/resources/lang/es/error.php index 012574542..af272186e 100644 --- a/resources/lang/es/error.php +++ b/resources/lang/es/error.php @@ -1,7 +1,8 @@ 'Error', - '429' => 'Aunque apreciamos que quieras generar un montón de partidas, otras personas quieren hacerlo también. Por favor, vuelve más tarde si quieres generar más.', - 'failed_generation' => 'Error creando la semilla :(', - 'bad_file' => 'Archivo no reconocido', + 'title' => 'Error', + '429' => 'Aunque apreciamos que quieras generar un montón de partidas, otras personas quieren hacerlo también. Por favor, vuelve más tarde si quieres generar más.', + 'failed_generation' => 'Error creando la semilla :(', + 'bad_file' => 'Archivo no reconocido', + 'quota_exceeded_error' => 'Your local storage quota has been exceeded.', ]; diff --git a/resources/lang/es/item.php b/resources/lang/es/item.php index d94c60bd2..1c449dabd 100644 --- a/resources/lang/es/item.php +++ b/resources/lang/es/item.php @@ -1,205 +1,213 @@ 'Nada', - 'UncleSword' => 'Espada Progresiva', - 'L1Sword' => 'Espada Normal', - 'L1SwordAndShield' => 'Espada y Escudo', - 'L2Sword' => 'Espada Maestra', - 'MasterSword' => 'Espada Maestra', - 'L3Sword' => 'Espada Templada', - 'L4Sword' => 'Espada Dorada', - 'BlueShield' => 'Escudo Pequeño', - 'RedShield' => 'Escudo Rojo', - 'MirrorShield' => 'Escudo Espejo', - 'FireRod' => 'Cetro de Fuego', - 'IceRod' => 'Cetro de Hielo', - 'Hammer' => 'Martillo', - 'Hookshot' => 'Gancho', - 'Bow' => 'Arco', - 'Boomerang' => 'Bumerán Azul', - 'Powder' => 'Polvos Mágicos', - 'Bee' => 'Abeja', - 'Bombos' => 'Bombos', - 'Ether' => 'Ether', - 'Quake' => 'Quake', - 'Lamp' => 'Lámpara', - 'Shovel' => 'Pala', - 'OcarinaInactive' => 'Flauta', - 'CaneOfSomaria' => 'Vara de Somaria', - 'Bottle' => 'Botella (vacía)', - 'PieceOfHeart' => 'Pieza de Corazón', - 'CaneOfByrna' => 'Vara de Byrna', - 'Cape' => 'Capa Mágica', - 'MagicMirror' => 'Espejo Mágico', - 'PowerGlove' => 'Guante de Poder', - 'TitansMitt' => 'Guante Titán', - 'BookOfMudora' => 'Libro de Mudora', - 'Flippers' => 'Aletas', - 'MoonPearl' => 'Perla Lunar', - 'BugCatchingNet' => 'Cazamariposas', - 'BlueMail' => 'Malla Azul', - 'RedMail' => 'Malla Roja', - 'Key' => 'Llave', - 'Compass' => 'Brújula', - 'HeartContainerNoAnimation' => 'Contenedor de Corazón (sin animación)', - 'Bomb' => 'Bomba', - 'ThreeBombs' => 'Tres Bombas', - 'Mushroom' => 'Seta', - 'RedBoomerang' => 'Bumerán Mágico', - 'BottleWithRedPotion' => 'Botella (Poción Roja)', - 'BottleWithGreenPotion' => 'Botella (Poción Verde)', - 'BottleWithBluePotion' => 'Botella (Poción Azul)', - 'RedPotion' => 'Poción Roja', - 'GreenPotion' => 'Poción Verde', - 'BluePotion' => 'Poción Azul', - 'TenBombs' => 'Diez Bombas', - 'BigKey' => 'Llave Grande', - 'Map' => 'Mapa de la Mazmorra', - 'OneRupee' => 'Una Rupia', - 'FiveRupees' => 'Cinco Rupias', - 'TwentyRupees' => 'Veinte Rupias', - 'PendantOfCourage' => 'Colgante del Valor', - 'PendantOfWisdom' => 'Colgante de la Sabiduría', - 'PendantOfPower' => 'Colgante del Poder', - 'BowAndArrows' => 'Arco y Flechas', - 'BowAndSilverArrows' => 'Arco y Flechas de Plata', - 'BottleWithBee' => 'Botella (Abeja)', - 'BottleWithFairy' => 'Botella (Hada)', - 'BossHeartContainer' => 'Contenedor de Corazón', - 'HeartContainer' => 'Contenedor de Corazón del Santuario', - 'OneHundredRupees' => 'Cien Rupias', - 'FiftyRupees' => 'Cincuenta Rupias', - 'Heart' => 'Corazón Pequeño', - 'Arrow' => 'Una Flecha', - 'TenArrows' => 'Dies Flechas', - 'SmallMagic' => 'Magia Pequeña', - 'ThreeHundredRupees' => 'Trescientas Rupias', - 'TwentyRupees2' => 'Veinte Rupias', - 'BottleWithGoldBee' => 'Botella (Abeja Dorada)', - 'OcarinaActive' => 'Flauta (activada)', - 'PegasusBoots' => 'Botas de Pegaso', - 'BombUpgrade5' => 'Mejora de Bombas (+5)', - 'BombUpgrade10' => 'Mejora de Bombas (+10)', - 'BombUpgrade50' => 'Mejora de Bombas (+50)', - 'ArrowUpgrade5' => 'Mejora de Flechas (+5)', - 'ArrowUpgrade10' => 'Mejora de Flechas (+10)', - 'ArrowUpgrade70' => 'Mejora de Flechas (+70)', - 'HalfMagic' => 'Media Magia', - 'QuarterMagic' => 'Cuarto de Magia', - 'Programmable1' => 'Programable 1', - 'Programmable2' => 'Programable 2', - 'Programmable3' => 'Programable 3', - 'SilverArrowUpgrade' => 'Mejora de Flechas de Plata', - 'Rupoor' => 'Rupobre', - 'RedClock' => 'Reloj Rojo', - 'BlueClock' => 'Reloj Azul', - 'GreenClock' => 'Reloj Verde', - 'ProgressiveSword' => 'Espada Progresiva', - 'ProgressiveShield' => 'Escudo Progresivo', - 'ProgressiveArmor' => 'Armadura Progresiva', - 'ProgressiveGlove' => 'Guante Progresivo', - 'singleRNG' => 'Objeto RNG Único', - 'multiRNG' => 'Objeto RNG No Único', - 'Triforce' => 'Trifuerza', - 'PowerStar' => 'Estrella de Poder', - 'TriforcePiece' => 'Pieza de la Trifuerza', - 'MapLW' => 'Mapa del Mundo de la Luz', - 'MapDW' => 'Mapa del Mundo Oscuro', - 'MapA2' => 'Mapa de la Torre de Ganon', - 'MapD7' => 'Mapa de Roca Tortuga', - 'MapD4' => 'Mapa de Cueva de los Ladrones', - 'MapP3' => 'Mapa de la Torre de Hera', - 'MapD5' => 'Mapa del Palacio de Hielo', - 'MapD3' => 'Mapa de Bosque de Osamentas', - 'MapD6' => 'Mapa de Gruta de las Marismas', - 'MapD1' => 'Mapa del Palacio de la Oscuridad', - 'MapD2' => 'Mapa del Palacio del Pantano', - 'MapA1' => 'Mapa de la Torre de Agahnim', - 'MapP2' => 'Mapa del Palacio del Desierto', - 'MapP1' => 'Mapa del Palacio del Este', - 'MapH1' => 'Mapa del Castillo de Hyrule', - 'MapH2' => 'Mapa de las Cloacas', - 'CompassA2' => 'Brújula de la Torre de Ganon', - 'CompassD7' => 'Brújula de Roca Tortuga', - 'CompassD4' => 'Brújula de Cueva de los Ladrones', - 'CompassP3' => 'Brújula de la Torre de Hera', - 'CompassD5' => 'Brújula del Palacio de Hielo', - 'CompassD3' => 'Brújula de Bosque de Osamentas', - 'CompassD6' => 'Brújula de Gruta de las Marismas', - 'CompassD1' => 'Brújula del Palacio de la Oscuridad', - 'CompassD2' => 'Brújula del Palacio del Pantano', - 'CompassA1' => 'Brújula de la Torre de Agahnim', - 'CompassP2' => 'Brújula del Palacio del Desierto', - 'CompassP1' => 'Brújula del Palacio del Este', - 'CompassH1' => 'Brújula del Castillo de Hyrule', - 'CompassH2' => 'Brújula de las Cloacas', - 'BigKeyA2' => 'Llave Grande de la Torre de Ganon', - 'BigKeyD7' => 'Llave Grande de Roca Tortuga', - 'BigKeyD4' => 'Llave Grande de Cueva de los Ladrones', - 'BigKeyP3' => 'Llave Grande de la Torre de Hera', - 'BigKeyD5' => 'Llave Grande del Palacio de Hielo', - 'BigKeyD3' => 'Llave Grande de Bosque de Osamentas', - 'BigKeyD6' => 'Llave Grande de Gruta de las Marismas', - 'BigKeyD1' => 'Llave Grande del Palacio de la Oscuridad', - 'BigKeyD2' => 'Llave Grande del Palacio del Pantano', - 'BigKeyA1' => 'Llave Grande de la Torre de Agahnim', - 'BigKeyP2' => 'Llave Grande del Palacio del Desierto', - 'BigKeyP1' => 'Llave Grande del Palacio del Este', - 'BigKeyH1' => 'Llave Grande del Castillo de Hyrule', - 'BigKeyH2' => 'Llave Grande de las Cloacas', - 'KeyH2' => 'Llave de las Cloacas', - 'KeyH1' => 'Llave del Castillo de Hyrule', - 'KeyP1' => 'Llave del Palacio del Este', - 'KeyP2' => 'Llave del Palacio del Desierto', - 'KeyA1' => 'Llave de la Torre de Agahnim', - 'KeyD2' => 'Llave del Palacio del Pantano', - 'KeyD1' => 'Llave del Palacio de la Oscuridad', - 'KeyD6' => 'Llave de Gruta de las Marismas', - 'KeyD3' => 'Llave de Bosque de Osamentas', - 'KeyD5' => 'Llave del Palacio de Hielo', - 'KeyP3' => 'Llave de la Torre de Hera', - 'KeyD4' => 'Llave de Cueva de los Ladrones', - 'KeyD7' => 'Llave de Roca Tortuga', - 'KeyA2' => 'Llave de la Torre de Ganon', - 'KeyGK' => 'Llave Genérica', - 'Crystal1' => 'Cristal 1', - 'Crystal2' => 'Cristal 2', - 'Crystal3' => 'Cristal 3', - 'Crystal4' => 'Cristal 4', - 'Crystal5' => 'Cristal 5', - 'Crystal6' => 'Cristal 6', - 'Crystal7' => 'Cristal 7', - 'RescueZelda' => 'Rescata a Zelda', - 'DefeatAgahnim' => 'Derrota a Agahnim', - 'DefeatAgahnim2' => 'Derrota a Agahnim 2', - 'DefeatGanon' => 'Derrota a Ganon', + 'Random' => 'Random', + 'BottleWithRandom' => 'Bottle (Random)', + 'Nothing' => 'Nada', + 'UncleSword' => 'Espada Progresiva', + 'L1Sword' => 'Espada Normal', + 'L1SwordAndShield' => 'Espada y Escudo', + 'L2Sword' => 'Espada Maestra', + 'MasterSword' => 'Espada Maestra', + 'L3Sword' => 'Espada Templada', + 'L4Sword' => 'Espada Dorada', + 'BlueShield' => 'Escudo Pequeño', + 'RedShield' => 'Escudo Rojo', + 'MirrorShield' => 'Escudo Espejo', + 'FireRod' => 'Cetro de Fuego', + 'IceRod' => 'Cetro de Hielo', + 'Hammer' => 'Martillo', + 'Hookshot' => 'Gancho', + 'Bow' => 'Arco', + 'Boomerang' => 'Bumerán Azul', + 'Powder' => 'Polvos Mágicos', + 'Bee' => 'Abeja', + 'Bombos' => 'Bombos', + 'Ether' => 'Ether', + 'Quake' => 'Quake', + 'Lamp' => 'Lámpara', + 'Shovel' => 'Pala', + 'OcarinaInactive' => 'Flauta', + 'CaneOfSomaria' => 'Vara de Somaria', + 'Bottle' => 'Botella (vacía)', + 'PieceOfHeart' => 'Pieza de Corazón', + 'CaneOfByrna' => 'Vara de Byrna', + 'Cape' => 'Capa Mágica', + 'MagicMirror' => 'Espejo Mágico', + 'PowerGlove' => 'Guante de Poder', + 'TitansMitt' => 'Guante Titán', + 'BookOfMudora' => 'Libro de Mudora', + 'Flippers' => 'Aletas', + 'MoonPearl' => 'Perla Lunar', + 'BugCatchingNet' => 'Cazamariposas', + 'BlueMail' => 'Malla Azul', + 'RedMail' => 'Malla Roja', + 'Key' => 'Llave', + 'Compass' => 'Brújula', + 'HeartContainerNoAnimation' => 'Contenedor de Corazón (sin animación)', + 'Bomb' => 'Bomba', + 'ThreeBombs' => 'Tres Bombas', + 'Mushroom' => 'Seta', + 'RedBoomerang' => 'Bumerán Mágico', + 'BottleWithRedPotion' => 'Botella (Poción Roja)', + 'BottleWithGreenPotion' => 'Botella (Poción Verde)', + 'BottleWithBluePotion' => 'Botella (Poción Azul)', + 'RedPotion' => 'Poción Roja', + 'GreenPotion' => 'Poción Verde', + 'BluePotion' => 'Poción Azul', + 'TenBombs' => 'Diez Bombas', + 'BigKey' => 'Llave Grande', + 'Map' => 'Mapa de la Mazmorra', + 'OneRupee' => 'Una Rupia', + 'FiveRupees' => 'Cinco Rupias', + 'TwentyRupees' => 'Veinte Rupias', + 'PendantOfCourage' => 'Colgante del Valor', + 'PendantOfWisdom' => 'Colgante de la Sabiduría', + 'PendantOfPower' => 'Colgante del Poder', + 'BowAndArrows' => 'Arco y Flechas', + 'BowAndSilverArrows' => 'Arco y Flechas de Plata', + 'BottleWithBee' => 'Botella (Abeja)', + 'BottleWithFairy' => 'Botella (Hada)', + 'BossHeartContainer' => 'Contenedor de Corazón', + 'HeartContainer' => 'Contenedor de Corazón del Santuario', + 'OneHundredRupees' => 'Cien Rupias', + 'FiftyRupees' => 'Cincuenta Rupias', + 'Heart' => 'Corazón Pequeño', + 'Arrow' => 'Una Flecha', + 'ShopArrow' => 'Arrows', + 'TenArrows' => 'Dies Flechas', + 'SmallMagic' => 'Magia Pequeña', + 'ThreeHundredRupees' => 'Trescientas Rupias', + 'TwentyRupees2' => 'Veinte Rupias', + 'BottleWithGoldBee' => 'Botella (Abeja Dorada)', + 'OcarinaActive' => 'Flauta (activada)', + 'PegasusBoots' => 'Botas de Pegaso', + 'BombUpgrade5' => 'Mejora de Bombas (+5)', + 'BombUpgrade10' => 'Mejora de Bombas (+10)', + 'BombUpgrade50' => 'Mejora de Bombas (+50)', + 'ArrowUpgrade5' => 'Mejora de Flechas (+5)', + 'ArrowUpgrade10' => 'Mejora de Flechas (+10)', + 'ArrowUpgrade70' => 'Mejora de Flechas (+70)', + 'HalfMagic' => 'Media Magia', + 'QuarterMagic' => 'Cuarto de Magia', + 'Programmable1' => 'Programable 1', + 'Programmable2' => 'Programable 2', + 'Programmable3' => 'Programable 3', + 'SilverArrowUpgrade' => 'Mejora de Flechas de Plata', + 'Rupoor' => 'Rupobre', + 'RedClock' => 'Reloj Rojo', + 'BlueClock' => 'Reloj Azul', + 'GreenClock' => 'Reloj Verde', + 'ProgressiveSword' => 'Espada Progresiva', + 'ProgressiveShield' => 'Escudo Progresivo', + 'ProgressiveArmor' => 'Armadura Progresiva', + 'ProgressiveGlove' => 'Guante Progresivo', + 'singleRNG' => 'Objeto RNG Único', + 'multiRNG' => 'Objeto RNG No Único', + 'ProgressiveBow' => 'Arco Progresivo', + 'Triforce' => 'Trifuerza', + 'PowerStar' => 'Estrella de Poder', + 'TriforcePiece' => 'Pieza de la Trifuerza', + 'MapLW' => 'Mapa del Mundo de la Luz', + 'MapDW' => 'Mapa del Mundo Oscuro', + 'MapA2' => 'Mapa de la Torre de Ganon', + 'MapD7' => 'Mapa de Roca Tortuga', + 'MapD4' => 'Mapa de Cueva de los Ladrones', + 'MapP3' => 'Mapa de la Torre de Hera', + 'MapD5' => 'Mapa del Palacio de Hielo', + 'MapD3' => 'Mapa de Bosque de Osamentas', + 'MapD6' => 'Mapa de Gruta de las Marismas', + 'MapD1' => 'Mapa del Palacio de la Oscuridad', + 'MapD2' => 'Mapa del Palacio del Pantano', + 'MapA1' => 'Mapa de la Torre de Agahnim', + 'MapP2' => 'Mapa del Palacio del Desierto', + 'MapP1' => 'Mapa del Palacio del Este', + 'MapH1' => 'Mapa del Castillo de Hyrule', + 'MapH2' => 'Mapa de las Cloacas', + 'CompassA2' => 'Brújula de la Torre de Ganon', + 'CompassD7' => 'Brújula de Roca Tortuga', + 'CompassD4' => 'Brújula de Cueva de los Ladrones', + 'CompassP3' => 'Brújula de la Torre de Hera', + 'CompassD5' => 'Brújula del Palacio de Hielo', + 'CompassD3' => 'Brújula de Bosque de Osamentas', + 'CompassD6' => 'Brújula de Gruta de las Marismas', + 'CompassD1' => 'Brújula del Palacio de la Oscuridad', + 'CompassD2' => 'Brújula del Palacio del Pantano', + 'CompassA1' => 'Brújula de la Torre de Agahnim', + 'CompassP2' => 'Brújula del Palacio del Desierto', + 'CompassP1' => 'Brújula del Palacio del Este', + 'CompassH1' => 'Brújula del Castillo de Hyrule', + 'CompassH2' => 'Brújula de las Cloacas', + 'BigKeyA2' => 'Llave Grande de la Torre de Ganon', + 'BigKeyD7' => 'Llave Grande de Roca Tortuga', + 'BigKeyD4' => 'Llave Grande de Cueva de los Ladrones', + 'BigKeyP3' => 'Llave Grande de la Torre de Hera', + 'BigKeyD5' => 'Llave Grande del Palacio de Hielo', + 'BigKeyD3' => 'Llave Grande de Bosque de Osamentas', + 'BigKeyD6' => 'Llave Grande de Gruta de las Marismas', + 'BigKeyD1' => 'Llave Grande del Palacio de la Oscuridad', + 'BigKeyD2' => 'Llave Grande del Palacio del Pantano', + 'BigKeyA1' => 'Llave Grande de la Torre de Agahnim', + 'BigKeyP2' => 'Llave Grande del Palacio del Desierto', + 'BigKeyP1' => 'Llave Grande del Palacio del Este', + 'BigKeyH1' => 'Llave Grande del Castillo de Hyrule', + 'BigKeyH2' => 'Llave Grande de las Cloacas', + 'KeyH2' => 'Llave de las Cloacas', + 'KeyH1' => 'Llave del Castillo de Hyrule', + 'KeyP1' => 'Llave del Palacio del Este', + 'KeyP2' => 'Llave del Palacio del Desierto', + 'KeyA1' => 'Llave de la Torre de Agahnim', + 'KeyD2' => 'Llave del Palacio del Pantano', + 'KeyD1' => 'Llave del Palacio de la Oscuridad', + 'KeyD6' => 'Llave de Gruta de las Marismas', + 'KeyD3' => 'Llave de Bosque de Osamentas', + 'KeyD5' => 'Llave del Palacio de Hielo', + 'KeyP3' => 'Llave de la Torre de Hera', + 'KeyD4' => 'Llave de Cueva de los Ladrones', + 'KeyD7' => 'Llave de Roca Tortuga', + 'KeyA2' => 'Llave de la Torre de Ganon', + 'KeyGK' => 'Llave Genérica', + 'ShopKey' => 'Key', + 'Crystal1' => 'Cristal 1', + 'Crystal2' => 'Cristal 2', + 'Crystal3' => 'Cristal 3', + 'Crystal4' => 'Cristal 4', + 'Crystal5' => 'Cristal 5', + 'Crystal6' => 'Cristal 6', + 'Crystal7' => 'Cristal 7', + 'RescueZelda' => 'Rescata a Zelda', + 'DefeatAgahnim' => 'Derrota a Agahnim', + 'BigRedBomb' => 'Big Red Bomb', + 'DefeatAgahnim2' => 'Derrota a Agahnim 2', + 'DefeatGanon' => 'Derrota a Ganon', + + 'ChocoboEgg' => 'Chocobo Egg', - 'NoSlipBoots' => 'Ice Cleats', - 'Reindeer1' => 'Dasher', - 'Reindeer2' => 'Dancer', - 'Reindeer3' => 'Prancer', - 'Reindeer4' => 'Vixen', - 'Reindeer5' => 'Comet', - 'Reindeer6' => 'Cupid', - 'Reindeer7' => 'Donner', - 'Reindeer8' => 'Blitzen', - 'Coal1' => 'Coal', - 'Coal2' => 'Coal', - - 'Armos Knights' => 'Armos Knights', - 'Lanmolas' => 'Lanmolas', - 'Moldorm' => 'Moldorm', - 'Helmasaur King' => 'Helmasaur King', - 'Arrghus' => 'Arrghus', - 'Mothula' => 'Mothula', - 'Blind' => 'Blind', - 'Kholdstare' => 'Kholdstare', - 'Vitreous' => 'Vitreous', - 'Trinexx' => 'Trinexx', - 'Armos Knights' => 'Armos Knights', - 'Lanmolas' => 'Lanmolas', - 'Moldorm' => 'Moldorm', - 'Agahnim' => 'Agahnim', - 'Agahnim 2' => 'Agahnim 2', - 'Ganon' => 'Ganon', + 'NoSlipBoots' => 'Ice Cleats', + 'Reindeer1' => 'Dasher', + 'Reindeer2' => 'Dancer', + 'Reindeer3' => 'Prancer', + 'Reindeer4' => 'Vixen', + 'Reindeer5' => 'Comet', + 'Reindeer6' => 'Cupid', + 'Reindeer7' => 'Donner', + 'Reindeer8' => 'Blitzen', + 'Coal1' => 'Coal', + 'Coal2' => 'Coal', + + 'Armos Knights' => 'Armos Knights', + 'Lanmolas' => 'Lanmolas', + 'Moldorm' => 'Moldorm', + 'Helmasaur King' => 'Helmasaur King', + 'Arrghus' => 'Arrghus', + 'Mothula' => 'Mothula', + 'Blind' => 'Blind', + 'Kholdstare' => 'Kholdstare', + 'Vitreous' => 'Vitreous', + 'Trinexx' => 'Trinexx', + 'Armos Knights' => 'Armos Knights', + 'Lanmolas' => 'Lanmolas', + 'Moldorm' => 'Moldorm', + 'Agahnim' => 'Agahnim', + 'Agahnim 2' => 'Agahnim 2', + 'Ganon' => 'Ganon', ]; diff --git a/resources/lang/es/navigation.php b/resources/lang/es/navigation.php index 40ce46962..f670b18c3 100644 --- a/resources/lang/es/navigation.php +++ b/resources/lang/es/navigation.php @@ -1,27 +1,25 @@ 'Empieza a Jugar', - 'start_watching' => 'Empieza a Ver', - 'generate' => 'Generar Partida', - 'randomizer' => 'Generar Partida Randomizada', - 'entrance' => 'Randomizer de Entradas', - 'daily' => 'Reto Diario', - 'customizer' => 'Crear Partida Customizada', + 'start_playing' => 'Empieza a Jugar', + 'start_watching' => 'Empieza a Ver', + 'generate' => 'Generar Partida', + 'randomizer' => 'Generar Partida Randomizada', + 'entrance' => 'Randomizer de Entradas', + 'daily' => 'Reto Diario', + 'customizer' => 'Crear Partida Customizada', - 'calendar' => 'Calendario de Eventos', + 'calendar' => 'Calendario de Eventos', - 'language' => ' Idioma', + 'language' => ' Idioma', - 'help' => 'Ayuda', - 'resources' => 'Recursos', - 'options' => 'Opciones de Juego', - 'races' => 'Partidas Organizadas', - 'updates' => 'Actualizaciones', - 'game_entrance' => 'Randomizer de Entradas', - 'game_enemizer' => 'Enemizer', - 'sprite_preview' => 'Sprite Options', - 'contribute' => 'Contribuir', - 'discord' => 'Únete a nosotros en Discord', - 'report_issue' => 'Reportar un Problema', + 'help' => 'Ayuda', + 'resources' => 'Recursos', + 'options' => 'Opciones de Juego', + 'races' => 'Partidas Organizadas', + 'updates' => 'Actualizaciones', + 'sprite_preview' => 'Sprite Options', + 'contribute' => 'Contribuir', + 'discord' => 'Únete a nosotros en Discord', + 'report_issue' => 'Reportar un Problema', ]; diff --git a/resources/lang/es/options.php b/resources/lang/es/options.php index e2056a5db..79e8cfba3 100644 --- a/resources/lang/es/options.php +++ b/resources/lang/es/options.php @@ -1,355 +1,607 @@ 'Opciones', - 'subheader' => '¡Hay muchas formas distintas de jugar a ALttP:Randomizer!', - 'cards' => [ - 'mode' => [ - 'header' => __('randomizer.mode.title'), - 'sections' => [ - [ - 'header' => __('randomizer.mode.options.standard'), - 'content' => [ - 'Este modo es lo más parecido al juego original. Empiezas en la cama de Link, consigues un arma de tu tío (dependiendo de tus opción para Espadas, explicadas abajo), y rescatas a Zelda antes de continuar con el resto del juego.', - ], - ], - [ - 'header' => __('randomizer.mode.options.open'), - 'content' => [ - 'Este modo empieza con la opción de empezar en tu casa o en el santuario, y eres libre para explorar. Hay unas cuantas características de este modo a tener en cuenta:', - '
    ' - . '
  • El tío ya está en las cloacas del castillo y tiene un ítem.
  • ' - . '
  • Las salas oscuras no tienen un cono de luz por defecto, ni siquiera las cloacas.
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.mode.options.inverted'), - 'content' => [ - 'Tired of starting in the Light World and working your way to Ganon on top of Death Mountain? Well have we got the mode for you!', - 'Introducing inverted, the game state where we flip the game on its head just to really mess with things.', - 'This mode is really hard in the beginning so we really don’t suggest it for your first playthrough. Enemies in the Dark World hit like a truck, well a bunch of trucks really, and starting with 3 hearts is enough to get gone in a single hit or two', - 'But what does this all mean? Well we had to make some serious modifications to the game to have Link start in the Dark World and get to the light world to complete the game:', - '
    ' - . '
  • Link’s house is now located in the place that the Bomb shop used to reside
  • ' - . '
  • The Bomb shop has been transported to the light world where Link’s house used to be
  • ' - . '
  • The ' . __('item.MagicMirror') . ' works in the Light World to take you back to the Dark World
  • ' - . '
  • The ' . __('item.OcarinaInactive') . ' only works in the Dark World, but you still have to find a way to activate it in the Light world
  • ' - . '
  • Lots of terrain in the Light World has been modified to allow you to get to those pesky ' . __('item.MagicMirror') . ' locations
  • ' - . '
  • The old man has decided to “get lost” the Dark World. You’ll still have to return him to his cave in the Light World
  • ' - . '
  • Portals? All the ones you used to see in the Light World will be in the Dark World with the same requirements to use them
  • ' - . '
  • Agahnim has really gotten tired of his place in Hyrule Castle and decided to move on up to the Tower formally known as Ganon’s on Dark Death Mountain. No silly bat barrier to get in, oh and he added some stairs so you can get to East Dark Death Mountain or his place pretty quickly
  • ' - . '
  • Since Agahnim decided to move on up, that means Ganon’s Tower came on down to Hyrule Castle, that center door being in the entrance, you’ll still need those 7 crystals though
  • ' - . '
  • Ice Palace tore down the wall so you can swim there pretty early now
  • ' - . '
  • Remember a bunny can use the ' . __('item.BookOfMudora') . ' as well as talk to people, and collect items it sees lying on the ground
  • ' - . '
  • The top of Turtle Rock can be accessed by walking on it’s tail
  • ' - . '
', - ], - ], - ], - ], - 'weapons' => [ - 'header' => __('randomizer.weapons.title'), - 'sections' => [ - [ - 'header' => __('randomizer.weapons.options.randomized'), - 'content' => [ - 'Todas las mejoras de espada están randomizadas. No empezarás con una espada, y puede que tardes un tiempo en tener una. ¡Las bombas son una buena arma inicial, al igual que arbustos y señales! Usa cualquier ítem que te encuentres para defenderte.', - 'Si esta opción se combina con el Modo Estándar (ver arriba), tu tío te dará encantado uno de los siguientes ítems para asegurar que puedes completar la secuencia de escape:', - '
    ' - . '
  • Mejora de espada (sí, sigue siendo posible)
  • ' - . '
  • Martillo
  • ' - . '
  • Arco + Repuesto Entero de Flechas
  • ' - . '
  • Repuesto Entero de Bombas
  • ' - . '
  • Cetro de fuego + Relleno Entero de Magia
  • ' - . '
  • Vara de Somaria + Relleno Entero de Magia
  • ' - . '
  • Vara of Byrna + Relleno Entero de Magia
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.weapons.options.uncle'), - 'content' => [ - 'Tu tío siempre tiene una espada. El resto de mejoras están randomizadas.', - ], - ], - [ - 'header' => __('randomizer.weapons.options.swordless'), - 'content' => [ - 'Todas las espadas han desaparecido del juego. Ya que el juego espera uque tengas una espada, para este Modo Sin Espadas se hacen los siguientes cambios:', - '
    ' - . '
  • Las espadas se cambian por cuatro copias de 20 rupias (una rupia verde con un "20" al lado).
  • ' - . '
  • La barrera que bloquea el acceso a la Torre de Agahnim puede romperse con el Martillo.
  • ' - . '
  • Las cortinas bloqueando el progreso en la Torre de Agahnim están pre-abiertas, al igual que las enredaderas en Bosque de Osamentas.
  • ' - . '
  • Los medallones solo se pueden usar para abrir la Gruta de Las Marismas o Roca Tortuga, o para progresar en el Palacio de Hielo. Normalmente requerirían una espada para usarse.
  • ' - . '
  • Ganon ahora recibe daño del Martillo.
  • ' - . '
  • Las Flechas de Plata están disponibles en todas las dificultades.
  • ' - . '
  • Las tabletas de Ether y Bombos requieren el Martillo y el Libro de Mudora.
  • ' - . '
', - ], - ], - ], - ], - 'logic' => [ - 'header' => __('randomizer.logic.title'), - 'sections' => [ - [ - 'header' => __('randomizer.logic.options.NoGlitches'), - 'content' => [ - 'Este modo no require conocimiento avanzado del juego. Está diseñado como si estuvieras jugando al juego original por primera vez.', - 'En este modo se previene que puedas quedarte atascado, sin importar cómo uses las llaves pequeñas en mazmorras.', - 'Puede que estés obligado a guardar y salir en ciertas situaciones, como para volver al Mundo de la Luz cuando estás en el Mundo Oscuro sin el Espejo.', - ], - ], - [ - 'header' => __('randomizer.logic.options.OverworldGlitches'), - 'content' => [ - 'Este modo requiere algunos de los glitches de la superfície más fáciles de ejecutar. ¡Es más difícil que simplemente usar Aletas Falsas para visitar al vagabundo! Los dos tipos de glitches mayores que se necesitan son:', - '
    ' - . '
  • Clipping con las botas en la superfície
  • ' - . '
  • Clipping con el espejo (DMD, TR Middle Clip, y Fluteless Mire)
  • ' - . '
', - 'La mayoría de glitches menores también se tienen en cuenta:', - '
    ' - . '
  • Aletas Falsas (da acceso al Palacio de Hielo, al Rey Zora, a la Pieza de Corazón del Lago Hylia, y al Vagabundo sin tener las Aletas)
  • ' - . '
  • Bunny Revival en mazmorras (da acceso al Palacio de Hielo sin la Perla Lunar)
  • ' - . '
  • Bunny Revival en la superfície (da acceso a la Gruta de las Marismas y a la caseta a su lado sin la Perla Lunar y sin hacer DMD)
  • ' - . '
  • Super Bunny (da acceso a dos cofres en la Montaña de la Muerte en el Mundo Oscuro sin la Perla Lunar)
  • ' - . '
  • Surfing Bunny (da acceso a la Pieza de Corazón del Lago Hylia sin la Perla Lunar)
  • ' - . '
  • Caminar sobre el agua (da acceso a la Pieza de Corazón de la Región de los Zora sin las Aletas)
  • ' - . '
', - 'Los siguientes glitches NO se tienen en cuenta en la lógica, por lo que nunca estarás forzado a usarlos:', - '
    ' - . '
  • Clips sin las Botas
  • ' - . '
  • Screenwraps con el Espejo
  • ' - . '
  • YBAs en la superfície
  • ' - . '
  • Clips en el submundo
  • ' - . '
  • Navegar por salas oscuras
  • ' - . '
  • Hovering
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.logic.options.MajorGlitches'), - 'content' => [ - 'Este modo tiene en cuenta absolutamente todo menos EG y semi-EG. Este modo es extremadamente difícil y require conocimiento avanzado de glitches mayores, incluyendo:', - '
    ' - . '
  • YBA en la superfície
  • ' - . '
  • Clippear fuera de limites
  • ' - . '
  • Screenwraps
  • ' - . '
', - 'Se han hecho algunos cambios adicionales para que el juego funcione correctamente bajo esta lógica:', - '
    ' - . '
  • El Mundo Oscuro falso no está arreglado. Los cristales siempre caerán, sin importar conflictos con colgantes
  • ' - . '
  • Los niveles de agua en el Palacio del Pantano no bajan al salir de su pantalla en la superfície, excepto la primera sala.
  • ' - . '
  • Siempre vuelves a la pirámide al guardar y cargar en el Mundo Oscuro tras derrotar a Agahnim.
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.logic.options.None'), - 'content' => [ - 'No existe ningún seguro sobre donde acaban los ítems, buena suerte si juegas esta opción.', - ], - ], - ], - ], - 'goal' => [ - 'header' => __('randomizer.goal.title'), - 'sections' => [ - [ - 'header' => __('randomizer.goal.options.ganon'), - 'content' => [ - 'Básicamente como el juego normal, tu meta será conseguir los siete cristales, subir por la Torre de Ganon, y derrotar a Ganon', - ], - ], - [ - 'header' => __('randomizer.goal.options.dungeons'), - 'content' => [ - 'Necesitarás derrotar a todos los jefes en las mazmorras de Hyrule, incluyendo ambas versiones de Agahnim. Solo entonces puedes retar a Ganon.', - ], - ], - [ - 'header' => __('randomizer.goal.options.pedestal'), - 'content' => [ - '¡Consigue los Colgantes del Valor, la Sabiduría y el Poder, y consigue la Trifuerza en el pedestal! Ojo, puede que tengas que aventurarte por todo Hyrule, incluyendo la Torre de Ganon, para poder completar esta aventura.', - ], - ], - [ - 'header' => __('randomizer.goal.options.triforce-hunt'), - 'content' => [ - '¡La Trifuerza se ha roto en 30 fragmentps esparcidos por todo Hyrule! ¡Consigue 20 piezas fragmentos para ganar!', - ], - ], - ], - ], - 'difficulty' => [ - 'header' => __('randomizer.difficulty.title'), - 'sections' => [ - [ - 'header' => __('randomizer.difficulty.options.easy'), - 'content' => [ - 'Modo recomendado para nuevos jugadores. "Fácil", hace que viajar por Hyrule sea un poco más seguro.', - 'Encontrar la segunda ½ Magia la mejora a ¼ Magia.', - 'En Modo Estándar, si tu tío tiene el Arco, las Bombas, el Cetro de Fuego, la Vara de Somaria, o la Vara de Byrna, Link tendrá munición ilimitada para ese ítem durante toda la secuencia de escape.', - 'Ver la tabla de Comparación de Dificultad más abajo para detalles completos.', - ], - ], - [ - 'header' => __('randomizer.difficulty.options.normal'), - 'content' => [ - 'En este modo encontrarás todos los ítems que hay en el juego original.', - ], - ], - [ - 'header' => sprintf('%s, %s, and %s', __('randomizer.difficulty.options.hard'), __('randomizer.difficulty.options.expert'), __('randomizer.difficulty.options.insane')), - 'content' => [ - '¿Buscas un reto? ¡Estas dificultades avanzadas ajustan el juego incluso más para poner a prueba tus habilidades! Mira la comparación abajo para más detalles.', - ], - ], - ], - 'comparison' => [ - 'header' => 'Comparación de Dificultad', - 'maximum_health' => 'Vida Máxima', - 'heart_containers' => 'Contenedores de Corazón', - 'heart_pieces' => 'Piezas de Corazón', - 'maximum_mail' => 'Armadura Máxima', - 'number_in_pool' => '# en Reserva', - 'maximum_sword' => 'Espada Máxima', - 'maximum_shield' => 'Escudo Máximo', - 'shields_store' => 'Puedes Comprar Escudos', - 'maximum_magic' => 'Máxima Capacidad de Magia', - 'number_silvers' => '# de Flechas de Plata', - 'number_silvers_swordless' => '# de Flechas de Plata (Sin Espadas)', - 'number_bottles' => '# de Botellas', - 'number_lamps' => '# de Lámparas', - 'potion_magic' => 'Recuperación de Magia con Botellas', - 'potion_health' => 'Recuperación de Vida con Botellas', - 'bug_net_fairy' => 'Cazamariposas Captura Hadas', - 'powder_bubble' => 'Polvo Mágico en Bubbles', - 'cape_consumption' => 'Ratio de Uso de Magia de la Capa', - 'byrna_invincible' => 'Byrna Da Invencibilidad', - 'stun_boomerang' => 'Bumerán Aturde Enemigos', - 'stun_hookshot' => 'Gancho Aturde Enemigos', - 'capacity_upgrade' => 'Mejoras de Capacidad de Flechas / Bombas', - 'drop_rates' => 'Drop Rates de Enemigos', - 'quarter' => 'Cuarto', - 'half' => 'Medio', - 'normal' => 'Normal', - 'shield_3' => 'Espejo', - 'shield_2' => 'Rojo', - 'shield_1' => 'Pequeño', - 'none' => 'Ninguno', - 'sword_4' => 'Dorada', - 'sword_3' => 'Templada', - 'sword_2' => 'Maestra', - 'mail_3' => 'Roja', - 'mail_2' => 'Azul', - 'mail_1' => 'Verde', - 'fairy' => 'Hada', - 'heart' => 'Corazón', - 'bee' => 'Abejas', - 'yes' => 'Sí', - 'no' => 'No', - 'tooltip' => [ - 'silvers' => 'Las Flechas de Plata solo funcionan en la sala de Ganon.', - 'bottles' => 'Una vez las 4 Botellas se hayan encontrado, el resto de Botellas se convierten en rupias.', - 'potion_magic' => 'Las pociones rellenan 100% de la magia en la Cueva de los Pinchos.', - 'potion_health' => 'Las pociones rellenan 20 corazones en la Cueva de los Pinchos.', - ], - ], - ], - 'variation' => [ - 'header' => __('randomizer.variation.title'), - 'sections' => [ - [ - 'header' => __('randomizer.variation.options.none'), - 'content' => [ - 'Lo más parecido al juego normal.', - ], - ], - [ - 'header' => __('randomizer.variation.options.timed-race'), - 'content' => [ - 'El cronómetro empieza en 0, con el objetivo de acabar el juego con el mejor tiempo posible. Hay ítems por el mundo que afectarán al cronómetro, por lo que acabar primero no significa necesariamente ser el ganador.', - '¿Gastarás tu tiempo buscando un reloj para bajar tu tiempo, o irás corriendo hacia el final?', - 'Los siguientes objetos se añaden a la reserva:', - '
    ' - . '
  • 20 Relojes Verdes que restan 4 minutes del cronómetro
  • ' - . '
  • 10 Relojes Azules que restan 2 minutos del cronómetro
  • ' - . '
  • 10 Relojes Rojos que suman 2 minutos al cronómetro
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.variation.options.timed-ohko') . ' (One Hit Knockout)', - 'content' => [ - 'En este modo empiezas con tiempo en tu cronómetro, y cualquier reloj verde encontrado le añade tiempo.', - 'Si tu cronómetro llega a 0, entras en Muerte Súbita, en que cualquier golpe te mata.', - '¡No te desesperes! Si estás en Muerte Súbita y encuentras otro reloj, saldrás de ese modo y conseguirás más tiempo para tu reloj, sin importar cuánto tiempo lleves en Muerte Súbita.', - ], - 'ohko_table' => [ - 'minutes' => 'minutos', - 'start_time' => 'Tiempo Inicial', - 'green_clock' => 'Relojes Verdes (+4 minutos)', - 'red_clock' => 'Relojes Rojos (Muerte Súbita directa)', - ], - ], - [ - 'header' => __('randomizer.variation.options.ohko') . ' (One Hit Knockout)', - 'content' => [ - 'Recibe daño, y Link estira la pata. No apto para cardíacos.', - ], - ], - [ - 'header' => __('randomizer.variation.options.key-sanity'), - 'content' => [ - '¿El juego no es suficientemente aleatorio para ti? ¿Buscando un reto de verdad?', - '¡DE ACUERDO!', - '¡Todos los Mapas, Brújulas y Llaves encontradas en cofres ya no están ligadas a sus mazmorras!', - 'Necesitarás buscar por todas partes para encontrar las llaves que necesitas para progresar por cada mazmorra. Las llaves encontradas en enemigos o bajo vasijas siguen en su sitio.', - 'Adicionalmente, Mapas y Brújulas tienen más valor: Tu mapa del mundo no enseñará información de ninguna mazmorra hasta que consigas el mapa de alguna (y si creías que la música podría guiarte, lo sentimos, eso también ha sido randomizado). Las Brújulas, por su parte, enseñan cuántos cofres has abierto en una mazmorra una vez la consigas.', - 'Te estarás preguntando como sabes qué llave / mapa / brújula has encontrado. No te preocupes: Habrá un texto que te permite saber a qué mazmorra pertenece. El menú también tiene una tabla para ayudarte a no perder la cuenta.', - 'Mapas y Brújulas se requieren por la lógica para poder completar sus respectivas mazmorras.', - ], - ], - [ - 'header' => __('randomizer.variation.options.retro'), - 'content' => [ - 'Un regreso al primer juego de The Legend of Zelda, ' . __('randomizer.variation.title') . ' ' . __('randomizer.variation.options.retro') . ' nos enlaza incluso más al pasado.', - [ - 'header' => 'Arco de Rupias', - 'content' => [ - 'El arco ya no usa flechas como munición. En su lugar, ¡usa rupias! Cada Flecha de Madera cuesta 10 rupias, mientras que cada Flecha de Plata cuesta 50.', - 'Las Flechas de Madera son independientes del Arco, como las Flechas de Plata; necesitas conseguir tanto el Arco como uno de los dos tipos de flecha para poder usar el Arco.', - 'Las Flechas de Madera ahora son un objeto a conseguir, y deben comprarse una sola vez en una tienda. NO están disponibles en cofres normales o en cualquier sitio fuera de tiendas.', - 'Si encuentras las Flechas de Plata sin haber comprado las Flechas de Madera, solo podrás disparar Flechas de Plata.', - ], - ], - [ - 'header' => 'Tiendas por el Mundo', - 'content' => [ - 'Cinco tiendas de nueve posibles se eligen al azar cuando se genera la ROM para tener nuevos productos. Esto NO incluye la Tienda de Súper Bombas o la Tienda de Pociones de la bruja. La Flecha de Madera estará a la venta por 80 rupias, y habrá Llaves Pequeñas disponibles a 100 rupias la pieza. Las Llaves Pequeñas pueden comprarse múltiples veces.', - ], - ], - [ - 'header' => 'Llaves Pequeñas', - 'content' => [ - 'Las Llaves Pequeñas ya no son específicas a cada mazmorra. Ahora están mezcladas entre el resto de ítems, y pueden encontrarse fuera de mazmorras. Las llaves encontradas en enemigos o bajo vasijas siguen en su sitio.', - 'Diez llaves se quitan de la reserva de objetos en Fácl y Normal; de quitan quince en Difícil, Experto y Locura. Piénsalo con calma antes de usar tus llaves, ¡y recuerda que siempre puedes comprarlas si te quedas atascado!', - 'Llaves Grandes, Mapas, y Brújulas se mantienen específicos a cada mazmorra y no se han randomizado fuera de ellas.', - ], - ], - [ - 'header' => 'Cuevas de Premio', - 'content' => [ - 'Cuatro cuevas con una entrada y casas que no llevan a algún ítem elegidas aleatoriamente llevan a Cuevas de Premio donde los jugadores pueden elegir entre un Contenedor de Corazón o una Poción Azul. Los Contenedores de Corazón no se han movido de la reservas general y bonus de objetos. Aún así, no es posible tener más de 20 corazones a la vez.', - 'Una cueva aleatoria de una sola entrada contiene un misterioso pero familiar hombre viejo con una mejora de espada. Esta mejora existe en lugar de otra en la reserva de objetos.', - ], - ], - ], - ], - ], - ], - 'item_pool' => 'Reserva de Objetos', - ], + 'header' => 'Opciones', + 'subheader' => '¡Hay muchas formas distintas de jugar a ALttP:Randomizer!', + 'cards' => [ + 'glitches_required' => [ + 'header' => __('randomizer.glitches_required.title'), + 'sections' => [ + [ + 'header' => __('randomizer.glitches_required.options.none'), + 'content' => [ + 'Este modo no require conocimiento avanzado del juego. Está diseñado como si estuvieras jugando al juego original por primera vez.', + 'En este modo se previene que puedas quedarte atascado, sin importar cómo uses las llaves pequeñas en mazmorras.', + 'Puede que estés obligado a guardar y salir en ciertas situaciones, como para volver al Mundo de la Luz cuando estás en el Mundo Oscuro sin el Espejo.', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.overworld_glitches'), + 'content' => [ + 'Este modo requiere algunos de los glitches de la superfície más fáciles de ejecutar. ¡Es más difícil que simplemente usar Aletas Falsas para visitar al vagabundo! Los dos tipos de glitches mayores que se necesitan son:', + '
    ' + . '
  • Clipping con las botas en la superfície
  • ' + . '
  • Clipping con el espejo (DMD, TR Middle Clip, y Fluteless Mire)
  • ' + . '
', + 'La mayoría de glitches menores también se tienen en cuenta:', + '
    ' + . '
  • Aletas Falsas (da acceso al Palacio de Hielo, al Rey Zora, a la Pieza de Corazón del Lago Hylia, y al Vagabundo sin tener las Aletas)
  • ' + . '
  • Bunny Revival en mazmorras (da acceso al Palacio de Hielo sin la Perla Lunar)
  • ' + . '
  • Bunny Revival en la superfície (da acceso a la Gruta de las Marismas y a la caseta a su lado sin la Perla Lunar y sin hacer DMD)
  • ' + . '
  • Super Bunny (da acceso a dos cofres en la Montaña de la Muerte en el Mundo Oscuro sin la Perla Lunar)
  • ' + . '
  • Surfing Bunny (da acceso a la Pieza de Corazón del Lago Hylia sin la Perla Lunar)
  • ' + . '
  • Caminar sobre el agua (da acceso a la Pieza de Corazón de la Región de los Zora sin las Aletas)
  • ' + . '
', + 'Los siguientes glitches NO se tienen en cuenta en la lógica, por lo que nunca estarás forzado a usarlos:', + '
    ' + . '
  • Clips sin las Botas
  • ' + . '
  • YBAs en la superfície
  • ' + . '
  • Clips en el submundo
  • ' + . '
  • Navegar por salas oscuras
  • ' + . '
  • Hovering
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.major_glitches'), + 'content' => [ + 'Este modo tiene en cuenta absolutamente todo menos EG y semi-EG. Este modo es extremadamente difícil y require conocimiento avanzado de glitches mayores, incluyendo:', + '
    ' + . '
  • YBA en la superfície
  • ' + . '
  • Clippear fuera de limites
  • ' + . '
  • Screenwraps
  • ' + . '
', + 'Se han hecho algunos cambios adicionales para que el juego funcione correctamente bajo esta lógica:', + '
    ' + . '
  • El Mundo Oscuro falso no está arreglado. Los cristales siempre caerán, sin importar conflictos con colgantes
  • ' + . '
  • Los niveles de agua en el Palacio del Pantano no bajan al salir de su pantalla en la superfície, excepto la primera sala.
  • ' + . '
  • Siempre vuelves a la pirámide al guardar y cargar en el Mundo Oscuro tras derrotar a Agahnim.
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.no_logic'), + 'content' => [ + 'No existe ningún seguro sobre donde acaban los ítems, buena suerte si juegas esta opción.', + ], + ], + ], + ], + 'item_placement' => [ + 'header' => __('randomizer.item_placement.title'), + 'sections' => [ + [ + 'header' => __('randomizer.item_placement.options.basic'), + 'content' => [ + 'This is mostly aimed at newer players.', + ], + ], + [ + 'header' => __('randomizer.item_placement.options.advanced'), + 'content' => [ + 'The intention of this setting is to maximise glitchless item placement reach. An exception is made to prevent navigation through dark rooms. No other consideration is given to the difficulty of execution or obscurity of item placements. The expectation is a player choosing this setting is decently familiar and practiced with the original game and/or No Major Glitches speedrun.', + ], + ], + ], + ], + 'dungeon_items' => [ + 'header' => __('randomizer.dungeon_items.title'), + 'sections' => [ + [ + 'header' => __('randomizer.dungeon_items.options.standard'), + 'content' => [ + 'All dungeons items are locked to their respective dungeons.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.mc'), + 'content' => [ + 'Maps and compasses are randomized freely into the world.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.mcs'), + 'content' => [ + 'Maps, compasses and small keys are randomized freely into the world.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.full'), + 'content' => [ + 'Maps, compasses, small keys and big keys are randomized freely in to the world.', + ], + ], + ], + ], + 'accessibility' => [ + 'header' => __('randomizer.accessibility.title'), + 'sections' => [ + [ + 'header' => __('randomizer.accessibility.options.items'), + 'content' => [ + '
    ' + . '
  • It is not guaranteed that you can reach every item location
  • ' + . '
  • It is guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is not guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.accessibility.options.locations'), + 'content' => [ + '
    ' + . '
  • It is guaranteed that you can reach every item location
  • ' + . '
  • It is guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.accessibility.options.none'), + 'content' => [ + '
    ' + . '
  • It is not guaranteed that you can reach every item location
  • ' + . '
  • It is not guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is not guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + ], + ], + 'goal' => [ + 'header' => __('randomizer.goal.title'), + 'sections' => [ + [ + 'header' => __('randomizer.goal.options.ganon'), + 'content' => [ + 'Básicamente como el juego normal, tu meta será conseguir los siete cristales, subir por la Torre de Ganon, y derrotar a Ganon', + ], + ], + [ + 'header' => __('randomizer.goal.options.fast_ganon'), + 'content' => [ + 'Similar to ' . __('randomizer.goal.options.ganon') . ', your goal will be to collect all required crystals and defeat Ganon, however defeating Agahnihm at the top of Ganon’s Tower is not necessarily required. Thus, if entrance shuffle is not enabled, the entrance to Ganon will already be open.', + ], + ], + [ + 'header' => __('randomizer.goal.options.dungeons'), + 'content' => [ + 'Necesitarás derrotar a todos los jefes en las mazmorras de Hyrule, incluyendo ambas versiones de Agahnim. Solo entonces puedes retar a Ganon.', + ], + ], + [ + 'header' => __('randomizer.goal.options.pedestal'), + 'content' => [ + '¡Consigue los Colgantes del Valor, la Sabiduría y el Poder, y consigue la Trifuerza en el pedestal! Ojo, puede que tengas que aventurarte por todo Hyrule, incluyendo la Torre de Ganon, para poder completar esta aventura.', + ], + ], + [ + 'header' => __('randomizer.goal.options.triforce-hunt'), + 'content' => [ + 'The Triforce has been shattered and scattered into 30 pieces throughout Hyrule! Collect 20 pieces and take them to Sahasrahla to win!', + 'Wait? Who do we take these silly pieces to? Well Murahdahla of course!', + 'Who’s Murahdahla? I hear you ask. Murahdahla is the younger brother of Sahasrahla and Aginah. Back from vacation in Lorule. He has some mystic powers so be sure to have a chat with him in the Castle Courtyard.', + ], + ], + ], + ], + 'tower_open' => [ + 'header' => __('randomizer.tower_open.title'), + 'sections' => [ + [ + 'header' => '0 - 7', + 'content' => [ + 'Pick the number of Crystals required to open the way to Ganon’s Tower.', + ], + ], + [ + 'header' => __('randomizer.tower_open.options.random'), + 'content' => [ + 'This will pick a random value from above for entry into Ganon’s Tower.', + ], + ], + ], + ], + 'ganon_open' => [ + 'header' => __('randomizer.ganon_open.title'), + 'sections' => [ + [ + 'header' => '0 - 7', + 'content' => [ + 'Pick the number of Crystals required to defeat to Ganon.', + ], + ], + [ + 'header' => __('randomizer.ganon_open.options.random'), + 'content' => [ + 'This will pick a random value from above to defeat Ganon.', + ], + ], + ], + ], + 'world_state' => [ + 'header' => __('randomizer.world_state.title'), + 'sections' => [ + [ + 'header' => __('randomizer.world_state.options.standard'), + 'content' => [ + 'Este modo es lo más parecido al juego original. Empiezas en la cama de Link, consigues un arma de tu tío (dependiendo de tus opción para Espadas, explicadas abajo), y rescatas a Zelda antes de continuar con el resto del juego.', + ], + ], + [ + 'header' => __('randomizer.world_state.options.open'), + 'content' => [ + 'Este modo empieza con la opción de empezar en tu casa o en el santuario, y eres libre para explorar. Hay unas cuantas características de este modo a tener en cuenta:', + '
    ' + . '
  • El tío ya está en las cloacas del castillo y tiene un ítem.
  • ' + . '
  • Las salas oscuras no tienen un cono de luz por defecto, ni siquiera las cloacas.
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.world_state.options.inverted'), + 'content' => [ + 'Tired of starting in the Light World and working your way to Ganon on top of Death Mountain? Well have we got the mode for you!', + 'Introducing inverted, the game state where we flip the game on its head just to really mess with things.', + 'This mode is really hard in the beginning so we really don’t suggest it for your first playthrough. Enemies in the Dark World hit like a truck, well a bunch of trucks really, and starting with 3 hearts is enough to get gone in a single hit or two', + 'But what does this all mean? Well we had to make some serious modifications to the game to have Link start in the Dark World and get to the light world to complete the game:', + '
    ' + . '
  • Link’s house is now located in the place that the Bomb shop used to reside
  • ' + . '
  • The Bomb shop has been transported to the light world where Link’s house used to be
  • ' + . '
  • The ' . __('item.MagicMirror') . ' works in the Light World to take you back to the Dark World
  • ' + . '
  • The ' . __('item.OcarinaInactive') . ' only works in the Dark World, but you still have to find a way to activate it in the Light world
  • ' + . '
  • Lots of terrain in the Light World has been modified to allow you to get to those pesky ' . __('item.MagicMirror') . ' locations
  • ' + . '
  • The old man has decided to “get lost” in the Dark World. You’ll still have to return him to his cave in the Light World
  • ' + . '
  • Portals? All the ones you used to see in the Light World will be in the Dark World with the same requirements to use them
  • ' + . '
  • Agahnim has really gotten tired of his place in Hyrule Castle and decided to move on up to the Tower formally known as Ganon’s on Dark Death Mountain. No silly bat barrier to get in, oh and he added some stairs so you can get to East Dark Death Mountain or his place pretty quickly
  • ' + . '
  • Since Agahnim decided to move on up, that means Ganon’s Tower came on down to Hyrule Castle, that center door being in the entrance, you’ll still need the required crystals to enter though
  • ' + . '
  • Ice Palace tore down the wall so you can swim there pretty early now
  • ' + . '
  • Remember a bunny can use the ' . __('item.BookOfMudora') . ' as well as talk to people, and collect items it sees lying on the ground
  • ' + . '
  • The top of Turtle Rock can be accessed by walking on it’s tail
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.world_state.options.retro'), + 'content' => [ + 'Un regreso al primer juego de The Legend of Zelda, ' . __('randomizer.variation.title') . ' ' . __('randomizer.variation.options.retro') . ' nos enlaza incluso más al pasado.', + [ + 'header' => 'Arco de Rupias', + 'content' => [ + 'El arco ya no usa flechas como munición. En su lugar, ¡usa rupias! Cada Flecha de Madera cuesta 10 rupias, mientras que cada Flecha de Plata cuesta 50.', + 'Las Flechas de Madera son independientes del Arco, como las Flechas de Plata; necesitas conseguir tanto el Arco como uno de los dos tipos de flecha para poder usar el Arco.', + 'Las Flechas de Madera ahora son un objeto a conseguir, y deben comprarse una sola vez en una tienda. NO están disponibles en cofres normales o en cualquier sitio fuera de tiendas.', + 'Si encuentras las Flechas de Plata sin haber comprado las Flechas de Madera, solo podrás disparar Flechas de Plata.', + ], + ], + [ + 'header' => 'Tiendas por el Mundo', + 'content' => [ + 'Cinco tiendas de nueve posibles se eligen al azar cuando se genera la ROM para tener nuevos productos. Esto NO incluye la Tienda de Súper Bombas o la Tienda de Pociones de la bruja. La Flecha de Madera estará a la venta por 80 rupias, y habrá Llaves Pequeñas disponibles a 100 rupias la pieza. Las Llaves Pequeñas pueden comprarse múltiples veces.', + ], + ], + [ + 'header' => 'Llaves Pequeñas', + 'content' => [ + 'Las Llaves Pequeñas ya no son específicas a cada mazmorra. Ahora están mezcladas entre el resto de ítems, y pueden encontrarse fuera de mazmorras. Las llaves encontradas en enemigos o bajo vasijas siguen en su sitio.', + 'Diez llaves se quitan de la reserva de objetos en Fácl y Normal; de quitan quince en Difícil, Experto y Locura. Piénsalo con calma antes de usar tus llaves, ¡y recuerda que siempre puedes comprarlas si te quedas atascado!', + 'Llaves Grandes, Mapas, y Brújulas se mantienen específicos a cada mazmorra y no se han randomizado fuera de ellas.', + ], + ], + [ + 'header' => 'Cuevas de Premio', + 'content' => [ + 'Cuatro cuevas con una entrada y casas que no llevan a algún ítem elegidas aleatoriamente llevan a Cuevas de Premio donde los jugadores pueden elegir entre un Contenedor de Corazón o una Poción Azul. Los Contenedores de Corazón no se han movido de la reservas general y bonus de objetos. Aún así, no es posible tener más de 20 corazones a la vez.', + 'Una cueva aleatoria de una sola entrada contiene un misterioso pero familiar hombre viejo con una mejora de espada. Esta mejora existe en lugar de otra en la reserva de objetos.', + ], + ], + ], + ], + + ], + ], + 'entrance_shuffle' => [ + 'header' => __('randomizer.entrance_shuffle.title'), + 'subheader' => 'El Randomizer de Entradas te permite poner el mundo patas arriba y jugar al juego.', + 'sections' => [ + 'none' => [ + 'header' => __('randomizer.entrance_shuffle.options.none'), + 'content' => [ + 'No entrance shuffling is applied.', + ], + ], + 'simple' => [ + 'header' => __('randomizer.entrance_shuffle.options.simple'), + 'content' => [ + 'Mezcla las entradas a mazmorras entre ellas y mantiene todas las mazmorras con 4 entradas en una sola localización, de forma que las mazmorras se intercambian completamente entre ellas.', + 'Aparte de la Montaña de la Muerte en el Mundo de la Luz, los interiores están randomizados pero siguen conectando a los mismos puntos en en mapa. En la Montaña de la Muerte, las entradas están conectadas de forma más libre.', + ], + ], + 'basic' => [ + 'header' => __('randomizer.entrance_shuffle.options.restricted'), + 'content' => [ + 'Utiliza la mezcla de mazmorras de "Simple", pero conecta de forma libre el resto de entradas. Las cuevas y mazmorras con múltiples entradas estarán restringidas al mismo mundo.', + ], + ], + 'full' => [ + 'header' => __('randomizer.entrance_shuffle.options.full'), + 'content' => [ + 'Mezcla entradas de cuevas y mazmorras libremente. Las cuevas y mazmorras con múltiples entradas estarán restringidas al mismo mundo.', + ], + ], + 'crossed' => [ + 'header' => __('randomizer.entrance_shuffle.options.crossed'), + 'content' => [ + 'Mezcla entradas de cuevas y mazmorras libremente, pero las cuevas o mazmorras con las que conecten pueden ir tanto al Mundo de la Luz como al Mundo Oscuro.', + ], + ], + 'insanity' => [ + 'header' => __('randomizer.entrance_shuffle.options.insanity'), + 'content' => [ + 'Separa entradas de sus salidad y las mezcla de forma libre. Las cuevas con una sola entrada en vanilla solo pueden salir por la misma localización en la que se entraron.', + ], + ], + ], + ], + 'bosses' => [ + 'header' => __('randomizer.boss_shuffle.title'), + 'sections' => [ + [ + 'header' => __('randomizer.boss_shuffle.options.none'), + 'content' => [ + 'Bosses will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.simple'), + 'content' => [ + 'The normal number of each boss shuffled in their different locations, so expect to see armos knights, lanmolas, and moldorm twice.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.full'), + 'content' => [ + 'Similar to ' . __('randomizer.boss_shuffle.options.simple') . ', except that 3 bosses are chosen at random to be seen twice.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.random'), + 'content' => [ + 'All bosses chosen at random, you may see any boss multiple times as well as not see a boss at all.', + ], + ], + ], + ], + 'enemy_shuffle' => [ + 'header' => __('randomizer.enemy_shuffle.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_shuffle.options.none'), + 'content' => [ + 'Enemies will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_shuffle.options.shuffled'), + 'content' => [ + 'Enemies are shuffled, Thieves are killable, Tile rooms are not random, Enemies are not random under bushes.', + ], + ], + [ + 'header' => __('randomizer.enemy_shuffle.options.random'), + 'content' => [ + 'Anything goes with enemies.', + ], + ], + ], + ], + 'hints' => [ + 'header' => __('randomizer.hints.title'), + 'content' => [ + 'Enable or disable the hints found on telepathic tiles throughout the world.', + ], + ], + 'difficulty' => [ + 'header' => __('randomizer.difficulty.title'), + 'item_pool' => __('randomizer.item_pool.title'), + 'item_functionality' => __('randomizer.item_functionality.title'), + 'comparison' => [ + 'header' => 'Comparación de Dificultad', + 'maximum_health' => 'Vida Máxima', + 'heart_containers' => 'Contenedores de Corazón', + 'heart_pieces' => 'Piezas de Corazón', + 'maximum_mail' => 'Armadura Máxima', + 'number_in_pool' => '# en Reserva', + 'maximum_sword' => 'Espada Máxima', + 'maximum_shield' => 'Escudo Máximo', + 'shields_store' => 'Puedes Comprar Escudos', + 'maximum_magic' => 'Máxima Capacidad de Magia', + 'number_silvers' => '# de Flechas de Plata', + 'number_silvers_swordless' => '# de Flechas de Plata (Sin Espadas)', + 'number_bottles' => '# de Botellas', + 'number_lamps' => '# de Lámparas', + 'potion_magic' => 'Recuperación de Magia con Botellas', + 'potion_health' => 'Recuperación de Vida con Botellas', + 'bug_net_fairy' => 'Cazamariposas Captura Hadas', + 'powder_bubble' => 'Polvo Mágico en Bubbles', + 'cape_consumption' => 'Ratio de Uso de Magia de la Capa', + 'byrna_invincible' => 'Byrna Da Invencibilidad', + 'stun_boomerang' => 'Bumerán Aturde Enemigos', + 'stun_hookshot' => 'Gancho Aturde Enemigos', + 'capacity_upgrade' => 'Mejoras de Capacidad de Flechas / Bombas', + 'drop_rates' => 'Drop Rates de Enemigos', + 'quarter' => 'Cuarto', + 'half' => 'Medio', + 'normal' => 'Normal', + 'shield_3' => 'Espejo', + 'shield_2' => 'Rojo', + 'shield_1' => 'Pequeño', + 'none' => 'Ninguno', + 'sword_4' => 'Dorada', + 'sword_3' => 'Templada', + 'sword_2' => 'Maestra', + 'mail_3' => 'Roja', + 'mail_2' => 'Azul', + 'mail_1' => 'Verde', + 'fairy' => 'Hada', + 'heart' => 'Corazón', + 'bee' => 'Abejas', + 'yes' => 'Sí', + 'no' => 'No', + 'tooltip' => [ + 'silvers' => 'Las Flechas de Plata solo funcionan en la sala de Ganon.', + 'bottles' => 'Una vez las 4 Botellas se hayan encontrado, el resto de Botellas se convierten en rupias.', + 'potion_magic' => 'Las pociones rellenan 100% de la magia en la Cueva de los Pinchos.', + 'potion_health' => 'Las pociones rellenan 20 corazones en la Cueva de los Pinchos.', + ], + ], + ], + 'weapons' => [ + 'header' => __('randomizer.weapons.title'), + 'sections' => [ + [ + 'header' => __('randomizer.weapons.options.randomized'), + 'content' => [ + 'Todas las mejoras de espada están randomizadas. No empezarás con una espada, y puede que tardes un tiempo en tener una. ¡Las bombas son una buena arma inicial, al igual que arbustos y señales! Usa cualquier ítem que te encuentres para defenderte.', + 'Si esta opción se combina con el Modo Estándar (ver arriba), tu tío te dará encantado uno de los siguientes ítems para asegurar que puedes completar la secuencia de escape:', + '
    ' + . '
  • Mejora de espada (sí, sigue siendo posible)
  • ' + . '
  • Martillo
  • ' + . '
  • Arco + Repuesto Entero de Flechas
  • ' + . '
  • Repuesto Entero de Bombas
  • ' + . '
  • Cetro de fuego + Relleno Entero de Magia
  • ' + . '
  • Vara de Somaria + Relleno Entero de Magia
  • ' + . '
  • Vara of Byrna + Relleno Entero de Magia
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.weapons.options.assured'), + 'content' => [ + 'Link starts with a sword in his hands, prepared to take on the world.', + ], + ], + [ + 'header' => __('randomizer.weapons.options.vanilla'), + 'content' => [ + 'Link will be able to find the four swords in their regular locations.', + ], + ], + [ + 'header' => __('randomizer.weapons.options.swordless'), + 'content' => [ + 'Todas las espadas han desaparecido del juego. Ya que el juego espera uque tengas una espada, para este Modo Sin Espadas se hacen los siguientes cambios:', + '
    ' + . '
  • Las espadas se cambian por cuatro copias de 20 rupias (una rupia verde con un "20" al lado).
  • ' + . '
  • La barrera que bloquea el acceso a la Torre de Agahnim puede romperse con el Martillo.
  • ' + . '
  • Las cortinas bloqueando el progreso en la Torre de Agahnim están pre-abiertas, al igual que las enredaderas en Bosque de Osamentas.
  • ' + . '
  • Los medallones solo se pueden usar para abrir la Gruta de Las Marismas o Roca Tortuga, o para progresar en el Palacio de Hielo. Normalmente requerirían una espada para usarse.
  • ' + . '
  • Ganon ahora recibe daño del Martillo.
  • ' + . '
  • Las Flechas de Plata están disponibles en todas las dificultades.
  • ' + . '
  • Las tabletas de Ether y Bombos requieren el Martillo y el Libro de Mudora.
  • ' + . '
', + ], + ], + ], + ], + 'enemy_health' => [ + 'header' => __('randomizer.enemy_health.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_health.options.default'), + 'content' => [ + 'Enemy Health will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.easy'), + 'content' => [ + 'All enemy health will be in the 1-4 hp range.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.hard'), + 'content' => [ + 'All enemy health will be in the 2-15 hp range.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.expert'), + 'content' => [ + 'All enemy health will be in the 2-30 hp range.', + ], + ], + ], + ], + 'enemy_damage' => [ + 'header' => __('randomizer.enemy_damage.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_damage.options.default'), + 'content' => [ + 'Enemy damage will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_damage.options.shuffled'), + 'content' => [ + 'The damage enemies do will be shuffled.', + ], + ], + [ + 'header' => __('randomizer.enemy_damage.options.random'), + 'content' => [ + 'The damage enemies do will be completely randomized.', + ], + ], + ], + ], + 'post_generation' => [ + 'header' => 'Post Generation (cosmetic)', + 'cards' => [ + 'heart_speed' => [ + 'header' => __('rom.settings.heart_speed'), + 'content' => [ + 'Change the heart beep speed when Link is low on health.', + ], + ], + 'play_as' => [ + 'header' => __('rom.settings.play_as'), + 'content' => [ + 'You may choose a new sprite for Link and enjoy Hyrule as this character.', + ], + ], + 'menu_speed' => [ + 'header' => __('rom.settings.menu_speed'), + 'content' => [ + 'Only allowed in some configurations, When available this will allow you to set the speed of the menu opening and closing.', + ], + ], + 'heart_color' => [ + 'header' => __('rom.settings.heart_color'), + 'content' => [ + 'For players with color-blindness, we have a few options so they know how much health they have.', + ], + ], + 'music' => [ + 'header' => __('rom.settings.music'), + 'content' => [ + 'Enable or disable the background music so you can listen to your our sweet tracks.', + ], + ], + 'quickswap' => [ + 'header' => __('rom.settings.quickswap'), + 'content' => [ + 'Only allowed in some configurations, When available this will allow you to use L and R buttons to change items without opening the menu.', + ], + ], + 'palette_shuffle' => [ + 'header' => __('rom.settings.palette_shuffle'), + 'content' => [ + 'Shuffles the colors of the game around, an Enemizer staple.', + ], + ], + ], + ], + 'item_pool' => 'Reserva de Objetos', + ], ]; diff --git a/resources/lang/es/races.php b/resources/lang/es/races.php index e9dfeb29c..9b9a7774b 100644 --- a/resources/lang/es/races.php +++ b/resources/lang/es/races.php @@ -1,73 +1,73 @@ 'Partidas Organizadas', - 'cards' => [ - 'races' => [ - 'header' => 'Carreras', - 'sections' => [ - [ - 'header' => '', - 'content' => [ - 'La mayoría de carreras se hacen a través de SpeedRacing.tv o SpeedRunsLive.com. ¡No olvides entrar a ellas para informarte sobre cómo unirte a la acción!', - ], - ], - [ - 'header' => 'Carrera de Modo Estándar semanal, Sábados a las 3pm EST', - 'content' => [ - 'El evento principal de la comunidad, ¡esta carrera semanal tiene muchos participantes!', - ], - ], - [ - 'header' => 'Carrera de Modo Abierto semanal, Domingos a las 5pm EST', - 'content' => [ - 'Únete cada domingo para otra popular carrera semanal de la comunidad.', - ], - ], - [ - 'header' => 'La Carrera Nocturna de la Comunidad, 10pm EST', - 'content' => [ - '¡También tenemos una carrera nocturna para cualquiera que quiera jugar cada día!', - ], - ], - [ - 'header' => 'Carreras Espontáneas', - 'content' => [ - '¿Las carreras programadas no encajan con tu horario? ¿Buscas una carrera usando opciones poco comunes? ¡Únete a una carrera espontánea! Puedes encontrar jugadores dispuestos a cualquier hora del día. ¡Entra al canal #race-planning en nuestro Discord!', - ], - ], - ], - ], - 'watch' => [ - 'header' => 'Ver', - 'content' => [ - 'Con todo lo que va pasando, ¡siempre hay una carrera que ver! ¡Sigue estos canales para no perderte ningún enfrentamiento!', - ], - ], - 'network' => [ - 'header' => 'Comunidades de Carreras', - 'content' => [ - 'Las carreras típicamente se hacen en comunidades de carreras. Estas páginas facilitan organizer carreras, añadir un temporizador oficial, y hacen encontrar carreras fácil tanto para jugadores como para espectadores.', - '¡No olvides mirar tanto SpeedRunsLive.com como SpeedRacing.tv para más información!', - ], - ], - 'tournament' => [ - 'header' => 'Torneos', - 'sections' => [ - [ - 'header' => '', - 'content' => [ - '¡Únete para excitante acción en torneos con comentario experto junto a juego de alto nivel!', - ], - ], - [ - 'header' => 'Torneo Invitacional Bianual', - 'content' => [ - '¡Presencia los mejores jugadores competir por el trofeo! ¿Crees que tienes lo que hay que tener para enfrentarte cara a cara con los mejores? ¡Entra a Discord y estate atento a las carreras de calificación!', - 'El Invitacional de Primavera va de marzo a junio.', - 'El Invitacional de Otoño va de septiembre a diciembre.', - ], - ], - ], - ], - ], + 'header' => 'Partidas Organizadas', + 'cards' => [ + 'races' => [ + 'header' => 'Carreras', + 'sections' => [ + [ + 'header' => '', + 'content' => [ + 'La mayoría de carreras se hacen a través de SpeedRacing.tv o SpeedRunsLive.com. ¡No olvides entrar a ellas para informarte sobre cómo unirte a la acción!', + ], + ], + [ + 'header' => 'Carrera de Modo Estándar semanal, Sábados a las 3pm EST', + 'content' => [ + 'El evento principal de la comunidad, ¡esta carrera semanal tiene muchos participantes!', + ], + ], + [ + 'header' => 'Carrera de Modo Abierto semanal, Domingos a las 5pm EST', + 'content' => [ + 'Únete cada domingo para otra popular carrera semanal de la comunidad.', + ], + ], + [ + 'header' => 'La Carrera Nocturna de la Comunidad, 10pm EST', + 'content' => [ + '¡También tenemos una carrera nocturna para cualquiera que quiera jugar cada día!', + ], + ], + [ + 'header' => 'Carreras Espontáneas', + 'content' => [ + '¿Las carreras programadas no encajan con tu horario? ¿Buscas una carrera usando opciones poco comunes? ¡Únete a una carrera espontánea! Puedes encontrar jugadores dispuestos a cualquier hora del día. ¡Entra al canal #race-planning en nuestro Discord!', + ], + ], + ], + ], + 'watch' => [ + 'header' => 'Ver', + 'content' => [ + 'Con todo lo que va pasando, ¡siempre hay una carrera que ver! ¡Sigue estos canales para no perderte ningún enfrentamiento!', + ], + ], + 'network' => [ + 'header' => 'Comunidades de Carreras', + 'content' => [ + 'Las carreras típicamente se hacen en comunidades de carreras. Estas páginas facilitan organizer carreras, añadir un temporizador oficial, y hacen encontrar carreras fácil tanto para jugadores como para espectadores.', + '¡No olvides mirar tanto SpeedRunsLive.com como SpeedRacing.tv para más información!', + ], + ], + 'tournament' => [ + 'header' => 'Torneos', + 'sections' => [ + [ + 'header' => '', + 'content' => [ + '¡Únete para excitante acción en torneos con comentario experto junto a juego de alto nivel!', + ], + ], + [ + 'header' => 'Torneo Invitacional Bianual', + 'content' => [ + '¡Presencia los mejores jugadores competir por el trofeo! ¿Crees que tienes lo que hay que tener para enfrentarte cara a cara con los mejores? ¡Entra a Discord y estate atento a las carreras de calificación!', + 'El Invitacional de Primavera va de marzo a junio.', + 'El Invitacional de Otoño va de septiembre a diciembre.', + ], + ], + ], + ], + ], ]; diff --git a/resources/lang/es/randomizer.php b/resources/lang/es/randomizer.php index 7381ae51c..0459dfe20 100644 --- a/resources/lang/es/randomizer.php +++ b/resources/lang/es/randomizer.php @@ -1,84 +1,214 @@ 'Randomizer de Objetos', - 'switch' => [ - 'entrance' => 'Cambiar a randomizer de entradas', - ], - 'difficulty' => [ - 'title' => 'Dificultad', - 'options' => [ - 'easy' => 'Fácil', - 'normal' => 'Normal', - 'hard' => 'Difícil', - 'expert' => 'Experto', - 'insane' => 'Locura', - ], - ], - 'difficulty_adjustments' => [ - 'title' => 'Dificultad “Fixes”', - 'options' => [ - -1 => 'Fácil', - 0 => 'Normal', - 1 => 'Difícil', - 2 => 'Experto', - 3 => 'Locura', - ], - ], - 'goal' => [ - 'title' => 'Objetivo', - 'options' => [ - 'ganon' => 'Derrotar a Ganon', - 'dungeons' => 'Todas las mazmorras', - 'pedestal' => 'Pedestal de la Espada Maestra', - 'triforce-hunt' => 'Piezas de la Trifuerza', - ], - ], - 'logic' => [ - 'title' => 'Lógica', - 'options' => [ - 'NoGlitches' => 'Sin Glitches', - 'OverworldGlitches' => 'Glitches de la Superfície', - 'MajorGlitches' => 'Glitches Mayores', - 'None' => 'Ninguna (tranquilo, todo está controlado)', - ], - 'glitch_warning' => 'Esta Lógica require conocimiento de Glithes Mayores**', - ], - 'mode' => [ - 'title' => 'Tipo', - 'options' => [ - 'standard' => 'Estándar', - 'open' => 'Abierto', - 'inverted' => 'Inverso', - ], - ], - 'weapons' => [ - 'title' => 'Espadas', - 'options' => [ - 'randomized' => 'Randomizadas', - 'uncle' => 'Tío Asegurado', - 'swordless' => 'Sin Espadas', - ], - ], - 'variation' => [ - 'title' => 'Variación', - 'options' => [ - 'none' => 'Ninguna', - 'timed-race' => 'Carrera cronometrada', - 'timed-ohko' => 'Muerte Súbita cronometrada', - 'ohko' => 'Muerte Súbita', - 'key-sanity' => 'Keysanity', - 'retro' => 'Retro', - ], - ], - 'generate' => [ - 'race' => 'Generar ROM para carreras', - 'race_warning' => 'sin spoilers', - 'spoiler_race' => 'Generar ROM para carreras (con spoilers)', - 'casual' => 'Generar ROM', - ], - 'details' => [ - 'title' => 'Detalles del juego', - 'save_spoiler' => 'Guardar spoiler', - 'save_rom' => 'Guardar ROM', - ], + 'title' => 'Randomizer', + 'preset' => [ + 'title' => 'Select Preset', + 'customize' => 'Customize', + 'options' => [ + 'default' => 'Default', + 'beginner' => 'Beginner', + 'veetorp' => 'OWG (Veetorp’s Favorite)', + 'crosskeys' => 'Crosskeys', + 'quick' => 'Super Quick', + 'nightmare' => 'Nightmare', + 'custom' => 'Custom', + ], + ], + 'placement' => [ + 'title' => 'Item Placement', + ], + 'item_placement' => [ + 'title' => 'Item Placement', + 'options' => [ + 'basic' => 'Basic', + 'advanced' => 'Advanced', + ], + ], + 'dungeon_items' => [ + 'title' => 'Dungeon Items', + 'options' => [ + 'standard' => 'Standard', + 'mc' => 'Maps/Compasses', + 'mcs' => 'Maps/Compasses/Small Keys', + 'full' => 'Keysanity', + ], + ], + 'accessibility' => [ + 'title' => 'Accessibility', + 'options' => [ + 'items' => '100% Inventory', + 'locations' => '100% Locations', + 'none' => 'Not Guaranteed', + ], + ], + 'glitches_required' => [ + 'title' => 'Glitches Required', + 'options' => [ + 'none' => 'None', + 'overworld_glitches' => 'Glitches de la Superfície', + 'major_glitches' => 'Glitches Mayore', + 'no_logic' => 'No Logic', + ], + 'glitch_warning' => 'Esta Lógica require conocimiento de Glithes Mayores**', + ], + 'goal' => [ + 'title' => 'Objetivo', + 'options' => [ + 'ganon' => 'Derrotar a Ganon', + 'fast_ganon' => 'Fast Ganon', + 'dungeons' => 'Todas las mazmorras', + 'pedestal' => 'Pedestal de la Espada Maestra', + 'triforce-hunt' => 'Piezas de la Trifuerza', + ], + ], + 'tower_open' => [ + 'title' => 'Open Tower', + 'options' => [ + '0' => '0 Crystals', + '1' => '1 Crystal', + '2' => '2 Crystals', + '3' => '3 Crystals', + '4' => '4 Crystals', + '5' => '5 Crystals', + '6' => '6 Crystals', + '7' => '7 Crystals', + 'random' => 'Random' + ], + ], + 'ganon_open' => [ + 'title' => 'Ganon Vulnerable', + 'options' => [ + '0' => '0 Crystals', + '1' => '1 Crystal', + '2' => '2 Crystals', + '3' => '3 Crystals', + '4' => '4 Crystals', + '5' => '5 Crystals', + '6' => '6 Crystals', + '7' => '7 Crystals', + 'random' => 'Random' + ], + ], + 'gameplay' => [ + 'title' => 'Gameplay', + ], + "world_state" => [ + 'title' => 'World State', + 'options' => [ + 'standard' => 'Estándar', + 'open' => 'Abierto', + 'inverted' => 'Inverso', + 'retro' => 'Retro', + ], + ], + "entrance_shuffle" => [ + 'title' => 'Entrance Shuffle', + 'options' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'restricted' => 'Restringido', + 'full' => 'Completo', + 'crossed' => 'Cruzado', + 'insanity' => 'Locura', + ], + ], + "boss_shuffle" => [ + 'title' => 'Boss Shuffle', + 'options' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'full' => 'Full', + 'random' => 'Random', + ], + ], + "enemy_shuffle" => [ + 'title' => 'Enemy Shuffle', + 'options' => [ + 'none' => 'None', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], +], +"hints" => [ + 'title' => 'Hints', + 'options' => [ + 'on' => 'On', + 'off' => 'Off', + ], +], + 'weapons' => [ + 'title' => 'Espadas', + 'options' => [ + 'randomized' => 'Randomizadas', + 'assured' => 'Assured', + 'vanilla' => 'Vanilla', + 'swordless' => 'Sin Espadas', + ], + ], + 'item_pool' => [ + 'title' => 'Item Pool', + 'options' => [ + 'easy' => 'Fácil', + 'normal' => 'Normal', + 'hard' => 'Difícil', + 'expert' => 'Experto', + 'crowd_control' => 'Crowd Control', + ], + 'crowd_control_warning' => '* This setting is meant to be used with the Crowd Control Twitch extension. find out more: https://crowdcontrol.live/', + ], + 'item_functionality' => [ + 'title' => 'Item Functionality', + 'options' => [ + 'easy' => 'Fácil', + 'normal' => 'Normal', + 'hard' => 'Difícil', + 'expert' => 'Experto', + ], + ], + 'enemy_damage' => [ + 'title' => 'Enemy Damage', + 'options' => [ + 'default' => 'Default', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + ], + 'enemy_health' => [ + 'title' => 'Enemy Health', + 'options' => [ + 'default' => 'Default', + 'easy' => 'Fácil', + 'hard' => 'Difícil', + 'expert' => 'Experto', + ], + ], + 'generate' => [ + 'race' => 'Generar ROM para carreras', + 'race_warning' => 'sin spoilers', + 'spoiler_race' => 'Generar ROM para carreras (con spoilers)', + 'back' => 'Change Settings', + 'regenerate' => 'Generate Again', + 'regenerate_tooltip' => 'Generate new game with same settings', + 'generating' => 'Generating...', + ], + 'details' => [ + 'title' => 'Detalles del juego', + 'save_spoiler' => 'Guardar spoiler', + 'save_rom' => 'Guardar ROM', + ], + // depricated + 'variation' => [ + 'title' => 'Variación', + ], + 'difficulty' => [ + 'title' => 'Dificultad', + 'options' => [ + 'easy' => 'Fácil', + 'normal' => 'Normal', + 'hard' => 'Difícil', + 'expert' => 'Experto', + 'insane' => 'Locura', + 'crowdControl' => 'Crowd Control', + ], + ], ]; diff --git a/resources/lang/es/resources.php b/resources/lang/es/resources.php index 4176f5af4..a1b23770c 100644 --- a/resources/lang/es/resources.php +++ b/resources/lang/es/resources.php @@ -1,95 +1,95 @@ 'Recursos', - 'cards' => [ - 'discord' => [ - 'header' => 'Discord', - 'content' => [ - '', - '¡Únete a nuestra comunidad de Discord! Tenemos gente amistosa y dispuesta a ayudar, noticias de eventos de la comunidad, actualizaciones de ALttP: Randomizer, guías, consejos, trucos, ¡y más! ¡Ven a decir hola y entra al canal #resources!', - ], - ], - 'learn' => [ - 'header' => 'Vídeos para Aprender a Jugar', - 'content' => [ - '', - '¡Mira nuestras guías sobre rutas, tutoriales de glitches, anuncios de nuevas actualizaciones, momentos destacados de torneos, y más! ¡Perfecto tanto para nuevos jugadores buscando aprender como para runners con experiencia buscando refinar sus habilidades! (Tutoriales en inglés)', - ], - ], - 'external' => [ - 'header' => 'Recursos Externos (en inglés)', - 'content' => [ - '', - ], - ], - 'pitfalls' => [ - 'header' => 'Errores Comunes', - 'content' => [ - '
    ' - . '
  • Puedes usar el botón Y para cambiar entre Flechas de Plata y Flechas Normales, los Bumeranes Rojo y Azul, la Seta con los Polvos Mágicos, y la Pala con la Flauta.
  • ' - . '
  • En el Mundo Oscuro, puedes usar el Gancho para atravesar el río al norta de la pirámide. ¡Busca una flecha hecha con hierba!
  • ' - . '
  • Si te encuentras en la cueva del rebotador con la Capa y sin el Gancho, intenta caminar por la esquina superior izquierda del agujero. ¡No necesitas el Gancho!
  • ' - . '
  • La barrera de Agahnim puede atravesarse con la Capa Mágica o destruída con una espada mejorada.
  • ' - . '
  • Si tienes el Espejo Mágico, el Palacio del Desierto puede entrarse desde la Gruta de las Marismas sin necesidad de tener el Libro de Mudora.
  • ' - . '
  • El medallón Bombos derrite cosas como lo haría el Cetro de Fuego, lo cual es útil en el Palacio de Hielo.
  • ' - . '
  • Puedes cruzar agujeros pequeños a base de rebotar en paredes u objetos con las Botas de Pegaso.
  • ' - . '
  • Sahasrahla te da su ítem cuando le hablas una vez tengas el Colgante del Valor.
  • ' - . '
  • La Súper Bomba aparece cuando consigues los cristales 5 y 6.
  • ' - . '
  • El Herrero y el Cofre Morado seguirán contigo aunque guardes y salgas.
  • ' - . '
  • Nunca estás obligado a atravesar una sala oscura; la lámpara estará disponible para iluminarte, ¡ve a buscarla!
  • ' - . '
  • Algunas llaves podrían no ser accesibles si no son necesarias para acabar el juego. Por ejemplo, la Llave Grande del Bosque de Osamentas podría estar en el cofre grande.
  • ' - . '
', - ], - ], - 'changes' => [ - 'header' => 'Diferencias', - 'sections' => [ - [ - 'header' => '¿Qué ha sido randomizado?', - 'content' => [ - '
    ' - . '
  • Casi todas las localizaciones únicas para ítems
  • ' - . '
  • Colgantes y cristales (consulta tu mapa)
  • ' - . '
  • Los medallones necesarios para entrar a la Gruta de las Marismas y Roca Tortuga
  • ' - . '
  • Drops de enemigos y otros premios (p.ej. árboles)
  • ' - . '
', - ], - ], - [ - 'header' => '¿Qué se mantiene igual?', - 'content' => [ - '
    ' - . '
  • Todas las tiendas en Hyrule
  • ' - . '
  • El minijuego de tiro con arco y varios minijuegos de encontrar rupias en cofres
  • ' - . '
  • Llaves pequeñas debajo de vasijas o en posesión de enemigos
  • ' - . '
', - ], - ], - [ - 'header' => '¿Qué ha cambiado del juego original?', - 'content' => [ - 'Hay algunos cambios respecto al juego original para mejorar el gameplay y prevenir que puedas quedarte atascado. Se usa la versión 1.0 japonesa como base para la ROM porque permite usar algunos glitches exclusivos para algunos modos de juego avanzados.', - '
    ' - . '
  • No se necesita la Lámpara para empujar la estantería durante el prólogo.
  • ' - . '
  • Se puede ver en las salas oscuras de las Cloacas sin la Lámpara (excepto en modo Abierto).
  • ' - . '
  • Puedes cambiar entre ítems que usan el mismo espacio en el inventario pulsando Y. Por ejemplo, ahora puedes tener tanto la Pala como la Flauta y cambiar entre ambos a placer.
  • ' - . '
  • El submenú para las Botellas no se abre automáticamente. Puede abrirse pulsando X o cambiar entre las botellas conseguidas con Y.
  • ' - . '
  • Los niveles de agua en el Palacio del Pantano siempre volverán a estar secos al salir de su zona en la superfície. ¡Esto previene inundar llaves accidentalmente y quedarse atascado!
  • ' - . '
  • La pantalla para elegir partida tiene una línea de símbolos aleatorios encima. Esto es un identificador único para cada semilla generada para asegurarse que todos los corredores tienen la ROM correcta. No tienen otro significado.
  • ' - . '
  • Las Hadas en la Pirámide y la Cascada no mejoran tus ítems. En su lugar las cuevas contienen dos cofres, cada uno en lugar de una de las mejoras que se han añadido al resto de objetos.
  • ' - . '
  • Conseguir el ítem del minijuego de cavar está garantizado en los primeros 30 intentos.
  • ' - . '
  • Conseguir el ítem del minijuego de cofres en la Aldea de los Bandidos está garantizado en el primer intento (puede ser 1r o 2o cofre).
  • ' - . '
', - ], - ], - ], + 'header' => 'Recursos', + 'cards' => [ + 'discord' => [ + 'header' => 'Discord', + 'content' => [ + '', + '¡Únete a nuestra comunidad de Discord! Tenemos gente amistosa y dispuesta a ayudar, noticias de eventos de la comunidad, actualizaciones de ALttP: Randomizer, guías, consejos, trucos, ¡y más! ¡Ven a decir hola y entra al canal #resources!', + ], + ], + 'learn' => [ + 'header' => 'Vídeos para Aprender a Jugar', + 'content' => [ + '', + '¡Mira nuestras guías sobre rutas, tutoriales de glitches, anuncios de nuevas actualizaciones, momentos destacados de torneos, y más! ¡Perfecto tanto para nuevos jugadores buscando aprender como para runners con experiencia buscando refinar sus habilidades! (Tutoriales en inglés)', + ], + ], + 'external' => [ + 'header' => 'Recursos Externos (en inglés)', + 'content' => [ + '', + ], + ], + 'pitfalls' => [ + 'header' => 'Errores Comunes', + 'content' => [ + '
    ' + . '
  • Puedes usar el botón Y para cambiar entre Flechas de Plata y Flechas Normales, los Bumeranes Rojo y Azul, la Seta con los Polvos Mágicos, y la Pala con la Flauta.
  • ' + . '
  • En el Mundo Oscuro, puedes usar el Gancho para atravesar el río al norta de la pirámide. ¡Busca una flecha hecha con hierba!
  • ' + . '
  • Si te encuentras en la cueva del rebotador con la Capa y sin el Gancho, intenta caminar por la esquina superior izquierda del agujero. ¡No necesitas el Gancho!
  • ' + . '
  • La barrera de Agahnim puede atravesarse con la Capa Mágica o destruída con una espada mejorada.
  • ' + . '
  • Si tienes el Espejo Mágico, el Palacio del Desierto puede entrarse desde la Gruta de las Marismas sin necesidad de tener el Libro de Mudora.
  • ' + . '
  • El medallón Bombos derrite cosas como lo haría el Cetro de Fuego, lo cual es útil en el Palacio de Hielo.
  • ' + . '
  • Puedes cruzar agujeros pequeños a base de rebotar en paredes u objetos con las Botas de Pegaso.
  • ' + . '
  • Sahasrahla te da su ítem cuando le hablas una vez tengas el Colgante del Valor.
  • ' + . '
  • La Súper Bomba aparece cuando consigues los cristales 5 y 6.
  • ' + . '
  • El Herrero y el Cofre Morado seguirán contigo aunque guardes y salgas.
  • ' + . '
  • Nunca estás obligado a atravesar una sala oscura; la lámpara estará disponible para iluminarte, ¡ve a buscarla!
  • ' + . '
  • Algunas llaves podrían no ser accesibles si no son necesarias para acabar el juego. Por ejemplo, la Llave Grande del Bosque de Osamentas podría estar en el cofre grande.
  • ' + . '
', + ], + ], + 'changes' => [ + 'header' => 'Diferencias', + 'sections' => [ + [ + 'header' => '¿Qué ha sido randomizado?', + 'content' => [ + '
    ' + . '
  • Casi todas las localizaciones únicas para ítems
  • ' + . '
  • Colgantes y cristales (consulta tu mapa)
  • ' + . '
  • Los medallones necesarios para entrar a la Gruta de las Marismas y Roca Tortuga
  • ' + . '
  • Drops de enemigos y otros premios (p.ej. árboles)
  • ' + . '
', + ], + ], + [ + 'header' => '¿Qué se mantiene igual?', + 'content' => [ + '
    ' + . '
  • Todas las tiendas en Hyrule
  • ' + . '
  • El minijuego de tiro con arco y varios minijuegos de encontrar rupias en cofres
  • ' + . '
  • Llaves pequeñas debajo de vasijas o en posesión de enemigos
  • ' + . '
', + ], + ], + [ + 'header' => '¿Qué ha cambiado del juego original?', + 'content' => [ + 'Hay algunos cambios respecto al juego original para mejorar el gameplay y prevenir que puedas quedarte atascado. Se usa la versión 1.0 japonesa como base para la ROM porque permite usar algunos glitches exclusivos para algunos modos de juego avanzados.', + '
    ' + . '
  • No se necesita la Lámpara para empujar la estantería durante el prólogo.
  • ' + . '
  • Se puede ver en las salas oscuras de las Cloacas sin la Lámpara (excepto en modo Abierto).
  • ' + . '
  • Puedes cambiar entre ítems que usan el mismo espacio en el inventario pulsando Y. Por ejemplo, ahora puedes tener tanto la Pala como la Flauta y cambiar entre ambos a placer.
  • ' + . '
  • El submenú para las Botellas no se abre automáticamente. Puede abrirse pulsando X o cambiar entre las botellas conseguidas con Y.
  • ' + . '
  • Los niveles de agua en el Palacio del Pantano siempre volverán a estar secos al salir de su zona en la superfície. ¡Esto previene inundar llaves accidentalmente y quedarse atascado!
  • ' + . '
  • La pantalla para elegir partida tiene una línea de símbolos aleatorios encima. Esto es un identificador único para cada semilla generada para asegurarse que todos los corredores tienen la ROM correcta. No tienen otro significado.
  • ' + . '
  • Las Hadas en la Pirámide y la Cascada no mejoran tus ítems. En su lugar las cuevas contienen dos cofres, cada uno en lugar de una de las mejoras que se han añadido al resto de objetos.
  • ' + . '
  • Conseguir el ítem del minijuego de cavar está garantizado en los primeros 30 intentos.
  • ' + . '
  • Conseguir el ítem del minijuego de cofres en la Aldea de los Bandidos está garantizado en el primer intento (puede ser 1r o 2o cofre).
  • ' + . '
', + ], + ], + ], - ], - ], + ], + ], ]; diff --git a/resources/lang/es/rom.php b/resources/lang/es/rom.php index 2f5192c48..883e03683 100644 --- a/resources/lang/es/rom.php +++ b/resources/lang/es/rom.php @@ -1,56 +1,58 @@ [ - 'title' => 'Empezar a Jugar', - 'file_select' => 'Selecciona archivo ROM', - 'content' => '
    ' - . '
  1. Selecciona tu archivo ROM y cárgalo en tu navegador (Por favor, usa una ROM Zelda no Densetsu: Kamigami no Triforce v1.0 con extensión .smc o .sfc)
  2. ' - . '
  3. Selecciona las ' . __('navigation.options') . ' para cómo quieres que tu juego sea randomizado
  4. ' - . '
  5. Haz click en ' . __('randomizer.generate.casual') . '
  6. ' - . '
  7. Guarda tu ROM y ponte a jugar
  8. ' - . '
', - ], - 'info' => [ - 'logic' => __('randomizer.logic.title'), - 'build' => 'Build de la ROM', - 'difficulty' => __('randomizer.difficulty.title'), - 'variation' => __('randomizer.variation.title'), - 'shuffle' => __('entrance.shuffle.title'), - 'mode' => __('randomizer.mode.title'), - 'weapons' => __('randomizer.weapons.title'), - 'goal' => __('randomizer.goal.title'), - 'permalink' => 'Enlace permanente', - 'special' => 'Especial', - 'notes' => 'Notas', - 'generated' => 'Creada', - ], - 'settings' => [ - 'heart_speed' => 'Velocidad de Corazones', - 'heart_speeds' => [ - 'off' => 'Desactivado', - 'double' => 'Velocidad Doble', - 'normal' => 'Velocidad Normal', - 'half' => 'Media Velocidad', - 'quarter' => 'Cuarto de Velocidad', - ], - 'menu_speed' => 'Velocidad de Menú', - 'menu_speeds' => [ - 'instant' => 'Instantáneo', - 'fast' => 'Rápido', - 'normal' => 'Normal', - 'slow' => 'Lento', - ], - 'heart_color' => 'Color de Corazones', - 'heart_colors' => [ - 'blue' => 'Azul', - 'green' => 'Verde', - 'red' => 'Rojo', - 'yellow' => 'Amarillo', - ], - 'play_as' => 'Jugar Como', - 'music' => 'Música de fondo', - 'music_info' => '(poner en "No" para soporte con MSU-1)', - 'quickswap' => 'Cambio Rápido de Objetos', - 'race_warning' => 'No funciona en ROMs para carreras', - ], + 'loader' => [ + 'title' => 'Empezar a Jugar', + 'file_select' => 'Selecciona archivo ROM', + 'content' => '
    ' + . '
  1. Selecciona tu archivo ROM y cárgalo en tu navegador (Por favor, usa una ROM Zelda no Densetsu: Kamigami no Triforce v1.0 con extensión .smc o .sfc)
  2. ' + . '
  3. Selecciona las ' . __('navigation.options') . ' para cómo quieres que tu juego sea randomizado
  4. ' + . '
  5. Haz click en ' . __('randomizer.generate.race') . '
  6. ' + . '
  7. Guarda tu ROM y ponte a jugar
  8. ' + . '
', + ], + 'info' => [ + 'spoilerwarning' => 'ADVERTENCIA: El generador de este juego a visto el registro de spoiler.', + 'logic' => __('randomizer.glitches_required.title'), + 'build' => 'Build de la ROM', + 'difficulty' => __('randomizer.difficulty.title'), + 'variation' => __('randomizer.variation.title'), + 'shuffle' => __('entrance.shuffle.title'), + 'mode' => __('randomizer.world_state.title'), + 'weapons' => __('randomizer.weapons.title'), + 'goal' => __('randomizer.goal.title'), + 'permalink' => 'Enlace permanente', + 'special' => 'Especial', + 'notes' => 'Notas', + 'generated' => 'Creada', + ], + 'settings' => [ + 'heart_speed' => 'Velocidad de Corazones', + 'heart_speeds' => [ + 'off' => 'Desactivado', + 'double' => 'Velocidad Doble', + 'normal' => 'Velocidad Normal', + 'half' => 'Media Velocidad', + 'quarter' => 'Cuarto de Velocidad', + ], + 'menu_speed' => 'Velocidad de Menú', + 'menu_speeds' => [ + 'instant' => 'Instantáneo', + 'fast' => 'Rápido', + 'normal' => 'Normal', + 'slow' => 'Lento', + ], + 'heart_color' => 'Color de Corazones', + 'heart_colors' => [ + 'blue' => 'Azul', + 'green' => 'Verde', + 'red' => 'Rojo', + 'yellow' => 'Amarillo', + ], + 'play_as' => 'Jugar Como', + 'music' => 'Música de fondo', + 'music_info' => '(poner en "No" para soporte con MSU-1)', + 'quickswap' => 'Cambio Rápido de Objetos', + 'palette_shuffle' => 'Palette Shuffle', + 'race_warning' => 'No funciona en ROMs para carreras', + ], ]; diff --git a/resources/lang/es/start.php b/resources/lang/es/start.php index c0b003345..2e9bc2afd 100644 --- a/resources/lang/es/start.php +++ b/resources/lang/es/start.php @@ -1,53 +1,53 @@ '¡Comienza tu Aventura!', - 'subheader' => '¿Quieres probar tus habilidades en un Hyrule aleatorio? ¡Has entrado al sitio adecuado!', - 'cards' => [ - 'discord' => [ - 'header' => '1. Únete a nuestra comunidad de Discord', - 'content' => [ - '', - '¡Entra a nuestra comunidad de Discord! ¡Tenemos gente amistosa y dispuesta a ayudar, noticias de eventos de la comunidad, actualizaciones de ALttP: Randomizer, guías, consejos, trucos, ¡y más! ¡Ven a decir hola!', - ] - ], - 'rom' => [ - 'header' => '2. Consigue la ROM', - 'content' => [ - 'Necesitarás la ROM base. Debería ser una ROM Zelda no Densetsu: Kamigami no Triforce v1.0. No te preocupes si no puedes leer japonés, el proceso de parcheado pone textos en inglés manteniendo los glitches únicos de la versión original intactos.', - 'Si encuentras algún problema, ¡pregunta en Discord!', - ] - ], - 'randomize' => [ - 'header' => '3. Elige las Opciones de tu Juego', - 'content' => [ - 'Ve a ' . __('navigation.randomizer') . ' y proporciona tu ROM. La siguiente pantalla enseñará una variedad de opciones de juego. Para tus primeras partidas, recomendamos cambiar “' . __('randomizer.difficulty.title') . '” a “' . __('randomizer.difficulty.options.easy') . '” y dejar el resto como está. Haz click entonces en “' . __('randomizer.generate.casual') . '” y conseguirás un fresco nuevo juego randomizado!', - 'Para una guía en profundidad de todas las opciones disponibles, puedes entrar aquí.', - ] - ], - 'emulator' => [ - 'header' => '4. Consigue una Forma de Jugar', - 'content' => [ - 'Primero, necesitarás algo donde jugar tu nuevo y fresco juego. Recomendamos usar un emulador. Un emulador es un programa que replica de forma fiel el hardware de una SNES, permitiendo que puedas jugar juegos de SNES en tu ordenador. Puedes conseguir el emulador que recomendamos, SNES9x, en su página web.', - 'Aunque puedes jugar usando solo tu teclado, un mando te dará una mejor experiencia de juego. La mayoría de mandos USB funcionarán, pero recomendamos un Gamepad iBuffalo USB Clásico o un Mando Bluetooth Wireless 8Bitdo SFC30.', - 'Hay otras formas de jugar, incluyendo en una SNES original. También hay ciertos emuladores, como zsnes, que no funcionarán correctamente con el randomizer. ¡Únete a nosotros en Discord para aprender más!', - 'NOTA PARA JUGADORES EN SNES MINI: Cambia el nombre al archivo ROM para que tenga 61 carácteres o menos, ya que la SNES Mini no funciona con nombres de archivos largos.', - ] - ], - 'play' => [ - 'header' => '5. ¡Ponte a jugar!', - 'content' => [ - '¡Ya estás listo para empezar! La mejor forma de aprender es cargar tu nueva ROM y empezar a jugar. Si crees que estás atascado, mira esta lista de errores comunes, o pregunta en Discord.', - '
    ' - . '
  • Puedes usar el botón Y para cambiar entre Flechas de Plata y Flechas Normales, los Bumeranes Rojo y Azul, la Seta con los Polvos Mágicos, y la Pala con la Flauta.
  • ' - . '
  • Puedes guardar y salir con el Herrero o el Cofre Morado siguiéndote para llevarlos de vuelta al Mundo de la Luz sin el Espejo.
  • ' - . '
  • En el Mundo Oscuro, puedes usar el Gancho para atravesar el río al norta de la pirámide. ¡Busca una flecha hecha con hierba!
  • ' - . '
  • Puedes usar las botas para correr contra paredes, bloques, o vasijas, lanzándote hacia atrás, para poder cruzar agujeros.
  • ' - . '
  • Si te encuentras en la cueva del rebotador con la Capa y sin el Gancho, intenta caminar por la esquina superior izquierda del agujero. ¡No necesitas el Gancho!
  • ' - . '
  • Algunas llaves podrían no ser accesibles si no son necesarias para acabar el juego. Por ejemplo, la Llave Grande del Bosque de Osamentas podría estar en el cofre grande.
  • ' - . '
  • La barrera de Agahnim puede atravesarse con la Capa Mágica o destruída con una espada mejorada.
  • ' - . '
', - '¡No olvides mirar la sección de ' . __('navigation.resources') . ' para más tutoriales y consejos!', - ] - ], - ], + 'header' => '¡Comienza tu Aventura!', + 'subheader' => '¿Quieres probar tus habilidades en un Hyrule aleatorio? ¡Has entrado al sitio adecuado!', + 'cards' => [ + 'discord' => [ + 'header' => '1. Únete a nuestra comunidad de Discord', + 'content' => [ + '', + '¡Entra a nuestra comunidad de Discord! ¡Tenemos gente amistosa y dispuesta a ayudar, noticias de eventos de la comunidad, actualizaciones de ALttP: Randomizer, guías, consejos, trucos, ¡y más! ¡Ven a decir hola!', + ] + ], + 'rom' => [ + 'header' => '2. Consigue la ROM', + 'content' => [ + 'Necesitarás la ROM base. Debería ser una ROM Zelda no Densetsu: Kamigami no Triforce v1.0. No te preocupes si no puedes leer japonés, el proceso de parcheado pone textos en inglés manteniendo los glitches únicos de la versión original intactos.', + 'Si encuentras algún problema, ¡pregunta en Discord!', + ] + ], + 'randomize' => [ + 'header' => '3. Elige las Opciones de tu Juego', + 'content' => [ + 'Ve a ' . __('navigation.randomizer') . ' y proporciona tu ROM. La siguiente pantalla enseñará una variedad de opciones de juego. Para tus primeras partidas, recomendamos cambiar “' . __('randomizer.difficulty.title') . '” a “' . __('randomizer.difficulty.options.easy') . '” y dejar el resto como está. Haz click entonces en “' . __('randomizer.generate.race') . '” y conseguirás un fresco nuevo juego randomizado!', + 'Para una guía en profundidad de todas las opciones disponibles, puedes entrar aquí.', + ] + ], + 'emulator' => [ + 'header' => '4. Consigue una Forma de Jugar', + 'content' => [ + 'Primero, necesitarás algo donde jugar tu nuevo y fresco juego. Recomendamos usar un emulador. Un emulador es un programa que replica de forma fiel el hardware de una SNES, permitiendo que puedas jugar juegos de SNES en tu ordenador. Puedes conseguir el emulador que recomendamos, SNES9x, en su página web.', + 'Aunque puedes jugar usando solo tu teclado, un mando te dará una mejor experiencia de juego. La mayoría de mandos USB funcionarán, pero recomendamos un Gamepad iBuffalo USB Clásico o un Mando Bluetooth Wireless 8Bitdo SFC30.', + 'Hay otras formas de jugar, incluyendo en una SNES original. También hay ciertos emuladores, como zsnes, que no funcionarán correctamente con el randomizer. ¡Únete a nosotros en Discord para aprender más!', + 'NOTA PARA JUGADORES EN SNES MINI: Cambia el nombre al archivo ROM para que tenga 61 carácteres o menos, ya que la SNES Mini no funciona con nombres de archivos largos.', + ] + ], + 'play' => [ + 'header' => '5. ¡Ponte a jugar!', + 'content' => [ + '¡Ya estás listo para empezar! La mejor forma de aprender es cargar tu nueva ROM y empezar a jugar. Si crees que estás atascado, mira esta lista de errores comunes, o pregunta en Discord.', + '
    ' + . '
  • Puedes usar el botón Y para cambiar entre Flechas de Plata y Flechas Normales, los Bumeranes Rojo y Azul, la Seta con los Polvos Mágicos, y la Pala con la Flauta.
  • ' + . '
  • Puedes guardar y salir con el Herrero o el Cofre Morado siguiéndote para llevarlos de vuelta al Mundo de la Luz sin el Espejo.
  • ' + . '
  • En el Mundo Oscuro, puedes usar el Gancho para atravesar el río al norta de la pirámide. ¡Busca una flecha hecha con hierba!
  • ' + . '
  • Puedes usar las botas para correr contra paredes, bloques, o vasijas, lanzándote hacia atrás, para poder cruzar agujeros.
  • ' + . '
  • Si te encuentras en la cueva del rebotador con la Capa y sin el Gancho, intenta caminar por la esquina superior izquierda del agujero. ¡No necesitas el Gancho!
  • ' + . '
  • Algunas llaves podrían no ser accesibles si no son necesarias para acabar el juego. Por ejemplo, la Llave Grande del Bosque de Osamentas podría estar en el cofre grande.
  • ' + . '
  • La barrera de Agahnim puede atravesarse con la Capa Mágica o destruída con una espada mejorada.
  • ' + . '
', + '¡No olvides mirar la sección de ' . __('navigation.resources') . ' para más tutoriales y consejos!', + ] + ], + ], ]; diff --git a/resources/lang/es/watch.php b/resources/lang/es/watch.php index a0de792fd..62e00bce8 100644 --- a/resources/lang/es/watch.php +++ b/resources/lang/es/watch.php @@ -1,40 +1,40 @@ '¡Únete a la Aventura!', - 'cards' => [ - 'twitch' => [ - 'header' => 'Twitch', - 'content' => [ - 'Con todo lo que va pasando, ¡siempre hay una carrera que ver! ¡Sigue estos canales para no perderte ningún enfrentamiento!', - ], - 'button' => 'Comunidad de Twitch de ALttP:R', - ], - 'tournament' => [ - 'header' => 'Torneos', - 'sections' => [ - [ - 'header' => 'Próximos torneos', - 'content' => [ - '¡Únete a nosotros para el Invitacional de Otoño 2018 este septiembre! ¡Únete a nuestra comunidad de Discord para mantenerte al día!', - ], - ], - [ - 'header' => '2018 Spring Invitational', - 'content' => [ - '¡El Invitacional de Otoño 2018 ha acabado!', - '¡Puedes ver todas las partidas aquí!', - '
', - ], - ], - ], + 'header' => '¡Únete a la Aventura!', + 'cards' => [ + 'twitch' => [ + 'header' => 'Twitch', + 'content' => [ + 'Con todo lo que va pasando, ¡siempre hay una carrera que ver! ¡Sigue estos canales para no perderte ningún enfrentamiento!', + ], + 'button' => 'Comunidad de Twitch de ALttP:R', + ], + 'tournament' => [ + 'header' => 'Torneos', + 'sections' => [ + [ + 'header' => 'Próximos torneos', + 'content' => [ + '¡Únete a nosotros para el Invitacional de Otoño 2018 este septiembre! ¡Únete a nuestra comunidad de Discord para mantenerte al día!', + ], + ], + [ + 'header' => '2018 Spring Invitational', + 'content' => [ + '¡El Invitacional de Otoño 2018 ha acabado!', + '¡Puedes ver todas las partidas aquí!', + '
', + ], + ], + ], - ], - 'youtube' => [ - 'header' => 'YouTube', - 'content' => [ - '', - '¡Suscríbete a nuestro canal de YouTube para actualizaciones, momentos destacados de torneos, y más!', - ] - ], - ], + ], + 'youtube' => [ + 'header' => 'YouTube', + 'content' => [ + '', + '¡Suscríbete a nuestro canal de YouTube para actualizaciones, momentos destacados de torneos, y más!', + ] + ], + ], ]; diff --git a/resources/lang/fr/about.php b/resources/lang/fr/about.php index 078846b81..22fab6435 100644 --- a/resources/lang/fr/about.php +++ b/resources/lang/fr/about.php @@ -1,8 +1,7 @@ [ - 'ALttP: Randomizer est une nouvelle approche du jeu classique The Legend of Zelda: A Link to the Past. Chaque partie mélange la position de tous les éléments importants du jeu. Trouverez-vous l’arc au sommet de la montagne de la mort, la baguette de feu reposant silencieusement dans la bibliothèque ou même la Master Sword attendant dans un poulailler ?', - 'Défiez vos amis pour obtenir le meilleur temps sur un mélange particulier ou participez à la compétition hebdomadaire de speedrun. Affinez vos compétences et peut-être remporterez-vous la couronne dans notre tournoi bi-annuel sur invitation. A bientôt en Hyrule!', - ], + 'content' => [ + 'ALttP: Randomizer est une nouvelle approche du jeu classique The Legend of Zelda: A Link to the Past. Chaque partie mélange la position de tous les éléments importants du jeu. Trouverez-vous l’arc au sommet de la montagne de la mort, la baguette de feu reposant silencieusement dans la bibliothèque ou même la Master Sword attendant dans un poulailler ?', + 'Défiez vos amis pour obtenir le meilleur temps sur un mélange particulier ou participez à la compétition hebdomadaire de speedrun. Affinez vos compétences et peut-être remporterez-vous la couronne dans notre tournoi bi-annuel sur invitation. A bientôt en Hyrule!', + ], ]; - diff --git a/resources/lang/fr/contribute.php b/resources/lang/fr/contribute.php index 1caacd279..e9ed4b519 100644 --- a/resources/lang/fr/contribute.php +++ b/resources/lang/fr/contribute.php @@ -1,34 +1,34 @@ 'Contribuer', - 'subheader' => 'Vous pouvez nous aider de bien des manières, n’hésitez pas à rejoindre notre équipe de développement sur notre serveur Discord pour participer !', - 'cards' => [ - 'sprite' => [ - 'header' => 'Infographie', - 'content' => [ - 'Vous voulez ajouter votre propre héros en remplacement de Link ? Commencez par consulter la la documentation de fatmanspanda! à ce propos.', - 'Pour plus d’informations, rejoignez le serveur Discord et faites un tour sur le canal #sprite-dev !', - ] - ], - 'live' => [ - 'header' => 'Direct', - 'content' => [ - 'Vous souhaitez participer au stream en faisant du commentaire, en aidant à la diffusion ou à la comptabilisation des items des participants ?', - 'Remplissez ce formulaire, et venez faire un tour sur le Discord!', - '
', - ] - ], - 'other' => [ - 'header' => 'Autre', - 'content' => [ - 'Vous avez une idée pour améliorer le randomiseur ? Vous souhaitez mettre à profit vos compétences techniques ? Ou peut-être avez vous rencontrés un bug ? Le canal #suggestions du serveur Discord est fait pour vous !', - ] - ], - 'discord' => [ - 'header' => 'Rejoignez la communauté Discord!', - 'content' => [ - 'On vous a dit qu’on avait un serveur Discord? N’hésitez pas, nous serons ravis de vous accueillir.', - ] - ], - ], + 'header' => 'Contribuer', + 'subheader' => 'Vous pouvez nous aider de bien des manières, n’hésitez pas à rejoindre notre équipe de développement sur notre serveur Discord pour participer !', + 'cards' => [ + 'sprite' => [ + 'header' => 'Infographie', + 'content' => [ + 'Vous voulez ajouter votre propre héros en remplacement de Link ? Commencez par consulter la la documentation de fatmanspanda! à ce propos.', + 'Pour plus d’informations, rejoignez le serveur Discord et faites un tour sur le canal #sprite-dev !', + ] + ], + 'live' => [ + 'header' => 'Direct', + 'content' => [ + 'Vous souhaitez participer au stream en faisant du commentaire, en aidant à la diffusion ou à la comptabilisation des items des participants ?', + 'Remplissez ce formulaire, et venez faire un tour sur le Discord!', + '
', + ] + ], + 'other' => [ + 'header' => 'Autre', + 'content' => [ + 'Vous avez une idée pour améliorer le randomiseur ? Vous souhaitez mettre à profit vos compétences techniques ? Ou peut-être avez vous rencontrés un bug ? Le canal #suggestions du serveur Discord est fait pour vous !', + ] + ], + 'discord' => [ + 'header' => 'Rejoignez la communauté Discord!', + 'content' => [ + 'On vous a dit qu’on avait un serveur Discord? N’hésitez pas, nous serons ravis de vous accueillir.', + ] + ], + ], ]; diff --git a/resources/lang/fr/customizer.php b/resources/lang/fr/customizer.php new file mode 100644 index 000000000..3246501d7 --- /dev/null +++ b/resources/lang/fr/customizer.php @@ -0,0 +1,79 @@ + [ + 'timers' => [ + 'off' => 'Off', + 'stopwatch' => 'Stopwatch', + 'countdown-ohko' => 'Countdown OHKO', + 'countdown-continue' => 'Countdown Continue', + 'countdown-stop' => 'Countdown Stop', + ], + 'dungeon_count' => [ + 'off' => 'Off', + 'on' => 'Always On', + 'pickup' => 'On Compass Pickup', + ], + ], + 'glitches' => [ + 'canBombJump' => [ + 'title' => 'Bomb Jump', + 'description' => 'One may be required to Bomb jump over gaps.', + ], + 'canBootsClip' => [ + 'title' => 'Boots Clip', + 'description' => 'When one has the Boots, they may be required to clip through walls in the in overworld.', + ], + 'canBunnyRevive' => [ + 'title' => 'Bunny Revive', + 'description' => 'One may be required to go somewhere as bunny form and abuse death/fairy revive to be Link.', + ], + 'canBunnySurf' => [ + 'title' => 'Bunny Surf', + 'description' => 'One may be required to water walk in bunny state.', + ], + 'canDungeonRevive' => [ + 'title' => 'Dungeon Revive', + 'description' => 'One may be required to revive as a bunny in a dungeon to collect items as Link.', + ], + 'canFakeFlipper' => [ + 'title' => 'Fake Flipper', + 'description' => 'One may be required to use the fake flipper glitch to collect items.', + ], + 'canMirrorClip' => [ + 'title' => 'Mirror Clip', + 'description' => 'One may be required to abuse Mirror bouce to go out of bounds.', + ], + 'canMirrorWrap' => [ + 'title' => 'Mirror Wrap', + 'description' => 'One may be required to use Mirror to auto scroll to a different location.', + ], + 'canOneFrameClipOW' => [ + 'title' => 'One Frame Clip (overworld)', + 'description' => 'You don’t want this. Trust me.', + ], + 'canOWYBA' => [ + 'title' => 'YBA (overworld)', + 'description' => 'May be required to use bottles in the overworld to teleport to different locations.', + ], + 'canSuperBunny' => [ + 'title' => 'Super Bunny', + 'description' => 'One may be required to activate super bunny to access locations.', + ], + 'canSuperSpeed' => [ + 'title' => 'Super Speed', + 'description' => 'One may be required to super speed clip through edges in overworld.', + ], + 'canWaterFairyRevive' => [ + 'title' => 'Water Fairy Revive', + 'description' => 'This setup is silly and requires a bunch of items.', + ], + 'canWaterWalk' => [ + 'title' => 'Water walk', + 'description' => 'One may be required to use boots to walk on top of water.', + ], + 'noLogic' => [ + 'title' => 'Disable all logic checks', + 'description' => 'When this is selected all bets are off, and nothing below matters.', + ], + ] +]; diff --git a/resources/lang/fr/daily.php b/resources/lang/fr/daily.php index 036012455..f3424d213 100644 --- a/resources/lang/fr/daily.php +++ b/resources/lang/fr/daily.php @@ -1,8 +1,8 @@ 'Jeu de Randomizer du Jour', - 'content' => [ - 'Vous ne pouvez pas attendre le week-end pour le prochain défi des randomizer ? Vous voulez voir comment vous vous situez contre votre streamer préféré ? Voici la run Randomizer quotidienne !', - 'Le type de jeu sera aléatoire chaque jour ! (Vous attendiez-vous à autre chose?) Lancez-vous et expérimentez quelque chose de nouveau ! Avez-vous la patience de persévérer à travers un jeu en ' . __('randomizer.variation.options.ohko') . ', la ruse pour résoudre les complexités du ' . __('randomizer.variation.options.key-sanity') . ', ou la vitesse pour tirer la triforce du piédestal ? Découvrez-le dès aujourd’hui !', - ] + 'header' => 'Jeu de Randomizer du Jour', + 'content' => [ + 'Vous ne pouvez pas attendre le week-end pour le prochain défi des randomizer ? Vous voulez voir comment vous vous situez contre votre streamer préféré ? Voici la run Randomizer quotidienne !', + 'Le type de jeu sera aléatoire chaque jour ! (Vous attendiez-vous à autre chose?) Lancez-vous et expérimentez quelque chose de nouveau ! Avez-vous la patience de persévérer à travers un jeu en ' . __('randomizer.variation.options.ohko') . ', la ruse pour résoudre les complexités du ' . __('randomizer.variation.options.key-sanity') . ', ou la vitesse pour tirer la triforce du piédestal ? Découvrez-le dès aujourd’hui !', + ] ]; diff --git a/resources/lang/fr/enemizer.php b/resources/lang/fr/enemizer.php index ca96bfd6d..4e246a2c0 100644 --- a/resources/lang/fr/enemizer.php +++ b/resources/lang/fr/enemizer.php @@ -1,36 +1,36 @@ 'Enemizer', - 'enable' => 'Activer l’Ennemiseur', - 'disable' => 'Désactiver l’Ennemiseur', - 'enemy_health' => [ - 'title' => 'Santé Ennemis', - 'options' => [ - 0 => 'Ordinaire', - 1 => 'Facile (1-4 hp)', - 2 => 'Moyen (2-15 hp)', - 3 => 'Difficile (2-30 hp)', - 4 => 'Insensé (4-50 hp)', - ], - ], - 'enemy_damage' => [ - 'title' => 'Dégâts des Ennemis', - 'options' => [ - 'off' => 'Ordinaire', - 'shuffle' => 'Mélangé', - 'chaos' => 'Chaos', - ], - ], - 'bosses' => [ - 'title' => 'Bosses', - 'options' => [ - 'off' => 'Ordinaire', - 'basic' => 'De base', - 'normal' => 'Commun', - 'chaos' => 'Chaos', - ], - ], - 'palette_shuffle' => 'Mélange les Palettes', - 'pot_shuffle' => 'Mélange les Pots', - 'enemy_shuffle' => 'Mélanger les Ennemis', + 'title' => 'Enemizer', + 'enable' => 'Activer l’Ennemiseur', + 'disable' => 'Désactiver l’Ennemiseur', + 'enemy_health' => [ + 'title' => 'Santé Ennemis', + 'options' => [ + 0 => 'Ordinaire', + 1 => 'Facile (1-4 hp)', + 2 => 'Moyen (2-15 hp)', + 3 => 'Difficile (2-30 hp)', + 4 => 'Insensé (4-50 hp)', + ], + ], + 'enemy_damage' => [ + 'title' => 'Dégâts des Ennemis', + 'options' => [ + 'off' => 'Ordinaire', + 'shuffle' => 'Mélangé', + 'chaos' => 'Chaos', + ], + ], + 'bosses' => [ + 'title' => 'Bosses', + 'options' => [ + 'off' => 'Ordinaire', + 'basic' => 'De base', + 'normal' => 'Commun', + 'chaos' => 'Chaos', + ], + ], + 'palette_shuffle' => 'Mélange les Palettes', + 'pot_shuffle' => 'Mélange les Pots', + 'enemy_shuffle' => 'Mélanger les Ennemis', ]; diff --git a/resources/lang/fr/entrance.php b/resources/lang/fr/entrance.php index 4094d948a..24afe05d4 100644 --- a/resources/lang/fr/entrance.php +++ b/resources/lang/fr/entrance.php @@ -1,75 +1,75 @@ 'Randomizer de portes', - 'switch' => [ - 'item' => 'Passer au Randomizer d’objets', - ], - 'rom' => [ - 'options' => 'Options de ROM', - ], - 'difficulty' => [ - 'title' => 'Difficulté', - 'options' => [ - 'easy' => 'Facile', - 'normal' => 'Normal', - 'hard' => 'Difficile', - 'expert' => 'Expert', - 'insane' => 'Insensé', - ], - ], - 'goal' => [ - 'title' => 'Objectif', - 'options' => [ - 'ganon' => 'Vaincre Ganon', - 'crystals' => 'Cristaux', - 'dungeons' => 'Tous les Donjons', - 'pedestal' => 'Piédestal de la Master Sword', - 'triforcehunt' => 'Pièces de Triforce', - ], - ], - 'logic' => [ - 'title' => 'Logique', - 'options' => [ - 'NoGlitches' => 'Sans Glitches', - ], - ], - 'mode' => [ - 'title' => 'Réglage', - 'options' => [ - 'swordless' => 'Sans Épée', - 'open' => 'Ouvert', - ], - ], - 'shuffle' => [ - 'title' => 'Mélanger', - 'options' => [ - 'simple' => 'Simple', - 'restricted' => 'Restreint', - 'full' => 'Complet', - 'crossed' => 'Croisé', - 'insanity' => 'Insensé', - ], - ], - 'variation' => [ - 'title' => 'Variation', - 'options' => [ - 'none' => 'Aucun', - 'timed-race' => 'Chronométrée', - 'timed-ohko' => 'Décompte Final', - 'ohko' => 'Zéro Coeurs', - 'triforce-hunt' => 'Chasse aux morceaux de Triforce', - 'key-sanity' => 'Clé-sordre', - 'retro' => 'Rétro', - ], - ], - 'generate' => [ - 'race' => 'Générer une ROM de course', - 'spoiler_race' => 'Spoiler de la ROM de Course', - 'casual' => 'Générer une ROM', - ], - 'details' => [ - 'title' => 'Détails du jeu', - 'save_spoiler' => 'Enregistrer le spoiler', - 'save_rom' => 'Sauvegarder la ROM', - ], + 'title' => 'Randomizer de portes', + 'switch' => [ + 'item' => 'Passer au Randomizer d’objets', + ], + 'rom' => [ + 'options' => 'Options de ROM', + ], + 'difficulty' => [ + 'title' => 'Difficulté', + 'options' => [ + 'easy' => 'Facile', + 'normal' => 'Normal', + 'hard' => 'Difficile', + 'expert' => 'Expert', + 'insane' => 'Insensé', + ], + ], + 'goal' => [ + 'title' => 'Objectif', + 'options' => [ + 'ganon' => 'Vaincre Ganon', + 'crystals' => 'Cristaux', + 'dungeons' => 'Tous les Donjons', + 'pedestal' => 'Piédestal de la Master Sword', + 'triforcehunt' => 'Pièces de Triforce', + ], + ], + 'logic' => [ + 'title' => 'Logique', + 'options' => [ + 'NoGlitches' => 'Sans Glitches', + ], + ], + 'mode' => [ + 'title' => 'Réglage', + 'options' => [ + 'swordless' => 'Sans Épée', + 'open' => 'Ouvert', + ], + ], + 'shuffle' => [ + 'title' => 'Mélanger', + 'options' => [ + 'simple' => 'Simple', + 'restricted' => 'Restreint', + 'full' => 'Complet', + 'crossed' => 'Croisé', + 'insanity' => 'Insensé', + ], + ], + 'variation' => [ + 'title' => 'Variation', + 'options' => [ + 'none' => 'Aucun', + 'timed-race' => 'Chronométrée', + 'timed-ohko' => 'Décompte Final', + 'ohko' => 'Zéro Coeurs', + 'triforce-hunt' => 'Chasse aux morceaux de Triforce', + 'key-sanity' => 'Clé-sordre', + 'retro' => 'Rétro', + ], + ], + 'generate' => [ + 'race' => 'Générer une ROM de course', + 'spoiler_race' => 'Spoiler de la ROM de Course', + 'casual' => 'Générer une ROM', + ], + 'details' => [ + 'title' => 'Détails du jeu', + 'save_spoiler' => 'Enregistrer le spoiler', + 'save_rom' => 'Sauvegarder la ROM', + ], ]; diff --git a/resources/lang/fr/entrance_options.php b/resources/lang/fr/entrance_options.php deleted file mode 100644 index 8af08adb4..000000000 --- a/resources/lang/fr/entrance_options.php +++ /dev/null @@ -1,38 +0,0 @@ - 'Qu’est ce que le Randomizer de Portes ?', - 'subheader' => 'Ce randomiseur suit globalement les règles standards du randomiseur d’items, mais introduit une nouvelle option “' . __('entrance.shuffle.title') . '”.', - 'cards' => [ - 'simple' => [ - 'header' => __('entrance.shuffle.options.simple'), - 'content' => [ - 'Mélange les entrées des donjons entre elles. Si un donjon possède plusieurs entrées elles sont mélangées de telle sorte qu’elles restent toute dans la même zone.', - 'À l’exception de la montagne de la mort côté monde de lumière ou le mélange est plus permissif, les intérieurs sont également mélangés mais sont reliés au même endroit extérieur.', - ], - ], - 'restricted' => [ - 'header' => __('entrance.shuffle.options.restricted'), - 'content' => [ - 'Les entrées de donjons sont mélangées comme dans le mélange simple, mais les autres entrées sont connectées plus librement. Si une zone possède plusieurs entrées, elles sont toutes dans le même monde.', - ], - ], - 'full' => [ - 'header' => __('entrance.shuffle.options.full'), - 'content' => [ - 'Mélange les entrées de cavernes et de donjons entre elles. Si une zone possède plusieurs entrées, elles sont toutes dans le même monde.', - ], - ], - 'crossed' => [ - 'header' => __('entrance.shuffle.options.crossed'), - 'content' => [ - 'Mélange les entrées de cavernes et de donjons entre elles, mais les zones peuvent maintenant se croiser entre monde des ténèbres et monde de lumière.', - ], - ], - 'insanity' => [ - 'header' => __('entrance.shuffle.options.insanity'), - 'content' => [ - 'Sépare les entrées et les sorties des zones et mélange le tout. Les cavernes qui ne possèdent qu’une seule entrée dans le jeu de base ressortent quand même au même endroit.', - ], - ], - ], -]; diff --git a/resources/lang/fr/error.php b/resources/lang/fr/error.php index 0a1d57fc4..e388b6d42 100644 --- a/resources/lang/fr/error.php +++ b/resources/lang/fr/error.php @@ -1,7 +1,8 @@ 'Erreur', - '429' => 'Bien que nous appréciions que vous souhaitiez générer beaucoup de jeux, d’autres personnes aimeraient également le faire. Veuillez revenir plus tard si vous souhaitez continuer à générer.', - 'failed_generation' => 'Échec de la création de jeu :(', - 'bad_file' => 'Fichier non reconnu', + 'title' => 'Erreur', + '429' => 'Bien que nous appréciions que vous souhaitiez générer beaucoup de jeux, d’autres personnes aimeraient également le faire. Veuillez revenir plus tard si vous souhaitez continuer à générer.', + 'failed_generation' => 'Échec de la création de jeu :(', + 'bad_file' => 'Fichier non reconnu', + 'quota_exceeded_error' => 'TRANSLATETHIS Your local storage quota has been exceeded.', ]; diff --git a/resources/lang/fr/item.php b/resources/lang/fr/item.php index bad07e044..0bad29cf1 100644 --- a/resources/lang/fr/item.php +++ b/resources/lang/fr/item.php @@ -1,206 +1,215 @@ 'Rien', - 'UncleSword' => 'Épée progressive', - 'L1Sword' => 'Épée de combat', - 'L1SwordAndShield' => 'Épée et Bouclier de combat', - 'L2Sword' => 'Master Sword', - 'MasterSword' => 'Master Sword', - 'L3Sword' => 'Épée trempée', - 'L4Sword' => 'Épée d’or', - 'BlueShield' => 'Bouclier de combat', - 'RedShield' => 'Bouclier de feu', - 'MirrorShield' => 'Bouclier miroir', - 'FireRod' => 'Baguette de Feu', - 'IceRod' => 'Baguette de Glace', - 'Hammer' => 'Marteau', - 'Hookshot' => 'Grappin', - 'Bow' => 'Arc', - 'Boomerang' => 'Boomerang Bleu', - 'Powder' => 'Poudre magique', - 'Bee' => 'Abeille', - 'Bombos' => 'Bombos', - 'Ether' => 'Ether', - 'Quake' => 'Quake', - 'Lamp' => 'Lampe', - 'Shovel' => 'Pelle', - 'OcarinaInactive' => 'Flûte', - 'CaneOfSomaria' => 'Canne De Somaria', - 'Bottle' => 'Flacon (vide)', - 'PieceOfHeart' => 'Quart de Coeur', - 'CaneOfByrna' => 'Canne De Byrna', - 'Cape' => 'Cape Magique', - 'MagicMirror' => 'Miroir Magique', - 'PowerGlove' => 'Gants de puissance', - 'TitansMitt' => 'Gants des Titans', - 'BookOfMudora' => 'Livre De Mudora', - 'Flippers' => 'Palmes', - 'MoonPearl' => 'Perle de lune', - 'BugCatchingNet' => 'Filet à papillon', - 'BlueMail' => 'Tunique bleue', - 'RedMail' => 'Tunique rouge', - 'Key' => 'Clé', - 'Compass' => 'Boussole', - 'HeartContainerNoAnimation' => 'Réceptacle de coeur (pas d’animation)', - 'Bomb' => 'Une Bombe', - 'ThreeBombs' => 'Trois Bombes', - 'Mushroom' => 'Champignon', - 'RedBoomerang' => 'Boomerang magique', - 'BottleWithRedPotion' => 'Flacon (potion rouge)', - 'BottleWithGreenPotion' => 'Flacon (potion verte)', - 'BottleWithBluePotion' => 'Flacon (potion bleue)', - 'RedPotion' => 'Potion Rouge', - 'GreenPotion' => 'Potion Verte', - 'BluePotion' => 'Potion Bleue', - 'TenBombs' => 'Dix Bombes', - 'BigKey' => 'Grande Clé', - 'Map' => 'Carte du Donjon', - 'OneRupee' => 'Un Rubis', - 'FiveRupees' => 'Cinq Rubiss', - 'TwentyRupees' => 'Vingt Rubis', - 'PendantOfCourage' => 'Pendentif du courage', - 'PendantOfWisdom' => 'Pendentif de sagesse', - 'PendantOfPower' => 'Pendentif de puissance', - 'BowAndArrows' => 'Arc et Flèches', - 'BowAndSilverArrows' => 'Arc Et Flèches d’Argent ', - 'BottleWithBee' => 'Flacon (abeille)', - 'BottleWithFairy' => 'Flacon (fée)', - 'BossHeartContainer' => 'Réceptacle de coeur', - 'HeartContainer' => 'Réceptacle de coeur du sanctuaire', - 'OneHundredRupees' => 'Cent Rubis', - 'FiftyRupees' => 'Cinquante Rubis', - 'Heart' => 'Petit coeur', - 'Arrow' => 'La Flèche', - 'TenArrows' => 'Dix Flèches', - 'SmallMagic' => 'Petite magie', - 'ThreeHundredRupees' => 'Trois cent Rubis', - 'TwentyRupees2' => 'Vingt Rubis', - 'BottleWithGoldBee' => 'Flacon (Abeille D’or)', - 'OcarinaActive' => 'Flûte (activée)', - 'PegasusBoots' => 'Bottes Pégase', - 'BombUpgrade5' => 'Extension de Sac de Bombes (+5)', - 'BombUpgrade10' => 'Extension de Sac de Bombes (+10)', - 'BombUpgrade50' => 'Extension de Sac de Bombes (+50)', - 'ArrowUpgrade5' => 'Extension de carquois (+5)', - 'ArrowUpgrade10' => 'Extension de carquois (+10)', - 'ArrowUpgrade70' => 'Extension de carquois (+70)', - 'HalfMagic' => 'Demi-magie', - 'QuarterMagic' => 'Quart de magie', - 'Programmable1' => 'Programmable 1', - 'Programmable2' => 'Programmable 2', - 'Programmable3' => 'Programmable 3', - 'SilverArrowUpgrade' => 'Flèches d’argent', - 'Rupoor' => 'Rupoor', - 'RedClock' => 'Horloge rouge', - 'BlueClock' => 'Horloge bleue', - 'GreenClock' => 'Horloge verte', - 'ProgressiveSword' => 'Épée progressive', - 'ProgressiveShield' => 'Bouclier Progressif', - 'ProgressiveArmor' => 'Armure progressive', - 'ProgressiveGlove' => 'Gant Progressif', - 'singleRNG' => 'Objet RNG unique', - 'multiRNG' => 'Objet RNG non unique', - 'Triforce' => 'Triforce', - 'PowerStar' => 'Étoile de puissance', - 'TriforcePiece' => 'Pièce Triforce', - 'MapLW' => 'Carte du monde de la lumière', - 'MapDW' => 'Carte du monde des ténèbres', - 'MapA2' => 'Carte de Ganons Tower', - 'MapD7' => 'Carte de Turtle Rock', - 'MapD4' => 'Carte de Thieves Town', - 'MapP3' => 'Carte de Hera Tower', - 'MapD5' => 'Carte de Ice Palace', - 'MapD3' => 'Carte de Skulls Woods', - 'MapD6' => 'Carte de Misery Mire', - 'MapD1' => 'Carte de Palace of Darkness', - 'MapD2' => 'Carte de Swamp Palace', - 'MapA1' => 'Carte de Agahnim Tower', - 'MapP2' => 'Carte de Desert Palace', - 'MapP1' => 'Carte de Eastern Palace', - 'MapH1' => 'Carte de Hyrule Castle', - 'MapH2' => 'Carte de Sewers', - 'CompassA2' => 'Boussole de Ganons Tower', - 'CompassD7' => 'Boussole de Turtle Rock', - 'CompassD4' => 'Boussole de Thieves Town', - 'CompassP3' => 'Boussole de Hera Tower', - 'CompassD5' => 'Boussole de Ice Palace', - 'CompassD3' => 'Boussole de Skulls Woods', - 'CompassD6' => 'Boussole de Misery Mire', - 'CompassD1' => 'Boussole de Palace of Darkness', - 'CompassD2' => 'Boussole de Swamp Palace', - 'CompassA1' => 'Boussole de Agahnim Tower', - 'CompassP2' => 'Boussole de Desert Palace', - 'CompassP1' => 'Boussole de Eastern Palace', - 'CompassH1' => 'Boussole de Hyrule Castle', - 'CompassH2' => 'Boussole de Sewers', - 'BigKeyA2' => 'Grande Clé de Ganons Tower', - 'BigKeyD7' => 'Grande Clé de Turtle Rock', - 'BigKeyD4' => 'Grande Clé de Thieves Town', - 'BigKeyP3' => 'Grande Clé de Hera Tower', - 'BigKeyD5' => 'Grande Clé de Ice Palace', - 'BigKeyD3' => 'Grande Clé de Skulls Woods', - 'BigKeyD6' => 'Grande Clé de Misery Mire', - 'BigKeyD1' => 'Grande Clé de Palace of Darkness', - 'BigKeyD2' => 'Grande Clé de Swamp Palace', - 'BigKeyA1' => 'Grande Clé de Agahnims Tower', - 'BigKeyP2' => 'Grande Clé de Desert Palace', - 'BigKeyP1' => 'Grande Clé de Eastern Palace', - 'BigKeyH1' => 'Grande Clé de Hyrule Castle', - 'BigKeyH2' => 'Grande Clé de Sewers', - 'KeyH2' => 'Clé de Sewers', - 'KeyH1' => 'Clé de Hyrule Castle', - 'KeyP1' => 'Clé de Eastern Palace', - 'KeyP2' => 'Clé de Desert Palace', - 'KeyA1' => 'Clé de Agahnims Tower', - 'KeyD2' => 'Clé de Swamp Palace', - 'KeyD1' => 'Clé de Palace of Darkness', - 'KeyD6' => 'Clé de Misery Mire', - 'KeyD3' => 'Clé de Skulls Woods', - 'KeyD5' => 'Clé de Ice Palace', - 'KeyP3' => 'Clé de Hera Tower', - 'KeyD4' => 'Clé de Thieves Town', - 'KeyD7' => 'Clé de Turtle Rock', - 'KeyA2' => 'Clé de Ganon Tower', - 'KeyGK' => 'Clé générique', - 'Crystal1' => 'Cristal 1', - 'Crystal2' => 'Cristal 2', - 'Crystal3' => 'Cristal 3', - 'Crystal4' => 'Cristal 4', - 'Crystal5' => 'Cristal 5', - 'Crystal6' => 'Cristal 6', - 'Crystal7' => 'Cristal 7', - 'RescueZelda' => 'Sauver Zelda', - 'DefeatAgahnim' => 'Vaincre Agahnim', - 'BigRedBomb' => 'Grosse bombe rouge', - 'DefeatAgahnim2' => 'Vaincre Agahnim 2', - 'DefeatGanon' => 'Vaincre Ganon', + 'Random' => 'Random', + 'BottleWithRandom' => 'Bottle (Random)', + 'Nothing' => 'Rien', + 'UncleSword' => 'Épée progressive', + 'L1Sword' => 'Épée de combat', + 'L1SwordAndShield' => 'Épée et Bouclier de combat', + 'L2Sword' => 'Master Sword', + 'MasterSword' => 'Master Sword', + 'L3Sword' => 'Épée trempée', + 'L4Sword' => 'Épée d’or', + 'BlueShield' => 'Bouclier de combat', + 'RedShield' => 'Bouclier de feu', + 'MirrorShield' => 'Bouclier miroir', + 'FireRod' => 'Baguette de Feu', + 'IceRod' => 'Baguette de Glace', + 'Hammer' => 'Marteau', + 'Hookshot' => 'Grappin', + 'Bow' => 'Arc', + 'Boomerang' => 'Boomerang Bleu', + 'Powder' => 'Poudre magique', + 'Bee' => 'Abeille', + 'Bombos' => 'Bombos', + 'Ether' => 'Ether', + 'Quake' => 'Quake', + 'Lamp' => 'Lampe', + 'Shovel' => 'Pelle', + 'OcarinaInactive' => 'Flûte', + 'CaneOfSomaria' => 'Canne De Somaria', + 'Bottle' => 'Flacon (vide)', + 'PieceOfHeart' => 'Quart de Coeur', + 'CaneOfByrna' => 'Canne De Byrna', + 'Cape' => 'Cape Magique', + 'MagicMirror' => 'Miroir Magique', + 'PowerGlove' => 'Gants de puissance', + 'TitansMitt' => 'Gants des Titans', + 'BookOfMudora' => 'Livre De Mudora', + 'Flippers' => 'Palmes', + 'MoonPearl' => 'Perle de lune', + 'BugCatchingNet' => 'Filet à papillon', + 'BlueMail' => 'Tunique bleue', + 'RedMail' => 'Tunique rouge', + 'Key' => 'Clé', + 'Compass' => 'Boussole', + 'HeartContainerNoAnimation' => 'Réceptacle de coeur (pas d’animation)', + 'Bomb' => 'Une Bombe', + 'ThreeBombs' => 'Trois Bombes', + 'Mushroom' => 'Champignon', + 'RedBoomerang' => 'Boomerang magique', + 'BottleWithRedPotion' => 'Flacon (potion rouge)', + 'BottleWithGreenPotion' => 'Flacon (potion verte)', + 'BottleWithBluePotion' => 'Flacon (potion bleue)', + 'RedPotion' => 'Potion Rouge', + 'GreenPotion' => 'Potion Verte', + 'BluePotion' => 'Potion Bleue', + 'TenBombs' => 'Dix Bombes', + 'BigKey' => 'Grande Clé', + 'Map' => 'Carte du Donjon', + 'OneRupee' => 'Un Rubis', + 'FiveRupees' => 'Cinq Rubiss', + 'TwentyRupees' => 'Vingt Rubis', + 'PendantOfCourage' => 'Pendentif du courage', + 'PendantOfWisdom' => 'Pendentif de sagesse', + 'PendantOfPower' => 'Pendentif de puissance', + 'BowAndArrows' => 'Arc et Flèches', + 'BowAndSilverArrows' => 'Arc Et Flèches d’Argent ', + 'BottleWithBee' => 'Flacon (abeille)', + 'BottleWithFairy' => 'Flacon (fée)', + 'BossHeartContainer' => 'Réceptacle de coeur', + 'HeartContainer' => 'Réceptacle de coeur du sanctuaire', + 'OneHundredRupees' => 'Cent Rubis', + 'FiftyRupees' => 'Cinquante Rubis', + 'Heart' => 'Petit coeur', + 'Arrow' => 'La Flèche', + 'ShopArrow' => 'Arrows', + 'TenArrows' => 'Dix Flèches', + 'SmallMagic' => 'Petite magie', + 'ThreeHundredRupees' => 'Trois cent Rubis', + 'TwentyRupees2' => 'Vingt Rubis', + 'BottleWithGoldBee' => 'Flacon (Abeille D’or)', + 'OcarinaActive' => 'Flûte (activée)', + 'PegasusBoots' => 'Bottes Pégase', + 'BombUpgrade5' => 'Extension de Sac de Bombes (+5)', + 'BombUpgrade10' => 'Extension de Sac de Bombes (+10)', + 'BombUpgrade50' => 'Extension de Sac de Bombes (+50)', + 'ArrowUpgrade5' => 'Extension de carquois (+5)', + 'ArrowUpgrade10' => 'Extension de carquois (+10)', + 'ArrowUpgrade70' => 'Extension de carquois (+70)', + 'HalfMagic' => 'Demi-magie', + 'QuarterMagic' => 'Quart de magie', + 'Programmable1' => 'Programmable 1', + 'Programmable2' => 'Programmable 2', + 'Programmable3' => 'Programmable 3', + 'SilverArrowUpgrade' => 'Flèches d’argent', + 'Rupoor' => 'Rupoor', + 'RedClock' => 'Horloge rouge', + 'BlueClock' => 'Horloge bleue', + 'GreenClock' => 'Horloge verte', + 'ProgressiveSword' => 'Épée progressive', + 'ProgressiveShield' => 'Bouclier Progressif', + 'ProgressiveArmor' => 'Armure progressive', + 'ProgressiveGlove' => 'Gant Progressif', + 'singleRNG' => 'Objet RNG unique', + 'multiRNG' => 'Objet RNG non unique', + 'ProgressiveBow' => 'Arc Progressif', + 'Triforce' => 'Triforce', + 'PowerStar' => 'Étoile de puissance', + 'TriforcePiece' => 'Pièce Triforce', + 'MapLW' => 'Carte du monde de la lumière', + 'MapDW' => 'Carte du monde des ténèbres', + 'MapA2' => 'Carte de Ganons Tower', + 'MapD7' => 'Carte de Turtle Rock', + 'MapD4' => 'Carte de Thieves Town', + 'MapP3' => 'Carte de Hera Tower', + 'MapD5' => 'Carte de Ice Palace', + 'MapD3' => 'Carte de Skulls Woods', + 'MapD6' => 'Carte de Misery Mire', + 'MapD1' => 'Carte de Palace of Darkness', + 'MapD2' => 'Carte de Swamp Palace', + 'MapA1' => 'Carte de Agahnim Tower', + 'MapP2' => 'Carte de Desert Palace', + 'MapP1' => 'Carte de Eastern Palace', + 'MapH1' => 'Carte de Hyrule Castle', + 'MapH2' => 'Carte de Sewers', + 'CompassA2' => 'Boussole de Ganons Tower', + 'CompassD7' => 'Boussole de Turtle Rock', + 'CompassD4' => 'Boussole de Thieves Town', + 'CompassP3' => 'Boussole de Hera Tower', + 'CompassD5' => 'Boussole de Ice Palace', + 'CompassD3' => 'Boussole de Skulls Woods', + 'CompassD6' => 'Boussole de Misery Mire', + 'CompassD1' => 'Boussole de Palace of Darkness', + 'CompassD2' => 'Boussole de Swamp Palace', + 'CompassA1' => 'Boussole de Agahnim Tower', + 'CompassP2' => 'Boussole de Desert Palace', + 'CompassP1' => 'Boussole de Eastern Palace', + 'CompassH1' => 'Boussole de Hyrule Castle', + 'CompassH2' => 'Boussole de Sewers', + 'BigKeyA2' => 'Grande Clé de Ganons Tower', + 'BigKeyD7' => 'Grande Clé de Turtle Rock', + 'BigKeyD4' => 'Grande Clé de Thieves Town', + 'BigKeyP3' => 'Grande Clé de Hera Tower', + 'BigKeyD5' => 'Grande Clé de Ice Palace', + 'BigKeyD3' => 'Grande Clé de Skulls Woods', + 'BigKeyD6' => 'Grande Clé de Misery Mire', + 'BigKeyD1' => 'Grande Clé de Palace of Darkness', + 'BigKeyD2' => 'Grande Clé de Swamp Palace', + 'BigKeyA1' => 'Grande Clé de Agahnims Tower', + 'BigKeyP2' => 'Grande Clé de Desert Palace', + 'BigKeyP1' => 'Grande Clé de Eastern Palace', + 'BigKeyH1' => 'Grande Clé de Hyrule Castle', + 'BigKeyH2' => 'Grande Clé de Sewers', + 'KeyH2' => 'Clé de Sewers', + 'KeyH1' => 'Clé de Hyrule Castle', + 'KeyP1' => 'Clé de Eastern Palace', + 'KeyP2' => 'Clé de Desert Palace', + 'KeyA1' => 'Clé de Agahnims Tower', + 'KeyD2' => 'Clé de Swamp Palace', + 'KeyD1' => 'Clé de Palace of Darkness', + 'KeyD6' => 'Clé de Misery Mire', + 'KeyD3' => 'Clé de Skulls Woods', + 'KeyD5' => 'Clé de Ice Palace', + 'KeyP3' => 'Clé de Hera Tower', + 'KeyD4' => 'Clé de Thieves Town', + 'KeyD7' => 'Clé de Turtle Rock', + 'KeyA2' => 'Clé de Ganon Tower', + 'KeyGK' => 'Clé générique', + 'ShopKey' => 'Key', + 'Crystal1' => 'Cristal 1', + 'Crystal2' => 'Cristal 2', + 'Crystal3' => 'Cristal 3', + 'Crystal4' => 'Cristal 4', + 'Crystal5' => 'Cristal 5', + 'Crystal6' => 'Cristal 6', + 'Crystal7' => 'Cristal 7', + 'RescueZelda' => 'Sauver Zelda', + 'DefeatAgahnim' => 'Vaincre Agahnim', + 'BigRedBomb' => 'Grosse bombe rouge', + 'DefeatAgahnim2' => 'Vaincre Agahnim 2', + 'DefeatGanon' => 'Vaincre Ganon', - 'NoSlipBoots' => 'Crampons de Glace', - 'Reindeer1' => 'Fonceur', - 'Reindeer2' => 'Danseur', - 'Reindeer3' => 'Sauteur', - 'Reindeer4' => 'Fripponne', - 'Reindeer5' => 'Comète', - 'Reindeer6' => 'Cupidonne', - 'Reindeer7' => 'Tonnerre', - 'Reindeer8' => 'Éclair', - 'Coal1' => 'Charbon', - 'Coal2' => 'Charbon', + 'ChocoboEgg' => 'Chocobo Egg', - 'Armos Knights' => 'Armos Knights', - 'Lanmolas' => 'Lanmolas', - 'Moldorm' => 'Moldorm', - 'Helmasaur King' => 'Helmasaur King', - 'Arrghus' => 'Arrghus', - 'Mothula' => 'Mothula', - 'Blind' => 'Blind', - 'Kholdstare' => 'Kholdstare', - 'Vitreous' => 'Vitreous', - 'Trinexx' => 'Trinexx', - 'Armos Knights' => 'Armos Knights', - 'Lanmolas' => 'Lanmolas', - 'Moldorm' => 'Moldorm', - 'Agahnim' => 'Agahnim', - 'Agahnim 2' => 'Agahnim 2', - 'Ganon' => 'Ganon', + 'NoSlipBoots' => 'Crampons de Glace', + 'Reindeer1' => 'Fonceur', + 'Reindeer2' => 'Danseur', + 'Reindeer3' => 'Sauteur', + 'Reindeer4' => 'Fripponne', + 'Reindeer5' => 'Comète', + 'Reindeer6' => 'Cupidonne', + 'Reindeer7' => 'Tonnerre', + 'Reindeer8' => 'Éclair', + 'Coal1' => 'Charbon', + 'Coal2' => 'Charbon', + + 'Armos Knights' => 'Armos Knights', + 'Lanmolas' => 'Lanmolas', + 'Moldorm' => 'Moldorm', + 'Helmasaur King' => 'Helmasaur King', + 'Arrghus' => 'Arrghus', + 'Mothula' => 'Mothula', + 'Blind' => 'Blind', + 'Kholdstare' => 'Kholdstare', + 'Vitreous' => 'Vitreous', + 'Trinexx' => 'Trinexx', + 'Armos Knights' => 'Armos Knights', + 'Lanmolas' => 'Lanmolas', + 'Moldorm' => 'Moldorm', + 'Agahnim' => 'Agahnim', + 'Agahnim 2' => 'Agahnim 2', + 'Ganon' => 'Ganon', + + 'Test' => 'Testing Item', ]; diff --git a/resources/lang/fr/navigation.php b/resources/lang/fr/navigation.php index c39013ffe..cc40adc02 100644 --- a/resources/lang/fr/navigation.php +++ b/resources/lang/fr/navigation.php @@ -1,27 +1,25 @@ 'Commencer à Jouer', - 'start_watching' => 'Commencer à Regarder', - 'generate' => 'Générer un Jeu', - 'randomizer' => 'Générer un Jeu Aléatoire', - 'entrance' => 'Randomizer d’entrée', - 'daily' => 'Défi Quotidien', - 'customizer' => 'Créer un Jeu Personnalisé', + 'start_playing' => 'Commencer à Jouer', + 'start_watching' => 'Commencer à Regarder', + 'generate' => 'Générer un Jeu', + 'randomizer' => 'Générer un Jeu Aléatoire', + 'entrance' => 'Randomizer d’entrée', + 'daily' => 'Défi Quotidien', + 'customizer' => 'Créer un Jeu Personnalisé', - 'calendar' => 'Calendrier des Événements', + 'calendar' => 'Calendrier des Événements', - 'language' => ' Langue', + 'language' => ' Langue', - 'help' => 'Aidez-moi', - 'resources' => 'Ressources', - 'options' => 'Options de Jeu', - 'races' => 'Parties organisées', - 'updates' => 'Mises à jour', - 'game_entrance' => 'Randomizer d’entrée', - 'game_enemizer' => 'Enemizer', - 'sprite_preview' => 'Sprite Options', - 'contribute' => 'Contribuer', - 'discord' => 'Rejoignez-nous sur Discord', - 'report_issue' => 'Signaler un Problème', + 'help' => 'Aidez-moi', + 'resources' => 'Ressources', + 'options' => 'Options de Jeu', + 'races' => 'Parties organisées', + 'updates' => 'Mises à jour', + 'sprite_preview' => 'Sprite Options', + 'contribute' => 'Contribuer', + 'discord' => 'Rejoignez-nous sur Discord', + 'report_issue' => 'Signaler un Problème', ]; diff --git a/resources/lang/fr/options.php b/resources/lang/fr/options.php index 579906c15..61aeb9bab 100644 --- a/resources/lang/fr/options.php +++ b/resources/lang/fr/options.php @@ -1,339 +1,592 @@ 'Options', - 'subheader' => 'Les nombreuses manières de jouer', - 'cards' => [ - 'mode' => [ - 'header' => __('randomizer.mode.title'), - 'sections' => [ - [ - 'header' => __('randomizer.mode.options.standard'), - 'content' => [ - 'Calqué sur le jeu de base : Link commence l’aventure dans son lit, reçoit une arme de son oncle (selon le paramétrage des épées, voir ci-dessous) et doit secourir la princesse Zelda avant de pouvoir continuer.', - ], - ], - [ - 'header' => __('randomizer.mode.options.open'), - 'content' => [ - 'Dans ce mode de jeu vous débutez de la maison de Link ou au sanctuaire (au choix) et vous n’êtes pas obligés de compléter la séquence d’introduction avant de parcourir le monde d’Hyrule. Quelques points à noter :', - '
    ' - . '
  • L’oncle de Link est déjà dans les égouts et possède un item.
  • ' - . '
  • Aucune salle obscure n’est éclairée, pas même les égouts.
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.mode.options.inverted'), - 'content' => [ - 'Fatigué de la progression classique ? Nous avons le mode de jeu idéal pour vous !', - 'En inversé, Link débutera dans le monde des ténèbres pour terminer dans le monde de lumière.', - 'C’est un mode de jeu assez difficile que nous ne recommandons pas aux nouveaux joueurs : les ennemis du monde des ténèbres font très mal, surtout quand on a que 3 cœurs ...', - 'Dans les faits, ce mode de jeu apporte de nombreuses modifications :', - '
    ' - . '
  • La maison de Link remplace le magasin de bombes du monde des ténèbres, et réciproquement.
  • ' - . '
  • Le ' . __('item.MagicMirror') . ' vous transporte du monde de la lumière vers celui des ténèbres.
  • ' - . '
  • La ' . __('item.OcarinaInactive') . ' ne fonctionne que dans le monde des ténèbres, mais devra quand même s’activer dans le monde de lumière.
  • ' - . '
  • Des modifications ont été apportées au terrain pour vous permettre d’atteindre certains endroits du monde de lumière qui nécessitaient le ' . __('item.MagicMirror') . '
  • ' - . '
  • Le vieil homme est maintenant perdu dans le monde des ténèbres, mais vous devrez le reconduire chez lui, dans le monde de lumière.
  • ' - . '
  • Les portails qui menaient au monde des ténèbres n’ont pas bougés, mais sont maintenant dans le monde des ténèbres et nécessitent les mêmes items pour les atteindre.
  • ' - . '
  • Agahnim a quitté le château d’Hyrule pour s’installer sur la montagne de la mort et a “oublié” d’en protéger l’accès. Oh, nous avons également ajouté des escaliers pour atteindre la montagne de la mort facilement dans le monde des ténèbres.
  • ' - . '
  • Suite à ce déménagement, la tour de Ganon a maintenant pris la place du château d’Hyrule, mais il vous faudra toujours 7 cristaux pour y pénétrer.
  • ' - . '
  • Le mur de Ice Palace est tombé, vous pourrez simplement y accéder à la nage.
  • ' - . '
  • Le sommet de Turtle Rock peut être atteint en escaladant simplement la queue de la tortue.
  • ' - . '
  • N’oubliez pas qu’un lapin est parfaitement capable de lire le ' . __('item.BookOfMudora') . ', ou d’interagir avec le monde qui l’entoure...
  • ' - . '
', - ], - ], - ], - ], - 'weapons' => [ - 'header' => __('randomizer.weapons.title'), - 'sections' => [ - [ - 'header' => __('randomizer.weapons.options.randomized'), - 'content' => [ - 'Toutes les améliorations d’épées sont aléatoires. Vous commencerez sans épée et il peut se passer du temps avant que vous en trouviez une. Utilisez des bombes, des buissons ou mêmes des panneaux pour vous défendre jusqu’à tomber sur une arme plus efficace.', - 'Si cette option est combinée au mode ' . __('randomizer.mode.options.standard') . ' ' . __('randomizer.mode.title') .' (voir ci-dessus), votre oncle vous offrira un des items suivants pour vous permettre de finir la séquence d’introduction :', - '
    ' - . '
  • Épée (oui, c’est possible !)
  • ' - . '
  • Marteau
  • ' - . '
  • Arc, avec un plein de flèches
  • ' - . '
  • Un plein de Bombes
  • ' - . '
  • Baguette de Feu, avec un plein de magie
  • ' - . '
  • Canne de Somaria, avec un plein de magie
  • ' - . '
  • Canne de Byrna, avec un plein de magie
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.weapons.options.uncle'), - 'content' => [ - 'L’oncle de Link vous donnera nécessairement une épée, les améliorations restent aléatoires.', - ], - ], - [ - 'header' => __('randomizer.weapons.options.swordless'), - 'content' => [ - 'Il n’y a aucune épée dans le jeu ! Cela implique quelques changements :', - '
    ' - . '
  • Les épées ont été remplacées par des 20 rupees (verts).
  • ' - . '
  • La barrière de la tour d’Agahnim peut être détruite avec le marteau.
  • ' - . '
  • Le rideau à la fin de la tour d’Agahnim est déjà ouvert, tout comme les lierres de Skull Woods.
  • ' - . '
  • Les médaillons ne sont utilisables que pour ouvrir Misery Mire et Turtle Rock, ou pour progresser à l’intérieur de Ice Palace. En temps normal, ils nécessitent une épée.
  • ' - . '
  • Ganon prend maintenant des dégâts du marteau.
  • ' - . '
  • Les flèches d’argent sont disponibles dans tous les modes de difficultés.
  • ' - . '
  • Les stèles d’Ether et de Bombos nécessitent le livre de Mudora et le marteau.
  • ' - . '
', - ], - ], - ], - ], - 'logic' => [ - 'header' => __('randomizer.logic.title'), - 'sections' => [ - [ - 'header' => __('randomizer.logic.options.NoGlitches'), - 'content' => [ - 'Ce mode ne nécessite aucune connaissance particulière.', - 'Vous ne pourrez jamais vous retrouver bloqués, qu’importe la manière dont vous utilisez vos petites clés dans les donjons.', - 'Vous aurez peut-être besoin de sauvegarder et de quitter à certains moments, comme pour revenir dans le monde de lumière si vous n’avez pas trouvé le miroir.', - ], - ], - [ - 'header' => __('randomizer.logic.options.OverworldGlitches'), - 'content' => [ - 'Ce mode de jeu vous demandera de connaître la plupart des glitchs, à l’exception des plus compliqués. Précisément, cette logique de jeu prévoit que le joueur est capable d’exécuter les glitchs suivants :', - '
    ' - . '
  • Boot Clipping (sortir des limites grâce aux bottes)
  • ' - . '
  • Mirror Clipping (sortir des limites grâce au miroir)
  • ' - . '
  • Fake Flippers (nager sans les palmes)
  • ' - . '
  • Bunny Revival (annuler l’état de lapin pour redevenir Link)
  • ' - . '
  • Super Bunny (récupérer certaines capacités lorsque Link est en lapin)
  • ' - . '
  • Surfing Bunny (marcher sur l’eau profonde en lapin)
  • ' - . '
  • Walk on Water (marcher sur l’eau, tout court)
  • ' - . '
', - 'Ce mode de jeu ne prend PAS en compte les choses suivantes :', - '
    ' - . '
  • Bootless Clipping (sortir des limites sans les bottes, notamment en intérieur)
  • ' - . '
  • Mirror Screenwrap (faire défiler l’écran à l’aide du miroir)
  • ' - . '
  • YBA (utiliser une potion pour déclencher la flûte ou faire défiler l’écran)
  • ' - . '
  • Hovering (flotter à l’aide des bottes)
  • ' - . '
  • Naviguer les salles obscures sans lanterne
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.logic.options.MajorGlitches'), - 'content' => [ - 'Dans cette logique, nous supposons que vous maîtrisez tous les glitchs du jeu, à l’exception de l’Exploration Glitch. Ce mode de jeu est très difficile et présente également les modifications suivantes :', - '
    ' - . '
  • Le faux monde des ténèbres n’est plus corrigé. Les cristaux apparaîtront toujours, ce qui peut entrer en conflit avec les pendentifs.
  • ' - . '
  • Le niveau de l’eau dans Swamp Palace ne redescend pas si vous sortez du donjon, sauf si vous le faites depuis la première salle.
  • ' - . '
  • Sauvegarder dans le monde des ténèbres vous renverra systématiquement à la pyramide si Agahnim a été battu.
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.logic.options.None'), - 'content' => [ - 'Les items peuvent être véritablement n’importe où et aucune sécurité n’est en place, bonne chance.', - ], - ], - ], - ], - 'goal' => [ - 'header' => __('randomizer.goal.title'), - 'sections' => [ - [ - 'header' => __('randomizer.goal.options.ganon'), - 'content' => [ - 'Comme dans le jeu de base, votre objectif est d’obtenir les 7 cristaux pour aller affronter Ganon.', - ], - ], - [ - 'header' => __('randomizer.goal.options.dungeons'), - 'content' => [ - 'Vous devrez battre les boss de chaque donjon, y compris les deux apparitions d’Agahnim, avant de pouvoir vous confronter à Ganon.', - ], - ], - [ - 'header' => __('randomizer.goal.options.pedestal'), - 'content' => [ - 'Rassemblez les trois pendentifs et récupérez la Triforce au piédestal des bois perdus ! Vous aurez sans doute besoin de parcourir tout Hyrule pour y parvenir, et peut-être même de visiter la tour de Ganon.', - ], - ], - [ - 'header' => __('randomizer.goal.options.triforce-hunt'), - 'content' => [ - 'La Triforce s’est séparée en 30 morceaux éparpillés un peu partout en Hyrule et vous devez en trouver 20 pour accomplir votre quête !', - ], - ], - ], - ], - 'difficulty' => [ - 'header' => __('randomizer.difficulty.title'), - 'sections' => [ - [ - 'header' => __('randomizer.difficulty.options.easy'), - 'content' => [ - 'Mode de difficulté recommandé aux joueurs débutants, ce mode rend l’aventure plus accessible.', - 'Trouver la seconde amélioration de magie vous fera passer de ½ à ¼ de magie.', - 'En mode standard, si l’oncle vous donne l’arc, des bombes, la baguette de feu, la canne de Somaria ou la canne de Byrna, Link aura munitions illimitées jusqu’à la fin de la séquence d’introduction.', - 'Consultez le tableau ci-dessous pour plus de détails.', - ], - ], - [ - 'header' => __('randomizer.difficulty.options.normal'), - 'content' => [ - 'Ce mode de difficulté possède tous les items du jeu de base et aucune modification particulière.', - ], - ], - [ - 'header' => sprintf('%s, %s, et %s', __('randomizer.difficulty.options.hard'), __('randomizer.difficulty.options.expert'), __('randomizer.difficulty.options.insane')), - 'content' => [ - 'À la recherche d’un défi ? Ces difficultés avancées testeront vos capacités ! Consultez le tableau pour plus d’informations.', - ], - ], - ], - 'comparison' => [ - 'header' => 'Comparaison de difficulté', - 'maximum_health' => 'Santé maximale', - 'heart_containers' => 'Réceptacles de coeur', - 'heart_pieces' => 'Quarts de coeur', - 'maximum_mail' => 'Meilleure Tunique', - 'number_in_pool' => '# disponibles', - 'maximum_sword' => 'Meilleure Épée', - 'maximum_shield' => 'Meilleur Bouclier', - 'shields_store' => 'Boucliers achetables ?', - 'maximum_magic' => 'Magie maximale', - 'number_silvers' => 'Flèches d’Argent', - 'number_silvers_swordless' => 'Flèches d’Argent (sans épée)', - 'number_bottles' => 'Flacons', - 'number_lamps' => 'Lanternes', - 'potion_magic' => 'Soin des potions de magie', - 'potion_health' => 'Soin des potions de santé', - 'bug_net_fairy' => 'Fées Capturables ?', - 'powder_bubble' => 'Poudre sur les Antifées', - 'cape_consumption' => 'Consommation de la Cape', - 'byrna_invincible' => 'Byrna rend invincible ?', - 'stun_boomerang' => 'Les Boomerangs étourdissent ?', - 'stun_hookshot' => 'Le Grappin étourdit ?', - 'capacity_upgrade' => 'Extensions de Carquois & de Sac de Bombes', - 'drop_rates' => 'Chance de drop des ennemis', - 'quarter' => 'Quart', - 'half' => 'Moitié', - 'normal' => 'Normal', - 'shield_3' => 'Miroir', - 'shield_2' => 'Feu', - 'shield_1' => 'Simple', - 'none' => 'Aucun', - 'sword_4' => 'Or', - 'sword_3' => 'Trempée', - 'sword_2' => 'Master Sword', - 'mail_3' => 'Rouge', - 'mail_2' => 'Bleue', - 'mail_1' => 'Verte', - 'fairy' => 'Fée', - 'heart' => 'Cœur', - 'bee' => 'Abeilles', - 'yes' => 'Oui', - 'no' => 'Non', - 'tooltip' => [ - 'silvers' => 'Les flèches d’argent ne fonctionnent que dans la pyramide de Ganon.', - 'bottles' => 'Une fois que 4 bouteilles ont été collectées, les bouteilles restantes deviendront des rubis.', - 'potion_magic' => 'Les potions rempliront 100% de magie dans Spike Cave.', - 'potion_health' => 'Les potions rempliront 20 coeurs à Spike Cave.', - ], - ], - ], - 'variation' => [ - 'header' => __('randomizer.variation.title'), - 'sections' => [ - [ - 'header' => __('randomizer.variation.options.none'), - 'content' => [ - 'Aucune modification particulière, expérience de jeu standard.', - ], - ], - [ - 'header' => __('randomizer.variation.options.timed-race'), - 'content' => [ - 'Votre temps est compté et votre objectif est de finir avec le meilleur chrono, mais ce ne sera pas si simple. Ce mode ajoute des items qui impacteront le chronomètre et finir premier ne vous garantira pas d’avoir le meilleur temps.', - 'Allez-vous foncer vers Ganon ou partir à la recherche de ces items ?', - 'Voici ce que nous avons ajouté :', - '
    ' - . '
  • 20 Horloges Vertes (moins 4 minutes)
  • ' - . '
  • 10 Horloges Bleues (moins 2 minutes)
  • ' - . '
  • 10 Horloges Rouges (plus 2 minutes)
  • ' - . '
', - ], - ], - [ - 'header' => __('randomizer.variation.options.timed-ohko') . ' (Mort en un coup)', - 'content' => [ - 'Dans cette variante, vous devrez faire attention au chronomètre.', - 'S’il atteint zéro, vous déclencherez le mode Zéro Cœurs dans lequel le moindre dégât vous sera fatal !', - 'Ramassez les horloges pour gagner du temps et ainsi retarder, voire inverser, l’état Zéro Cœurs... temporairement tout du moins.', - ], - 'ohko_table' => [ - 'minutes' => 'minutes', - 'start_time' => 'Temps de départ', - 'green_clock' => 'Horloges Vertes (+4 minutes)', - 'red_clock' => 'Horloges Rouges (Chrono = 0)', - ], - ], - [ - 'header' => __('randomizer.variation.options.ohko') . ' (Mort en un coup)', - 'content' => [ - 'Au moindre dégât encaissé, c’est le game over. Réservé à celles et ceux qui n’ont pas froid aux yeux ...', - ], - ], - [ - 'header' => __('randomizer.variation.options.key-sanity'), - 'content' => [ - 'Vous voulez encore plus d’aléatoire ? Et un défi à votre hauteur ?', - 'Vous l’aurez voulu !', - 'Dans cette variante les cartes, les boussoles et les clés ne sont plus obligatoirement dans leur donjon respectif et vous allez devoir parcourir tout Hyrule pour trouver la petite clé qui vous fait défaut. Les clés présentes sous les pots et celles qui apparaissent en tuant des ennemis n’ont en revanche pas bougées.', - 'Les cartes et les boussoles ont été améliorées pour cette variante. La carte du monde ne vous donnera aucune information sur un donjon tant que vous n’avez pas trouvé sa carte (et si vous pensiez pouvoir vous repérer à la musique, mauvaise nouvelle, elle est aléatoire). Les boussoles quant à elles vous indiqueront combien de coffres vous avez ouvert dans le donjon. Par ailleurs, carte et boussole sont requis par la logique pour terminer les donjons.', - 'Nous avons quand même pensé à vous : les clés, cartes et boussoles vous indiqueront de quel donjon elles proviennent, et un tableau dans le menu de pause vous permettra de vous y retrouver.', - ], - ], - [ - 'header' => __('randomizer.variation.options.retro'), - 'content' => [ - 'Basé sur le premier Legend of Zelda sur NES, cette variante implique de nombreux changements.', - [ - 'header' => 'Un Arc Coûteux', - 'content' => [ - 'L’arc n’utilise plus des flèches mais des rupees !', - 'Tirer une flèche en bois vous coûte 10 rupees, tandis qu’une flèche d’argent vous en coûte 50.', - 'De plus, l’arc n’est fourni avec aucune munition : vous devrez trouver les flèches d’argent, ou acquérir les flèches de bois auprès d’un marchand pour pouvoir l’utiliser.', - ], - ], - [ - 'header' => 'Magasins', - 'content' => [ - 'Cinq magasins sur un total de neuf posséderont un inventaire différent du jeu de base (le magasin de bombe et celui de la sorcière ne seront jamais modifiés). Ces nouveaux magasins proposeront les flèches de bois pour 80 rupees ainsi que des petites clés pour 100 rupees l’unité. Vous pourrez acheter autant de petite clé que vous le souhaitez.', - ], - ], - [ - 'header' => 'Petites clés', - 'content' => [ - 'Les petites clés ne sont plus liées à leur donjon respectif et peuvent être trouvées partout dans le monde d’Hyrule. Les clés disponibles sous les pots ou qui apparaissent à la mort d’ennemis n’ont en revanche pas bougées.', - '10 petites clés ont été retirées en difficulté Facile et Normale ; 15 en Difficile, Expert et Infernal. Vous devrez réfléchir avant d’utiliser vos clés, mais n’oubliez pas que vous pourrez en acheter en cas de besoin.', - ], - ], - [ - 'header' => 'Cavernes à Choix', - 'content' => [ - 'Quatre maisons et cavernes qui ne mènent d’ordinaire à aucun item sont sélectionnées aléatoirement pour être remplacées par des cavernes à choix. À l’intérieur de celles-ci, le joueur aura le choix entre un réceptacle de cœur ou une potion bleue à boire immédiatement. Cela signifie qu’il y a plus de réceptacle de cœur que d’ordinaire, mais vous ne pourrez jamais avoir plus de 20 cœurs au total malgré tout.', - 'Une caverne ou maison supplémentaire vous mènera à un vieil homme mystérieux qui vous confiera une épée, mais le nombre d’épées dans le pool ne change pas.', - ], - ], - ], - ], - ], - ], - 'item_pool' => 'Groupe d’objets', - ], + 'header' => 'Options', + 'subheader' => 'Les nombreuses manières de jouer', + 'cards' => [ + 'glitches_required' => [ + 'header' => __('randomizer.glitches_required.title'), + 'sections' => [ + [ + 'header' => __('randomizer.glitches_required.options.none'), + 'content' => [ + 'Ce mode ne nécessite aucune connaissance particulière.', + 'Vous ne pourrez jamais vous retrouver bloqués, qu’importe la manière dont vous utilisez vos petites clés dans les donjons.', + 'Vous aurez peut-être besoin de sauvegarder et de quitter à certains moments, comme pour revenir dans le monde de lumière si vous n’avez pas trouvé le miroir.', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.overworld_glitches'), + 'content' => [ + 'Ce mode de jeu vous demandera de connaître la plupart des glitchs, à l’exception des plus compliqués. Précisément, cette logique de jeu prévoit que le joueur est capable d’exécuter les glitchs suivants :', + '
    ' + . '
  • Boot Clipping (sortir des limites grâce aux bottes)
  • ' + . '
  • Mirror Clipping (sortir des limites grâce au miroir)
  • ' + . '
  • Fake Flippers (nager sans les palmes)
  • ' + . '
  • Bunny Revival (annuler l’état de lapin pour redevenir Link)
  • ' + . '
  • Super Bunny (récupérer certaines capacités lorsque Link est en lapin)
  • ' + . '
  • Surfing Bunny (marcher sur l’eau profonde en lapin)
  • ' + . '
  • Walk on Water (marcher sur l’eau, tout court)
  • ' + . '
', + 'Ce mode de jeu ne prend PAS en compte les choses suivantes :', + '
    ' + . '
  • Bootless Clipping (sortir des limites sans les bottes, notamment en intérieur)
  • ' + . '
  • YBA (utiliser une potion pour déclencher la flûte ou faire défiler l’écran)
  • ' + . '
  • Hovering (flotter à l’aide des bottes)
  • ' + . '
  • Naviguer les salles obscures sans lanterne
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.major_glitches'), + 'content' => [ + 'Dans cette logique, nous supposons que vous maîtrisez tous les glitchs du jeu, à l’exception de l’Exploration Glitch. Ce mode de jeu est très difficile et présente également les modifications suivantes :', + '
    ' + . '
  • Le faux monde des ténèbres n’est plus corrigé. Les cristaux apparaîtront toujours, ce qui peut entrer en conflit avec les pendentifs.
  • ' + . '
  • Le niveau de l’eau dans Swamp Palace ne redescend pas si vous sortez du donjon, sauf si vous le faites depuis la première salle.
  • ' + . '
  • Sauvegarder dans le monde des ténèbres vous renverra systématiquement à la pyramide si Agahnim a été battu.
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.glitches_required.options.no_logic'), + 'content' => [ + 'Les items peuvent être véritablement n’importe où et aucune sécurité n’est en place, bonne chance.', + ], + ], + ], + ], + 'item_placement' => [ + 'header' => __('randomizer.item_placement.title'), + 'sections' => [ + [ + 'header' => __('randomizer.item_placement.options.basic'), + 'content' => [ + 'This is mostly aimed at newer players.', + ], + ], + [ + 'header' => __('randomizer.item_placement.options.advanced'), + 'content' => [ + 'The intention of this setting is to maximise glitchless item placement reach. An exception is made to prevent navigation through dark rooms. No other consideration is given to the difficulty of execution or obscurity of item placements. The expectation is a player choosing this setting is decently familiar and practiced with the original game and/or No Major Glitches speedrun.', + ], + ], + ], + ], + 'dungeon_items' => [ + 'header' => __('randomizer.dungeon_items.title'), + 'sections' => [ + [ + 'header' => __('randomizer.dungeon_items.options.standard'), + 'content' => [ + 'All dungeons items are locked to their respective dungeons.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.mc'), + 'content' => [ + 'Maps and compasses are randomized freely into the world.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.mcs'), + 'content' => [ + 'Maps, compasses and small keys are randomized freely into the world.', + ], + ], + [ + 'header' => __('randomizer.dungeon_items.options.full'), + 'content' => [ + 'Maps, compasses, small keys and big keys are randomized freely in to the world.', + ], + ], + ], + ], + 'accessibility' => [ + 'header' => __('randomizer.accessibility.title'), + 'sections' => [ + [ + 'header' => __('randomizer.accessibility.options.items'), + 'content' => [ + '
    ' + . '
  • It is not guaranteed that you can reach every item location
  • ' + . '
  • It is guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is not guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.accessibility.options.locations'), + 'content' => [ + '
    ' + . '
  • It is guaranteed that you can reach every item location
  • ' + . '
  • It is guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.accessibility.options.none'), + 'content' => [ + '
    ' + . '
  • It is not guaranteed that you can reach every item location
  • ' + . '
  • It is not guaranteed that you can obtain every unique inventory item
  • ' + . '
  • It is not guaranteed that you can obtain all small/big keys
  • ' + . '
', + ], + ], + ], + ], + 'goal' => [ + 'header' => __('randomizer.goal.title'), + 'sections' => [ + [ + 'header' => __('randomizer.goal.options.ganon'), + 'content' => [ + 'Comme dans le jeu de base, votre objectif est d’obtenir les 7 cristaux pour aller affronter Ganon.', + ], + ], + [ + 'header' => __('randomizer.goal.options.fast_ganon'), + 'content' => [ + 'Similar to ' . __('randomizer.goal.options.ganon') . ', your goal will be to collect all required crystals and defeat Ganon, however defeating Agahnihm at the top of Ganon’s Tower is not necessarily required. Thus, if entrance shuffle is not enabled, the entrance to Ganon will already be open.', + ], + ], + [ + 'header' => __('randomizer.goal.options.dungeons'), + 'content' => [ + 'Vous devrez battre les boss de chaque donjon, y compris les deux apparitions d’Agahnim, avant de pouvoir vous confronter à Ganon.', + ], + ], + [ + 'header' => __('randomizer.goal.options.pedestal'), + 'content' => [ + 'Rassemblez les trois pendentifs et récupérez la Triforce au piédestal des bois perdus ! Vous aurez sans doute besoin de parcourir tout Hyrule pour y parvenir, et peut-être même de visiter la tour de Ganon.', + ], + ], + [ + 'header' => __('randomizer.goal.options.triforce-hunt'), + 'content' => [ + 'The Triforce has been shattered and scattered into 30 pieces throughout Hyrule! Collect 20 pieces and take them to Sahasrahla to win!', + 'Wait? Who do we take these silly pieces to? Well Murahdahla of course!', + 'Who’s Murahdahla? I hear you ask. Murahdahla is the younger brother of Sahasrahla and Aginah. Back from vacation in Lorule. He has some mystic powers so be sure to have a chat with him in the Castle Courtyard.', + ], + ], + ], + ], + 'tower_open' => [ + 'header' => __('randomizer.tower_open.title'), + 'sections' => [ + [ + 'header' => '0 - 7', + 'content' => [ + 'Pick the number of Crystals required to open the way to Ganon’s Tower.', + ], + ], + [ + 'header' => __('randomizer.tower_open.options.random'), + 'content' => [ + 'This will pick a random value from above for entry into Ganon’s Tower.', + ], + ], + ], + ], + 'ganon_open' => [ + 'header' => __('randomizer.ganon_open.title'), + 'sections' => [ + [ + 'header' => '0 - 7', + 'content' => [ + 'Pick the number of Crystals required to defeat to Ganon.', + ], + ], + [ + 'header' => __('randomizer.ganon_open.options.random'), + 'content' => [ + 'This will pick a random value from above to defeat Ganon.', + ], + ], + ], + ], + 'world_state' => [ + 'header' => __('randomizer.world_state.title'), + 'sections' => [ + [ + 'header' => __('randomizer.world_state.options.standard'), + 'content' => [ + 'Calqué sur le jeu de base : Link commence l’aventure dans son lit, reçoit une arme de son oncle (selon le paramétrage des épées, voir ci-dessous) et doit secourir la princesse Zelda avant de pouvoir continuer.', + ], + ], + [ + 'header' => __('randomizer.world_state.options.open'), + 'content' => [ + 'Dans ce mode de jeu vous débutez de la maison de Link ou au sanctuaire (au choix) et vous n’êtes pas obligés de compléter la séquence d’introduction avant de parcourir le monde d’Hyrule. Quelques points à noter :', + '
    ' + . '
  • L’oncle de Link est déjà dans les égouts et possède un item.
  • ' + . '
  • Aucune salle obscure n’est éclairée, pas même les égouts.
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.world_state.options.inverted'), + 'content' => [ + 'Fatigué de la progression classique ? Nous avons le mode de jeu idéal pour vous !', + 'En inversé, Link débutera dans le monde des ténèbres pour terminer dans le monde de lumière.', + 'C’est un mode de jeu assez difficile que nous ne recommandons pas aux nouveaux joueurs : les ennemis du monde des ténèbres font très mal, surtout quand on a que 3 cœurs ...', + 'Dans les faits, ce mode de jeu apporte de nombreuses modifications :', + '
    ' + . '
  • La maison de Link remplace le magasin de bombes du monde des ténèbres, et réciproquement.
  • ' + . '
  • Le ' . __('item.MagicMirror') . ' vous transporte du monde de la lumière vers celui des ténèbres.
  • ' + . '
  • La ' . __('item.OcarinaInactive') . ' ne fonctionne que dans le monde des ténèbres, mais devra quand même s’activer dans le monde de lumière.
  • ' + . '
  • Des modifications ont été apportées au terrain pour vous permettre d’atteindre certains endroits du monde de lumière qui nécessitaient le ' . __('item.MagicMirror') . '
  • ' + . '
  • Le vieil homme est maintenant perdu dans le monde des ténèbres, mais vous devrez le reconduire chez lui, dans le monde de lumière.
  • ' + . '
  • Les portails qui menaient au monde des ténèbres n’ont pas bougés, mais sont maintenant dans le monde des ténèbres et nécessitent les mêmes items pour les atteindre.
  • ' + . '
  • Agahnim a quitté le château d’Hyrule pour s’installer sur la montagne de la mort et a “oublié” d’en protéger l’accès. Oh, nous avons également ajouté des escaliers pour atteindre la montagne de la mort facilement dans le monde des ténèbres.
  • ' + . '
  • Suite à ce déménagement, la tour de Ganon a maintenant pris la place du château d’Hyrule, mais il vous faudra toujours 7 cristaux pour y pénétrer.
  • ' + . '
  • Le mur de Ice Palace est tombé, vous pourrez simplement y accéder à la nage.
  • ' + . '
  • Le sommet de Turtle Rock peut être atteint en escaladant simplement la queue de la tortue.
  • ' + . '
  • N’oubliez pas qu’un lapin est parfaitement capable de lire le ' . __('item.BookOfMudora') . ', ou d’interagir avec le monde qui l’entoure...
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.world_state.options.retro'), + 'content' => [ + 'Basé sur le premier Legend of Zelda sur NES, cette variante implique de nombreux changements.', + [ + 'header' => 'Un Arc Coûteux', + 'content' => [ + 'L’arc n’utilise plus des flèches mais des rupees !', + 'Tirer une flèche en bois vous coûte 10 rupees, tandis qu’une flèche d’argent vous en coûte 50.', + 'De plus, l’arc n’est fourni avec aucune munition : vous devrez trouver les flèches d’argent, ou acquérir les flèches de bois auprès d’un marchand pour pouvoir l’utiliser.', + ], + ], + [ + 'header' => 'Magasins', + 'content' => [ + 'Cinq magasins sur un total de neuf posséderont un inventaire différent du jeu de base (le magasin de bombe et celui de la sorcière ne seront jamais modifiés). Ces nouveaux magasins proposeront les flèches de bois pour 80 rupees ainsi que des petites clés pour 100 rupees l’unité. Vous pourrez acheter autant de petite clé que vous le souhaitez.', + ], + ], + [ + 'header' => 'Petites clés', + 'content' => [ + 'Les petites clés ne sont plus liées à leur donjon respectif et peuvent être trouvées partout dans le monde d’Hyrule. Les clés disponibles sous les pots ou qui apparaissent à la mort d’ennemis n’ont en revanche pas bougées.', + '10 petites clés ont été retirées en difficulté Facile et Normale ; 15 en Difficile, Expert et Infernal. Vous devrez réfléchir avant d’utiliser vos clés, mais n’oubliez pas que vous pourrez en acheter en cas de besoin.', + ], + ], + [ + 'header' => 'Cavernes à Choix', + 'content' => [ + 'Quatre maisons et cavernes qui ne mènent d’ordinaire à aucun item sont sélectionnées aléatoirement pour être remplacées par des cavernes à choix. À l’intérieur de celles-ci, le joueur aura le choix entre un réceptacle de cœur ou une potion bleue à boire immédiatement. Cela signifie qu’il y a plus de réceptacle de cœur que d’ordinaire, mais vous ne pourrez jamais avoir plus de 20 cœurs au total malgré tout.', + 'Une caverne ou maison supplémentaire vous mènera à un vieil homme mystérieux qui vous confiera une épée, mais le nombre d’épées dans le pool ne change pas.', + ], + ], + ], + ], + ], + ], + 'entrance_shuffle' => [ + 'header' => __('randomizer.entrance_shuffle.title'), + 'subheader' => 'Der Entrance Randomizer erlaubt dir die Welt auf den Kopf zu stellen und das Spiel dennoch zu spielen.', + 'sections' => [ + 'none' => [ + 'header' => __('randomizer.entrance_shuffle.options.none'), + 'content' => [ + 'No entrance shuffling is applied.', + ], + ], + 'simple' => [ + 'header' => __('randomizer.entrance_shuffle.options.simple'), + 'content' => [ + 'Mélange les entrées des donjons entre elles. Si un donjon possède plusieurs entrées elles sont mélangées de telle sorte qu’elles restent toute dans la même zone.', + 'À l’exception de la montagne de la mort côté monde de lumière ou le mélange est plus permissif, les intérieurs sont également mélangés mais sont reliés au même endroit extérieur.', + ], + ], + 'restricted' => [ + 'header' => __('randomizer.entrance_shuffle.options.restricted'), + 'content' => [ + 'Les entrées de donjons sont mélangées comme dans le mélange simple, mais les autres entrées sont connectées plus librement. Si une zone possède plusieurs entrées, elles sont toutes dans le même monde.', + ], + ], + 'full' => [ + 'header' => __('randomizer.entrance_shuffle.options.full'), + 'content' => [ + 'Mélange les entrées de cavernes et de donjons entre elles. Si une zone possède plusieurs entrées, elles sont toutes dans le même monde.', + ], + ], + 'crossed' => [ + 'header' => __('randomizer.entrance_shuffle.options.crossed'), + 'content' => [ + 'Mélange les entrées de cavernes et de donjons entre elles, mais les zones peuvent maintenant se croiser entre monde des ténèbres et monde de lumière.', + ], + ], + 'insanity' => [ + 'header' => __('randomizer.entrance_shuffle.options.insanity'), + 'content' => [ + 'Sépare les entrées et les sorties des zones et mélange le tout. Les cavernes qui ne possèdent qu’une seule entrée dans le jeu de base ressortent quand même au même endroit.', + ], + ], + ], + ], + 'bosses' => [ + 'header' => __('randomizer.boss_shuffle.title'), + 'sections' => [ + [ + 'header' => __('randomizer.boss_shuffle.options.none'), + 'content' => [ + 'Bosses will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.simple'), + 'content' => [ + 'The normal number of each boss shuffled in their different locations, so expect to see armos knights, lanmolas, and moldorm twice.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.full'), + 'content' => [ + 'Similar to ' . __('randomizer.boss_shuffle.options.simple') . ', except that 3 bosses are chosen at random to be seen twice.', + ], + ], + [ + 'header' => __('randomizer.boss_shuffle.options.random'), + 'content' => [ + 'All bosses chosen at random, you may see any boss multiple times as well as not see a boss at all.', + ], + ], + ], + ], + 'enemy_shuffle' => [ + 'header' => __('randomizer.enemy_shuffle.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_shuffle.options.none'), + 'content' => [ + 'Enemies will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_shuffle.options.shuffled'), + 'content' => [ + 'Enemies are shuffled, Thieves are killable, Tile rooms are not random, Enemies are not random under bushes.', + ], + ], + [ + 'header' => __('randomizer.enemy_shuffle.options.random'), + 'content' => [ + 'Anything goes with enemies.', + ], + ], + ], + ], + 'hints' => [ + 'header' => __('randomizer.hints.title'), + 'content' => [ + 'Enable or disable the hints found on telepathic tiles throughout the world.', + ], + ], + 'difficulty' => [ + 'header' => __('randomizer.difficulty.title'), + 'item_pool' => __('randomizer.item_pool.title'), + 'item_functionality' => __('randomizer.item_functionality.title'), + 'comparison' => [ + 'header' => 'Comparaison de difficulté', + 'maximum_health' => 'Santé maximale', + 'heart_containers' => 'Réceptacles de coeur', + 'heart_pieces' => 'Quarts de coeur', + 'maximum_mail' => 'Meilleure Tunique', + 'number_in_pool' => '# disponibles', + 'maximum_sword' => 'Meilleure Épée', + 'maximum_shield' => 'Meilleur Bouclier', + 'shields_store' => 'Boucliers achetables ?', + 'maximum_magic' => 'Magie maximale', + 'number_silvers' => 'Flèches d’Argent', + 'number_silvers_swordless' => 'Flèches d’Argent (sans épée)', + 'number_bottles' => 'Flacons', + 'number_lamps' => 'Lanternes', + 'potion_magic' => 'Soin des potions de magie', + 'potion_health' => 'Soin des potions de santé', + 'bug_net_fairy' => 'Fées Capturables ?', + 'powder_bubble' => 'Poudre sur les Antifées', + 'cape_consumption' => 'Consommation de la Cape', + 'byrna_invincible' => 'Byrna rend invincible ?', + 'stun_boomerang' => 'Les Boomerangs étourdissent ?', + 'stun_hookshot' => 'Le Grappin étourdit ?', + 'capacity_upgrade' => 'Extensions de Carquois & de Sac de Bombes', + 'drop_rates' => 'Chance de drop des ennemis', + 'quarter' => 'Quart', + 'half' => 'Moitié', + 'normal' => 'Normal', + 'shield_3' => 'Miroir', + 'shield_2' => 'Feu', + 'shield_1' => 'Simple', + 'none' => 'Aucun', + 'sword_4' => 'Or', + 'sword_3' => 'Trempée', + 'sword_2' => 'Master Sword', + 'mail_3' => 'Rouge', + 'mail_2' => 'Bleue', + 'mail_1' => 'Verte', + 'fairy' => 'Fée', + 'heart' => 'Cœur', + 'bee' => 'Abeilles', + 'yes' => 'Oui', + 'no' => 'Non', + 'tooltip' => [ + 'silvers' => 'Les flèches d’argent ne fonctionnent que dans la pyramide de Ganon.', + 'bottles' => 'Une fois que 4 bouteilles ont été collectées, les bouteilles restantes deviendront des rubis.', + 'potion_magic' => 'Les potions rempliront 100% de magie dans Spike Cave.', + 'potion_health' => 'Les potions rempliront 20 coeurs à Spike Cave.', + ], + ], + ], + 'weapons' => [ + 'header' => __('randomizer.weapons.title'), + 'sections' => [ + [ + 'header' => __('randomizer.weapons.options.randomized'), + 'content' => [ + 'Toutes les améliorations d’épées sont aléatoires. Vous commencerez sans épée et il peut se passer du temps avant que vous en trouviez une. Utilisez des bombes, des buissons ou mêmes des panneaux pour vous défendre jusqu’à tomber sur une arme plus efficace.', + 'Si cette option est combinée au mode ' . __('randomizer.world_state.options.standard') . ' ' . __('randomizer.world_state.title') . ' (voir ci-dessus), votre oncle vous offrira un des items suivants pour vous permettre de finir la séquence d’introduction :', + '
    ' + . '
  • Épée (oui, c’est possible !)
  • ' + . '
  • Marteau
  • ' + . '
  • Arc, avec un plein de flèches
  • ' + . '
  • Un plein de Bombes
  • ' + . '
  • Baguette de Feu, avec un plein de magie
  • ' + . '
  • Canne de Somaria, avec un plein de magie
  • ' + . '
  • Canne de Byrna, avec un plein de magie
  • ' + . '
', + ], + ], + [ + 'header' => __('randomizer.weapons.options.assured'), + 'content' => [ + 'Link starts with a sword in his hands, prepared to take on the world.', + ], + ], + [ + 'header' => __('randomizer.weapons.options.vanilla'), + 'content' => [ + 'Link will be able to find the four swords in their regular locations.', + ], + ], + [ + 'header' => __('randomizer.weapons.options.swordless'), + 'content' => [ + 'Il n’y a aucune épée dans le jeu ! Cela implique quelques changements :', + '
    ' + . '
  • Les épées ont été remplacées par des 20 rupees (verts).
  • ' + . '
  • La barrière de la tour d’Agahnim peut être détruite avec le marteau.
  • ' + . '
  • Le rideau à la fin de la tour d’Agahnim est déjà ouvert, tout comme les lierres de Skull Woods.
  • ' + . '
  • Les médaillons ne sont utilisables que pour ouvrir Misery Mire et Turtle Rock, ou pour progresser à l’intérieur de Ice Palace. En temps normal, ils nécessitent une épée.
  • ' + . '
  • Ganon prend maintenant des dégâts du marteau.
  • ' + . '
  • Les flèches d’argent sont disponibles dans tous les modes de difficultés.
  • ' + . '
  • Les stèles d’Ether et de Bombos nécessitent le livre de Mudora et le marteau.
  • ' + . '
', + ], + ], + ], + ], + 'enemy_health' => [ + 'header' => __('randomizer.enemy_health.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_health.options.default'), + 'content' => [ + 'Enemy Health will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.easy'), + 'content' => [ + 'All enemy health will be in the 1-4 hp range.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.hard'), + 'content' => [ + 'All enemy health will be in the 2-15 hp range.', + ], + ], + [ + 'header' => __('randomizer.enemy_health.options.expert'), + 'content' => [ + 'All enemy health will be in the 2-30 hp range.', + ], + ], + ], + ], + 'enemy_damage' => [ + 'header' => __('randomizer.enemy_damage.title'), + 'sections' => [ + [ + 'header' => __('randomizer.enemy_damage.options.default'), + 'content' => [ + 'Enemy damage will not be randomized in any way.', + ], + ], + [ + 'header' => __('randomizer.enemy_damage.options.shuffled'), + 'content' => [ + 'The damage enemies do will be shuffled.', + ], + ], + [ + 'header' => __('randomizer.enemy_damage.options.random'), + 'content' => [ + 'The damage enemies do will be completely randomized.', + ], + ], + ], + ], + 'post_generation' => [ + 'header' => 'Post Generation (cosmetic)', + 'cards' => [ + 'heart_speed' => [ + 'header' => __('rom.settings.heart_speed'), + 'content' => [ + 'Change the heart beep speed when Link is low on health.', + ], + ], + 'play_as' => [ + 'header' => __('rom.settings.play_as'), + 'content' => [ + 'You may choose a new sprite for Link and enjoy Hyrule as this character.', + ], + ], + 'menu_speed' => [ + 'header' => __('rom.settings.menu_speed'), + 'content' => [ + 'Only allowed in some configurations, When available this will allow you to set the speed of the menu opening and closing.', + ], + ], + 'heart_color' => [ + 'header' => __('rom.settings.heart_color'), + 'content' => [ + 'For players with color-blindness, we have a few options so they know how much health they have.', + ], + ], + 'music' => [ + 'header' => __('rom.settings.music'), + 'content' => [ + 'Enable or disable the background music so you can listen to your our sweet tracks.', + ], + ], + 'quickswap' => [ + 'header' => __('rom.settings.quickswap'), + 'content' => [ + 'Only allowed in some configurations, When available this will allow you to use L and R buttons to change items without opening the menu.', + ], + ], + 'palette_shuffle' => [ + 'header' => __('rom.settings.palette_shuffle'), + 'content' => [ + 'Shuffles the colors of the game around, an Enemizer staple.', + ], + ], + ], + ], + 'item_pool' => 'Groupe d’objets', + ], ]; diff --git a/resources/lang/fr/races.php b/resources/lang/fr/races.php index 4a93a8fa9..055b4e3ee 100644 --- a/resources/lang/fr/races.php +++ b/resources/lang/fr/races.php @@ -1,73 +1,73 @@ 'Parties organisées', - 'cards' => [ - 'races' => [ - 'header' => 'Courses', - 'sections' => [ - [ - 'header' => '', - 'content' => [ - 'La plupart des courses sont faites au travers de SpeedRacing.tv ou SpeedRunsLive.com. Vous y trouverez toutes les informations nécessaires pour profiter de l’action !', - ], - ], - [ - 'header' => 'Courses en Mode Standard, Hebdomadaires, le Samedi à 15h heure de l’Est Américain', - 'content' => [ - 'Événement principal de la communauté, cette course hebdomadaire compte beaucoup de compétiteurs !', - ], - ], - [ - 'header' => 'Course en Mode Ouvert, Hebdomadaire, le Dimanche à 17h heure de l’Est Américain', - 'content' => [ - 'Rejoignez-nous tous les Dimanches pour une autre course hebdomadaire populaire dans la communauté.', - ], - ], - [ - 'header' => 'La Course Communautaire Nocturne, 22h heure de l’Est Américain', - 'content' => [ - 'Nous faisons aussi des courses nocturnes pour ceux qui cherchent à jouer tous les jours !', - ], - ], - [ - 'header' => 'Courses Ponctuelles', - 'content' => [ - 'Les courses planifiées ne correspondent pas avec vos horaires ? Vous cherchez une course avec des options exotiques ? Rejoignez une course ponctuelle ! Vous trouverez des joueurs à toute heure de la journée. Rejoignez le canal #race-planning sur notre Discord!', - ], - ], - ], - ], - 'watch' => [ - 'header' => 'Regarder', - 'content' => [ - 'Avec autant d’événements, il y a toujours une course à regarder ! Suivez ces réseaux et ne manquez aucun match !', - ], - ], - 'network' => [ - 'header' => 'Réseaux de Courses', - 'content' => [ - 'Les courses sont habituellement organisées au sein d’un réseau de course. Ces sites facilitent l’organisation, ajoutent un chronomètre officiel et permettent autant aux coureurs qu’aux spectateurs de trouver plus facilement des courses.', - 'Soyez surs de jeter un oeil aux sites SpeedRunsLive.com et SpeedRacing.tv pour plus d’informations !', - ], - ], - 'tournament' => [ - 'header' => 'Tournois', - 'sections' => [ - [ - 'header' => '', - 'content' => [ - 'Rejoignez-nous pour de l’action au cours de tournois avec des commentateurs experts au côté de joueurs d’élite !', - ], - ], - [ - 'header' => 'Tournois bi-annuels sur invitation', - 'content' => [ - 'Soyez témoins des meilleurs coureurs en compétition pour le Trophée ! Vous pensez avoir ce qu’il faut pour être au coude à coude avec les meilleurs ? Rejoignez notre Discord et gardez un oeil sur les qualifications !', - 'Le tournoi du Printemps sur invitation dure de Mars à Juin.', - 'Le tournoi d’Automne sur invitation dure de Septembre à Décembre.', - ], - ], - ], - ], - ], + 'header' => 'Parties organisées', + 'cards' => [ + 'races' => [ + 'header' => 'Courses', + 'sections' => [ + [ + 'header' => '', + 'content' => [ + 'La plupart des courses sont faites au travers de SpeedRacing.tv ou SpeedRunsLive.com. Vous y trouverez toutes les informations nécessaires pour profiter de l’action !', + ], + ], + [ + 'header' => 'Courses en Mode Standard, Hebdomadaires, le Samedi à 15h heure de l’Est Américain', + 'content' => [ + 'Événement principal de la communauté, cette course hebdomadaire compte beaucoup de compétiteurs !', + ], + ], + [ + 'header' => 'Course en Mode Ouvert, Hebdomadaire, le Dimanche à 17h heure de l’Est Américain', + 'content' => [ + 'Rejoignez-nous tous les Dimanches pour une autre course hebdomadaire populaire dans la communauté.', + ], + ], + [ + 'header' => 'La Course Communautaire Nocturne, 22h heure de l’Est Américain', + 'content' => [ + 'Nous faisons aussi des courses nocturnes pour ceux qui cherchent à jouer tous les jours !', + ], + ], + [ + 'header' => 'Courses Ponctuelles', + 'content' => [ + 'Les courses planifiées ne correspondent pas avec vos horaires ? Vous cherchez une course avec des options exotiques ? Rejoignez une course ponctuelle ! Vous trouverez des joueurs à toute heure de la journée. Rejoignez le canal #race-planning sur notre Discord!', + ], + ], + ], + ], + 'watch' => [ + 'header' => 'Regarder', + 'content' => [ + 'Avec autant d’événements, il y a toujours une course à regarder ! Suivez ces réseaux et ne manquez aucun match !', + ], + ], + 'network' => [ + 'header' => 'Réseaux de Courses', + 'content' => [ + 'Les courses sont habituellement organisées au sein d’un réseau de course. Ces sites facilitent l’organisation, ajoutent un chronomètre officiel et permettent autant aux coureurs qu’aux spectateurs de trouver plus facilement des courses.', + 'Soyez surs de jeter un oeil aux sites SpeedRunsLive.com et SpeedRacing.tv pour plus d’informations !', + ], + ], + 'tournament' => [ + 'header' => 'Tournois', + 'sections' => [ + [ + 'header' => '', + 'content' => [ + 'Rejoignez-nous pour de l’action au cours de tournois avec des commentateurs experts au côté de joueurs d’élite !', + ], + ], + [ + 'header' => 'Tournois bi-annuels sur invitation', + 'content' => [ + 'Soyez témoins des meilleurs coureurs en compétition pour le Trophée ! Vous pensez avoir ce qu’il faut pour être au coude à coude avec les meilleurs ? Rejoignez notre Discord et gardez un oeil sur les qualifications !', + 'Le tournoi du Printemps sur invitation dure de Mars à Juin.', + 'Le tournoi d’Automne sur invitation dure de Septembre à Décembre.', + ], + ], + ], + ], + ], ]; diff --git a/resources/lang/fr/randomizer.php b/resources/lang/fr/randomizer.php index 2b26d8aa0..697a626c5 100644 --- a/resources/lang/fr/randomizer.php +++ b/resources/lang/fr/randomizer.php @@ -1,84 +1,214 @@ 'Randomiseur d’objets', - 'switch' => [ - 'entrance' => 'Passer au Randomiseur de portes', - ], - 'difficulty' => [ - 'title' => 'Difficulté', - 'options' => [ - 'easy' => 'Facile', - 'normal' => 'Normal', - 'hard' => 'Difficile', - 'expert' => 'Expert', - 'insane' => 'Insensé', - ], - ], - 'difficulty_adjustments' => [ - 'title' => 'Difficulté “Fixes”', - 'options' => [ - -1 => 'Facile', - 0 => 'Normal', - 1 => 'Difficile', - 2 => 'Expert', - 3 => 'Insensé', - ], - ], - 'goal' => [ - 'title' => 'Objectif', - 'options' => [ - 'ganon' => 'Vaincre Ganon', - 'dungeons' => 'Tous les Donjons', - 'pedestal' => 'Piédestal de la Master Sword', - 'triforce-hunt' => 'Morceaux de Triforce ', - ], - ], - 'logic' => [ - 'title' => 'Logique', - 'options' => [ - 'NoGlitches' => 'Sans Glitches', - 'OverworldGlitches' => 'Glitches Monde Extérieur', - 'MajorGlitches' => 'Glitches Majeurs', - 'None' => 'Aucun (je sais ce que je fais)', - ], - 'glitch_warning' => 'Cette logique nécessite la connaissance des glitches majeurs**', - ], - 'mode' => [ - 'title' => 'Mode', - 'options' => [ - 'standard' => 'Standard', - 'open' => 'Ouvert', - 'inverted' => 'Inversé', - ], - ], - 'weapons' => [ - 'title' => 'Épées', - 'options' => [ - 'randomized' => 'Randomisées', - 'uncle' => 'Assurés', - 'swordless' => 'Sans Épée', - ], - ], - 'variation' => [ - 'title' => 'Variation', - 'options' => [ - 'none' => 'Aucune', - 'timed-race' => 'Chronométrée', - 'timed-ohko' => 'Décompte Finale', - 'ohko' => 'Zéro Coeurs', - 'key-sanity' => 'Clé-sordre', - 'retro' => 'Retro', - ], - ], - 'generate' => [ - 'race' => 'Générer une ROM de Course', - 'race_warning' => 'Les spoilers ne seront jamais disponibles pour cette option.', - 'spoiler_race' => 'Spoiler de la ROM de Course', - 'casual' => 'Générer une ROM', - ], - 'details' => [ - 'title' => 'Détails du jeu', - 'save_spoiler' => 'Enregistrer le spoiler', - 'save_rom' => 'Sauvegarder la ROM', - ], + 'title' => 'Randomizer', + 'preset' => [ + 'title' => 'Select Preset', + 'customize' => 'Customize', + 'options' => [ + 'default' => 'Default', + 'beginner' => 'Beginner', + 'veetorp' => 'OWG (Veetorp’s Favorite)', + 'crosskeys' => 'Crosskeys', + 'quick' => 'Super Quick', + 'nightmare' => 'Nightmare', + 'custom' => 'Custom', + ], + ], + 'placement' => [ + 'title' => 'Item Placement', + ], + 'item_placement' => [ + 'title' => 'Item Placement', + 'options' => [ + 'basic' => 'Basic', + 'advanced' => 'Advanced', + ], + ], + 'dungeon_items' => [ + 'title' => 'Dungeon Items', + 'options' => [ + 'standard' => 'Standard', + 'mc' => 'Maps/Compasses', + 'mcs' => 'Maps/Compasses/Small Keys', + 'full' => 'Keysanity', + ], + ], + 'accessibility' => [ + 'title' => 'Accessibility', + 'options' => [ + 'items' => '100% Inventory', + 'locations' => '100% Locations', + 'none' => 'Not Guaranteed', + ], + ], + 'glitches_required' => [ + 'title' => 'Glitches Required', + 'options' => [ + 'none' => 'None', + 'overworld_glitches' => 'Glitches Monde Extérieur', + 'major_glitches' => 'Glitches Majeurs', + 'no_logic' => 'No Logic', + ], + 'glitch_warning' => 'Cette logique nécessite la connaissance des glitches majeurs**', + ], + 'goal' => [ + 'title' => 'Objectif', + 'options' => [ + 'ganon' => 'Vaincre Ganon', + 'fast_ganon' => 'Fast Ganon', + 'dungeons' => 'Tous les Donjons', + 'pedestal' => 'Piédestal de la Master Sword', + 'triforce-hunt' => 'Morceaux de Triforce ', + ], + ], + 'tower_open' => [ + 'title' => 'Open Tower', + 'options' => [ + '0' => '0 Crystals', + '1' => '1 Crystal', + '2' => '2 Crystals', + '3' => '3 Crystals', + '4' => '4 Crystals', + '5' => '5 Crystals', + '6' => '6 Crystals', + '7' => '7 Crystals', + 'random' => 'Random' + ], + ], + 'ganon_open' => [ + 'title' => 'Ganon Vulnerable', + 'options' => [ + '0' => '0 Crystals', + '1' => '1 Crystal', + '2' => '2 Crystals', + '3' => '3 Crystals', + '4' => '4 Crystals', + '5' => '5 Crystals', + '6' => '6 Crystals', + '7' => '7 Crystals', + 'random' => 'Random' + ], + ], + 'gameplay' => [ + 'title' => 'Gameplay', + ], + "world_state" => [ + 'title' => 'World State', + 'options' => [ + 'standard' => 'Standard', + 'open' => 'Ouvert', + 'inverted' => 'Inversé', + 'retro' => 'Retro', + ], + ], + "entrance_shuffle" => [ + 'title' => 'Entrance Shuffle', + 'options' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'restricted' => 'Restreint', + 'full' => 'Complet', + 'crossed' => 'Croisé', + 'insanity' => 'Insensé', + ], + ], + "boss_shuffle" => [ + 'title' => 'Boss Shuffle', + 'options' => [ + 'none' => 'None', + 'simple' => 'Simple', + 'full' => 'Full', + 'random' => 'Random', + ], + ], + "enemy_shuffle" => [ + 'title' => 'Enemy Shuffle', + 'options' => [ + 'none' => 'None', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + ], + "hints" => [ + 'title' => 'Hints', + 'options' => [ + 'on' => 'On', + 'off' => 'Off', + ], + ], + 'weapons' => [ + 'title' => 'Épées', + 'options' => [ + 'randomized' => 'Randomisées', + 'assured' => 'Assurés', + 'vanilla' => 'Vanilla', + 'swordless' => 'Sans Épée', + ], + ], + 'item_pool' => [ + 'title' => 'Item Pool', + 'options' => [ + 'easy' => 'Easy', + 'normal' => 'Normal', + 'hard' => 'Difficile', + 'expert' => 'Expert', + 'crowd_control' => 'Crowd Control', + ], + 'crowd_control_warning' => '* This setting is meant to be used with the Crowd Control Twitch extension. find out more: https://crowdcontrol.live/', + ], + 'item_functionality' => [ + 'title' => 'Item Functionality', + 'options' => [ + 'easy' => 'Easy', + 'normal' => 'Normal', + 'hard' => 'Difficile', + 'expert' => 'Expert', + ], + ], + 'enemy_damage' => [ + 'title' => 'Enemy Damage', + 'options' => [ + 'default' => 'Default', + 'shuffled' => 'Shuffled', + 'random' => 'Random', + ], + ], + 'enemy_health' => [ + 'title' => 'Enemy Health', + 'options' => [ + 'default' => 'Default', + 'easy' => 'Easy', + 'hard' => 'Difficile', + 'expert' => 'Expert', + ], + ], + 'generate' => [ + 'race' => 'Générer une ROM de Course', + 'race_warning' => 'Les spoilers ne seront jamais disponibles pour cette option.', + 'spoiler_race' => 'Spoiler de la ROM de Course', + 'back' => 'Change Settings', + 'regenerate' => 'Generate Again', + 'regenerate_tooltip' => 'Generate new game with same settings', + 'generating' => 'Generating...', + ], + 'details' => [ + 'title' => 'Détails du jeu', + 'save_spoiler' => 'Enregistrer le spoiler', + 'save_rom' => 'Sauvegarder la ROM', + ], + // depricated + 'variation' => [ + 'title' => 'Variation', + ], + 'difficulty' => [ + 'title' => 'Difficulté', + 'options' => [ + 'easy' => 'Easy', + 'normal' => 'Normal', + 'hard' => 'Difficile', + 'expert' => 'Expert', + 'insane' => 'Insensé', + 'crowdControl' => 'Crowd Control', + ], + ], ]; diff --git a/resources/lang/fr/resources.php b/resources/lang/fr/resources.php index 0e218a476..ab7ce6df5 100644 --- a/resources/lang/fr/resources.php +++ b/resources/lang/fr/resources.php @@ -1,95 +1,95 @@ 'Ressources', - 'cards' => [ - 'discord' => [ - 'header' => 'Discord', - 'content' => [ - '', - 'Rejoignez notre communauté Discord ! Nous comptons des gens sympathiques et serviables. Vous y trouverez des informations sur les événements communautaires, des mises à jour du Randomiseur ALttP, des guides utiles, des conseils et astuces, et bien plus ! Venez nous saluer et n’hésitez pas à jeter un oeil au canal #resources !', - ], - ], - 'learn' => [ - 'header' => 'Vidéos d’apprentissage', - 'content' => [ - '', - 'Jetez un oeil à nos guides de routing, nos tutoriels sur les glitchs, les annonces de mise à jour, les annonces de tournois, et plus encore ! Intéressants autant pour les joueurs débutants qui veulent apprendre que pour les joueurs expérimentés cherchant à parfaire leurs compétences.', - ], - ], - 'external' => [ - 'header' => 'Ressources Externes', - 'content' => [ - '', - ], - ], - 'pitfalls' => [ - 'header' => 'Choses à savoir', - 'content' => [ - '
    ' - . '
  • Vous pouvez utiliser le bouton Y pour alterner entre les flèches d’argent et les flèches normales, le Boomerang bleu et le rouge, le Champignon et la Poudre Magique, et entre la Pelle et la Flûte.
  • ' - . '
  • Dans le Monde des Ténèbres, vous pouvez utiliser le Grappin au dessus de la rivière au nord de la Pyramide. Cherchez les herbes qui dessinent une flèche !
  • ' - . '
  • Si vous vous trouvez dans la Bumper Cave avec la Cape Magique mais sans le Grappin, essayez de passer en haut à gauche du précipice … aucun Grappin nécessaire !
  • ' - . '
  • La barrière d’Agahnim peut être traversée avec la Cape Magique ou détruite avec une épée améliorée (Master Sword minimum)
  • ' - . '
  • Si vous avez le Miroir Magique, le Desert Palace peut être atteint depuis Misery Mire sans le Livre de Mudora.
  • ' - . '
  • Le Médaillon de Bombos fait fondre les choses aussi bien que la Baguette de Feu, ce qui est très utile pour Ice Palace.
  • ' - . '
  • Vous pouvez traverser des petits précipices en rebondissant contre des objets ou des murs grâce aux Bottes de Pégase.
  • ' - . '
  • Sahasrahla vous donne son objet lorsque vous lui parlez avec le Pendentif du Courage (pendentif vert).
  • ' - . '
  • La Super Bombe (la Bombe rouge) n’apparaît que lorsque vous avez récupéré les cristaux 5 et 6.
  • ' - . '
  • Le forgeron et le coffre violet resteront avec vous même si vous Sauvegardez et Quittez.
  • ' - . '
  • Vous n’êtes jamais obligés de traverser une salle dans le noir; la lanterne sera accessible pour éclairer votre chemin, donc, allez la trouver !
  • ' - . '
  • Les clés peuvent ne pas être accessibles si elles ne sont pas requises pour finir le jeu. Par exemple, dans Skull Woods, la grande clé peut se trouver dans le grand coffre.
  • ' - . '
', - ], - ], - 'changes' => [ - 'header' => 'Différences', - 'sections' => [ - [ - 'header' => 'Qu’est-ce qui a été mélangé ?', - 'content' => [ - '
    ' - . '
  • Pratiquement tous les endroits comportant des items uniques
  • ' - . '
  • Les Pendentifs et les Cristaux (vérifiez votre carte !)
  • ' - . '
  • Les médaillons requis pour Misery Mire et Turtle Rock
  • ' - . '
  • Les consommables laissés par les ennemis et les récompenses à tirer (par exemple : certains arbres)
  • ' - . '
', - ], - ], - [ - 'header' => 'Qu’est-ce qui n’a pas changé ?', - 'content' => [ - '
    ' - . '
  • Tous les magasins à travers Hyrule
  • ' - . '
  • Le jeu du tir à l’arc et les divers jeux de coffres
  • ' - . '
  • Les petites clés sous des pots ou portées par des ennemis
  • ' - . '
', - ], - ], - [ - 'header' => 'Qu’est-ce qui change du jeu original ?', - 'content' => [ - 'Il y a quelques modifications par rapport au jeu original qui améliorent le gameplay et empêchent d’être bloqué. La version 1.0 Japonaise est utilisée comme base pour la ROM, elle permet l’utilisation de glitchs exclusifs dans certains modes de jeu avancés.', - '
    ' - . '
  • Vous n’avez plus besoin de la Lanterne pour pousser le blason pendant le prologue.
  • ' - . '
  • Vous pouvez maintenant voir dans les salles dans le noir dans les égouts même si vous ne possédez pas la Lanterne (sauf en mode Ouvert).
  • ' - . '
  • Vous pouvez passer d’un item à l’autre lorsque deux items partagent le même emplacement en appuyant sur Y. Par exemple, vous pouvez porter en même temps la Pelle et la Flûte et passer de l’un à l’autre.
  • ' - . '
  • Le sous-menu des flacons ne s’ouvrira plus automatiquement. Vous pouvez l’ouvrir avec le bouton X ou faire défiler les flacons avec le bouton Y.
  • ' - . '
  • Les niveaux d’eau de Swamp Palace reviendront automatiquement à leur état initial lorsque vous sortirez de l’écran où se trouve l’entrée du donjon, à l’extérieur. Cela empêchera que vous soyez bloqués si vous avez englouti une clé dans le donjon.
  • ' - . '
  • Des symboles sont affichés en haut de l’écran de sélection des parties. Il s’agit d’un identifiant unique généré pour chaque seed, afin de vérifier que les joueurs utilisent la même. Ces symboles n’ont aucun autre intérêt.
  • ' - . '
  • La Pyramid Fairy et la Waterfall Fairy n’améliorent plus vos items. A la place, leurs grottes contiennent deux coffres qui comptent chacun comme correspondant aux améliorations qu’apportent les fées.
  • ' - . '
  • Le jeu de la pelle vous donnera obligatoirement l’item avant le 30ème coup de pelle.
  • ' - . '
  • Dans le Village of Outcasts, l’item du jeu des coffres est garanti à la première tentative (cela peut être le 1er ou de 2nd coffre).
  • ' - . '
', - ], - ], - ], + 'header' => 'Ressources', + 'cards' => [ + 'discord' => [ + 'header' => 'Discord', + 'content' => [ + '', + 'Rejoignez notre communauté Discord ! Nous comptons des gens sympathiques et serviables. Vous y trouverez des informations sur les événements communautaires, des mises à jour du Randomiseur ALttP, des guides utiles, des conseils et astuces, et bien plus ! Venez nous saluer et n’hésitez pas à jeter un oeil au canal #resources !', + ], + ], + 'learn' => [ + 'header' => 'Vidéos d’apprentissage', + 'content' => [ + '', + 'Jetez un oeil à nos guides de routing, nos tutoriels sur les glitchs, les annonces de mise à jour, les annonces de tournois, et plus encore ! Intéressants autant pour les joueurs débutants qui veulent apprendre que pour les joueurs expérimentés cherchant à parfaire leurs compétences.', + ], + ], + 'external' => [ + 'header' => 'Ressources Externes', + 'content' => [ + '', + ], + ], + 'pitfalls' => [ + 'header' => 'Choses à savoir', + 'content' => [ + '
    ' + . '
  • Vous pouvez utiliser le bouton Y pour alterner entre les flèches d’argent et les flèches normales, le Boomerang bleu et le rouge, le Champignon et la Poudre Magique, et entre la Pelle et la Flûte.
  • ' + . '
  • Dans le Monde des Ténèbres, vous pouvez utiliser le Grappin au dessus de la rivière au nord de la Pyramide. Cherchez les herbes qui dessinent une flèche !
  • ' + . '
  • Si vous vous trouvez dans la Bumper Cave avec la Cape Magique mais sans le Grappin, essayez de passer en haut à gauche du précipice … aucun Grappin nécessaire !
  • ' + . '
  • La barrière d’Agahnim peut être traversée avec la Cape Magique ou détruite avec une épée améliorée (Master Sword minimum)
  • ' + . '
  • Si vous avez le Miroir Magique, le Desert Palace peut être atteint depuis Misery Mire sans le Livre de Mudora.
  • ' + . '
  • Le Médaillon de Bombos fait fondre les choses aussi bien que la Baguette de Feu, ce qui est très utile pour Ice Palace.
  • ' + . '
  • Vous pouvez traverser des petits précipices en rebondissant contre des objets ou des murs grâce aux Bottes de Pégase.
  • ' + . '
  • Sahasrahla vous donne son objet lorsque vous lui parlez avec le Pendentif du Courage (pendentif vert).
  • ' + . '
  • La Super Bombe (la Bombe rouge) n’apparaît que lorsque vous avez récupéré les cristaux 5 et 6.
  • ' + . '
  • Le forgeron et le coffre violet resteront avec vous même si vous Sauvegardez et Quittez.
  • ' + . '
  • Vous n’êtes jamais obligés de traverser une salle dans le noir; la lanterne sera accessible pour éclairer votre chemin, donc, allez la trouver !
  • ' + . '
  • Les clés peuvent ne pas être accessibles si elles ne sont pas requises pour finir le jeu. Par exemple, dans Skull Woods, la grande clé peut se trouver dans le grand coffre.
  • ' + . '
', + ], + ], + 'changes' => [ + 'header' => 'Différences', + 'sections' => [ + [ + 'header' => 'Qu’est-ce qui a été mélangé ?', + 'content' => [ + '
    ' + . '
  • Pratiquement tous les endroits comportant des items uniques
  • ' + . '
  • Les Pendentifs et les Cristaux (vérifiez votre carte !)
  • ' + . '
  • Les médaillons requis pour Misery Mire et Turtle Rock
  • ' + . '
  • Les consommables laissés par les ennemis et les récompenses à tirer (par exemple : certains arbres)
  • ' + . '
', + ], + ], + [ + 'header' => 'Qu’est-ce qui n’a pas changé ?', + 'content' => [ + '
    ' + . '
  • Tous les magasins à travers Hyrule
  • ' + . '
  • Le jeu du tir à l’arc et les divers jeux de coffres
  • ' + . '
  • Les petites clés sous des pots ou portées par des ennemis
  • ' + . '
', + ], + ], + [ + 'header' => 'Qu’est-ce qui change du jeu original ?', + 'content' => [ + 'Il y a quelques modifications par rapport au jeu original qui améliorent le gameplay et empêchent d’être bloqué. La version 1.0 Japonaise est utilisée comme base pour la ROM, elle permet l’utilisation de glitchs exclusifs dans certains modes de jeu avancés.', + '
    ' + . '
  • Vous n’avez plus besoin de la Lanterne pour pousser le blason pendant le prologue.
  • ' + . '
  • Vous pouvez maintenant voir dans les salles dans le noir dans les égouts même si vous ne possédez pas la Lanterne (sauf en mode Ouvert).
  • ' + . '
  • Vous pouvez passer d’un item à l’autre lorsque deux items partagent le même emplacement en appuyant sur Y. Par exemple, vous pouvez porter en même temps la Pelle et la Flûte et passer de l’un à l’autre.
  • ' + . '
  • Le sous-menu des flacons ne s’ouvrira plus automatiquement. Vous pouvez l’ouvrir avec le bouton X ou faire défiler les flacons avec le bouton Y.
  • ' + . '
  • Les niveaux d’eau de Swamp Palace reviendront automatiquement à leur état initial lorsque vous sortirez de l’écran où se trouve l’entrée du donjon, à l’extérieur. Cela empêchera que vous soyez bloqués si vous avez englouti une clé dans le donjon.
  • ' + . '
  • Des symboles sont affichés en haut de l’écran de sélection des parties. Il s’agit d’un identifiant unique généré pour chaque seed, afin de vérifier que les joueurs utilisent la même. Ces symboles n’ont aucun autre intérêt.
  • ' + . '
  • La Pyramid Fairy et la Waterfall Fairy n’améliorent plus vos items. A la place, leurs grottes contiennent deux coffres qui comptent chacun comme correspondant aux améliorations qu’apportent les fées.
  • ' + . '
  • Le jeu de la pelle vous donnera obligatoirement l’item avant le 30ème coup de pelle.
  • ' + . '
  • Dans le Village of Outcasts, l’item du jeu des coffres est garanti à la première tentative (cela peut être le 1er ou de 2nd coffre).
  • ' + . '
', + ], + ], + ], - ], - ], + ], + ], ]; diff --git a/resources/lang/fr/rom.php b/resources/lang/fr/rom.php index 5cdc06d1a..25a5b6342 100644 --- a/resources/lang/fr/rom.php +++ b/resources/lang/fr/rom.php @@ -1,56 +1,58 @@ [ - 'title' => 'Pour commencer', - 'file_select' => 'Sélectionnez le fichier ROM', - 'content' => '
    ' - . '
  1. Sélectionnez votre fichier ROM et chargez-le dans le navigateur (utilisez une ROM Zelda no Densetsu: Kamigami no Triforce v1.0 avec une extension .smc ou .sfc)
  2. ' - . '
  3. Sélectionnez les ' . __('navigation.options') . ' pour déterminer de quelle façon le jeu sera randomisé
  4. ' - . '
  5. Cliquez sur ' . __('randomizer.generate.casual') . '
  6. ' - . '
  7. Ensuite, sauvegardez votre rom et commencez à jouer
  8. ' - . '
', - ], - 'info' => [ - 'logic' => __('randomizer.logic.title'), - 'build' => 'Création de ROM', - 'difficulty' => __('randomizer.difficulty.title'), - 'variation' => __('randomizer.variation.title'), - 'shuffle' => __('entrance.shuffle.title'), - 'mode' => __('randomizer.mode.title'), - 'weapons' => __('randomizer.weapons.title'), - 'goal' => __('randomizer.goal.title'), - 'permalink' => 'Lien permanent', - 'special' => 'Spécial', - 'notes' => 'Remarques', - 'generated' => 'Créé', - ], - 'settings' => [ - 'heart_speed' => 'Bip de vie faible', - 'heart_speeds' => [ - 'off' => 'Éteint', - 'double' => 'Vitesse Double', - 'normal' => 'Vitesse Normale', - 'half' => 'Moitié de Vitesse', - 'quarter' => 'Quart de Vitesse', - ], - 'menu_speed' => 'Vitesse du menu', - 'menu_speeds' => [ - 'instant' => 'Immédiat', - 'fast' => 'Rapide', - 'normal' => 'Normal', - 'slow' => 'Lent', - ], - 'heart_color' => 'Couleur des coeurs', - 'heart_colors' => [ - 'blue' => 'Bleu', - 'green' => 'Vert', - 'red' => 'Rouge', - 'yellow' => 'Jaune', - ], - 'play_as' => 'Jouer en tant que', - 'music' => 'Musique de fond', - 'music_info' => '(définie sur "Non" pour le support MSU-1)', - 'quickswap' => 'Changement rapide d’objets', - 'race_warning' => 'Ne fonctionne pas dans les ROMs de course', - ], + 'loader' => [ + 'title' => 'Pour commencer', + 'file_select' => 'Sélectionnez le fichier ROM', + 'content' => '
    ' + . '
  1. Sélectionnez votre fichier ROM et chargez-le dans le navigateur (utilisez une ROM Zelda no Densetsu: Kamigami no Triforce v1.0 avec une extension .smc ou .sfc)
  2. ' + . '
  3. Sélectionnez les ' . __('navigation.options') . ' pour déterminer de quelle façon le jeu sera randomisé
  4. ' + . '
  5. Cliquez sur ' . __('randomizer.generate.race') . '
  6. ' + . '
  7. Ensuite, sauvegardez votre rom et commencez à jouer
  8. ' + . '
', + ], + 'info' => [ + 'spoilerwarning' => 'AVERTISSEMENT : La personne qui a généré cette partie a regardé le spoiler log.', + 'logic' => __('randomizer.glitches_required.title'), + 'build' => 'Création de ROM', + 'difficulty' => __('randomizer.difficulty.title'), + 'variation' => __('randomizer.variation.title'), + 'shuffle' => __('entrance.shuffle.title'), + 'mode' => __('randomizer.world_state.title'), + 'weapons' => __('randomizer.weapons.title'), + 'goal' => __('randomizer.goal.title'), + 'permalink' => 'Lien permanent', + 'special' => 'Spécial', + 'notes' => 'Remarques', + 'generated' => 'Créé', + ], + 'settings' => [ + 'heart_speed' => 'Bip de vie faible', + 'heart_speeds' => [ + 'off' => 'Éteint', + 'double' => 'Vitesse Double', + 'normal' => 'Vitesse Normale', + 'half' => 'Moitié de Vitesse', + 'quarter' => 'Quart de Vitesse', + ], + 'menu_speed' => 'Vitesse du menu', + 'menu_speeds' => [ + 'instant' => 'Immédiat', + 'fast' => 'Rapide', + 'normal' => 'Normal', + 'slow' => 'Lent', + ], + 'heart_color' => 'Couleur des coeurs', + 'heart_colors' => [ + 'blue' => 'Bleu', + 'green' => 'Vert', + 'red' => 'Rouge', + 'yellow' => 'Jaune', + ], + 'play_as' => 'Jouer en tant que', + 'music' => 'Musique de fond', + 'music_info' => '(définie sur "Non" pour le support MSU-1)', + 'quickswap' => 'Changement rapide d’objets', + 'palette_shuffle' => 'Palette Shuffle', + 'race_warning' => 'Ne fonctionne pas dans les ROMs de course', + ], ]; diff --git a/resources/lang/fr/start.php b/resources/lang/fr/start.php index 389855b87..8ee6562b7 100644 --- a/resources/lang/fr/start.php +++ b/resources/lang/fr/start.php @@ -1,52 +1,52 @@ 'Commencez Votre Aventure!', - 'subheader' => 'Vous voulez tester vos compétences dans un Hyrule mélangé ? Vous êtes arrivé au bon endroit !', - 'cards' => [ - 'discord' => [ - 'header' => '1. Rejoignez notre communauté Discord', - 'content' => [ - '', - 'Nous comptons des gens sympathiques et serviables. Vous y trouverez des informations sur les événements communautaires, des mises à jour du Randomiseur ALttP, des guides utiles, des conseils et astuces, et bien plus ! Venez nous saluer !', - ] - ], - 'rom' => [ - 'header' => '2. Obtenez la ROM', - 'content' => [ - 'Vous aurez besoin de la ROM de base du jeu. Ce devrait être une ROM Zelda no Densetsu: Kamigami no Triforce v1.0. Ne vous inquiétez pas si vous ne pouvez pas lire le japonais; Le processus de correction fournit du texte en anglais tout en conservant les glitches propres à la version originale.', - 'Si vous rencontrez des problèmes, n’hésitez pas à demander de l’aide sur notre Discord!', - ] - ], - 'randomize' => [ - 'header' => '3. Choisissez Vos Options de Jeu', - 'content' => [ - 'Rendez-vous sur ' . __('navigation.randomizer') . ' et fournissez votre ROM. L’écran suivant affichera une variété d’options de jeu. Pour vos premiers essais, nous vous recommandons de remplacer «' . __('randomizer.difficulty.title') . '» par «' . __('randomizer.difficulty.options.easy') . '» et de laisser les autres paramètres tels quels. Cliquez ensuite sur «' . __('randomizer.generate.casual') . '» et vous recevrez un nouveau jeu aléatoire!', - 'Vous trouverez un guide plus détaillé de toutes les options disponibles ici.', - ] - ], - 'emulator' => [ - 'header' => '4. Obtenez un Moyen de Jouer', - 'content' => [ - 'Tout d’abord, vous aurez besoin de quelque chose pour lancer votre nouveau jeu. Nous vous recommandons d’utiliser un émulateur. Un émulateur est un programme qui réplique étroitement le matériel SNES, vous permettant de lancer des jeux SNES sur votre ordinateur. Vous pouvez obtenir l’émulateur recommandé, SNES9x, sur leur site Web ici.', - 'Bien que vous puissiez jouer avec votre clavier, une manette vous garantit une meilleure expérience. Bien que la plupart des manettes USB fonctionnent, nous vous recommandons une iBuffalo Classic USB Gamepad ou un 8Bitdo SFC30 Wireless Bluetooth Controller.', - 'Il existe d’autres méthodes prises en charge, notamment sur le matériel SNES d’origine. Il existe également certains émulateurs, tels que zsnes, qui ne fonctionneront pas correctement avec le randomiseur. Rejoignez-nous sur Discord pour en savoir plus!', - 'REMARQUE POUR LES JOUEURS SNESMINI: Renommez votre fichier ROM pour qu’il contienne 61 caractères ou moins, car SNESMini ne peut pas gérer les noms de fichiers longs.', - ] - ], - 'play' => [ - 'header' => '5. Jouer !', - 'content' => [ - 'Vous êtes enfin prêt à partir ! La meilleure façon d’apprendre est de charger votre nouvelle ROM et de commencer à jouer. Si vous avez l’impression d’être coincé, consultez la liste des choses à savoir ou consultez notre Discord.', - '
    ' - . '
  • Vous pouvez utiliser le bouton Y pour alterner entre les flèches d’argent et les flèches normales, le Boomerang bleu et le rouge, le Champignon et la Poudre Magique, et entre la Pelle et la Flûte.
  • ' - . '
  • Dans le Monde des Ténèbres, vous pouvez utiliser le Grappin au dessus de la rivière au nord de la Pyramide. Cherchez les herbes qui dessinent une flèche !
  • ' - . '
  • Si vous vous trouvez dans la Bumper Cave avec la Cape Magique mais sans le Grappin, essayez de passer en haut à gauche du précipice … aucun Grappin nécessaire !
  • ' - . '
  • Vous pouvez traverser des petits précipices en rebondissant contre des objets ou des murs grâce aux Bottes de Pégase.
  • ' - . '
  • Le forgeron et le coffre violet resteront avec vous même si vous Sauvegardez et Quittez.
  • ' - . '
  • Les clés peuvent ne pas être accessibles si elles ne sont pas requises pour finir le jeu. Par exemple, dans Skull Woods, la grande clé peut se trouver dans le grand coffre.
  • ' - . '
', - 'N’oubliez pas de consulter les ' . __('navigation.resources') . ' complètes avec des tutoriels et d’autres astuces!', - ] - ], - ], + 'header' => 'Commencez Votre Aventure!', + 'subheader' => 'Vous voulez tester vos compétences dans un Hyrule mélangé ? Vous êtes arrivé au bon endroit !', + 'cards' => [ + 'discord' => [ + 'header' => '1. Rejoignez notre communauté Discord', + 'content' => [ + '', + 'Nous comptons des gens sympathiques et serviables. Vous y trouverez des informations sur les événements communautaires, des mises à jour du Randomiseur ALttP, des guides utiles, des conseils et astuces, et bien plus ! Venez nous saluer !', + ] + ], + 'rom' => [ + 'header' => '2. Obtenez la ROM', + 'content' => [ + 'Vous aurez besoin de la ROM de base du jeu. Ce devrait être une ROM Zelda no Densetsu: Kamigami no Triforce v1.0. Ne vous inquiétez pas si vous ne pouvez pas lire le japonais; Le processus de correction fournit du texte en anglais tout en conservant les glitches propres à la version originale.', + 'Si vous rencontrez des problèmes, n’hésitez pas à demander de l’aide sur notre Discord!', + ] + ], + 'randomize' => [ + 'header' => '3. Choisissez Vos Options de Jeu', + 'content' => [ + 'Rendez-vous sur ' . __('navigation.randomizer') . ' et fournissez votre ROM. L’écran suivant affichera une variété d’options de jeu. Pour vos premiers essais, nous vous recommandons de remplacer «' . __('randomizer.difficulty.title') . '» par «' . __('randomizer.difficulty.options.easy') . '» et de laisser les autres paramètres tels quels. Cliquez ensuite sur «' . __('randomizer.generate.race') . '» et vous recevrez un nouveau jeu aléatoire!', + 'Vous trouverez un guide plus détaillé de toutes les options disponibles ici.', + ] + ], + 'emulator' => [ + 'header' => '4. Obtenez un Moyen de Jouer', + 'content' => [ + 'Tout d’abord, vous aurez besoin de quelque chose pour lancer votre nouveau jeu. Nous vous recommandons d’utiliser un émulateur. Un émulateur est un programme qui réplique étroitement le matériel SNES, vous permettant de lancer des jeux SNES sur votre ordinateur. Vous pouvez obtenir l’émulateur recommandé, SNES9x, sur leur site Web ici.', + 'Bien que vous puissiez jouer avec votre clavier, une manette vous garantit une meilleure expérience. Bien que la plupart des manettes USB fonctionnent, nous vous recommandons une iBuffalo Classic USB Gamepad ou un 8Bitdo SF30 Wireless Bluetooth Controller.', + 'Il existe d’autres méthodes prises en charge, notamment sur le matériel SNES d’origine. Il existe également certains émulateurs, tels que zsnes, qui ne fonctionneront pas correctement avec le randomiseur. Rejoignez-nous sur Discord pour en savoir plus!', + 'REMARQUE POUR LES JOUEURS SNESMINI: Renommez votre fichier ROM pour qu’il contienne 61 caractères ou moins, car SNESMini ne peut pas gérer les noms de fichiers longs.', + ] + ], + 'play' => [ + 'header' => '5. Jouer !', + 'content' => [ + 'Vous êtes enfin prêt à partir ! La meilleure façon d’apprendre est de charger votre nouvelle ROM et de commencer à jouer. Si vous avez l’impression d’être coincé, consultez la liste des choses à savoir ou consultez notre Discord.', + '
    ' + . '
  • Vous pouvez utiliser le bouton Y pour alterner entre les flèches d’argent et les flèches normales, le Boomerang bleu et le rouge, le Champignon et la Poudre Magique, et entre la Pelle et la Flûte.
  • ' + . '
  • Dans le Monde des Ténèbres, vous pouvez utiliser le Grappin au dessus de la rivière au nord de la Pyramide. Cherchez les herbes qui dessinent une flèche !
  • ' + . '
  • Si vous vous trouvez dans la Bumper Cave avec la Cape Magique mais sans le Grappin, essayez de passer en haut à gauche du précipice … aucun Grappin nécessaire !
  • ' + . '
  • Vous pouvez traverser des petits précipices en rebondissant contre des objets ou des murs grâce aux Bottes de Pégase.
  • ' + . '
  • Le forgeron et le coffre violet resteront avec vous même si vous Sauvegardez et Quittez.
  • ' + . '
  • Les clés peuvent ne pas être accessibles si elles ne sont pas requises pour finir le jeu. Par exemple, dans Skull Woods, la grande clé peut se trouver dans le grand coffre.
  • ' + . '
', + 'N’oubliez pas de consulter les ' . __('navigation.resources') . ' complètes avec des tutoriels et d’autres astuces!', + ] + ], + ], ]; diff --git a/resources/lang/fr/watch.php b/resources/lang/fr/watch.php index 7598fbb8c..d3b8659c7 100644 --- a/resources/lang/fr/watch.php +++ b/resources/lang/fr/watch.php @@ -1,38 +1,38 @@ 'Rejoignez l’aventure!', - 'cards' => [ - 'twitch' => [ - 'header' => 'Twitch', - 'content' => [ - 'Avec autant d’événements, il y a toujours une course à regarder ! Suivez ces réseaux et ne manquez aucun match !', - ], - 'button' => 'Communauté Twitch ALttP:R', - ], - 'tournament' => [ - 'header' => 'Tournois', - 'sections' => [ - [ - 'header' => 'Tournois à Venir', - 'content' => [ - 'Rejoignez-nous pour le printemps 2018, invitation à partir de ce mois de mars ! Rejoignez notre communauté Discord pour rester à jour !', - ], - ], - [ - 'header' => 'Invitation au printemps 2018', - 'content' => [ - 'Le printemps 2018 Invitational est terminé!', - 'Regardez tous les matchs ici!', - ], - ], - ], - ], - 'youtube' => [ - 'header' => 'Youtube', - 'content' => [ - '', - 'Abonnez-vous à notre chaîne Youtube et jetez un oeil à nos guides de routing, nos tutoriels sur les glitchs, les annonces de mise à jour, les annonces de tournois, et plus encore !', - ] - ], - ], + 'header' => 'Rejoignez l’aventure!', + 'cards' => [ + 'twitch' => [ + 'header' => 'Twitch', + 'content' => [ + 'Avec autant d’événements, il y a toujours une course à regarder ! Suivez ces réseaux et ne manquez aucun match !', + ], + 'button' => 'Communauté Twitch ALttP:R', + ], + 'tournament' => [ + 'header' => 'Tournois', + 'sections' => [ + [ + 'header' => 'Tournois à Venir', + 'content' => [ + 'Rejoignez-nous pour le printemps 2018, invitation à partir de ce mois de mars ! Rejoignez notre communauté Discord pour rester à jour !', + ], + ], + [ + 'header' => 'Invitation au printemps 2018', + 'content' => [ + 'Le printemps 2018 Invitational est terminé!', + 'Regardez tous les matchs ici!', + ], + ], + ], + ], + 'youtube' => [ + 'header' => 'Youtube', + 'content' => [ + '', + 'Abonnez-vous à notre chaîne Youtube et jetez un oeil à nos guides de routing, nos tutoriels sur les glitchs, les annonces de mise à jour, les annonces de tournois, et plus encore !', + ] + ], + ], ]; diff --git a/resources/sass/_bootstrap4fixes.scss b/resources/sass/_bootstrap4fixes.scss new file mode 100644 index 000000000..b0176f129 --- /dev/null +++ b/resources/sass/_bootstrap4fixes.scss @@ -0,0 +1,12 @@ +/* Bootstrap Toggle v2.2.2 corrections for Bootsrtap 4*/ +.toggle-off { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.toggle.off { + border-color: rgba(0, 0, 0, 0.25); +} + +.toggle-handle.btn { + background-color: white; + border: thin rgba(0, 0, 0, 0.25) solid; +} diff --git a/resources/sass/_loading.scss b/resources/sass/_loading.scss new file mode 100644 index 000000000..985a50afd --- /dev/null +++ b/resources/sass/_loading.scss @@ -0,0 +1,6 @@ +.loading { + margin: 0 auto; + width: 250px; + height: 270px; + background-image: url(data:image/gif;base64,R0lGODlh+gAOAfQAAPj4+DiQaPjIILhoIFCQEOhgsIjQ+PCgaHi4IDg4OPDYQPh4AIhYKHiQ+PhwMEDYcOCQUMAYIGiIuCgoyMgwEICA8CgoKP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkI1Q0M0OUE0QjQyNDExRTFBQkUxQzIwMjAzNzczRjRGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkI1Q0M0OUE1QjQyNDExRTFBQkUxQzIwMjAzNzczRjRGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjVDQzQ5QTJCNDI0MTFFMUFCRTFDMjAyMDM3NzNGNEYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjVDQzQ5QTNCNDI0MTFFMUFCRTFDMjAyMDM3NzNGNEYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2JhYF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYlJCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQJMgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW67e5Z4nECv2xF4vJ0g78vfgFN+e3t5hoeIenZ+gY02fgeRkX4FlZV+fguam5ydnZh9e5CSB4yOpyJ+A6urpKV9lrGys7S1tKOSrKumqI6qupSxoMPExZiyv6y8vcwkybqsANLSuK6TfdPS0NDLzd4pxdCu1dbk3MTf3wnr69kA7PDx8u3Z8efDAfn6+34M/v7d0qmJ526CwYMIEyZ0F++Bw4cQI+4LUAyCRYsBBaIhmC1hhY8gQy6sB0/ixJP6/P9cXHkxo0YzHKd5DElz5LR4CnLq3IkypbE/L1HFlKYQIUN4PVEWi8CUqcugAuex+0m1qgWoWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLbmL16eAzgwjVScT4kKg+h6N0K9ZJ8WJDez6FWoQuMhBywWwJKyxHdLFxkD3reDYAdWnRsGPPMgcstWo4fe7FgebO3TZdvbPptjD8NpJwulzHsUaKtrLOxos0hDiRdTzm2IdPjGg4uoyhwcOLlxbPz3bq/Pr8W/+vu/cV4IvKt0m+ZMT7D6sTY+n+fYr4CNFUk1EksbOTAn4ceKD/fnLwZ5t/NgAo31HsJHXSUk1F0B+EOoBH4TqkyZFhBJoNw2EVIf504oostujiizDGKOOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeVWKV515Q9ZbrnaZpY5xpmJXoIDpmKNpYnAY0A1ORkxlVlGgJh1lDjHmKAACRosow3jyZ9/FsPmcs09eOOer1lCGaCMaiIonhYop2WOiMYh2yUpmkaMpDuyJumloMLm3C6G2shaaJhmGSIyudXWZo+nthqNeL/NGt5wxREZqxy80VrrAOPh6mocSrLW6zTkSOrbrxsGiRwrkmJ3jRyuDNfs/47T5Zcer7pcJ221w1pw3kPXwgieVOiy82EC1vZhYT/rlXviuemiu267cryrXryl1ujheADfBI95+5jkkxzssScvhxLON2GB6+AnMYOgOPjqjQ1PIKBIBArMjsEW5qMSSystDGHGG4NE3zvwHJiggjpRbIHFxOqIcsoVrIzTTi/DrIDMNE+K480p69yyzz8nZVWRGRtdYcgHgzKiydjCM155KY5oJyZUpqtqil56/TVpZZo5NtVlp6322my37fbbcMct99x012333XjnrffefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+v/opJdu+umopx54l4Oz3ndiYWIGKdpSwo6m7HUUU7fthNBJh+5v816ImowNKnSZwt9BfCLGP/mmn5zIOSfudGxtPO0uPg9KnLHnkRknvAM/pPaYcH+793ZYP3u/lPbxaZ/bN8roo7m7X+jFptovCaoFLCp/oMQwHqd0VCkLgCpLmhrGANtHrftZ6lIItMVpHHi8/DVwf3ySTQRrMUEM4q9GnqJgqEZ4C/1FIlcM3E1yREjCFqaKULkIV6dkRapEvfBsP2EVt57zQRrt6oGKwmFVdKhCHtYshcQJFxGFWIwlohBWNBwAa4L1KyoaMYlXLNIPsbgKK/7Gi1KMIvZkZCz/4GQjWRRcVq3GaMEifvGMJiwHNoTDLPYdqYy2okYclUXHNdrRSM9qBQW/NaowkslNxBDHIKVVSPEdKVsOkRk0vPWtGF5xXA5h44og+QBJdgselSSFdgoGEU3Oyz7aihoXB0DJUI5SH9z5o43oVa953CtcBOsJvNojS3NZDWK1/KXH1oGvOOgLYfzq4Yz+FTCAYS1fpEylyPaVMID08kXMbKZ4nmnMaEZyW3GoJi+VKaNsajM43BSXNzsJTguI05rkjFHTHNax+nxMYveR2chack0XzZOeBlkXPvPZzn1ipJ8tItrGnBYx9ECNIn0gWckQyiKFCoihCQBZyAxKMlNGz8aiAzqIQB0KNY4GrWrq6kiAcIZRl/UBaUlT5UltJkyirLRo9WSZgXj2UqQBbaLx9GVKZXLTheZ0Zz47pop+BFKOiRSYMFWqMYDUVJUd9WhJVVpVmFZTADhsXQ+d5jCmRlGaDtWmDxtmAsIK0bFmyKPl7Oq6sqQ18EGHSeZMp1XquglHLimvA8tahrYG11mii4lUCdthETvV4DFWb4ytIN0iq7rKWvaymM2sZjfL2c569rOgDa1oR0va0pr2tKhNrWpXy9rWuva1sI2tbJkRAgAh+QQJBgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6CdgzW6n33BZew6I23eWvH7P5w/pbneCNnwEhoeICIqKiAR9ezmAbIODfiSPeguamo2Ni4yIm5qFiJh5CaiokmuUgnwHsLB8BbS1tremuRa3uKaxsntzEsPDqaitaXwDy8u/B7O80dLT06+/zMt8xNvExgnIdsrY4syrANjoA+bo5Nmm4PAr7elz1s6xfHPp43sQ/v6W4gksweeBQYPz7ilUyM4Ug4cQIwYcSDFXxIsYcwXYuPGgQY4bc1EcCYMPRon9/v+pBLgHpMsAE0nKRMFHgc2bOF+C1AgSp08FLmPOlMlHJ8efSJPmNArz3dCnfCJIldpQl9WreZ5qTYHVwtavYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHkw4yZzCZc0h/mru8GIipDoZ+oSgkUgcih8PiSyZsufPoA4JTdE4kOYW9oDp6YVJlOvXrnNZ3uMs36rTM1I/20ONddc81HLVDtaGmzfcqPdUBW7rt/NHvi0st+DtOHId89DVo71wtx59+9zpWTn6upCEv3QP1+Ns+sXL5oMU3Yk1vPhHQfe8hxTfiMWTJ/HEkUcP5IdJf0vUhFP/VyuR1xJTPpWH4HkPGqXUhT8x1dSBEyLRlYYg0ofJVFJJ2OEPfLhG4ooRPPfIiVt0BeOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGapZQuObdlEZl4yAWaYRZQ2CZlGmMlKky56JcSYSnLWCWWzcXgDnETK6QlofIZmiIklqFlHjjHl4ppkh9AZiihy5uINnoTyN4KhoiA62SeNxLZHnY88eluk7KXHW3OmwGaqpphwasF6eUA6o27Q9EZLm8H5Iup3xW1j3avKYcPqLrIGK6xu03FjnDE1zhPrrG26GN101SELah7TRdcs/1bP8qNHtKn8qGyv5axinzriakutuX04mR0224W6kG1sjMuHg3pMiR4+3L2bLyzuoWTnkgV5dG93C01nEoAMADpkwAcNTPA9BuuHsMJCzsdRV/KaYmAe+9Ur5X8I+4sfSARunK6XBwM4b4P/WKwTxVAqeBODLLOkh4YRSlqlzDbRXLPLL+XssZU8Z8iUgBtdaDKWQLuE4dM2aQjfzliFaHUuK8Ic5x4rRnytLmFGRaLXXzu1ZYqisEhi2W6iKQ9Wbsct99x012333XjnrffefPft99+ABy744IQXbvjhiCeu+OKMN+7445BHLvnklFdu+eWYZ6755px37vnnoIcu+v/opJdu+umop666kV1y3vrmr1fuquSzR1475Lc/nnvigsquprou/vFplG0KL4m9wb85PMCbWqqoaGbbsHuQeiaCaSnR1zD9jtUn2iefqr7QO5LdX/r9Z+G7MP6R5RNwPmjpc/n7tG2LQOkmlrp//SGo5qEqH546no8KVapKOW9/huifBf63hwACQkewGlUt7ncqU8kGe+5STauWZ6MIroZUrangqS4IvQx6Z4MCxJEHmTPBAooQNiT8075OaIHtmWeFwAoWraphK3zhig3H6haNcCisAuxQGsK5FQrXEMRjDBFczVBiDotIRV4QC13G0pW0eKUHdPyqimCMTnuwmMX/YmwRRg5bVhireEVmaKOMEtgVGqE4ADWyrSvZcmMDufUN+lULhHfURR7vQx0+eouO81iHfRSpxy6iS2sQRCQdGbkPStZRkv8q0rccGS5JjMuSm3wRm+ionTaoR4rgCc/KWqazrXGykqac4a9SuY9V2iwrH6PjrwjWRkJ2TJTE06UUeTnDfkFkak9KoyyHeQ10/fJkTGIYQoT5MIY8UmIqa2WSpPkAh1UzFmSzQMggOcAKhaQ+9kHahjgmsvol05zr1EXGMGGyZyLvZiKyyjxHdjFsPoScFXNIyNoJtJLlE5pUw8RACQpPg/Yzk0zzZ0ZS8jN4Li1uKQsQRVnWtIPKzy2jEx1PzSDQ0Yfi8mx7EJpVRkpSi/ZkQdrMpR5UqguWljRpMB1aQvOgtKNp7KVJuSjRUqoUqf30KEX16JWK5hOj0hOoSBHqTi2AM6hhyKnAnGpVrZpUoyDznlaxWoiwtraYBvMqYgURWacCUCN9KK0+HVFZdUolsU0lnIGka0T10LVr5rWtrsyDitRWorLdDW2bIGxhv3bYPQyWsGzjm4woN9nVWfaymM2sZjfL2c569rOgDa1oR0va0pr2tKhNrWpXy9rWuva1sI2tbDEXAgAh+QQJBAAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDpxjmiUQqWqqlRp9Mnten9ah2BMLoe/6LSaFi67Bee1fC4PYyklgF5/j9P/gER+LHuFeyWDgYqLSIaOhYyRkk2Ph5OXmEOVj5mdmBagoaKjBKWlCKipqqaspqMJsLCjnrRNpKyqCK25vL2oC8DBwqMHxcWztck+xMYHt62mwtLTo6MF19jZ2sjK3TmjA+Hhzc7Vodro6enmoeLh3N7xNODu9dbqBez67e6G9qLyAvagV08cOXKGmB08po+BQ4fwBEqEsa+gxXAJRZG7+E7UQ4gAJ4pUMeqBSZOjPv+qXLlvFISXMGNGHEkzxqgAOHHuW8mTZ8uQNYNSFJWzqNGcP9kZ3Se0aYqbRRVInUr1aNFRVLMqWKrPqdcS+6zm1EqWrFidXb+qHRWhrdu3/5LKraa2rou5dvPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLVpEoR+XJIu8YChPG0B3Me9u8IXMZtFPNhThr8YzFdM3SJzYBQKTFdV/Zthfjzk14N2+nc+fGgvX70rNTq3D5Wv5rWjCFDEMVRzMXmvVSzrPfw8Z0ui2NzfZJm4uvfL603pcQHBden/n31yq6m5levSiOA+SLk12P3Pr8QNXnhX74YVQIdAfgl9L/R/QJiERJJz0wV4HzNcRggA4qARVSHvXkoU+ixCQiBA1m+MSGaLHz4Yd4mcgFVlUVFeGMD5xlYwBZcSWdiyfqY2NZQE5lY3c8fhfKWxGEdaNYwWFYpBOjSIMkkk3u+KRxcl2p5ZZcdunll2CGKeaYZJZp5plopqnmmmy26eabjsFWg5xwCqLFZyn0UVudXdjRWp5Y0MmnEajtoZoUrFUxaBqijQbHnouu0ehogkZ6RKF6HBpFolZYygSmAGjqAKd4eLqEn4qSQGqlploGKSGb0CZFq2j4Risdshly6xq5QrIrrrH+OoetwqbRqyXFClHlT8MlkOwyy+7T7LMzVKec/y/XlfLKcCXuehwBuezC3HLZAYNgt5Zamy0r5VIjyjbomXquKOu2O5578J1npbzgGfNtK/YOgy986MI5Lzv3JpUvOkTyy49B7bGzcHkEArivp//FBQrFy9bjT4UX35oxyOZ4vEl/EYOisQXJjixOxfy54999JLNMrQgus7fQARmFsnN05qhU8KIV49czKBtxtOBDQw8K4UkTUtiRiheGTOvTKHW4IkhJjSiTk8ViLaHWW8/lNUxNY0zUVWRv7aFLZ5MI9s0oBrCT2yxlebMJdQ+5rI7m7H0BjELKSONJS4qVI9tWC0u4VEYdjnjiRy3OYeO/1h2k36FsznjgeyupeP+QQHIOOt2iUOkj5YAHJzhbU7q1crQNCz546rG3NTvt7Nj+lChS5p7ksr7f0GLxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx37/334Icv/vjkl2/++egDxioM6yffvgvvFx8/C/Mrj2qnKOg5a/j3l5p/oK/yHqhERSrxDVBTBQzfAQ+VwPJN6g31w94D3RDB603QDAE83wVJk0HzbXAMFYzeAlXTwO+NkDMl9F7/8lAI/W2Bf3f60whW1cHtrVBVLQTg/mxYw9gEawQhpNb6iBVE6hErfSg4IhJNoMQl4vBYTmQhFKOYxB9SUYqcuCITrahFETSRil+M4rH00MX/Mc5Gi2YUH+/YMS3urdEcbYyeupCDrWxtKxZpE5lcxFXH69xRFnOj1hzBtZx1/TEBeYzUt8J1rXHxol0HA0XL6NVIXVTSkamAZL+AZjPH7XFd7AqYud6VjdrpMSmgDKUotxOfeHnrk6kkgChHeY5SujJdmyxHKOo1y30sLJFqiqQFeLnKgb0HmGkSZpQEprCJceeWisyleJj5E2c+s3dXk6Y+ElZNa+rrdA5TmcxSVg1vMkwfKzulOCHmL2Oa85vVSGc2H2YRVp6zSibbgzxblTOLbQwf0cqnHvYZTgsoiJTqCGg/CkHQV9KzIDA72Tjb+VBktqmfEa0Eyii6zqlJ/zJ0NLvIz3h2oFzOjGpMC6TaHrrRhRzNAiO9W0oxt9KOFmSkL42phWb6UU+yQ2oG2gOCDhoKoakUlz8Fak6bQVRQGJWmSAXFjKImNZlyraeCFMVU5QJUf1bjqVh9ltioSiGrMsCibBpr21gkl7jJDarzlGqElla2tsYNrQZb2+Wcije2hsKteH1T3eja17z99a5HjasFWlfYt4UIsXD1KShaR9i+Hs93g91pYy9ru76dJVqUTaxkF0s50H6OLsjzLJP+dtrAuulxWzGc5FhnFMulKKyT7FyMciI5k9A2Kru9bSezGoralu6zovDcXlGLuuICtyyms4Byhevai+oVJ5HTPQpsbWs3aI5WtdglHXSRi83mmuNH4jULecEpVty5RXS/jdbr3NsW+NJWviA90lvsyzr8mtcCwovA7t4o2szRd0oDJjBuUws8YQTYv9VbZjAeTLzrSRgYFK5S9zjrRA538cMgDrGIR0ziEpv4xChOsYpXzOIWu/jFMI6xjGdM4xrb+MY4zrGOd8zjHvu4KSEAACH5BAkGABcALAAAAAD6AA4BQAX/4CWOZGmeaKqubOu+cCzPdG3feK7vfO//wKCQQiwaj46kcslkHp9GoXRKrb6OgGwWuRR4v+Bw2GnUbqPWtHq94yrD5rh8Th8vj+y8fn9yJ+F0gYKDAHZKeHyJilJ+DoCEkJCGSYiLlpc+jY+RkmBkRZihojxQRWJgnHGnX6VEo6+wOK1PTbW1s5Wxurt8gry/wJacwcTFLBbIycrLBM3NCNDR0s7UzssJ2NjLxtyYzNTSCNXh5OXQC+jp6ssH7e3b3fFV7O4H39XO6vr7y8sF/wADCoQnr2CQZQMSJqxnr18ygRAjRnSYTGFCggYz8kBosaM/iQUoiqxoMY5HZRpT/1Lh2FEhQ4Zx6L18J5KBTZsYVerEMbKlz4QxlTH8eVHZTZwodyqVseyBU6fLjkqdOnIZhKtYs+ZcyjXHsgBgwY6cSpZs1aRd0/JUFrat27BnKbodqbZujK9tFejdy/dt22V8AyuYK9Ku4RYj/YYVzJixYrGFD0tGsSyC5cuYT8bd3G+yZxqcP4seTbq06dOoU6tezbq169ewY8ueTbu27dsZcbXC7RmLGU2rgnv5RCROLt7GZglPZUb4LOTEgH9hTl2VpztooMOS7qW690LXD2XXPoq7gO/VJzk4Tn57q+Xpgz9vH73MbyNMhAsnTsH4ePpL6VZKHADa5kuBpXHGWf822CBY0D3PTAOOORSes086MtGUjIOvcIbPh81cKOJHANHF4SIZNkSRPpyB5GJIkZ2YCEsL1TPSizj+05NFW8k4ozJEDbCjQoJ0xBCNQqLloyhDBgmUGSkGGdVRPS6pR1NPPcCZkzzWRKWSVvKBF1xGlWWmWcpkpSYEVYZ5yZiQUXTmmaG56Y0ygbmV5Z4PPOZnAHn+BaadP8r1WGOI7uWniYSiqAxmEST2p2IKDtqoo8noAymklW54qUF1firqqKSWauqpqKaq6qqsturqq7DGKisfAkIxazy1PnGrKLna4qt4Au46hH1amKdfeJQQewYowrbxXnDeObdbszqYh17/Hciu9x+1NVh7rRzqscetC95+G0m4246LQrnmEoIus+quwG67grzrSrzy4tcFKvS6m624+JIwb79z2EtBwFfo+wa//RqM8AzKQRvfKvM9DINvxSr8x7Gn8OcfvBZDXOuvv+YacrUjk2yLySdbkSvGWbQMzIEy7zJMzWp0ehaDCeA8hc5V8eyzV5uNQyGIzVzDYJtDQ0hAOEZXaI6I6KTI9MkeIl0N1fwoM1CMMlutjNZcsyhSjjpaarHYyZBdNoZno301vmw7ZHZcaEPEaNhAWnRk3HlL1GSSntaMpGbIuAh0RyZ1WfjQFxzuuEOMB2KkjX0rNPfamfs0eJF+Y06S/+ZqQy65SzO1E1QyqWvokFSbPzx4kKsjMxRRU94UO8JYPrUll0XJ+eXjTSuzZ+5zMsDZmlqVXnwyx5eZvPKbMY/V7lizJWgy0ydvlfVsOg/5CHAGMFb3sG82/jHaT2q+zoRRtL4JgPXVFp9Zuu9XoGQSP3/9irof/pyiv7fwL07ImF8JypeoReEJUfFziAJJICnFJKqBj9mbAiuDmQoWEIEKmiD5HrWpyyAOaFUR4Qk4WMIInBCFYFPhCpWhqRZGSmcyJFpccsjDHvrwh0AMohCHSMQiGvGISEyiEpfIxCY68YlQjKIUp0jFIb4sXVU0wRVB9sReqewWtSKiF7/In/+KBXGMZASWbn4IMwAYi2MC8Nh9uDi/Nr6RY3LMGB3XF7FVREs+0xJhH0/xR4oFcoKDFEMhT2FGBQ7sWw5T4SOvFcnxTZJgWqikzC6JSfB8gT8+4yQmNdkyURKMlCczZcP+hcWHqZJeqAzZK9sVS4vN0ly1dKXGHMGwToKLlXu05S434cvmAPNelhxmL2l5zINJUpnTOWUzZXjLc03zmaWAD3WkVQpqPsuPE2PkIR2pLDdCE46fxE4RPoZMRJbzjsfK47LaSc51zpEI+UFnM9npzB6iMY3aCpYVUwbQZAk0ilssjhmy2IeEEoihJUhofxYK0RnQrKIwuChGXXCzjar/oKMeRQFIqQhDighNiiV1yEmPmDVnVEhrSssG9nDW0giZA6bK4NlMDVe0Cd0UaTHVhvhoOjafQiNqUiMH1+pmgf8V1aUSgmpSlUo1pjo1Llrb2tuq5rWAaNBnNc3qVrn6EK/GEKw9zWqIxkqitMmPqKwTHTLcttUbyW2o8WIqXd9m1xztVFhMXcbdzhI4s76Vp3F1x0gGW5XCluisIQssDdexGce6VYJwRcblFAs4yz6WIidE6+hqxFmKePZroJ1cUzNrASl1VXA6q5wWQsta15YVtp2SbRZoi1jN4u61E4ltSczAW9N1riWfs1zoSutb0vmvtr9NLZGUizrmtla1/zI8HWlnUjsLtE5FrxteAten3QF8t7vfPZ/u8Cq7426Wu1ASSuvUi5Tn9rYfwHuSFqIUXWSkz758ky6X0FsP2/pXvKsdX++gspn8Ei686wXw85ARvbg4mL7Uk7BoKZyl3wEPw38d14K1JD3vVQ98IQ7YiJE3p+WhmL0tKx+L0fdfZIAvfBpmbQQtQGMzfc96KaZb+0DY47L8mHlB5lwydjzj7oWKhzL2UpGfnMPyObBTTIbxhi1QQKBlOccKHvKfvLw9zIoQgHrR0wD79MHF2K9/4z3zAwMYljWzuc2AejMIsytmDFJqzo4pc2dUyEAIZhDQgvlynCdY6MZcGRl+Bo9hktXlQQNe0NGHPiyjReKnS2P6z5reIAkvU+ku45DQo7ZMqfUHND4ng1OcxvP7OuVqZNjQhapN6aB7yMISvlDXWibvZNNx61Y3UbDqKPapmYhsYtvQ2FGkckgXqL5pW/va2M62trfN7W57+9vgDre4x03ucpv73OhOt7rXze52u/vd8I63vOdN73rb20ohAAAh+QQJAwAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8AgrkEkAo7HIrGkbBiez2YTGlUylcikVcjter+kKVWqpJrPZnIxvQW733CdmmjO2u/4PFsd7/v/LGJQeYSFhkd7S4CLjH6CT4eRkgCJDY2XmF5zTlSTk5VNmaKjPI8GdnWeSKmrY22ksLErTXahYWWuapVXRbWvssDBXYXCxcaXk8fKyywWzs/Q0QTT0wjW19jU2tTRCd7e0czimdLa2Ajb5+rr1gvu7/DRB/Pz4eP3X/L0B+Xb1PAAA0aLVqCgwYMI7eFbGCTagIcP9/Eb+AyhxYsXKT6D+FAhw488HHIcSRBjAY0oN/9ytEMSGsiXXkSOhChRoh19NeuhZMCTp0eYQHGknEn04U1oEot2hNbTp8ugUGVEe0CVarSmWLOmjAahq9evP6OKzREtgFmzKbOqVbv16di3QqGdnUv3bFuNdFPC3Ruj7FwFgAMLrjs3muDDCvKi5Mu4RUrCZxFLlgwZ7eLGmFFEi8C5s+eWd0MPzEyahujSqFOrXs26tevXsGPLnk27tu3buHPr3s279yhbLYCfED7rl29mpjahWQ4KFxTix5eZQtVJFaLqrZ4bjw7MFCvr4JkbgM5d1nTw6HeVL+YdO3pV4smvJ3U+O6Tw7inlUjT/WPI54sUH4H6W9OffdijIJwL/LVmooKCBmBED4WqiifaNNxMu1E812ZjDzoftBPQOTjo9kyEsovmj4jQitliSQXqd2AiJE2kEkGgm5XjSZTIuIlNE+6Sk45AFDcVRWD36CI1SAxgJUSEjSfRjk24lOYqTTBqVBY1MXtUUklb6MVVVD4iW5ZE7fVllmID4ZRdTa8XJFjRf1QkBmGxi4qZlGskp52l5kgPNYXSRaegDlSUaAKGFrRmoknhVNtmkgSUa46MzQuNZBI8pClmFjmKa6TMAbbopqCaKyhCgqrbq6quwxirrrLTWauutuOaq66689rrDg7zwNxyCwxbh6w/A3mJsCsmO0OyxgWCRBXH/6UJg/7AN+LIstDZUS0aAzCl3Lbe/OneffafgN0gW6pGbg7jrvodHc9u6ewO858pLnXZ82DtDe/HqK4mA9fr7Qn0CR9KuwTQgnLAhCzMcnLlnPDxwuMRKvCDF31lMCMHCalyctQE/TG/IIrvgcMef5BdxyhOvQSDA4OI7XsYwb9zLtL94K0XEDCLxrL9Ba1Gwzz5jqy3KOWN7cMZFA+Agzk2DIWHVwiSDNRyotnVhAlvH1HVKX4etQ4oesrPiNN1ciKfZF2xIwDnpgPhhi+7Q+HbTaK+tDd4CQZMQj1jrDY3fgN+IEpFFhgqz4c8gnviIizO+t8SQU6T4XYxbdGnhS3IkZf/lnWOEJZWpbj0laM7kOPZILKGZOtxxh17U6VCKHqTtS80O9+qyUwQ7IVHurhJEl6vO+0w50XPUM82XSBFWyad8OpPPO5OUUl72VL3IY1Zl5pm9T6+m72aHbxWcfjp1l51gOU67+mWy375o8Hv1Pd9yNfpM+wDkSv7uJD/akWBPAUgLALUSGgM2o3+eSmDXFKMRB5rAMIOZy6HIFEHCMOpN6HMgBiulwQ1SpYN1+SCfnGHBEiCQUpYa1KQoSJEWHhAliaIUDCvzuRZuxjOdQiEIQWXDEfzQVJxh3di2UsQTHBGJSlwi4ZroRGiUComcGRsVydLALXrxi2AMoxjHSMb/MprxjGhMoxrXyMY2uvGNcIyjHOdIxzracWtDe1AeqYZHPuqMac7y4wWGprGoUYtiNjvkzoQmSHsZsmeIHBC/QvbIgjWtkpSMJMmqcDRpMdKSYUMax8DFyW+Nq4iilBkpT8aJSRYIlRTbV7480bGXOXBl+WlZyWxpQFyWTJez5CXtbOax67iSkDkjZjFZaUGapauYH8MYKGHmTGgWAmSvxFo1rakHaQJSm7Hk5rxOaUOHidOYpcxmC815TmHCjZ3idKfZ4MlNeSZzlL9spzfVeUl8zvKc+lkOMhmmTI8xs4kFtdhBYbnJZyp0Zo28pyqDmcuL7ZKc6wwnutLjMow2/1OTplwlRCd6s2kOE6Q/E+lI6eDRW6LUmdhMmksXabRMkjSRkKQpAAbKLUyqM5UsdaXSeGbSqu2xqFGbWlHnKUg9evIISv3mO5sKtadKjVkRdePV7kiDrXJVBlr7qgvCKlYWkNWOUtRI2eiYVoqsNY1945Da1ta2b+wvbHGd24f8VldwFNCCeQURX6Hxtbs+7nBps0bd7LYOwGXOAoBFLDXolljGYsOxSDEeC0UYGr9tY3KUq8hBepi+znr2H6BdwIsaV0HO3uW0qAXtanfUWuVBT7MWkJxsSTckw3LrsbqdnJAs91fMZZYeKdlcW0o32iny77bIRYlyt8JcGDk3Z/+PjcZ0h1td0mJ3eaPTSHUzghIllvZ4QIqueMc7OI2YF6/LU6LrujY8JLzXts7okuBM8rqVZOG+oEPvTGbbXlDV9wgA/l18gzeQA9+heOrNL4MjK+AoLi93NMFtgiks4aJE7wDZs8CHFei94h62wrprXohHnKYShxC/FmDSh1ccPRK7b7MGvJ5SaEwP/f7vfDieX3nJNwAez8PHzqCeia0HDUONj3w2ZoBvwddkMj35TFGessbod+UsZXnJVH6Gk+3nJ/wNUMvGFbOVyfyn0AyQgC8W8jNoaIEFlplOZwbzc51BZzu3+RlvRjPDENg9PzMQ0HmOsw8huMKBGNrFbQnuI6FbbGhWeRGBMUQVnQXN5Dl3cGyb1jN8PR1BUPuvhk0cIWAKZUJECTEyGRwiZFMtQxKepdWufvWiYt1oKr5whjysNWVOPRpak9osO/yUsBETakWfl89/Abayn5HsRnPaX0H0oA4nk2lUFzHbKdz2sKftbRs+kVM41LUEUeVrTQEx3brWorGdcSp4v1re33Y3Fi3cVlHDGItJZHC/r71nC1wRi/huo3bhAXB0s/uNC39HwxMeR0uXVQUWv7jGN87xjnv84yAPuchHTvKSm/zkKE+5ylfO8pa7/OUwj7nMZ07zmtv85jjPuc53roIQAAAh+QQJBAAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8AgrkEkAo7HIrGkbBiez2YTGlUylcikVcjter+kKVWqpJrPZnIxvQW733CdmmjO2u/4PFsd7/v/LGJQeYSFhkd7S4CLjH6CT4eRkgCJDY2XmF5zTlSTk5VNmaKjPI8GdnWeSKmrY22ksLErTXahYWWuapVXRbWvssDBwjiFw8bHi8XIy38Wzs/Q0dFcyszWb9EE2tvcCN7e3ATS0DnV1+cw0yTjzwvu7uHh3+Dc7+7Z3OzOCfz85ugAV0Q7QJBgtAIIEypcqK+hhYUM9RU0CM2OhIsX+/ELyNFEtAEgQU48cBCiyZMoUf8OnBgSZDSMMDFqTNCx5omPLXGGLNSy5wCeOaH1bGiz6A2dPn9mWTmyYDQ7SUNGg0CVqjqjWGNEe8CVK9IBTcOGHaqPgdmzaK9mXcuiIdq3cBsGmDu3K1e6c4my3ZsjGty00KoKrhoNr+EAavkqlhFNgePHkA/jlYsXsmUFhhMv3oyisOS5l0OLjvwZsT7OqFNEi8CaNVmHsGM7S037hWwLtXPr3s27t+/fwIMLH068uPHjyJMrX868uXNgtlpEPzF91q/nzExtQsMdFC4o1bEvM4WqkypE5luBvy4e+nc05+OrRxO+vSzy8uPvsj/MFKv8nnRnQH38kYLffKfolx7/eusVUeB47w04h4ACbpeLIg8aQyB17I2woQkf0mBHhs39Q6Jwk5y4CD7xaDMPAuHodYOJKmIDTYvbvKjjjvRso1kKKdbYFzQjlZRQQ/YkqWSSDcVI5ERPESKkD0xR9ExKEd12pUoSQVlRFjHNNCUOXxmJkJZojpOlM6/tM5NGY37xVU92VNlUlEhE5VJggv0Ypx9fFfmkWHa2acFbMv4Zh2d03abnAJQ1Cg2i5CjKiFt//RVpXXZldpqlmTQG2W2DDcaoZJb5CSqg0JQWwGiwXuZqoquuKJuruE6mT2usqVorHNEkyeuwEaQ5zq/X3Ibsssw26+yz0EYr7bTUVmvt/7XYZqvttkKEeIuDKXjrYYfc3iCuCB+ee4G65apASxbVaTfhhZZ8awS85Lb7gry6UMidhQ1iqG8OBzIIiYKDZLHfwATPmzCAd3gHLsNDOHwwxOUFLAXFNPi3IMaHVJgvx+FGCPIn9JJsrsknR7Kwyi54/HDLhYg8McwoyHwxzYTYLDDO1vU788kS/wx0zCwjKN9/lKR8dAz8kuHvvxZLePPTOWOB79VRS/HyulojwS7D74r9S9dd83Kv2VdjDeLI9tabddsl0z1jFm4fQ2PesOzNdyNB/j1K4Hwbi5sQfgPNYosvOslOOVJivXg8PFb+jeOzuUB4tokhaQ+OLs4TDv+TN+ajz0yJY9u5PkmCTkDj9dgzeUOoR76tnWYW4PmSvL/TpOnPCPpM6tLiDg2WChmeUkPCO2MRTGJeG6iXWyJvvfWFBvVMTGHCKb1Q2juzpuFajm/om97fDr5UxydPfprmh28B+v1QXOb6IAEVlf57PmOorzibU0vqNKiw4OkIj5pKnyoluHXgDyzUc4ZYrCRBlsiPUo8T3FbsMr0JTvB/k8oUAwAIsw12pYMeHIv8/CJCEqrsVKaJTQL14alnYDBzDRwBpkQIGHYYxi4PqOGxctgCFmZKgaWySqtK40IiiuoxpEqiEp/hqlQxkIgleKJjoihFGBrGis/A4k2gAav/WdGwMqMR4uHE6EAqliZWcHSMGTPIRh3eKle5asiwmpi31fAKhO9zSB1VA41hATKQnxqkR6AhLGK1BpFrVOQMlCXJSlrykpjMpCY3yclOevKToAylKEdJylKa8pSoTKUqV8nKVrqyY3Abl93QFUtazjKH6kpXLcF2S7eVTQtcixDAqhDMXmzNaFj7JQDiJcyqMdOYbEPm05T5TDrQK21x80Uvk9lMoU3tmt2UJhHRFqFvWk1qTlNkwZo2NJQN7WtsXCfT3LkzdhJTnLhMmsESdB6mwVOMw+Rny4omt0EGlGf2POfGAFrOjyE0Y/TZJcV0JtCHQvQMYxsYRS2qh+5k/5Rk6+ToPj8KtJCK9J9YNClHUTpOfYp0pBLl5hocetJ0tnSm3HnpRVla0oa2s6ZU2+Y0q4ZQglbyoDwzqiSRSjOlqtOl85SEP21aR3nS1GUf42kDyYlTc97Ta1SNZzjB6tWvYvOpXVUoRX1G1q+KFZrA/BlXrakxtTVAm/jEGTXPNtaz2nJtcS1oPoX6V8HadV8xbcGIrpXLfDWWsDBYrLUei0/KGpYYeHvl3fKg2c3iobM2IB5ogWS70cZAtKa9wOZSi4LVSs5Y1ChtDg0XW86KkbaIk63bJicP0QFviJ69QwN52w3f+iiRodVtCUuHI8tZDnORXIFrX8hcxjmXR//QfcF0SUbcHF13R9nVnCTKtTp2tA50sNsG6Z4B3WjUzrYDK+84zttc42pjvc5oLzTe+1luGa96Z2Jd7wb8u+MGL4IWQO2z/is+95l3wL0rsDYYnGDlWovC4wsWhHknYXEUkCRfgq+2MHw95XGJHc2rMBK6V7/vHdgp7cOesZbXJRgPD0zQS1+1UAhiAF/vxybJHvu2xz2Z6JhaPM4dkJcc4BcTxFBFNnKLL/zAFDP5ykf6MJSjLIHoUdl/8sswJPURvyG7iX7kfWDuxiybMvfvzOizn5ofyD+f1Pl+dDwantk0QEI86s5zzrPiAs3nnfhZT4AGs5mlMdwH0mkpH07/MVT0hMQp4rBwju4zEuwk6SzM8BmmuuJsq4xgDwr5zYfqIXCdSGobV5BQWr6gqhl921ZT0AKmjvWib0jrv5nQK7ZO4UgOmeojinq30AAij4VdEGLzkI9ydqOkZEjpM07bGbxmIwwdVW0f6sqGs9b2Eq/tkE+PQ43ZrjU7eMhrGAJRjdB+7brZfZZNBeDd3161JY2oKT51cdySiTcW+R0XfyfRi/mOriYJzmspWtoCc7z0vsk4Ktk4HAIIpwsYJS7uZ2zcIRfPOGgqHkZJalFWTLT2yEWjxkqe3DIRl8YX05hwl1Oc5Sn3tsZpTm6bSxtVcYxVzAWuZ4AfJuhCz7m+fzsOGzzmcVe8IvqgY+N0XOkx6sdWd9OrrnRp7DHrAy/kH1fI5qWbXOytIXbZOX72dtjDkY9EJCk1/A6490ruo6S7O+xeLLyfkpKsVQHgA0/4whv+8IhPvOIXz/jGO/7xkI+85CdP+cpb/vKYz7zmN8/5znv+86APvehHT3pShgAAIfkECQQAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94rqdC36u+325ILBqPx6AAGVMyn9CodEqtWq/YrHbL7cKc3hk4TC6zxuYWOs1uu9/w+GudpsvvZvtVj+/7T3wXgX+EhYaHiGUWi4sEjo+QCJKSkASMl4yJmneYlZWToKGilJCYm6dMmAerq5gFr6+YmAu0tba3t7KXlaqsB6aowS6YA8XFvr+XsMvMzc7Pzr2sxsXAUgDY2drb28JGxNSuy7rk5eayzODG1iIJ7u/wKtzz9PXeWerUxtvSyK2X2/TpY2cCXgIJCBHWWwjgXiFz+pD18zdxYDkVBhNq3JjQoENOlxiIFIkpgMmTKCH/Clx3jtHIlzBHEizh8eMhczBLotz5oKfPn0CB7hyashyEo0dtKr2ACelRTAqiRiVKlWdQn1UDSI1KcObSjy0ZZd1KtizZrOa+qn2BKYJbt+ayoi33Fu6ltXhhhN3Ll1zev4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLlyySUDBKj2Qfmz6CXbuYyOrSV0mxQm2aiOk+Q1aRfF2oN+wnt07Jr6959p7NnIr6F8BadG1Dx4Yr73kWOt5OnR6Oih+K1nLmbruVuPYcOqlKuXaUuWr8yURy0ccoXnTcnsfr4J/kGtGd0vr79aJeQWcw0haG9yvHFt9BK+9Sz3yIHWkAT/zwcaeTfg928x1Q5Efky0XyL6BeOeChk1GCDNUk4zCVCFcVIhf6kqCFLLsUkk3sFMahRiCKygImLL4qFUoknxbXjTzvd+FJTTtWYSjk5XZLVVUzyKFcA5jgFgZFIEImUTieZJRVUWirApZZBwkjlFm3V5eOTQ5lTVwRejYmFObesmd4ia37nl5t4zHkOnnz26eefgAYq6KCEFmrooYgmquiijAJ3XAm3NRpFcEs46pukVFBahKaYIhHppo92Kupin05R6qiopsroqVuwCqirWcDqp6x7hCoqrbj9pqogtsqB667AvvErqLoGa2xew3JW7LEuJCuDs51yOoS0zJraK/+vy1arrXV6bmtGt96SCd5204V3Z7hFOEeudOxSxx+6KWBHjnbbEVDuI3Y2Yq4u2panDHrz4iIwLua4m6GFYo7qL30A6zLww7UUvK8FGCoI7MLq3VeAnuuVU3Gw8VWs8cj1VbThu1FAyE1kAf4Li54cN2xBggsa9I48KkMYWssnUjMggQP8zCKCJy9SszsfKpTzg8zxTHSB9AAdtIFFz1z10QclvTTTEsanDz/5qZgMIwEB3WY7Mia0NTaEqmRMxWKPffA0VZ99gYdJzxjPoJg4CeUlKMadYoI4kpTwCHgjRCOgQua4yFzkSM1X4THZvXjbIQ2pZFVurzQ55ZqjHOP/zYg27iKWJvl9ZupAmrhIkoxICTKSoT9eVZO4P4CmSVEWefElUn451e5WMTnWVvIa/XvsTqGuVZfClxX9Wa5bHK6VT22eJfSXdOll912GKTq8fB3vPZiccwjvCWW+tTrxf5Mj5+HrTxhwLfOnV6ctadVvI8wAlIX/YhDAAo5vgDQwoN0QyMAGOvCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHaJtrQcuCgThhBVN4rQ9SSwcvXGFwiNUZGWYLCypEVA7V0EJ07fAMPSShEIeYqSC2yoip+mENlOgmJipLOESMohRpWClCOHE4V9xBFnezxRx0sTZfvEEYVzPG/yUiMVFlpEEaQbPGZ51Rh28sQxsxM8cvxNFQdZzDHafIxz76EQp5zMweJRXIERTyj4hMZBTLeEjrMHKQ1YohDiQ5QUrawJIRxKQaZ7hIE0JShCy8oSJHScpSegNcprSfckiprufcyxH9I2IrPfFKS6hPiLP8RHcmtsAM5jIS7JKOwazHwV9yJ5ijGCYEkycLeq1rEt7h37hgect+wQhOtqiXvXaJL2kyYpi93BUzZ5HNetUyXxYAJ/1ShTELpCM7EHuYxB7RztkxQmQyI2c8BTZPat4TYQcUVTtHFrNnsAegyhNn2FhhHvsUFD/k+Njy5vYPht3noc04KEPXKamQIf/UnSQLaUYXugqa9WdtLAMcNfAp0pZujKQHMOk1UAoZp4H0ZQoMyzt7NjRi3s1mpEPB2hhiGZvuNKfmOKrVeoq1y5FgqAspqkp7qlSk6kKpMkUbUBOAM6jOY2dTrUZYpxY1oAlNrDxFa0K1ijStefWryLHp16hGoLMOwKZYy9tb4foer/lMGxf6aNkIZLm0KW1rmEurQMD2TxVhYrCeW2fiJDDUxD5tJYylKEUAog3JSdawlKWpoDonn4/GzWQ9Lew78rYRp46WQis1rdhQq1YBpmCyeXMtn/rWuh6NVXBiI1zhVNvWjuztULzFSvUCB1xfCBdHxM2acYNqqOT2RHz/ly1tc1dUW8pFt7XHDZTpGOA87MrCs2EBXe18irVEjbe81fNrammnXvJ+lrqFGi/sbHcS1ZWjeNet3n4tILuJWsC72mOdcn1LDgDrTsDrLbBCWwTdBAfAvw3+0YJ5lznHEdh3E9bFgJeUO+PtrndIsaeI10viEgeFeChOioGDBz6pwE/DVzEfV67J0UZhDwLRu3F/m6Tj74kunIv6cZCFfGEiV4UszFTxh69kYe9ND3k1Not5yQe85lWZe4ywcpbLsuUBlu/J50MfVWJZvzNTJc1qJgqb1+dmosBZy+k7VwPbZ5cMC1lNZurx9S6RP10wOX66KDR7zQxP/AVaf3VBXSeSt4VNR7tvTvuLWDUZfT9aKJovmabFnJdpVVResNSmBmGp/7hqP7Y6lbCOtaxnTeta2/rWuM61rnfN6177+tfADrawh03sYhv72MhOtrKXzexmO/vZ0I62tGkQAgAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvtHgVgMGA8DoO96DTRLCixyXAym62u22PvuH6vn5vvgIEyeXJ/goeILX6LiY0wFpCQBJOUlQiXl5UEkZyRjp9ZnZqamKWmp5mVnaCsPJ0HsLCdBbS0nZ0Lubq7vLy3nJqvsQerrcYonQPKysPEnLXQ0dLT1NPCscvKxcfcI8nZs9C/4+Tlt9Hfy9vd7Mic2fADcdfNspxx8eCc7fwx5fDN6NUTCK9cv4PeODFYuLBTgIcQI/7Lp81cJIYYMzJch9BRuYwOI4p8QLKkyZMnRf+qlEgOgkuXKhLIlNkxTaeXLjsp2Llzpc+RKEv+DMBzJ0eOM2VKWLo0aYKaaCxGGlq0qtWqQw2mcMp0KZ+vZKCG4hShbNlyQ7OSM3t239akXeNKAEv3q1gnUvPqHXelLp+7gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEMjWeRHNEI6JAjtId3GNDfWfuuidm0M9tfZInDT7qcagO7dOva6Bc5N1ChKqJKbCjac+JSj5HgdR15Kky9gqsg5NyIwXDVxwiF9Lxew+XZX77KVj/S9vXtrnJoVNH/+R7qKkeCBpahsv778/0FSXxMTLbMeJPUMQ1D/gLcMyEQnKbEEoIEJVjjMfBdptBF9Du7QiYYbThVRhBChNaJJIn2I0U04deghOSBxMlRQNJKYVgDl4ARBTEm5uAKLL4UE0VU86USkAkYSmSKHI3Al15MSOOWjCp2wFYGJN6pUjpUcleAklLGFCQBw5fDCZXgWWHkdXy44JWUKYsZWH5rmTGnnnXjmqeeefPbp55+ABirooIQWauihiCaq6KKMNuroo5BGKumklFZqKQ2s/XZpFJkasukTvWn66Rqe5mYGWKyNCoRtcfZRqqo29NZqGaTBmoOss6ZqKw+srvaqqLv6EOqrwRbRaRiN0llsEsouK4Rx0y2XHZvO+oNd/7TKZcucJ8VCN4500xEgLSVrSjLtL5J29wx43/bibi/lbIuggkwWqi577P7y7r66xHuuBQdakGx89OL7Hp3jkRPwwBMyU7B470Xs3oLq1EvofQN4ZwudaKKTXsXcQooxxv5RVDJ+kGAooKUjf9zfV/zJAzODKgusKsb6wSFQwPjw1+XN5AD0MMAWUoxyg0BHYiOOLg9g4dMH1AxiQxYjqmKIkKg1Tsx6Ta3Rz4ZeTbWIPhWYT9der1i1oGJ/LeOJQkn4C1Bxl6iQ2pHoyPAvMZK9Uo2AP5DlQzm2+NZMfgKZEydYDU53UFQV5e3KTcLV1Zt3Kg6BkA8diSTjRyZ51f+SIZ/wJZSX9+ii5pwTFTroRIpuFemUm2456qkjjqdekXuu5E9aoXD6XLPmWSVbWDpO+FrIWzx8XLPSRWZ0u5wZnpq7BM+Cm6qjED1YonEsPrpWRN/Z+OiXPoX5u6UPdrXwxy///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfIwAY68IEQjKAEJ0jBClrwghjMoAY3yMEOevCD+jvWGTIowtZMcFjIIuGp4ACsCKJwhA7UDa4KwYgCynCFfNAVAXv1vRbej4fR86H9gJgrYu1vhnHSof+QKCYlCpCINIShqVK4Q9Kg6ldG/B8UaUXFKUqRgS804QXDWMH/EmrQjCo81t72UsFmORBaxxnXJLQnQDiOQo6b0E4B7UiK6vzrffjjoyWypRx52Ux/gqQOIVFhyGVN7hbgwhYmrJO9a81Rj5V6JC52ES5x+ZFclYyEIQG5xhKUiZPhwmO5LDDKtYWNYLHQWAFOya93+YsS96pdonJpAY+1q5buuuUlI7EwRvFSYgirBnmGtsaAIbNjylQYM40JS3sYbGLQpMYyY+lKQGHMmRILpzarGTUGrVFo3LymONc5S3LW7JwM8qX7zCFPC7yTmg3L2LpqMU+p1POei2qZOvtpkX+aM1ICTVk2ThYPhib0kJR6aM74EDOHNo2UCG3aRMews6H1/4wiGM2kRheqM3LyDA5c6+akcEZSMnQ0nZD46NlUmq6gqWdoTzOaPqm1K7M5DadFcyeDQvooCKFIbva8KdQSJLWpEXWXnFjaN5fKVAZ57alWi+pR7ZZPqlYVZJC4Kk3ZdjesWUBrv0ipVNKGN11mNUNmRest1GoRtpp1jWL1WwCkSo7HCQ6pfYOE3vAZVqe+DSJ8HYdfaWeBwFpgsAEtq4Zal9i5wY0kjHUsZBX1kbae9SeBq5HjCvcSHumOT52NK2hDC7nBkRYmh6NJn1gHu54oD7Gi/UlVHuml2zWle3aibSQad9u95tYnuzUPUnwbJeBOSbiQIO5tAdc7oyjXPPjDw1xwOaGj1nlOdskd7pEYa1ql4C53su0QdD87pNeJN3a1nR1Sy5uA86L3KbvLS3V9J10tYdJ2M4Fe8VanX93yd3TA+68Jhsc+9RYYuQeWb9kU3NsAd6XB242E9Sxb3C01T30VNi+YvveX9pHlwxy+rYfNAsjnXZjEe5jeL3Ox4b1gr18Ujq2bVADjGHOGljRGsY3Zssqncu+0J+ixHs5HPV3UWC83zgUd6atdEyg5DuEjqBupgOHMaHnL6xswbbS8QDIr0MwgTLOa18zmNrv5zXCOs5znTOc62/nOeM6znvfM5z77+c+ADrSgB03oQhv60IhO9GFCAAAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9iszcHlar/g8ElAJovP6GSXW26XAXC42712pO94oDvP7/tFc4Fmf4SFKm5xcm2GaRaOjgSRkpMIlZWTBI+aj1KCZImgoaJxe4xLm5iYlqusrZeTm02Io7SingKmN5sHvLybBcDAm5sLxcbHyMjDmpi7vQexTLOki7k/mwPZ2c/QmsHf4OHi4+LOvdrZ0dbrKdjov9/L8vP0w+Du2urs+y746NqgzHHzpQnUv3/6+CmcQe8fN4EDISKct7BiO00MMmbcFKCjx48ND+ar90ijyZMaE/9azEXvJMePMB/InEmzZk2YOEHOg8CTp4oEQIGuxLOpJ89NCpImzck0ps2ZTQMoTZowYVCgErJmvZpg6B2Sj6JOHUt2bFR6P69qzVqrllcwmyLIlUsv6tl5c+lqSht0rV8JbQOLehsFrOHD8q4IHky4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXY6rBplznFqhbdWZXLqU7dO7ewGHc4h2cBOK9X4hfmGbLU2tUqSS5ms6qGfIlzBc3F5S56jxk0aWvwqSMGSyKR2zTUq78MUR45OIddxSf3sPrRYbLBu1vwP1H8QUoYDmacDMRJ8Uh0V//f7WIBBAtBzoSoQUJShGSNv85MtAzEr2DXoVPbHKTTo84tOGJz0yIkkkqgQjEJiumpIlTUJG4DI0ywQQji5oYBYGLL87j0oxNPWXkiHZ1RI+PfAkF5AtFGfWSR2UphVSVClxZpY74mcDVX2BuddWTUGqSVwR1JZkTPWe2OMKXYQKm3WIJ0oNMm/NZcGZ5ibnAFVcqzEknkHnWQ+ahiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmoqZr+dykd7qqLBaqtivAprE7V5cpsnqc4ahay6ZsFrr1f8CmwVuQ7rmH5lGPtEdsIGVygY7LVRyy115gnt/37LSbuec7NBF1515/UJhXqChtLsZt5GR926CFiHIHbalnsrd5h5Jw944REAriR8QhLuMkiQu90gI5xb0XveyHdvMgwnQ4+7GnLYZcDxKpJsZwgDqPAyDXdszMP/WpAhhdJUDIDB7hUoscYDFlrfPCNTjOxo/Y084M0tq3yOh++CumDCwRTq8sYWTKjqzyWi06CDAyw9UtJPO9Ir0hIqDSHTTqejidHK9vdPQDpvuIlBTLs57IXbrBzxiR1GPYyyF4hIE5dQp40iiirGyIDZn+4oY1hNoX3QYXqjxHemfm9EJFOCT9hS4Tz23DdGek/ZEZJKzoPjA3Q7MuQjTIr6+P/fjkR15OmcqxnAkkY12dWkUfak5VKqb445TmPZKzUJcGoFqKOxH7V4R1hmqUnxs5PVOcko9B6n72MmGjwElkuFZfK5H4/l8q4/79fvjR4mVvHbB/7hCc7LWe6jceWVZu0esen+xLyrFae8bVW7sDF4zrfnMWjx05+CEij80UI3QksgwKyAv+co8IG7q0IDiwPBw8HtghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIsKgWEY8ARKTWIIlMrFg2HoiCVAmRCoG0YpAxCIMayWIeQXCiSzkYiC8OAf/MOpQiz5EYw/VyEM27tCNOjQjE+WYRDpK8QfIIlgR84iLKpoMji9kVhT9+IZEAPI0z0oOtrJDxkNyJpFaiFYhR0GtbpnnW+MJmQWNIDADOjIy6UrFviIRwHHZyoDUuNhqQqmKTEqilMs6JSpPNsjQsJIS7JoOxJinBEbKq5KmuaV4ctmKXcrCZPgDpmV0Nwx8YdIS5AHgJUl5PiJ0kowl+CQjmEmMY+RLX66MRL8ssMtN7uCahlxkLUHZJTt5M1+jJMA4y0m/IKAzlXrMlirZ+QibEa2bHmsYyF4Ztm5ITmafSOc+NZMx+vxTEwHt2ECp2U+18TIJglxodwoKHwEN/20c9rEoQodDM44CzaN5epk8YpaePJa0or3oaIA+SqCVirSlMxNNzSyKs56So21aO2indhrTk/r0qAUA6gDMWSmqWeAeFQQLVOu21HpuyqlTjSo9slo0nkXQZ1vz6lMfqlWZOvVoYXXb167moKxVlapM9ZRT1zoKpjWNrUGtmtvg5jWrxQEiIyObg+J6qr4+6K8FDWwi7EpYUxk2G2CDqdgKstiyWRVYghvZ3ZQKywtm1qKbLajjLovWR9yOqHfbUN5i1NirauK0abVbagey2hW1VlNyq1H8Yuuf2apWrIW7LaUSt7fh4aRxYh0d5IorVE4Rt3rLe+xbSbJc0l1Urv+UY61xYSuPzS3vc44IXaiIC14LeNdGwzjvbksSufC2TnTZte1254be6nHXc+21gHjBKo/ymg51Rqod63riuuEKKb//BbBNBLyT9zYvepKaXvLg95HTjc9K7exS+sDHKAlrTykU9oiFm5I9yVnFftAjIPB6JKUP0y7EI2ZKib8aNw2jWEwqDh+LZWdc5LmYLNibCvdSkL7ncZhMHgYcla734xlboHhDfnBfvJdiJ+kYLBcmn/LMJy703Vh9glKU+Eis5bLcpcte+vIEETVmGZd5y4yrZgnSt+YOm2l+3Q3x6vCCZxrP+ct+mSVjnHXnubyPwvIz9GWLvBZBh0J/HDt8Rv+O87+PyZnIA7TyCRwNCgfurxiTRkyli9FZ1x25BJxOhKcjzb8+izov42RqpjVtglTHAYFlhSQV6pyaXOt6CrzGtVZzmGtil/WOyE62spfN7GY7+9nQjra0p03talv72tjOtra3ze1ue/vb4A63uMdN7nKb+9zoZmEIAAAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9gsq8Hlar9gbZdrKJcBaLS5PG6E3/Do2hCv2+/4vN4+3/v/PX2AgxaFhQSIiYoIjI2OhpCGYIKDcJGRC5mam4oEjp+gnZFXlJVTkQWpqqusmJuvr52yipGdn6OmuTiXkKy+v6m8hgfExLWzs7eQTXNpamu6RJED1NTCvK2QxdvF1xbIiMqSQqUXzc7oc+XRL5Hc3JHoqKvT1fbW1yW4S+fo/v/p1JlhN6NeNW734EG6d2+eqn1ZBJoB+GwgiXUETxjEZyiAR4/evH0c+REiH4nqMv8CETnygUuXkRjInEkz0kuYy1Tq9BFJgU+fkUjGpEnU20+gOXcqzRF0ZCQIUKNKndq0ZL6lWGOE3FpoKlWuIbOKdQHWAqxNEdKmTcCWrYS3cOPKbct2rF0kdBNQ9He3r5O8e/0KphJ4sGElhQ8rRkxxsWMk6B5Lnky5suXLmDNr3sy5s+fPoEOLHk26NGaMpjWjTo25DevXPlzD5rx6NoyyJqW0QWkgoETZpL2d1WQLlHEEopJSqW3aYTBIwzOB83QcVNkmwFk7BwZMePRj0xNVR5CbCW/mhr1xX1/Am0JD4Rc9Up6kX8UynN1ti+dsu/5iDYGV3DhG8LbXgc6gt9T/RgMgZM97hTBkj3/0kYLSXuUoSNB/xlwj4YcBcjWIfQBo6FdVHt30AElCXUOSiuXZ9gZLH8EICVFFQWIjgTLWgWIARynwlFdEQtDTUS3y2KMWuF1TJFRNCrMkFmWplVaUheSlJV0xTjkjWHnJJRc6c9HlJVaAIYjGmY6puSabiiUG52BuAjDnYXLeiaczevbp55+ABirooIQWauihiCaq6KKMNuroo5BGKumke2RH6YjQXGqKiZpSsdsavrExRqcnWUTqH5aequqqrGaVaqtxcAprFbKyiaUFV3wqUajqvNrjrbmOYWCCKPmqHSTTjefNJJnaek10CxQ3XiMDFmKh/6kyUmgItMlO28h1TBgr2nbruQItcfEhAl448ylJKrncmXtutOkSsC5131bYKbzsPScMtPd2e1yX9Z2H7WTq9fuLe/shW6841poHKrEHX8ZgWdkM80431wjMCME5ZDgxQLxJxuEB/KWhbSEOVlNWtbgeMWydJDcr2Mkpo7GyBS1ztBXMSMxMsz+1mnIyhBbI0ws9C4G4LAkgkzPy0LwWzQ6DPTfYsCEgDrAzs7tSJHLFWOHsYddOg4XpRBTj99jFkCTZJItO6QuHwWQ7BndHdUdJt1Xuxoo3HZv9qOLfILnY0k1Rz7oCjSkyfiOOM9kkeeCOtwNJkD8ORTkDRh3VeP/mI/zIOSRPenXkT3LHTHoLpouOeupSre5T668XFHffXdEeVedX5f74rbMXSbzduVdp5a1bNj/662VBa2UEYYppvQR5Cc9C9NFNX/31ZbalfQ1lfW89mXFlP/4Raaq5fhTt//N+FXXO/0T99kuRZ/5N7M//Evj7nxP8J0DINKaA/TsgAqEQmQU68IEQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrqwB+J6YQliKMMR0LCG5rAZDlFgNRDq6gxtM8ANO/jD3gRxiBwsIq+QWMIeptCJKGSiC6XYQiru8IpYfIMVV7hFFXbxiTrM4gigeEL/MprQjE0M46CAZYUikog3X/wMG6vgxqmVqFijWlLA5DOw4EVEjX3ao3iq8zQtoLE0gmRXH6X0hUNqxjvDkZa3gGYFR2YGkmeR5LQoSStAHssQGSsEt8DhrXyJKFx5/NXSHgKd6HhsWuBaQhwvuUp/idKVpCwledSGyi7Mhl8La+W86JWue0HMdaoCpi/kda562cthgzRlxFalzHI96zvQjI+ykFcwvJmslgpj5b+wCZ+HEZKbQRvcN0EZzlBeAmDZDM82MaeEwRGuMglrpzh5gTRnHpMZdrTkTvKpz/Zco5/mlCYyuwnENAhUJ3vbijs3xjFhvPJ5NBhbQ/9Rsrc1/81lYJkoRVHWsVwqdAgaNWLNJLLOCE0opEzTGEW9cVF04iClGEJJS3m2tUIojZ375CmAXsoVThZBaFRzqCfFYjZD/LQQIh0qSItKC5vyAKlJvWPelHK0niatP+BkUIh4oQ+rAoFEWe2oXbpaUZ+CFai2tEDXCikCjAbCjmnV6V3Y2iGnvhWqMXXph+h6AbteFa9JVevNPkqNrCFtrmE1qxOwGsQSPDQPWNtGQrwKWbgalJ5ToKxSD3ZZS2jDq2JF21S3sraNatVtejttWy+h2sHy8g9vXGpfmsqL2kooln7I7VZPxFiv7Q5wc0OcYZejTstE1AKtKwviArDc0Db3kf/HjdxLpgu5AOxomg403E24q7gaXQ68CxTvdpVbXu3iBLT56+53LfA5mVjuJdUlnXzPS9/63ve96EWg7YSUXepO7nOh+0l+WTVg4BmivqC7xungq70GF9hzlEswUigsvNgpuHi+GzDuCujhDffOd0baHJJ4t1ABXxjEtHMwWSEoYwugGEovZuQDa3zjFPMNuZdw8fFs/KQhB7jCRk6dkVuMZK5Mj3nN09KCNaU8tUA5ylySbKuqfCUsYTkvU04mWKRnJfOB7y3qEyD3huM9upw5fHWpYPncDD70wSXNE5xzW85sZzSbSc5govP1+oy9P6Mwfgd6IaIJyMJF82mHjk5KwxUj/SYxBrCGl8Yio2W46Rd22oWfbmGoWZhpT7vpiqXe4ahXuGoVtjqFr0ZhrEn9aDGWoIG2zrWud83rXvv618AOtrCHTexDhQAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC77HGi0ec22pdGCeBxAp8vjb0d7z2/dBX2BJxaEhASHiIkIi4yNhY+FgpJQkJALl5iZiQSNnZ6bkJOiPZAFpqeoqZaZrKybr4mQm52hVnmjRpWPqby9prqFB8LCsrCwtI9Sf7hFkAPPz8C6qo/D1sPSFsaHyJFCeX9/dXbhcrfML5DX15DjAKWoztDz0dIltVrL6ELy0Nf07B7RowfvFL4x5/bt6FevUICHD7Nlg0gR4kGFGGtMpPigY0dIDEKKHAnJ48dkYMT/jdOXkdQjBTBhQqoIcqTNbDFlooTCUoRKd3XKyWmZYyZFSBCSKl3K1KhFe1F+Ap1KFYDQOERdSNxKiGlTrhKVXa1q9U6Jnlm1gm2VKYJbtwnixpVAt67du3LjXrkaLq2XvAnIuvNL2AlgsoUTU0GsuLESxo4jP64quTKSwZYza97MubPnz6BDix5NurTp06hTq17NOjPm1rBjy55N24/Z2pXB3XH3JyFuGmArcfH9u0U2tphmeVqOANTO4loK/nqE/NI2Tsw9BYfeRLovX8erF7uOKDuCi03Qjs72vX2BbAELkVfk6LkT9aLVWWs3zrv+YQSB5Zw3VeAXGkMD/DNP/3yEDDSPf/aFQZxn/xEjjYMYBsgVd2A49ZBJD1REkzQVgYheSnzddiCJHJlUk00ileRihFtIVdZQp3kYQE4KIOXVjxBAwuOIBD7Bl2BIkoNjZcFlA2RSTULF01hVoWVgYsG95VaUhQDmZV4nFrjbSirGFhxgd93lDl55cYjRYUkC4KZkcco5p2OQ3ZlYnXo2lmeffo4D6KCEFmrooYgmquiijDbq6KOQRirppJRWaumlmGaqaWuvbbpHp56GKuqopIo6YakSvoGqGVeuKoVucvB2x6muTtGqo1wSMpyql+Zqwa5pTDreMdllU+tC0lS3gHLmMTKgrsems0s81FV3Xf+z9W14rHftraJscvMdMix2jIT5BK2bcfudt98uGy4B43YDbRXoaqaue9MBo+y41xZL4xK3dsYevr3At98j75K7iLlJBMwZgsFRE8w62EjTb7n/7gBrObIKVS9hFR7AXx0QTgzggwLGkvF9ZZIW8sh0lEyIgtAE9+yvVjgsWcgMWuCOzBZkOICxJDAs1pKlIUjzMz0LDbQZH1v28oVCZ7hdtGoVoiEhREYp4lErY120QCg7BDaXXz9VpNhZc92iR2lHxCJEJoZdY4pIf7YR3TMWAiNJj9S9Nhc26mzvSznp+OLfOCVutxFWjkkVXxQ+UhGPPj65lJA5dY3zlELVSZb/4S3piPkjmn9VyJBnz2sklaJPRbpfiqOeulK1A3P0HLHLflVmvmb+Y/CPF3FklS3PjlGWWvr65fNGRyW5kljluFZ1WkaAZprcSwDYXnhXv1pwyma/ffdsygV++NCdmRf6Eqxp1/dsJwFnkvVPcf9U+V/BZ/9Q+B8Ap/CnAT6hgAZsggATeEDKMDCADnygExAoQQUKqoIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ536ChQ8TAFPvyhEIdIxCIa8YhITGKioiZEJv5QeTiE4g2lyMKNCaBjeOAVDa2IRQE4UYZUrGEYaTjG/z75Clhq6FWu0KgHSfGLPswhmgrfWB5/6W6FdOSGHXUhwvAgh1nYulkH/cgWQDZLkBUEmrIuhq2rsU2R1toGtjCmrUdOyyDV+qMkJ3kesETrXgXLZLsSFq9suW4KX3QMKHnBrm+REmFwXFjxkpDKxqyyW8kSDyzDZZ7oQa5llSsEwUKpL13K5129nOUQykiUW64rl8jJ4yuSOTgmMBNk0hgmK6XRs4TJ63Ovy9t6sqlNagGjm8g0JThZJs78kK1mYJHYzChmIWAwspPV5IEVC3eVWi7vnQ3ZijwtQM966uKevnTDG44XlH5qcWcAHVo8zTlPemYDocqcwT6nd6Ny+P9TIVMrxM8uma+KCmNrEkGkmNq5IpMZ1Gf9Iel7qmENlF5UZfkMp/hAw7ODiTSmwqRo0KwmJREklJ071RtNLfqIkQYVk1oj6h1HcNT0AFNgS6UYzN4hUwTZ1D5VteZVW9qgBdXUrBWLKoaeVoaPRkZpZ/WHT8u61q5mlF4PVapLRUa1qjnIkQ8MqS78WtdKBjarfAUGYf/qyURGNHdei1tYawUxy7WuSXELwGTFpiMQZXZvH+rbKcMQvqQG0218g5tk5xZaj2zWVqUdp9lS25HPsjYAghstitjnTmCUSLQW+FuMAgdc0nL0mrS7bW6DK1wGyMi1d9XpFcnEUp4iLib/kGWucBuH3ej+IHKxQp5QTmuB081Wbn5rLnd1ktOGJY+jXUQuLjjX3fNq9hHNda40zKtbgL03vJP7HVbty18L3A5314WJ53YXjt75rrqFMZ3jCnFgKCVYAQuWXugc3EXyeq7CQbKs2vioYd5xuKHjHTBq0duVCmf3tT6wEYcpp2ILfNjFImaxcEo83RNTry9SI16LgSTk/iqBoQ9OqnwDUWQDP6nJDJYxdZU8ViyBJXvOe56XYHwEfkIYeFduXq60vGXvIsHLpq1xNrA8ZjKDycxdPm6V9bqV8mnpfPCjC/1WirfWkA97d35fnuuyZyqUFhDFcZ9c4Cc/QrcphIqeagv6Gq3nR4Mw0glg9DjSp5ca7k8wO/w0BXEo6gsKsdR1ICKq6ZDEBfLQ1UQc9asjaERZ79DWOsR1DmGd6zjF2tdI1DUOhX1DYtvQ2DVE9q5NrcQLBLHZ0I62tKdN7Wpb+9rYzra2t92ZEAAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC7nAGi0ec1uu9/weNxCpxPu+Dxiz+/X/3VyglCAgAuHiIl5BH2NjouAg5I9gAWWl5iZhomcnIufeYCLjZFRAqenk0uFf5mur5asdQe0tKKgoKR/TaipqkmAA8LCsqyaf7XJtcUWuHe6gUwO09O/RIDKyoBpaJWYwcPhxMUlpdbnLODDyuLaf+Li3pfm6PXp7+GAAfv7zMz8APnRW0Otmj0f/wA+WLgQEIOHECMCYthwl5teAg4i/KOgY0d9AB1GHMnM40eLVQr/OsCIkRsAlr1UapwBUuAfCDhz6txZsx+5Mhhn8vBHlM5OnkX9hZEptEaCp08lSJ1KtSrUp50SRdjKtWtSC7xgwmyaxKVZblcThAlKouVZNGJ9kQ3yFk1aM3EF1N1rlu1cG3ut5d3rV0ThvzMCN3Wb5jBiwHUfSy7LbbLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55N+8nXgbXnFMuKaJSj3wggocytRV6sP7wPOWME3NHXK0xNG4cFi1nyBbeW42mOAHcPlYzhxiw4mhn18wWYuaujXY+f4Ukcn8aWbBu36fRrxUsqPBrxVfisk0w79QUIzwD4wfdf/xT52VLMgRDuV9SCX/QUAEUPBBRQQvxg6B0Z8oXG4T4e/jESSX+U6B8bIYJmoUkKAHLUjDgBAuOGCoLR4me3FUNjjT2yshR5p6Vl5FVdRRDkkitSuERaVblUlVVXMSlFeC/14uQFfKF11VpattULYXG11mUab2B55ll5oaaYUFjuONqaAByUl5ynvbnlXy7t6eefgAYq6KCEFmrooYgmquiijDbq6KOQRirppJRWaumlmGaq6aacdpppn56aAWqopJZq6qlBWIkqg0uuykR2uTTHjKs3WJecb9zx0R8dtN5TxzF1XLdcru9NaEV0pU133ibX9dbeHbAyx8eHSuDJmf+y1DHb7ALPQvsHrntQG1+Y0rWCXnW7JRftsLLmyAN4Y3KDEbI8FnMuurKsZ0e30PDKhLUuGohgUsDSkU2BsrA7rbtF0ItagwfYl0aCswyYD3+hMLwpxBJ3Y+48yFg8zFe7guUpxPpa4BLFdEQ4sCzlaByqOsKwE07KLrNscq8kcPygyxE+x3MKNL9MB45BahiSzGA43FnRFjKptE1NmuG0iH8EhOHUPsmiNUXigonKw8V8zZBIJz40EdhMfwGwZjaaFLWJaatdDIxhS1PQYPLGdfVfL8p9049I1XHj0lXrSG6yWQOE9+CE5xS3R0j7C+Liqc1dR+Q6aS4kUJiXxyT/5DOO3jYVf3925OpJmh4kz1BOKbsEaV2XZOtJhXWnXK/FPjuVUNl+O1dCL7H72LH5LpWUv6elKhRxhp4bnXcpjvwIavYtlmx7VX+5WHSSeX1pdKYZb/hslpnnmuajgv5bba7/lmBxic/7BW9npqdG0Y+fWvn2ON79zBSZoVVhfwaEAgIT6IRRMfCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+hBSDvzhCIIoxCIa8YhITKISlyjD59HQiS5cl3uAM6sTSnE77YKZFb/lDO5UkYO24g24clWy/wyGMStj5E4ZJ6gzYXWRWOHK3bGItJo23uqNcCwe6uioGjuKEY/E0uMUUucZbOGLDtty1rOi1a+dPSF/mDHkK7TVrG4RgJHFstwjpYe1X93LFWfsxBVjRcXT1QBe7tPeKQj5GEmiJ5ScGOUnvGhKGqDyFC6ZFx/h9rFPgkwW15FlGjPpyB/cUi+qFAArL2MeX36jGCmzZCN1N8D52MuZv2RFNPlFTGpmhDVQI9gzK3awiBVDYXFMnBGWGbA6SIgoBbNAOR2UMEB2p5bf2SXZ3HmxosRznuasJy6mqTdqtMZndVhZL9MTMv30kyhrNBVC6aBQT2ZTniIbR1EiyimUIf+MovdZaNHeWYiYqbOjDT1YxwCgs5z9ZAR5w5RHl/GHitIhni7VIkzxKVOB2UxANOUnhHRGwaL9tGYftUBObzpOTQ5tooUAWtDkKEGojlSqGiVKUVMaUFZg9UCCfGA461C523AtADH1AjsnM9ajIa5HZ01rF9aaGQttjWsjuhDbTioGSDKzcR2iSFzLppC9OhUvnGynWwPLkMF6rbBn42kW/GqZvKqIDnWzWx0uW0zE+k90j2VsReqQWQasLbJ8FVs1O0mHx5H1rRYobUkEl9qCToNvjfGbPlvJEdoutmuYzexsPSJXJByzfzChqz0md5LXUi24dRtucw8bheOeTzz/YlFuPQJHXNJFjrkKKKtnV6tYCwTEtUbhHJAMZxLxgu6z1nQucC2g3vX+Fq0vHQNleSlf/G6uvp4r6XvJS5oA1xcCAS6uFfYrGdell0YO7uwWtFtZBxMuwkMyaJFWZyTcRdhYCeRwh73yYRAbUMRp8XCJv+gq5f1OKrVLzvCIR9VqCVA2Ln5xjHkz462E9QgC/CZsXMy82TmvVaa4bpbgO+SrRIkbOq4SkqGnZAaLhshQbp6UX5fkVOaWybSh3pesd7/sfXkssREzVFQrZMMoOZfqg033xvw9mLwvfWAmzZzXPGCW3LkvidVzXbyn3/r9OZluYt9F3nzn+JkGgG0waDP6HE2+AqoCt3guc6A9s0A5YBrQ/rMyYjodh0/DOdSb7gypz4HcNrtm1fTzMnYJPCdF1yPI3LM1OnCdZl2z+sa9np8QYW1DYtfQ2DRE9gyJOOzKMPHZ0I62tKdN7Wpb+9rYzra2URMCACH5BAkCABcALAAAAAD6AA4BQAX/4CWOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrt7lnicQK/bEfi8Xs6Xv/9OfX0LhIWGdgR6iouIfVwAkJCATH0FlpeYmYOGnJyIn3Z9iIqOk6YugnyZq6yWqXIHsbGioKCkfKe5Jn0Dvb2vqZp8ssSywBa1dLd+uqZ9xcV9kZCVmLy+2L/AJaXN3ijXvsXZ0XzZ2dWX3d/s4ObYfQHy8sfH8/fz62cG/PztcMDwPRg4sA+DgwgT9iFYEJeafv7+7eijoGLFePcMJtx4zOJFh2QaiBQpEQjGfHwg/6hcybLlSXrbSsrkVq+mhZYubdab+S2BT58SggodSvSnz06GIihdylSnhSsQDfA0Mq2qVaMJ1owUGTVq1a4QtzaYasPqNKwyo5L9YTZSGLBwc4hd66OtpC1ep6mlq8UuAKhwDfgdrBci3yVV3wb2u3dE48OQX+SN9Diy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewOzvVF7vNMaSFRi3ajaARyCyJW6dzxQc3oWSJeC9yWjuQqlbQib8yvoAW8jrKEdBuLuRY9OjHysm5fmfPb+5DnhGTNm14AfWy0On0zQx9knC9xmETH+ccvOfqnGffE/DNAox/CMpnk/9WW5H2UgAMPYAPPvbcE+F2Wog1GSRRzZVZhfNcyMdGHPEhYn1oVPbZgx4p0AdOMKpEkUcUCjigFLMBE6OMOaZyoxRYBWkUUxH0aCSKTnjIGlZEVUVUUUYdqVg/zREWCVpqaLhYYXApyZmVd02lImp+cbEhAGP+yAKYf0VR2ZlfBaYmCmVaASebXII1pwjBfRGYYHa9adiea/yZJqGIJqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeghirqqKSWauqpqKaq6qqNSskqgUa+qoR1tih3jKw13GacbtnlQV8cj0zjmnub4IZcr+YtmKp74BVH3SHk0UFrcnlg2Cn/s9AV++wC0UrLB694WMsptt9Jlwp10x5rq42eelcuK+Gt9223ywBLKn4DOCUMLNAYA4y61bJ77TDyylEVsQTH959Nvz61bMIGGtwegOZaoJ8vTjVcaoHQsBcJwnIkmG9MI4i78TviEENOwf0lCLK9uJYM8QHHiCwyc1k26Bm+Dx45YUYCi3GoZTzzUWOPP6OEpBlDa/ZghEnD9IpADJlshZb9xNmPl0QHZGHVI5KI0EJgL11G0x/y0WLPYYvNQEceWZ2hzqKxGHdKO+YkR4tHwxzzLkbfszbeea80o0V9O/z3CmzLUThLjfu4OOBHOr5j5UGrKuTmRGLeoxRcp8bk/5OkS4AVdUR2rhNgVLY2eulQ/oR66kvhXAXaor0elJOwY+Wqn4PGxiaWaWANltZghe6ZX8T/g3tobK71PGjRkzX9Z3UCb2hENyh/WvZZnHn9ntVDIWjWgcq5KPhT/Iln+q3Pyb4U7r9v1visze8mRPbfr778wgJD/dpyPu5NLgjiC94Bi7C9+C0wCQ004AMnSMEKWvCCGMygBjfIwQ568IMgDKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEOd8jDHvrwh0AMohCHSMQiGvGISPzR72q4xBemqzy8uRUKn4iddb0ihVRUhhUl10FdGQuKyNLYFvoEG/8vIgVcvRJjXwLImpdZgDoAQ5btWOVGOCYDWQFT1qvquKs74lE7q3uYHN5VsW3lplvTqpfiREUueDnLkN0iQCKT5bdQNfI7ZuxEFj+RHblN6pLNmo5xNolGRYIKlNkCBrrmFa1OZk5T7iKkNYDBH2TQi5KLtCQwZLmvVNQykqa8F8q0YZNeWqxfEUtFHAFptnYNc2TFnCW/kHmMZXryUkWLZoCm2a9q+jGPlTzlzDxGDYq9Z2YKqokaT8UxcgLAjRcjpjpD8cpMcayWBzMnvtIpCJo0k5Ezw+fEBinNliFIijL7py652TE+5JOg2zSofxAqgmuKM2T7UVlG/YXRg+r/s550fGY8B1DLm31Uoapq54Fs5lE9osF7l1HpK1ja0powaCQrGudKacpPip4Bpl3rqDwtkDinRC0AFsWLAjeTzTgUVSdHTaoW8MeXpzEkql4LUdnCuQXjAYoyYaFbTAOnVYJgdWpfI4hUn+BV5BkAqGuxqlmjBiJ5nIircxtJArcm1qCmgmpqbZvYyBZYlApwqTlFa1kbIge3HYSwjMXrGKhKl8N9RA6Jc+zbgDE4w+aVJKOxrIvIKrU4aBZuFlnrFOCatr3dDbNAa6xjUXtZyXaBtZixW2oJ9zjRJq6Cuq3tTR7HI9ciLra2PWDkhkvc5ao2paRFKm8L51yQxmy5/8QtrlOR208Kei4OeftuLnEl3vB+94CbE5LqxOvSJPXVNekN0nrZu5Mo4NY08cXKfOlLMra+FzW6g11QTmcc2tUukLdDLICNIuDYHaXABi4SgqlAWc0EmHel812sDutA1Vx4GgLW8Oc4LEHRMXgoGCadiHM0pRK3ZnhGuSlXtgTWLv23MzD+iYwbMEAOBea+lmFejEtS4eXZpXntKDKOjzxkiSj5MuXjyZODDCbpKfh7dmmxoeRyY9Pob6oR5DJOX5xlEm8ZB0DGXpnBjL4au5hSX6Yw//IklUpF2QkF/Kr/4rK+Ku+vw3dyc1cYdecm5Jkx/0tUnPFM4/4JmlCLNlR0ox2NpiujJ9JMCPT7/gTpNcu5zZSuNJ8B2BbW8SPUgp4yacjYhR5bJc+ddouZNS1qCao6g3t9cw1zXecd8hqHEey1DoOdxGIb+9jITrayl32GEAAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu3GWuHxOqNvvePx8b3n7iXsle3l3CIaHiImKiHpzgo5/kSt7B5WVfHSFjIR1mHKchJSWB4GSpiJ7A6qrrHsLr6+DmouKALa2jZ6sA6Wnkqm7rZ4WsLGZnLSGuXHBwnK+0Cd7BdTV1tfDFqAEidPWvdHhKtnX5d/HhN3ZkF+3tuI0ewzz9PX2ewH5+ev8cfr7c+zdYwcPS4KDByUoVIjwYAkIECNKxPevosV/DzJq3MiR40V92QpqaZhgocmTC0n/9oujoGXLjzA/eoTpsiU4kUbc6dzJsydKkyRfUPxYs6jRojFv4vzRs6nTWypIBnWxkk/MpFUJTnHAletSJFnDhpXSlauAs2d1oj1b1sHXt0rawp1Lt64XuXbzHlkrQC88vmrX0mjLF7C7wmvx+v2CGO3Tx7b40pC82I1hyE4bnx1ctrLIy5EFex7NQnNh0qhTq17NurXr17Bjy55Nu7bt27hz697Nu7fvLWLj/D5zUxayZMgTLetDQulwIaIsZcOTfNM2TtlGkdL6vAewVa6KGe+E7vryYgu+q3LeXYf6YOFhjedW3ZDO5e/Zt/c+DFtw6sks598z+zVBjjnmzAfg/yFVhaETa/IIRM+BCM6njicDEVigDFOhIBEEEU44R0wdlWjiRhWFKKF+G5J0UocifPjhUFdZdOKND2DlyYYkYLbTiw2NM+I/R7lUI1FFKpAid7D56GNUUiEkVHBHXhQcc1UoloWT7kiRTQRghinmlWKWGUFIVlDG4wVXokmGmmvOpWWcdNZZA5x2RmEanjnwmecPeIK2k2l9ivanEKZx2ZOfLTB6KBCJNhWooY+KsSellWaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMYq66y01mrrrbjmqisWV+66RK++/jCdeaEME6wJxZW3YH0B3pGshqxGd8kwyyZHbP+xnmjHIqjSbudJtdsMS2y3235KLrWzKAOKuOadC62p+c2B3nwKXhufMXLsUq6n7+krr3jlMYvAfc4O4++7pfbrDCbzKpuuIss1Ax6TqFJIzZXVKlewHAMKN6vFBWD8sMZ2eFPNvtHOgWCC6B7HoMrnIIwryCuH7LAdF/LjYJerqSgQzTHHUW02GXrcqs8SiijHkm368w/S9aDMKdRJ0xhA00s/HVDSDEhdIIwmzLi10k7LhOPZOWotB9ddU8yji0AFSYKMEw1ZJUZod6QjJofC/RNKKq2E1N0wzYSkS17/pqgtQEqZgtVJKkm4PpEzbbSdiwPQuEOP251P5ZN/nqT/5Vj2lrlTfzMkdwtWVxQ56B8lrtrpTUEZZQJTihU6QGJdMecVmXs5jJljBkd8mG5S4ehtWDcv8xKErRUYWr/D5rzzZJUlKF/V53a9210sf2wT3Y9v/vno21p++kmIH+ylaPng/q3bY/pC9I1Nj9j6qtYf/wz4Q4z+CsO/T03KMZLSTKH+Rz/N0O4W8ztBBFclqMwRCoCdeZ8DE8hAEUyQfSSI1KIw9UEQlkZ6h7GfCXUAv82s8IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFrfIxS568YtgDKPwesdE/2AFkV3XIs+OcIjGNCavhm20l7HQ9yyhgUJgyFnOI56XsnfVC2d4pIUemwO+hM1BWy2rg8DSiJ9DjkJ2lXIXJjLWLEaqEROI5GOoJMkHSgrSkpfkQyYvBy9HSieR9DlEuFC5SjmMsnSldOUjUUkybE1SjrI8pSa5NYeDxaFhn9iYHUF5r/T0cmGwNGS+kAnMYYYSlKFspgV8mUxSxUsO0lwONAlQzGuSUpnMkBgv/iWfgDGLYCUzGDJVpbCJYRNgwQRkfdAZSm9Wc1TtXM8wsnnHSoZSnOPcpbmOKbFs8NNli4iYOCH5qHwGlGHwdGYe8ijMaS60kNbsT9Cy4kl1pf+TYxulFchEJs+EVrRj94yVyWp2MVY+bKU2E6isYFqzOJYUATBlKDthxtKWfqufLwPpyTA6U432NKYSHdpKdgYV6xm1p39UJCIaBIYH9WxsK3pqOSw01WEULaWroto8gDbUeEo1qJj4qkix+jOtolSpGIoaUUUl1rZmDSTNIx3bdPqnun6VdFfSK9f46huwPaRua5PrXS+SNxwJtmpzbdHqTiC2xJLNAiRq7Ikem1WZvm2yYUNsHP5aOM2aiLN2/Wac/KY6x42AbhFpXZVMq5G98WFTrJUA2GALEdkeibYZsS1hcZPb1Om2IVUZ3O7wVlua1GS4vClu6gLXD+UuNx//hrtIUaC7G+n+jbr8sO51s2uR7UZ2OJnbHO46t9gAwG5y773aeRW3OPUKqb3xvVt8uTuaB/LEuIZlb9m0+7oi2bZA/v3RdEF73wGXt8BHOfB+EqwTADNYwJh1LoTFS7rdUJhnKLgd51hHpd2ZkQoFrMKHmxpiEecuLMs98VYyqIXgReFLxzuT8XL8RimUcAk2hgKOj0cmHs+xCj9WQpCfMGTiFZnIR1aeCr33vaZlryv+YwuNZ1NlK0chgAIYYIq53GUzJJl5ZS7DmW3TZbByYc1HHLMT5SzGOtv5znimFZ2ZuOcl9lmJcDZioGPVwr70YNCwKrT8pmw+RR+a0brKfrKhZQBmSXNvy4lGIQQhrYJKazo0jfnzow6YFg4iZoEubGAHL1DBFDYG1ZO2FanDbOrT4ADRoBIh7c6MawNu8IG85rSrWq2oC1Ia07QiNpeMHQNRl0rZTmI2DJydKl0PioTClqG1B1iCXptQ0lIEdxTFvURHQ9HceU63un0RAgAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW67cZa4fE6o2+94/HxvefuJeyV7eXcIhoeIiYqIenOCjn+RK3sHlZV8dIWMhHWYcpyElJYHgZKmInsDqqusewuvr4Oai4oAtraNnqwDpaeSqbutnhawsZmctIa5ccHCcr7QJ3sF1NXW18MWoASJ09a90eEq2dfl38eE3dmQ4tF7DPDx8vN7Afb26/lx9/hz8/Ts2mFJQJCghIMHCxIsAaGhw4f1+EmcyO+BxYsYM2akeC+bQC0KEyAcSRJhSH1xFP+oVMmxJceNLVeqBPfRyK2bOHPqxFlyZMgXETnKHEp0qEuaNX/sXMr0loqQP12g5OPy6NSAU3AmRXK1a9etYMOKHUu2rEABaNGafZK2rdu0ZhzIlesWp9u5ctfWcFui7tK3bX3gdYBksF4ffpsqBgwXB9/DbhijZfp4ROUTgyULsCvZMOQxmi8TEf259A3PplOrXs26tevXsGPLnk27tu3buHPr3s27t+/fVLzGAX6GpixkyZInWtaHBFLiQkRZyoZH+aZtnLKNIoUVeg9gq1wVO94JHXbmxRaAV/Xcu471wcTDIs/NuiGczOG3d/99GDbh1SXD3H/P8NcEOeaYQ1//gIdMZeCB/vwTD4IJ0qeOJwAV+GAMUaHwEATvyBMURRqVaCJGEoUoIQP7PRgSSR2K8OGHI1Yl0Yk4PmCVJxuOoNhOMCo0zhwSFbWSjUIZqUCK3cX245NOpQCVkFIJhyRFwjVXhVZbQMklFNlEIOaYZGZJ5pkReNRjF1mqueabcH6GWpyhBVZGZm1xltacvSVmC2lvAKqbZl7+ZecNgsaZg5+F3qTZoocqygSjiepQqaS+8Inpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWauutuOaq6668ypZlrxB6BWx0w5yX3TDDomCceQzaJ+Ady2oIq3SXFDuL/3XGhjLMdi2SSi13njSLwDbUZfttt6Oea60dy4FSrrHqSquqfnOkR9+C5tY73hy7oCsqfP3qO595ziKAH7TDBCxvqgA7g4m9zF6rCHPNhNckqxRSk6W47drhTTX+rppxARtL3HF5chA4HK8fJ3hOuKBcGIfKWg47ssskR8wuIg6yHOGKN78ch7jZZLhyrCquKCKR/LTJdEc/SxgyqEkrDU+NTsvBpBxWT21gjCbQGDWLT5OY49k6Nj220TXD+aJPVI4wI0RlX2kP2iXuiAmmb/dU0kkoGWV3SzAluZLXwDVqS5AFDak1P0ouOfg9kW99dJyKA8D4QinUWPnk9nwO9f/Cu2XOlN8Jxc1CjUVGrqTebd9m+lJPTcl5C1mC3o+wVnyZReZShInmmGYOL6abyTqX9fKXJy8N88s7TwP0F0tv/fXYx6Bp9kxsz70Sl/JXZ2Nk4JmWnmh5nxulkf4Rfm2iMYr+W4LhVZj9wMWfp6GM1T/X/f/Ln2Rmd4v3scCAqpKf4h7lmPbhilD8UwsJKmU+wMzvLvizFfvIBwQEPnB/BXRgDzwoq/FJ0Agk/N4P1KfCFrrwhTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIxSpa8YpYzKIWt8jFLnrxi+H41RLFCMT/d2XLY8i6oRnPSADk0XCNZ3Sj86I1tJgV7FlolBfiTkVHbdjxjotgziNIh7E5cGtddSgYGxHmiUMS0lTxwgTH8LhI7Yxij5yKJB8mSYtF5hETjmwewwx5SUTW5xDkMmUq5RDK2KFKkxa6jrZgBi9STqd6paKXHCD2CUbW0ZPyMYYcFCbKV/LLYcTYVy8/6UdgCkyYzECmq3QZB17+EmXXZGMw1XNMiz0yl91sxjZjaZ+DMZOaruRjOOPzTG4uM5HOMic2+UDMdEJynfUcp87g2UlfWqBi7MGlt/CJTH2+Mw/JoRhAMbmphnnzYcrMJieV4U+A8kKgxvQEzaYy0XH5/5NmuBpZyXbWT2aC1Gcpw5nQNvlHQ7QsZ98M6RxUulJ8kdSlM13pHHNKU5hKsqUIeClDp+mfnvq0mengGUp2qlGj2pSfONVHr6rGtpfSjGjDYJtMuaa0oIGMYErF0NJi2iqqjhUTOCNnVDGhVVmZFWh1Y57lLNA1jP5rbV2N6/LmWley9ghsDKEbVydUtxvhDUd8zatfNwRYEohtsFcrbEUOe6LEwnWxLlJd2AQbB7a5hLKVVRtk/zHU3fQtdY1z7NwawrorgfYisCvtb04rAbCtlrWSRdJrLRJbu3qHtqirrUKmIjjdTRa2MZGJbH0DXNQBTh/FNe7dUJTcw/k2s/8FCe7mEkBcmUj3uLyt7kyuS5zMbddx+4Dc63Qnut0Vs0fmhVtqlVW39g7OvstNDQF1EtzG0vdxhnMdUWBnoP3mpL+aRa8FXCJgIxGYPwbmiXMT3Lnchq7BA25JfvUS4ZvUznZAsZLuyEgF33Whw1FCge1utzoRg47EWfFwlxQXvGEY73jCuXGa0ggb4EVBeMYrXpB5/Bofg8nGNxby8OSYPOplzYVOdhoOo2zPHFJZiFcGo5a3zOUue7kHLIximKGYwiSWGYln5o0JBRAXvGwwfRn0zprbPJc3C2DM8APhn0QYGT7LWc8ASDMYBJ3n8znKz2wgtGr0Z+idMJAHeN6JQaRnw+jJRJB+YI4zESYtGwgSUNEXAPWnPD07UIvaU6Q2nakR7SoFNurRNjh1p1xdKFjvhdUlHOCl+4LoCr7lgm3hNKp17ej2UdDNxN4zY4Q962TnpNJsToGv7YzBAGoQ0LI+QbYTiG1cI8rbtZrzEbZNKnGjENy0MncRyM1DZifR3V+Ot7zDEAIAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6j41o9EmtWq+GbPbK7Xpp0qh2rAWYzWRyuPFtu98kMnxOr4/W9rx+z+/7/4CBgoOEhScWiImKBIyNjo+PipIWhpVIkiWSkI4InZ6foKGfkYqZpZaoL5IHrKyTi5yjm4yvibObq60HmKk8Z7/AwWaXigPGx8iSC8vLmrGiocCktcgDvL0/wtrbwSoJ3+DhponV1bWIzM2ws9Cd04jlyafYX9zcEvj44QkqkgX/AAMKPGfhFgFQ/gJeo9dnX76HEPPt63dOoEWF6zYhJDiPoaGJKSQxGEmypElJAVL/puTIEpHKlYpMnuzoERWEmzhzonzJs+fLB0CDCh061KdKgjWTtkSkoGlTo1CNFoXqtOnCpFhd7DRatavXrlGvZh0bcunWqD7NiiXLloTat2/b0klDd4vcu0bIAJODt2+PulnsCUYzxq/hFXoH2wNs4LBjG4nP8OWBh0nlx1knA1kTmbCWy5jtcAa8FzBoHZpDe0ytuvWO065jy55Nu7bt27hz647Berfv3r51Aw+OGzbx48iTK1/OPDZcRM0LXXXGrp11UO8ouaUZnVgiXbvOPbouy+AsguDXdgciyZyidAuo08poPjv89vISyVbc7Qj+eNa8l458B5HXiTSOEOSe/37I8cdfRA+BNAJBAz03XjvZVcjgejA4BCGEEh5S0UUXEXihJ2ZxuIOHEolTViIylUQhiQUQuFEtM22oohE5QSCSjIpERdSQRArF048xMqDejjv02ONZaPFU5JQPhHUOk1VA+ZVTUXK1pQJHcoflE89Z0GVaz43JBUERtOnmm2W+KWcESKmpR5l12nkDY8Pp+UdqnQXD2G3AyBWog78M6mcgjHEDaGGLFsInpEH0OYSlkSKB6Q2jlZHoGMZlWimlSoQqahKmnqrqqqy26uqrsMYq66y01mpra6neOkiuujJKaq+VbApsF53SVVpdvA7bhbDK6sFss3Y8Cy0dyU5r7f+12Gar7bbcdmttmd6umWa43r1S33lXkqsVTSY+YyCGCbIrJrS5tELQieSdi8s56c2ra72uiOcuAgbdqy/A4emoLMIGN4LdLQ3Xx7C/t/5njDID0tfuuRgzY3GACoeG6BnlWgDgxQJ6TN+7CCDYiIL5QWfbyIJ5s4+LExZzMkH30YdvKNmdDLLMx9Fsz4f64CzCjACV+fPDLyuiIdHLGX0P0iFewPQ/Tg8M9XyJTK3dokZDlPU4iNBoUcSQ3Jg2RiGvyiLSLYJDUS1qi22Q2xzZOrcEZ28HY5JKjkiijZ8QlCPVsgae8+CEA5lImHi69BKSMS4pquNLxxS55JYfVXn/6DBBnjnFtj7pOUlQSknl61VevvrpcffqpE5Bnuk67FMZlSe2ZoGlO1S9+9SV5uRq+eXwL30Jpuy1q6t17io5z3z1y0PPuPQotN6889n7jjr308N1felxkY/2JHPC+Vz7bv6uvgmj1x/9/OvbDy7+Nug//quT0gL/lBAoaQ1wBo/ylDYUVZtCtSWBgdkGA2njQLY0ymqS+dUBX3Aomk1wgzS44AJ/ZUAQcnAMx7ILZcLQhGoxqYAaxIELfTDD5gRQhUAoIWpiyD8dvqBYBkihAWr4KiDCEFks/AsP8edDGSbRhE3k1BNBGEUT9oCIVsyiFrfIxS568YtgDKMYx0jG/zKa8YxoTKMa19gtLLKRBW58owqqKMcS0LGOI7gjHi+gRzz2EYxGROGnkCiFNwZSgZ6hSxyteMgIZpCQU9jjHJcoSRj8UY6XfGMm2bjJNS6ykiL4JChHScpSmvKUqEylKlfJyla68pWwZM+4ULk/PLJNXwSQ3xhvebB0mZGXHPMlCKfjM6+xrDxgYxzypkVMW9zimPCKmsKW2auJ1eJp0cRlMifRr/vZyprmMiY0tBmvWnRze8AC5ySwOU5yblOd31LEOdc5sIIJLJjf0QU1Z6VOxHnCntfsZT7t9T9+6uwYHVOHM6WJCHdus2fkiNnYmvWxhMZHY8XEJzoyFlGEFv9UVhVNmUIbWk6SutOiIfWmX4xWMqGhdGXvctk7D4oylfaFpf6haTleulBGsEymuTzHgtDpGgxqw2Y3+8b6XHoOiJpUI9kMakfjsc/DGFUYSE3qUnfWVI4+tW1R/dhQJzqbq/YHBUm1m+DgwdVaOLUgzwyrTseaHLMCg25Z21qNLCROd5TUAmKLjl1/gVelle8VYjMLO/3KUMDCjahYKluEDLu+vD2WntVBkdQuyyrJ1k2pL3qbZfca0Mx2IiFN++iOPJs0tXZvs6MFpk8TB1uuqVZNfyusa0WEt9GS9qs/SxGscos1yq51Er79LVxNiwDh0upvnDusBSKnV70NTHH/oCMrq6Br3MchgrqGKxFMNYuj7MaKu7ul3+xkUt3LBvcci9PucLvbOdN9Dkr2o9x3CVdVO0UXc/elHvrwpN/p8ve2r1Kdfb2nEt5RqcDgtemsFLxf1gm4Jw6eEoQPLGFZUdjAFp4c8TJMpA0nqb+wuh1OGBwlEgfFSrXYlopvwmK0uBgoMH7FtoJXlfNh2EhUqQqKq7kU4fm4wUD2klOG/K8i9/jISH5xkJeMYOBd2Hrnw7LoOrzjK4ePeVoecBZrDL4v94TJ6iJzmb+SY/maUM1rNjKauByuMvm4lviz8/nwPD82wY9O7/uzLsnnZ/jFSdDC7PM5/gxouDB60Pzz3d/ovCjpyqGx0m5WI6YluWlg3bAxrvy0Ko+Iw1WSGtStPHUpIRhECQKGUL8wFAkFOcK6wJpkDyTNVTvZLRFikNfc8rXVgL2tDo7sg2M0NqKQfUZhC9GOlEy2rmtdamKHy9mDrHa0OUnrRKL6NVNEVbgzpeorjhsK5x6TqIVgbRS0uzXrHpUAmfBu1cQ7h9uWd6kPCGwgClGUt+p3GE4N8Ew1stWPVGS6IZPvZh1ciGpYeA3qbaeHZzsNBY9Dw9VFcRJkHFodv4PE1RdyMJb8iyf34sfruPJYuvzlrgoBACH5BAkCABcALAAAAAD6AA4BQAX/4CWOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHTKNFit1Kx2W2t4vVcrYDwOG75ernrNLqEb7bh8Tq/b7/i8fs/v+/+AfhaDhIUEh4iJioqFjRaBkEiNJY2LiQiYmZqbnJqMhZSgkaMvjQenp46Gl56Wh6qErpamqAeTpDxkuru8Y5KFA8HCw40LxsaVrJ2cu5+wwwO3uD+91da8Kgna29yhhNDQsIPHyKuuy5jOg+DEotNb19cS8/PcCSqNBfr7/P3iFrIIbMrHT9o7PPboKVxIzx4+cf0iFjRnaeA/dwcDOUzRiIHHjyBDNgpAkuTFk4NK/5osFFIkxoyjIMicSXOkyps4VT7YybOnT585S/6DSRTlIAVIkQZdGhTo0qRIDRLlIaBq1V1Wq7axGRSq169emUqdWiOrgBJmr5k128SoI6Zi3b4k+yJtvLsA1mZtK7evXLpH7JJhC7gwE72IDSvO6KBx48WQqRCOTPmH48aIr+rKLOCygz+7KkuZXIS0aMWefXgWPMZs6tOwe7yOTbu27du4c+vezbu379993gAfrsIM8eMmjCNfzry58+fQo0vv7XfQ9D9Sk51Dx32Tukckxl43QgvVP0XdWwV09a+WrbnjgTQKV4jcAu2vKK7/bn9+O0K54dXLL9+wE0wx5OAnUP96mDSTyD/0AdicgBQCwJBCG43wjz/VoYfOdxxKGN8LCV14YYYnbCiRRAp6mIlbI+pQYkPdcMRSSx+puKKCFsHikogxFkETBB2BxFVOPyWpZE83FYkjA+IFucOQQx4J101LZvlAXLAcx5lpfBFyE1hJXdkVmQo0CR9sprHGC2dh9mVmTtWBdxtnFVoDphD/RODnn4DWCeigEQzVG5567kXCnlDUaaiUF7jJKKSUVqrYpJZeqmimomGq2mWcquFpD6OGOlWppqaq6qqsturqq7DGKuustNZq66245qqrHcLtOopyvuLxhhm7mNFrsHcAi+wfyi4bHBrORivttNRWa+3/tdhmqy0gdW4rRbfekifOfuyJE24L2ennIoMfPvhSlMiWl8q4yqRH7iziuAcvrvK+B8u6CAR03r397ntrwfQi4p0sA5OLMJDB+icMgsco2CLB9SUIzH/W4ZYnGQSuY2A0GVesH7sIOIgIhBzbudvHd2VjT40abmzgP/2pWy8n341MMsTHwRyPifXQLIKO+tQJ8MIrFxJix9EJLQ/RKF6AdAFK78x0foQ87bKlQi9UtTeDrMhiwhVpQtA+Boc6I9E0bvMQLGZHdLHCaht169sSjB3ejU9e7TXA//wINa1+10zIkzha6Wghai7OeNucJn404IznCLlKj4vJOeYtUU5r/5WgW4mllqhv+bnkga+ZK5U1bT6nTqn/xKUq1roV1uxLOXVmUqLr9uWmT1iJZpq8l3R85IcjN7xV38pO0vLJT48m81/7JinxXJiu0vHUBxV8ZW1mpVZmccpV/Up+5Yao1K1xP0SfhP4paP1+Pmqbm0LDyUTnAAQabvgHM/8tIYAB9FJmzge9RckvCgh03XW218BzNeF5WrGgBjfIQSDMpoNaQBUIlSDCEeZgNQvcTGY+uIfQjAiFiMHKCkHlBxeuqoQ4YKEJHVjB0jxwhxfQYQ4vQ8GqCBGIQ8AhEoWgxCV6kIZOjKIUp0jFKlrxiljMoha3yMUuevGLYAyjGMdIxv8ymvGMNzgWGm2gxjXSoI1ulEGz4hiDOdLRDWggli6MBS06DisMxQoDHM/4xysE8gqDvOMI7KhIFjCykSpIJCRTIMlJnqCSlsykJjfJyU568pOgDKUoR0nKUprylNsCFyRVWcaG3atpXeqiK19JAP1pcZavtOUI0xULWaCMO98hW/aqxctBBOSX7YJl88Znq4epYmnJpGUt81ULZsLKmY6A5jKkqUxH6EuCByvEN/+ltWjSsj3VBGczxZlOcuItEwJD23qwGS1s8kg9+HLnfujpLIkdqGTl6GU3ucm1cWisQBNTZ638+TODmkygBQUIQSkWUJElVIC6YihF76Ofu+3/E6AcReg/MXoaoYXMAj7b6D0ZpLKIalShkDHpERgaIYdWVKLvTE9Lp/mMlvkGftWQ2cy0IcyUiiNnEF0EMN0lUnBYM6ZAxUYKhiq3vzW1po5AqjF9aU6a+rQ3UZUqCqhKVKtalB04O+hWt7NNpp7VqTDVTVh3AbeqXS1rOeWZWy3gtenMVRd1NZrVIDIRv2gzHXvta6jChiHBCrNuXvPogl7ktMI2z1SMjVtZUbA2yGJNnoSrLNviGqPMFq2qnBWtZ3G5s85+lqSp4ltgUZsiwnr2tWtNG2VRIivZUs2xZnXEbZOms7zCyFZ8s9xgWdc4254tqT1SheGGuarkAldx/4PInOAsi9NDRNcR0+0tN8R23csxN3TOtdvJ8uYjI5HWbeVdbnYz517PCQWA2NPueyGlXCfRF0rSC0AA8zu5/b6KdOf1XklqpyUCtw62t0LwfDVnXyQxeEkObi6EbSVhC0yXKRfG8OomrOHL7gp2M1HwlULMk9s5wloolomK4cLinbj4qbPSHVTWhxPf5cQrOA4nSnbH4wUz6SlQCfI6h7zjIhu5xUgGnoFrg8GzQDDA4UtelgU8ZdpUOXoVDsCWZ7dlJUemiFZew4zBd72lmPk0aN5KgMfEZrC42DlxZsOa6/yVOx+KewQcDPr+Vx0es5LKgDZfohJDaL8YujruS+chUJtYA/rh736XNtcAJQ0/StPA0vXDdKg1fSdOS83TMwA1oUS9alLvT9GTHvQBI/g47cG607JWAq1rTZz39aJ8PZzCrqm7HF+/KdHBBnMEp2NsGQYb1UEYdqXyvElqN/LLnMR2tTGIym57WwhH/GS4PTnuTkLbjedeY7rRuO4ztvuKMNSLs/VSbjrYcDzxXsu811LvOdw7Ve9mQb85GPAVDHyDBVfBwTWY8BQ0fFkPP0HEg7VwF+R73xWnVsYFTsRb5yUrG5dWyBXecatgHIqanLgXVd7FkdPR5XGE+bdnTvOa29w2IQAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodMoEWK3UrHbL7Xq/4LB4TLtiyeh01MwGqN/wZNscr9t38+t9z7/lrRaBgoMIhYaHBImKi4MWfY9UbI2LBIeWl5QLmpucjY2QoDyNlpSTlKeKnKqrjQWur7Cxn6G0KKOIqKiNB7y8noOxwcKuv4K1xyq3hrmJxYG90L2tsM6eA9fXs8g9At3e3+Bb2iLV2ObY06+NkoPR0ePbMOBs4XDpxIPn57vQ59H7g+K5ADfvj0F638A0CsCwocNq1RwGaATQmEAWBL8ZrDeCY5dGD0KGbMSgpMmTIEX/PpBY7eKOglc8hmmkoGbNaidzMlj4cJDNmwFdCn0RsacgCEiTKl3KsyG8oVBPQJwaaClTqhCjFpEpDmuEr2DDruqEVasOB2jRZvSGcG1atGbjHuEqty6Ttw7s6t3Lt68Pun4Dc0t4hI1grXgPK17MuLHjx5AjS55MubLly5gzbzOsubNnZJw/SzYo2vFBOqUZk069+LSeFFg9sQbFThClS7gLZRqrqeXsj1hz42ZGgHdvYNSC/kaibDhxRoOML6g2rLo65cuDNEfwHLqgd86sW/edfYkpRbH9QbtXYJ0ZftKwC4ZpBbAY9hT1oWvXz9w/c09pJRN9bazVDRrp6acg/4DOgGdRVAS6NoeBAig0iEorGfWLRBJhyJJ8elG4EWEdkQicIBiSpJNJKYn0YTGMUWjfTINI9JMCjVilI1I0/fRiIOVpEVs1O/I4JIylJSbkkUwOElYEsaU2o4VNOpMaXiKaQaGSQQ41ZZdghnkYl2IOhaVGWn5DZpkufclDaGzGKeecdNZp55145qnnnnz26eefgAYq6KCEFhoZnIYmquiijDbqqA+IPvrGapKiQWmlY1yKaRgSurFppn98CmoeoorRaTJNlqrDqbClqmoPBlUjHHfMBPhqDLUFctusuKRiHHm3lhAbr72iIh1+IFa6XSmDdOerdJuwN16yiy7rnf+uzhYHbbTIiYfPg4puR0q2jRwbnrfC2Dqotc7C58u56MpipbKEFHtKNe6s1+23U1UEZKnnNYOVevEJIq8guVrg4L+iBkxAgtgsbMHBgSQscWQymjgFPOUsiCzC7/GX7wHqxkWgmycGQrEFCw7g7gEE8+KvI3YNiGYeFCI4cMseN6gvuF4a2OmI3lAZCIcaDvkjywwCLVSWQ0+ocVeCIO1Uk0vPbFaEUddnoNEWeJh0U0iLfbXTNQv9h81Ff9HiSIOsyOKFKi1dcmAnT+22Tz/hJPdONSZ9491pZ1yhPYE3NPggRVrVo01Lx2j44W+QHcDiRzWu1OM1RR7sCkWdXZX/5klZTniwVeZYZOrUYramFKwz+WSUpaHsRGxPPmkuVdnZ3gTuuYO1+1S96z1G7L9c+RbUXrv11udO+A49E9JPr0T11iPxevbc57l991BgD/4Q4o9/w5lspenN9+YLUf4MkbbPfvv012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIxgJFAjQRnEr4IYzKAGN8jBDnrwg7+5IAhFIMIRagqEJ/xgCj24wg62kIOsYqGEUDjDEY7ghRvEoQZ1mEEeYtCHFYyhVFzFPyGaoEoDjJUzZkWc041PicVgYq1aVz8o/kKKuXAi+BK2K2LR6lljAdYWQ2ab/0V4UTeLGJ5suDesMxJHjSuDXhu9+MZf7as9VMTUHIlVR958jGGfYpfAyuisbXHLYPHSYqAE+bBmZcuQx0EkuhS5J3HZq4nRsWMx4hUMSurJkssgVyb9CC9O8otm1apXbrLVSEGoUVqJzCOgGInJ7/zsF6ZMDpIkRcsp2rJguMzlKT3pp16ix2cj+yNEtEYvQYwri8jMlzI7th+0pdKZl7yWJ0b2LkkO0xnMbJgjj0mVmJHsju65wsuIKSiHQewaEluZxW6JSsdMjnJU4Bg4e+ZNPIJMnSKTpizrck+qAfIC1NSPMueZzIHKpaBLAlpC9bFQMj6Dm+zcRt7aVjl05v+DnxfthTnDeZiNHghx/cyPgl420qYddGsa41pMvkaGd/JsZut0KC3Y1g2iZURn5bypQqN5TmsKhKcC8ClBgNovoVKUqBndA/O6NlOOpswCVmNIlbLm0noGbS1ULZDx8pk4pG01aST9ak/Dqr6f7g1FdRtbWTlkNq3qVKM3YysAcvbWQNR1Is7IagD+GlVIyDRqfPXC2zIkOk8IlrB3bZPacBbTsW6MbiJRkdwWa7fIXmSqbTlpiazKhcVqdkWclatR55PXvVrWoBbA3C/+BriqCa5vnn1oa99nHr7ZxG+bnSvncJRbk+32tRENhGw9QVvT+RYoqw3R5OJgueWSrnTxz1WA5xQD0Y7aVnG4zdx1h7vd8YXOruIlnXOjy8bAJu26Rvouel/avvMCNr2aWy99s4c8CzSuv93r73+Rp7y0wLa/1ZhdWZL0vOQiOMFhoZ1o5ve7B09FwbyrHXKhALzgReCV8/oNb4vQ4eCBeJezGfHtLOzVMKm4whaW04uZwOIWawZ9GQktQSjcPxwTRMfg4PECZzzkDXeQyApEcgKVjEAhd9DJHISyDadMZS5IWYNXzmCWMcjkA3aZfz7W8Zb/F+a2CmDM/itzVbuBZi8beVUUtN+XT1DC7rUZgnd+YJ6rzOc++/nPgA60oAdNaP2FAAAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gEmA8DpvPT7KajG67jev1e07HxdX1vM7A7/v/V3dkFoSFhgiIiYoEjI2OhhZ6Vn9rgFtrkI4EipydmgugoaKQkJJBf5SCqneWQZCcmpmas42itreQBbq7vL2lpnuofautIsU6r4u0tJAHzs6khr3T1LrRhcBJqWTHQ8mJy4zXhM/lz7m846QD7Oy/2fA27yLq7fbt6LuQmIbm5vPxAtbIZ83QvXvNyt0zh9CQwB8NIkbMBimAxYsY1anDGABSQ2wPcXSrA+mBSZOQGP+oXMmy5MkHHNWFdCExorBham7yqdmACyQFQIGqY0mUQcWMhoIKdThzx0g0G5EWgkC1qtWrRy8CbLqDpxuNYAldxRpWI9ezMMpaiMC2rdtbo8qiteJ1rt0tT+/qhZJ3r98ldf8KhidnsOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+c6hT9bXiVa8qrQpR2TTv34NJ4Uarem3jamrxR+hTR12o3oE1xQMh0fox1Hp4EmannvDkfgN3Bp6ZgiJu5akHEf35Yzf2TI+QJ11cLrk37YODE/JWzPyI5gO/dC/8aJFx9csnH1RmQ1UruwHMEC+6iR0DnksdbFfx4dhE//PwrZw5A9shnoBX8KVgjhOPGB1Bh+Z7h0UkzjcMTRSzBJRQhlHJrhIUqGFNWSISSCeA2K6JFkCEdKKQDJWDxS9ZNSMp44WWAdxnZNjz4aGY2EWijpZCFuRaAWk3M8WR+VMhCJ5V48EfeHllveBWaYZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWWiZqhraxWqJhLMroF44+2kV1ZUgKqSqWXipIpl5QCoAKT3Kqg6egOmnmfTVWsYo6yrUXToSbeZlqFrgRolurytTi3JWLDefHeTchVxauudLiHYIFDmaep6qkSAN7sRjinq7ehfIf/33J3rUss6zM+gO079k6bXPVWgvdfAVp6Bd13NamE3aHKDcuAZAcKx+61MC617bd9pGetzmAO+2A0NyLry/jZCarv0cIzAyG/hBYCMJhfSSkfajyIYV+4pTVn8SEUExIrRZkeHFkGWscBcf0euygf+emO7KADIIciagkAFSPhcgWQnLENuMMW8wAGsRzzc58nPSF6grtAoUWHn2NyTc3NiYdWYnYkZNBWmBx1YxdXeWNWlv0ZNdfP+YsGCuWqFWIZQcQo4lgQ7b2F22n5KJKbXet71ld6lSJTmJP8WNQQ+1tFNlvF5Lj34ndnUXWATxuCJJjHQ5U1zQyjDXjFlk+Ff/mVmmuAOeTSY5FVI2LRXpVlENudU1fWTl6j7Y37TQ9uccW5ZS7lxpWlFHaG1bwL6hF/Fu7yoX8Db2TUmfhz/MFcPVJBI4TN35Qj30O2vMxeB/ef3/K9eY/UX767EuIaPtOvA///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfIwAY68IEQjKAEJ0jBClrwghjMoAY3yMEOJlB+HQQhByOlQRJm0IQYROEFVWhBUp2QUiWEoQdZWEEaUtCGE8ShBHUYQReiIFT78+EJgEimlB3HCqsaR6uYI7tYpSwQqmCVvF6VrdIYEYqCkCJvmFhFJ27PXZ6jFc1y4wj/YoHDEcZbEmYWpjItkOxWZvTNb3ilGF99sTjvYkJyzOiqZaTRAiKrm7K8xS7uBUuPw+Ijc/4YyDoS8lfNyuMS9hjHcDAyOroTDL/aZcg2AsFhLSPjtMplrokdrIkh2SQnAaC65MXrjPuR1rhI+RxT4guVDykkt67TA/bAYlz1at41DjYNXApEl8ziJQ98WaztBHOOBiOmzASpLUiuspOogFchlgjM7ggzGtLE5MkMo8qcPDKMyHhlb7oJH5gNM5zTNKZdyonNf6EzYOrso3sIdgDwwLNoM1qjNcHoSSKAMlpTA1o/iQY1d3TRbgNlJfo+mU8uJhRoPQNL2gR6x1au/6eiVLxoxDKqkY1iLGMbk2UsK/YymwXyZ+4cp9qeuDKVdoyl7aDaS8dIjphSM1M6G0fUSApTjD6UUEG9xlAZaoiijvSog0pqNJZqy2k61R/yNBRJqdrTZyjtACZN31al1tWl5bRBC8ok+xoatYOog2rwY2tbmRYNuLZPrnN1qEgXqtbDrE9FoBPR2egW1sX8NQyU81tZ0EbXn5Znom/oG90Si5G5tc6xvYJs7QphWbPBrWyd3VpfM3tPG3H2JYotRNzkhlq6da6gechbixQn2ctmdV+abYNsC6G4xZ32Q5OFalPCh4rxCeOwiHScUhK3t9glZbnCnQlx2YgK5E7yueyIG0dvnavc7I4WcDXZpHGsqwTTMddF3CWE6GQqnNziLbDrtcDrYIfdzbk2de6dEHyhe7vXmQ51J4Wtbj/r2f6SLr2YnWlpoUJg0bpuvghWWH4P1OAdzRcCEcYMeQ3XO8xFjzIbTmnuPNy770VPeW4BXvVOXJbfOW/FLAaLi4931xYvjy1/pGONh3fjCOQ4YQCMMXsJKOQEB1nI06OdB0sQ4gd61IFPbmCUBUhc4xqgyfqrsjnJp2QMTnmBX1ZgmBOI5QaWecloTrOakSDCDbZ5zXCOs5znTOc62/nOeM6znvfM5z77+c+AfkwIAAAh+QQJBAAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter89gXhMLoOJgHT6LDWTyuq4uuxm2+Ryn2G/t7fgeIGCc3RjfiyDADQNjIx8j3xykJCNjIcXhWOJdSKclyaJQ5CfM5mFUhapqqsIra6vBLGys6sWCbe3oUeVDaS+JbWzBK/ExcILyMnKtbV5v0gO0dFctcTCwcLZssrc3bUF4OHi47XPQ56orLDa2rUH7+/Mq+P09eDyquY40tGmAnL++DlAUm0dO3yp4CmE900cQmYDIkYsp68Iui0URzyUyFFiw3DN4rhbqDBjxR4Cn/99vLeqY8eR8DoufLnqpM0ktQLo3Mnz4UOeAWrRzHez6I9aD5ImrcWgqdOnSJU+APrQaJGUh2op2Lr14dOvDHL2XMW1a02rOQQCIjQGq5afY1VBmEu3rl2xO02iJXLxrc+/FuzeBexzr2EbhC1EWMy4cbdlhA9Lnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3N/vpWdkZ7bRrdlHXx4GXTX6LjcYBfQq5Gz6PiZJgj92dTeAxekx5Jyr6H+EnfAJQzSay3hHRFQkbdvoFNVrH3rY49RvaQ9/orieG/ZxdrPv15Dq2Cyy2nibdEQfDxl03/Lf4t8JA9EIJ0VmkGKoFgfArSsspCD0YIYVWrVehEe7EkJlNJAEqoihwwxTNham6RslIBQrnk0YYKnRgTR+Xdx4aJNgbJI0IcvuijF1EpRRVCQAEl1VRxpXLkJUkutQpYUK3y5JL4xCYifqsAVZYCtQhm5lxalcWllLB9GQV5CJ2JJpzyxBZjF3TmqUpjESQ25S96gvjnoISmYF+hiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqz+RGRmeHehldcq9yZp0O3lXkCXgAmTLZrTmop2utI/BKaya/DuIcH9Blct4mxOpz3rJ9fDfr/7OBUHcSsC5gx50B23GXqx3GDbJrtOZwy4OwlYHnphF6qjBtes9d5i666dApr3Si1HuYq4a8iZB+CChYy4AJqAvEuJKSOAzBBvXnX31xsNpCfhC7omCDMx484Gl3gqmKNRqqkuEsDXIzY4Q9ghayFRcWXHIqJ2+TcjIrf2ikaO8WETPJNTM4MUIe6kwUhfgKPHLEGbZ4QIdF0yOoZmqZ0msmLwcRs8FEksRQiiwBNhSbqvWM0yrXEKaji6qQswqLOH59dGpmE4T2zD6t/TTYNL4tUtxsk0130n7NfcFGQnbstxpOF2m4aFnbobgqQg7gtN5jW2DxDkBWHuRDjgu+ef8MeDUZVJ5rWpD56DSU3qSeqa/OugxVQpkXk6brtGWUms+OmJZSMYVlU7Wn3jKM/FBJVlleDR9WmLyPeTxqdSudipjMryKnYGlylbqsAfvhuvTab19X91t9b1rVmhwrRuRTwHW7XObT5fr0rFV/YKD0n8n/46uBn8j+Rxg++cl3MEgMn/jEscggsHUFXCBjGgiYB/qAgMywoAY3uJpYcfAKHvygCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIRYsATACwqpiProhFW2mxN9f6DeF2o6z/HjAMLfcKn2YUVoMzWiWNYsiiIHzgRl+cq32C0NZh2EgDdpnjjmKAFrIkw8cZ+LFVVsNWtsb4iXmty1/6KJcirxbHbfGrB4f8hSQnyZZKVsSRO8ikHcPIyfD4ypJznIG3uBOu7NQxC8ZSpB6lVUYZrDI7rZzEK7uwSTwAsoufrCUQRBnJROYRXfrLQiFvQMw/GnORasQEI5cjzB80E42kTOZR8rQv5vSLWfbK5jTHw01DXTII17QWwPIlD4JxTRUIW+YOdtksV7GTGe7kj8dwIU9cVWIyXLznz5iWNngOqJ85oOeiHJYxjaFsaPgI4QgZ2lCZ2Ww+FGsOBzHW0I1B/zQVbjMoLh7I0Yx5FKN82yeBEFhSiJ30MZNLBcJAljyMqMOhsnDYS1OWM3vgjzMCtJ4FgFaiu9XsZjjjG8t2FhptXvCm+6kZAYSGUnxErR4/xc0497e0BEmVqjAl2lVDKjqebdVCUDXGV1dBQXmMlay9Q1o070nUpgFub1Z9q4rqFKKznq2rGAraXaGm16llhn2FoCQdgsqDremza17DK0gDJLYhAdAyiKWDYsvAWM6l9Z3yiGzgLABXxN3ospXJLBwXW1N4ffax+BCtZElL2b/Irmx+bYLDOheR0NF2rxaAmyp8m7/cktNkeDNtb1HUttoG92/DZW5ZTePUI+hFuf8uielzGXdX4lLXuFC4LkIqp13hJkS0WdVMdV1rOOxmDq7mtYBs03vY1soopS1J3F0xZ9nplqazeMIv5fQb3R1JZCb9jWsLeeu5zDmNviRVW4NtBDrpKviEDJ7wRCA72hW6zniEiV2CPQy93MGOd7dFYfF492Ge7G5+/lUx8JTE4hKb7sU6gfBGZ5wUEKsid7qTivpcWDvhDW/FMM7gC4t8JechOccIsZN9f7Q8rjTvyDY+nSrIh1rUAHiAFuCyPJz3vB9HL3tdpqk0lLdlNI/ZyVlGH5mYitu5gmF8bg5M/ebUZu/xDnyelFyWxaznPct5yKTJrGK/fFx5pG7PfL6e3p8DyI/VMpqrjuYdpCFwPzonutLibMuUwdzp/tWv1DFuzXp9RsDtYRDQwERSq+X0athc+gkYVGBjDviaW48o14AxoAN7PWqbAtsnwq6gCnUtwQi0tTBLjmCzn23YGh471Tq89oV/qO0qevvb4A73DyVKRXKL+9zoTre6183udrv73fCOt7znTe962/ve+M63vvfN7377+98AD/gPQgAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6cYZoFEClSqPPrHb7u3oN1bB4TPZyz2hcY73OecnwOOB7TdvvL/PxHdbj/39sa3RSYoRRgg00h1+Ajo95dZCTlJWWQnKXmptEmZxQkp8nFqSlpqenQ56iMIl8VV6JlacEtba3CLm5twSopjmrrGqCdqkkvqULysq8vLq7t8vKtLfIpAnY2MHC3KOmB+DgpwXk5ebn1ukW5+jW4eKmYhLz89nY3fgipwP8/O8H49gJHEiQ4Kl//fidoseQnr0E+SKO2JeQYj85CTMOwFjRVMZ0EoGF4WRR48YwB///vTslxmS/UxBixjQWsuaLUw9y5iw5QKVPnx+tMRhKtChNm0hVpCvKtGm6AFCh6swZFSrIpFhvnGpq1JTMrzJPVR0b4GjWszBOKVjLti3Zqk+rtp2rYKxZtHhNiH0Lla7fv275lrWWt7C3UhESJw6qrrFjUoYjt3hsQbLly5gza97MubPnz6BDix5NurTp06hTq17NurXr1xEZ+YEtefaFV2UO0S7MSI7vPqF2o7Ht5pAc28SFC3FlHDghWTNkB1deKTn10tBFi1Gx/brlbXizex/xu0pS5oWcIyJGiVqzWs8Q8Lp6A3xk65Dcv4/Pvz80W3elUB4V4+WQUjgBlZOO/zQMNshgOvN9s1I8cRTYw4HwlFJQO5RpaJA7E5YiD0MPWaiVRx15qGCHLKLCISmMXfOQPZJ1pwlPGYmBoUosheGSQl59FaCJTfD0z45HShhOjBYwRR+RS+wVFWU/DhDXlKY4+QuUWizFFVdXSjWVXYRxiYZabVEGFlhSvjXXkGYWaYpgAQBmJ110PhlnFpTR6Sdc1iiWGJx7KnEKg4ImGkGLvhRK0mOORirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qlJSScFqtVdYch0rFKC2xywxnoGcq7GwYitT/Q24HG18kqCeDXM+uurhAirAn7FNgcHrqsqiwKzizibW/+0I1DLq7Y8zMptqejRgSwdxEaiqrQ3fIvuH+que0e77qZRrmc2nlBvvE3Yh+8d+mY173W/SvYvdQHfF6wojFaGSYVohQuGegYMfId+zcQXITIiwaEZvGea8p4t/oWsy8WQuVAwZhLLWUoJC0rzMXzP8PKgx9VY81C/lqXMhFktL/MyARZHIw3F6dzMcKg7JkhOzw42PY01JFuQpIhHg5q0KRuak3BB6UxNyogO0dipkSGSkvXZaBewI5MNNVTi2Ci+hLXWCTP6ogVMzig20nEDqeLSdbd4d95633MqTzxx5JLifsOYYqP0jrQJjgnpqKRPPVZRJUxCbrkvy333VLb/1D8BdPkBTGqJ8ec4TUV26aUzudWXDBAqbOs6vQ47UI+jQnvtnuPb5mCObW4NmaWoXvLnxwj1e1fIjDXVA8hDzvxkWdLO+ZozzSmY7ddPZMqbj3Eflvd8kb9y+IeRon5j5ndfCp3vK8w+6KXYmefxcgFWvf33E9/8BHOnAq5lf6sLoAAb86cGpiNR4NvXKRIlu8A1RoEpmKCgKmhBPWFwgRZAlKIU00EAflAGlDmhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISlzgEVWGBictyIhSjeK4pZitXsDjYFL2lxSFCawq60o0Qv/iw/2eJMYhkBFayxmitY43LAD70lRvHwDFwsSddWJwjxOpIKp21wFh63NXn/MgCQM5RkPviIxXFFUZsiUCRooLktNr4xhJIElSXhAEXHanATJoLjFnkZAA96YJNPhFdDjPlFwhpAifCcZCCkKMVDsFKS0rRhaQ0Yi6LuEsi9tKLXbTiCWoZmXuVwJijIaZhkEkeyZ1GmYVhpgikSUScCXOaVbumvbKpzWNys5vN1FhkoKmakxWGnKkxZ15+2SVGqeKbhmEnn9y5MHFiRp5PSNg77emvWOaRVlJA585o9rGgAahM9YFnTRz2RoFGiaD7iVnNEmgDa6IFn0SgmDNEFrKovf9AnbUJ5h80iguO+sejJhvQxkSKB5KCzKT9QWkLQDrOO56BZ9Zg0M8MWouZlSJqpzAaPzfjUCDgFBk6fRlPCeBTUgDVFEIlw6iu9je15dRpWIXQREnhNQtY9FJUNRvdkIpVp2n1oKXo6lctFdZ1jNUXZTUr1LZKOgRRaKieamvatvYhZKg1DG7b26b0ija+DqRrowNbPQSrKd2Zrqppi+xb6woOtrUtbNnIa+i6KtnO3g0hvbssZg3HKccqzbOSXVtoRSuBt5U2dKctIWUG17vCkdZqsJ3bimTbGNrKrRS2hcjhcluKHMWhSoyzEnGtJy3EhS65xoUDkzi4vOYuF2//lTvuj5LrXIpuhpqOoNxFUHK6v2ruR9uTX3W/68xLiJcflktr6TJHBeOVgk3Bu55pyzs60P6WFMpDRQD3K9+fqPa/TYIec/W72f7O93SpU7CAWWeK6Tl2d++gboK/FMFY4W4nDcawSjT8uw6zanhUQi//sJQ8CQ8YfVZ5jH198b8Av3iALG7MjFFRYxffz0vPG0qYAjC9/5nYXUAO8pCLDCjvqnB2HA6S+Yb3PxpCGUxS5h6Vm7zeF17ZKVle05ZzbMInjy9N5YvfmPuC5vV9EE1sUZOaYUyW+pk5f/773orZ/JcqnxDOfkEgjfvXZy6X+cdnLjRfhqw/Q9+ZFPQzi+CdBD3hN9N5LJKetJ6djGjHNPBPDxTUkdfVp09TWoMkzO+NGWjqTfsCgqruNCko2DvectrSiNlgrW1daRYeShojTLUFc/jrZQR7UB0ktilEGOwS+jCF4NQHpKJN7Wpb+9rYzra2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93wjre85x2rEAAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6Z45otCmoWq/Yp3abzPa8IyxgTC5jwdy0OiWNnq9lwNvadrzm1bh+v0ev/4Apfj54AnxjfoOBiyt1SI5MYmZXjJUtdZJkWJCWnZ5cnJ9bhwCipqdNpKirTRaur7CxsUOqrD5xtiWxBLy9vgjAwL4EsrA5tbnJL7Mkxa8L0NDDw8HCvtHQu77Orgne3sjK4iqxB+bmsQXq6+zt3O8W7e7c5+iwcRL5+d/e4/7NsAYIFFjvQDp5CBMqVFiu3kCBsfRJ1Mcvwb+LugI+jPVwAKmOHT9u1DjwHcaTNTj/ghwYp2HBc7HirCwJC4JNm8xQ6lwG64FPnyoHvhw6tOM7BkiTKs25syk5bkqjSn0XoGrVnz6tVjXptOuNWFKX1rxJFicsrWgDMPXKFkYsBXDjyk2rlapWuXgVoF3btq+JWHSt5h1MeG5gtdz8Kj4RK4Jjx0bhSZ78arHlFpQtXN7MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7ZtcYqCZEJE6bap3DYSwTlUyDcg4DV2k1pe3PiIUESgI1GO3HmY3jsLVbduYvtpXLKlow7HPfTyMpfBK9M2jVc1BMO43iBfHgn79u/z67fWi2+K82TUh4NL9rwyjzPYJKhg/4LvxAdLQTEdIiAPBBoEy0IHZubKQu9AeE8ZE1U0oQ1BQXQhOxqmWEyGFkT2SkUijjhEiSC19CBRFr4i00wDxFKWfzIuQaOHr+CYoysFuehKVPIFmQRgdVHGY4/c7AULk8Y4+cRRYYVll1VYPWClM1qq8ZZcmZX141mH4QVkmUKyGVhhdOZ1GGJkwrlFZnf2GaUzjzn2pp72wZJgoIhGoGIxhK6SWaOQRirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmpiWeEdtih6oKqRbBqhasweLcDda3SWmuuOQhnBSnNjYoJHnEUAmt3xALIHK+u2rrrr8oCi4euJDh7x/9w0fIRLLXWzlCItLNWy6xtx/pQrhC4hqtlt6vIWoWMw0KryRXnUptEvHlMQkcb9nrCrnnohcdva/T1a0nBBq8RbcKVLMywCItqJgTCiqmXzH3TvOdgnvNJ2C/G1OwnMn+8DFqCw56u9U6C7fWi8TXYYPxORRRzqjI3LLdMwMu9MAjLxsXQ7HHKN8J04jorL6h0zNwAbQGRrtRsaYUHYahOxBzSU0+EZITIz6ZDbn201WRbXaGSFkzk9Tdgk2SigShGvCiLaMP49ac0Vn213CrSPdKLdvdDat5ue3TIlCLR9AraJrtKY0hlVAi1BTvO5CNZjdsbttFF4nj230uKxTH/w7GEubmRRYEuS5dIZX5q6VidjnqSqoPFuuumQmlVZlN+udWVorvyMGNQsY6lM2iFOSajw/P0ivGXq2nWK3fi3vyZcaUp/fSu3Olmls2jgD1c2m+vO13fVxa++LDQWX2VdxW2vMTr/yUn+nXmr9dhTdY/Ap9+8tM7EGW9j8ECUYzjm2T8t4LGBCqBCuwfAzPyDGwkKlARpN8EU0KZDXrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEBNWLyC4SwAMLOIPjsjAfyUHW7xR1wadSIN0veuDVPQWFOUwrvVlEQW+ype2pjW8/y+eIIyGIA4ZhdWGb+nrDUp0Y7b60MVL4esMxcJDHJM1Rz2YMUh3tOIZ9jiHPtJRirr6YwmUY0guzsFgihSXvBoZxTdAso694uMhr3gdRNIqkmDUpB9zBcpJlRJZhVQjIk/5GSXmwJVf2CIrUQPLG9TyVrLEJHdmuQYmQoqXavBlo4CZBmEK6I553JcUhojMNwrgljokplMs9hppNoWarrHmTrDZGmimZ2iw8aZlpDZEEpCznCI4JzrV+UOUofNkyrreomgBzvBFjJ58YOA9J1bPbwZIHCD7RTWcVkAUsHOaAVvPz3TGs5IlBgcHxdtCWzaykTntBe7UVUBdVtH9XP/UBRml1Ubd01H9fLQFIdXUzRCEDZ3tbKAwi4bMuCG0fA4OfBDDWUsZCtOeMe0VBIVFTfcAKqqNrQBJW9rSGrSNohUoav1UqVOPFI+4sVSpSmNqf6bKNaJKtHOc25BVi4HVpTatqWB9KuWimimjwo1sWGOI1sK61q5JJEZt5epRs9Y3uTpjcvi4693yuriHTK5siMXQ5xTnCrUJlm1SLaxQxPbWxFp2rE9ziOocS5HBYkp2ervsZRf7tsZyVgJ4/WzhQpvBzPiNsRYInOCIJtnSVhVprZ3Ma20rW4vctLZUAm7iVjLc4LoCgsIzIHBpVFzI8QFtyNWgRldbuOY+pLj/hBtdwh533chNFbBl6N1YblJQUXGXJd5N60u6CgDxvmJN6qsfaL9LWSRpFrbHY558Czc5I5HWuBbIryz0yd/6ZpYo/7VdUiSoXFeYrsCze0l0oYfT7fYkdhCO8H1tq2AvVdhg58OTZNxbjPkJmMDU+9OIeeQ7EQc4eNKVZ4p3JyUWw4/Gz4MxiothPAGHWHkqHvAHudTj1t34KliZX3ktnOMuRU96IZ6fCjs8lfFC+X5pWbKMQ+dkK6spykEu4fgUUL4rzxh/2fuw/8Zc5i9jGS3pS64Hx4yX9yEvfoSR8pDbJz/+HTkA7gvznl8R6MC0uNC/i+8GwSwY/dXJzvpdiPSb8ezoPPtZuzuGRwAFyA0Cqnm/k9l0nwaIwU+vD4CiNnSnS63oCTrwMdHNbatB+GrI1E7WQh5hLA51QUFF8IW7tmCvFfVrFwY7GsMmtgJp+Kh32m8yzo62tKdN7Wpb+9rYzra2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93wjrcRQgAAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6nyyHVAqtWqFTKlPA5V6/4GPX28s6xmgBYL1Oj83huPyFbtaFaHZ7PO/74EyAN3cjeXqHbl1+RIeLcYaHkZKIiQKOl5g9k3tdlIqZoKGaepVpoqdDFqqrrK2tQ5sAqLNJrQS3uLkIu7u5BK6sObG0xDGvJMCrC8vLvr68vbnMy7a5yaoJ2dnDxd0srQfh4a0F5ebn6NfqFujp1+LjrIcS9PTa2d75yKwD/f3wB8i1G0iwYEFw8Pz1a1WvYb17CfRJLNFK4YCKCmNZtKhRIUZ/6iaKrPFx44BDCAH/imt1yCRIVhBixjw2suaLVg9y5iw5QKVPnxbVMRhKtCjNLw2SJrVZRGjRp0/VBZg6VWdOqlNDZjLAlSvTWqygGoUps+xMVljTBjh6RWnSrnC7Hoob122DrzRaKdjLt69arFKx9h2sIC3bRXHxCmn1lyrhx5D9Nl57DZRdxUFaRdi8Oei6z6BXYR59I7QF0qhTq17NurXr17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvDgNQsZpCVKCPLkfM5A4cVn+o/mQUtadr6COhPuM5tEjldKOulSs86T4kB9tfhN49esVxwqfPT5e9GzsP6nm7BY0BL5odQM3+jHBX3//Jahg/zS4HJYCfmsUmENK8aziTjLTZKhhhuoEyApALG0iYQ8UBsSKQReapopB6oAojx4OQTRiafx4dOI5KuYITIoWeLYKRDLOSARPHOlRoourtOTSRWTJ5KCQBtboD5Kq/FRhlQnZuEpUlUEZ5SqGhbYkk8mEueVYovmRGHFOiQVVYFRZ9YCZwICy5nB69WWaWWYxNtlgT85xp3B+NhbZoYRNRlkylrlVnGmKRgrYNZxtFqiXTbSSYaWcRqBjnZgSY1qopJZq6qmopqrqqqy26uqrsMYq66y01mrrrbjmquuuvPbmXa/d/AosMfUNW4OwRBRr7Hfw7QBdJZ64gWyuz3aSXv8X0+KgrA/YNbtetVxEK0C2g3h7XbdkhLotHub2QF+7oZILhLwrvGftJOMt60R7ELoHb02N/BZev+KuK1HAvg1MMBv56rsFtP5+Usi/DjMScbjXplvxFQVXsjEY/X58ScgiU/QpLCKWvM8q/eHyn4eM4kDgxgc6s+DNvMCsygsk38qWOhm27B80vnDIis6uQDSzrj9fE7TQL0szTc3qKJ2yzx/CI5A5QG/o9dTXIE2lBUvTWuLWKBbwKTsHvaP1i2zEeI/ZUv7ztoVp5613iT6q4pDc2tC9St9sc732pzwSDuTcuPKEttqH65i4ltgsjk+vjtd90iZjdvTS4JS7ovL/yqp0bmTWP4XIxpit9BnM6CfwNLaVJq4CEOFcxgw7TlbJTruVhLfi5lCXNnEZm6zI6fvvQIUu/PDFM3E8nmhNChrr19BpQe47qwnXo9cM/2b2WMmpffRgDGrc8262zqeT1TeGvhJ20QXXXPZzNf1sefK15/tnAdOf9PQ6TKgPOP3by/8AWKi/AKqAlzjgbxKYqMnAaSqH0p6dvoc8ARoKUSAsjAW7hIn9BQdSkpKUOjg1P5VpplLBi9xnYGcMVnAqhjIUEA1boKlpdKpSOTzNDkkUmiEa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFrfIxS568YtgDKMYx0jG/zKa8YxoTKMa18jGEtCrjSl4IxxPYLA5pqCOdqQjxZIoRx7gcYd93MEfaTjIFoArDR3DVhZ2WMgoZIFf0klDIHXVyO08EmIMq8QkX3VIcW3SBZU8DrosoZ9OZmxci2SXxIowSlKqa4+q1Fh1xiAuVYVSW7As170iactcAuGWLXjXKk31yRsUUwT2whi+PCakYx4rlbqUpcIymYgzQnJhpxTjNbHJyzBuk5vAFAXCejPNhTVMPnoATjkJds4xfpOa0vRlFt/ZzYkNU5uYlEQyXUnG+dAym3b05y4BEM4sJtINeSzBQU2R0BEstKBY7FlDFQqhHa4NZZNI4kWFUDYabv80CB39WM2eQTRrkNAGIaXZ0aBW0gadtAYpHdZIdYGzmyGNZxUV2UxdVtMF3dQFEq3YTofW0wT9tAVBFVz3RtA1ZgiNAFHDhdFYZtJkWC2jmIPgBZraDJbmTGrMoNo1riqJXJ3tRobD0NfW2qGqYmklcCtr41B3pcKVg6tr1VBbXWq7u6kipq86K97SCoy8fm2vtxDsX69mK8XaFUVrY5Hb4JokGDUkSLJyrN4gJ7m2JWNs87gs4zKrubFt9rSefWs4CPc30QZuVsurK2pny6Pbha61DxltrGJbuxXR9rd8uy1uJYDZ3WrucUE0zeQ+VznLmfW4aL1rckGz3IWwwnL/l+NV5kDnD8+ZxLtkKp3ztOqw7Yq3u5xbEnjNKzqdQpe7/QBvkSZBOBwudXREysjp+pq6uAIAe6twXZp2p7n5ruFIfiWbHgCsCgHfd4i8RTBlVXsA3KEJVEeMMF1VElzmbu/C7c1waRNMuw5b90xE0aELk9e7ETNPJfb9cPvIWwUTIpDFOuHti1c7XhSLpYVIsPEE45cVMS3pgotSBfeE2AcJ+qaBSV4Hg12hvSUjhoPU82CRr3dk8lGFfcSjcfqwTKjwiQ/EUDaf9TAcQTKf0MxnDnOZymeV84lZUG4Gn4/HF2AAQgDKGgxD/fJnAPzlT8i0ATOfG+xnQK+ZyUhx+QuhC62HSSOaf2GBXpPe5+gv39kJg86foe136dZQcIGcJrJaHjjgNndFz6pg9Wf8/GdVp0XWkHaEk3tDwcEoCskZfPQGX93BWEfm117G4LGFvZU8D3kVwZZfsgMQ7S0/+MrEzrIqFBVCECJbd5co9W46rexuL1va4HaEuHWDwhR+Gxgs/LRFQ+PuSK0QiPL2KL3rPcJkxLvVSnwhZ2I8XYA7UeCd6XHB8y1iZfjwh5bKYRd7yAyIR1yGE2fFpiweRDGOaqIm+DjIR07ykpv85ChPucpXzvKWu/zlMI+5zGdO85rb/OY4z7nOd87znvv850APutCHToQQAAAh+QQJBAAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0ShUZrteqdsuNNb5f7BVAJosN4K8v3ei63zo28gyv25/s87ls1mPld4GCRXSDhodLfIoAOX6OiJB1i3w0e3yFkZkWm5ydnp5Dk2UvjmOip5OYmVKeBK6vsAiysrAEn505qKRiqL2XpatAoCS3nAvHx7W1s7SwyMetsMWbCdXVukKWZarBwp0H4OCeBeTl5ufT6Rbn6NPh4p2KEvPz1tXd+MSdA/z87wfj2AkcSJCgp3/9+Hmix5CevQT5IpbwlHAAxYSoKlbMmPBiv3QSQ9bwqHGAooP/3v95UlTyYycIMGEOE0nzhacHOHGSHJCyZ8+K6RgIHUp0Zs2jKoISXbo0XYCnT3PihPoUZCBuSId4Ylr0ZcyvMjtRHRvAKJc8vH79SZMVhycFcOPKJUvVKVW5eBWMNQsHUNsfnuhCzUu48FzBZaf9XdzCU4THj4Gqm0yZE+PLMypbwMy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buCH5zX0bK+9Bipr4DjL8d2i0jhSVQsPW+OnizluzCR79NbYby6FX7+JrVApu2lIB2x5NmStmCGpZvXGdRfjuopbfLm8evf37zV7xTQGf0YzlqIAnxmgohRNQOek8o+D/ggqmo943KsVzig/ZDRhbgfBwUlA7mmlokDsRciIPQw9tp8NOB5LT4Yq3cLiJZJw8VKKJR+y0ER8YprQSHy0p5FVM+9H4xE7/5FgkhOHAuElTigk5pFh1VdajRdPs1QmTlr2x22xKccWUXVBJ9YCVxQiiHWtvyaUZWGAFhhheQXZx5mpuCmbYnXkhlliZTnKhmZ6ARlkMZI/F2eeTxjxD6KIRsHjLod1oBumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6qtbvtrNnLKelcZ7Z8SKg66ZUrcErToAe6ivSgiLg7G1wsArEMgmywRyfihXyrLOUtFs/7VcXIutFtpuS8V0lHgL3ITHVpiFuLmQKwOuFqLLHnwqCIhFgOO5y0J/8bZrRVrx1Suko5sJ0d4KAPZ3Srem0acMeg/y+a4ou8xrcL+P2KbwMvhlnJ8rhpaA73+l0ItFCQjTZFaCz5j3CsPOPKNwOg8NTCG/fYx8IS76FKOgyucxU0uDnTR8S8zqMkszACVnlWOKBaDM4NPIOCgNkhluInO55sq2dCcbmgNwQekcKSIfDc04KpEhbtL12mw3TfUBSlrQUNn2lIoi114D7KiLFsQtY92p3u0hgnqzyLfff9/jquAvYnTKlBy5xEncHTtro+NlGJm2BSz16EmbONtrAv/aBr4t9iYIdXRlVw7be5NUpPskO+Wre1l5sq/nFLvsP6lejJdC3V5rnVVJ6XmVgi7J+iZ9NVdbl8APBWZUUpH56FX64rYV8J+zCSSUggnvBLQGSLsWGK2lGdea3ofFiZ5whm5H0p6pDxf77RNPVvxZ3kF/Z/bLE2KmF4A7WS9gd6BW+sBHFzw5EC56Wo/oUvCnQAUqHYsSH7ocQyjaFU4dE4QBByHjwQ82KYSN6YSCGEUoEyIQhSeqDAxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIxSpa8YpYzKIWt6gCBXKxi877ohfCKMb/iJ2rjDD4HxPJZ74reFEGb7QXG9XiRjLmII7umuM2xIDHF/SxT8RKghrdk71NBXIOhcxGInv4R+wskoeNtMEgsRXJGkySiORjlyMq+cNMHm05nGziJaU4yiiWEoqnfGIqnQgu76ARjGA45CtL0EoyzFIFV1uXuQxAxFzGYJe8HKIvCfbJRwJxmPmS2B5tdkRkfqeYzAzix1AgL1NQzA86nOYJqlm+g/mLRgALRdGImZyJiSeazgmnwMaZzGiZcxGrBKCjxAkxFxTsnXQMJm8uFgufTa11NXDmCN6DT/n8hp8r86d+TmgDge5LmfisGTYtFjSeaUxjQnvhCrSZxpB5/xOd8awJQnt20ftk9AUcNaMeRHbGh7aUSxVVWUnxc1IXpNSeHr2mPl26U9KcbBo7s6hCXQE0TmTUE0SrJ3Gg+dIF9k8ETkuGUGfxM5fFlGPTSOokhqDJpp5ma4NTEVChRlapLZQTp+McO7FWIa29jWlRJeuCzIpVtG7OoR3N2s3sWrqwuk1ncn0aXW3xVgkpdQfAdCtfq7YOtn3tQ8VI64gcArizFdavYNsbZG8hWbKRqLKi2h3T2kbavC0Wbr7bxNw+aw277SMhaS2tbPmWOsmpdrX1AG2oRIu32c42R3HDbW5bSyrGNZZwLqTM4VJrgcQpDlXG5Vtyp7Fc2zbXuf+vMu6NRAG5xzG3hBqtlnYxN4nucve7zNVg4F5r3e2Wt0eR89Hk0is/d12uHycx3V15dDxOgO6p9mVvSfJ72s6WYUrd+x6AQ8jbAm+utvJVnvQYisIGo052wGUulq43QwtbgHcZtu6GP8HgTohpd7yDMJV+x736btDEsBMwT1LsE/BGT72t0p9mEIw8qGxvwgvWQihDo2PjtYSAPw6ei4Vsx71u4oDp4HExDjji5qGPoiyOHpBvMRYxQXnJbgipyaah5eV9osvVSx6JsYfO+dSOKwn2nv4OaOUwMJU5V4ZNkr/0IzkzkCw4VoIeJYpnNTjZAjfuM5vmrOY6N6CrhW7dA5o6wb/JtM99T36TmsAsJ2M6dROVVselIcDowWw6yGH29KQ5YcAB9vgprfYxp22VZ9oEEC8RfHUBDUPnQAwZNLc+TPh0HevioboLv/5MqWH9QDzlGqA1XPaum81rV0ObhhW04LNvkcFZl5gy2gYUBlvo7QlmO9x0GTdkAo2tEUaGvtNdcw/dHQHwxpt5PvTECllYKBMmUd+K4nej/I1EgCND4AP/oBMldcsRMLzhEI+4xCdO8Ypb/OIYz7jGN87xjnv84yAPuchHTvKSm/zkKE+5ylfO8pa7/OVDDAEAIfkECQIAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC77HGi0ec1mAd7weBotqNfjAHt97mj7yXh4KnoCf4YuFomKi4yMQ4Fxh5I5jASWl5gImpqYBI2LOZBwk6QXjiSfigurq52dm5yYrKuVmKmJCbm5om9NfKU9jAfDw4wFx8jJyrfMFsrLt8TFi3gS1ta6uUiEwDyMA+Dg0gfGz+bn6OjC0uHgjNfw19kJOXyEhHj3er/dMN/t/8LxAtCu4ICBBQO6u3WFW78hCg3iWTeOGCM8BgEugsCR46kq/B4GYfSgZMmIFVP/pkx4i4HLlzA/ipyJqiXMmzeZBdi502RJnjuZNdSTTw/NIoxwxtzYsanHRUCjBpDpxOEIfLz02Tlag5GCr2DDSgWqE2jYswqiUt1GdKBbOFrrcH3BaCxPtHjzirU7lWGUuAIGWhUxeK4KRhESJ2bZrLHjRFwAFzbs7THly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt22wE4d7Nu7dv2LpRTP49c6C9tnD3zSF+6O2oFCGZ36jlyhIsBJ2E4hgoHQn16tfDi491aW0K5726y6A4TRG0VLPiy4/PLPuicRd5NRkOmj25Rem895h76kQjTX5wxDMP/1tbmRZROcgMKOEtAlrAGC7zZLOfUbBFVNBE96n0nyIYZbSQIk6ZB0V0sqF0YIgq+XehBTn5pV4SdZH1mIknfqLWIjUqMpRkcq3GjFJIlsWTTw/8mMqQd8TBX2pehTWgUylCxddZKhYBGHpuTZlZjnbpZSZafPX15F9xCcbhVW9+NmCadOqYimKJdTkFVsk1qBoj8eEpaAQTrnmjGQMequiijDbq6KOQRirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmopqoqCsGtWkarrsYq66y0QspirV3ciisTsJYg5q5CGDcHn28QoiuwOnCXwq/IJoueCsc2ywOY0C4nav+hkAWrX63fuXKdfYbaoOyq3b4y3rnkWaJnCdR2ShUz8VV3ybeyzNItM/OMq0S0o717S7zyEkDvJfQtAu4n+W67BL+d+QfhMfDOJ7G9txxsAX7UKKwEs5s5DGCAEWKbDjMYkxiHghoewbFmLlr0McgwwyyjRorEg7Iu9QzbppRxMdzPgy9DjO3QFc6YYcpLrDzmIjNWOPSARdOM4dH0MKF0w0xLbWE7CPHYdThAh7tnnK15yHUc/pWcSIkmMpKlkFb4/GfW4ah9sYgzgw3kUmLHSpJPLYuo0oxJIcnAuqf+bVLggldE+N5JgsKtljwNyOMASgYFuUuIJ01kkXOnYjj/TpkHwKSTn0AZGM9+zlZ45Chi2RGZY3XuJdnEBgLYaVWCdaXsTymSJpeSe64VmG627lnvX/0OPO1SEQ+38fognxXZWCtiZpqlb29nttSvbr3ucYkGfVRnpv8V9zY+8eX1yl991Jx11smMoLZXhVyx2Du4iKCPe1pjIvO5QnTof3gKoAC1o4UCGvA1gJrFoPC0QPBJywaJuqAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISZ9CrJY6giU6MohSnSMUqWvGKWAyN3I64xRtCkTD98+EXLyA//xqOsYwuFFYacmcsa5mRF8exQ1Hs0MUT6ssEaGzhHX0VRhzukQR5tOOzoONGPw4SBXWc1NAeobFdLVJbopDWI4PwR3IZLGADU1f7alBJVZUrE7CwWP5U0ElSfXJe6DqXxV7QLksqImACS+V4VumCVnrykvKS5SxtUTw3HHJT/oLPLGCZSQIU7JW8TEXCIsmERHasl6b41zAxGcp6seJet1gmJHxRyH7BqD2JcNoiJkbOBdQnmYmwWymHEMj5fXNE4UxGxMo5n3OW550I2qbV+rg8fAatAPOk5zE/YTF1NpJBoCONxwgkM5EVKBUGTRA8FqQyfmYvnS9iKMiI9tBPRP/0DTfTRkWVZz66iSOj8YyZSjt6N2LMyGYTRZoN4lg91unDmYdg3MNWytOQKWIcL4UpNmRaA5reY4437SZXdPrPnvI0bz2ygFCHijMcGJWNPVOqOxXRNHlWEGpe5arWqCbS8PHOpJj751fB6tNEGI2sGyKp/8SqN7qC42sZwWta7brX1FmhnZQJm1vPJorL6VWwjVAdaxD7IV4Y1rFaU6AFFHtAvjYWDmlDqQXYlhG3NWWUR8BpPy1L2Ddk1mUmg8PlPDs7aEpBtCXlq90EB9W+0ohvfkUWU3+Kt3fOKEi5BdZuMRoj32oNuImdnCKYxLjGsUNrr1MKaEOluJOg1bn/g4Pu5kjnWldBz3I8Kl10D9ddKDhwsZTTnGNWewvU3fYl073d59ArvO81g72pcC9yVbc7I9lkdPBtL1BOZ9/4EgGrcg3dJwCM20ZEhcCV26QUEJzQFm0XucALXiLYNz334W5/5NMKfRMxOtbK7nz2nfCH5Qg/fYz4vdJlyvPSKxUD+6AwuUPqPc6qPSs9JsMQQPFdfNzhJLxvfDqObSKk1xggC3knTJ7sPo+H5CSHhnlo4kv39OLeuEapyn1y8ZUX4T27bDkvXZ7yl8Gch/KNucdo1rKAhxznCBcZoeJjc3/7Q2P0qe9MHA6u/qgsChxb9DJPDsCfAS3nvqn5qC1+kCAYE8yyx9TPfrfAX3mpQGFJo4Z+l270JzR957+CGLCGAXWoa5dpCm56bCwOs6d5nAgAanetguavmyGIQMVIFtelrsJ5K5uIQE0wTxVkYQRZcWxkL1DZ45Rgs78awwwi0dpZzLa2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93wjre8503vetv73i4IAQAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLucAaLR5zW673/B43EKnE+74PGK/zxPqgHVyg1WBfn58iYqLfXmBhJA4gQeUlIEFmJiBgQudnp+goJuAfpOVB49RBqurkUGBA7Gxp6iAmbe4ubq7uqaVsrGpUKytrj+wwJe3o8zNzpu4yLLCTw3W1sZJ0sCyaWi+tJaA3gDc3NTZ6S/O3LTg4e/nzer0JQn39+T4+/z9+d785DELQLCgwUAMEiZEJ+Uatno0+JGbQLGixYsX9e17wLGjx48GAziDQJIkQ1XEIP9G3DfRYoWXMGNmBLjRY8ibBwGV3FnyZBCHDYgJNUBuKDGgKklI9HYxptMKM9PwU0C1qlWcBZ8B4iI06Y2laTBa1IgPK05nEdKm9ZkFqdcf/vBpnUvXQhOjeN/q/dGVhFByRfEa2EvYhmCigBMrTtO3sGMYhxcDaCyC8mOVbm/89Wb5suPOnkMLAS26dA/SplOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH66yLlvic0gdwsOouaJSW5FbQecM1HLmifyIUo7H2ZXMrt8p47XMeB3yztxFNwJ0M+OjDktvG6D+PPn7+HPFS7b+CerW880nmTnADMhfHQLRIV3/FOwAUx8d4Zyy3zTzLPgEPyDlhCAw/EToYYIWhPTRcRbuAJZkKALGTyAi2qQhHQrFqBCJTPz32IkAiKVjVGhg+NGPHYU00k40LmGjYzg29RRMPAIwlVWBWCWlAkLqRGR/UxwZWpI7knWPWTehpVYERVIBnmw4epmAeXWMGcF2zJQoBptaSeEeGlrKyYZldwJ2mJ5u9JmiYn8CamZ8OPSZp6HDpDTDYYsySkR7ggWG15mSEhJppq5gyumnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWauutuOaq6660ksMrGb7+KuywxBY7A512GesEsspqw91yzzlSYbM3GHId/wHOZYsAdIJQOwJ1zVh3bbR4wGmHtHFa4alq4tlSHjOhxBuvM9xCKCGWdzn6Wrv2ZVKdvAB3Qi+69lZSJhGbFsYvHflpQid6zTyYLHsOKQrfNfIB0s69/Tbs8S4TBoNvjfqGp/GBDL+LrHnRnExht1Csa/KGL9PBjYEEDoCzyDTzrKCwAbocy87mEB00zMXOd7M370hMTs4+T+xtg7JI7KE4ddAC4sG1+hjkixZw0+HVWqMcokEjjjwrjnG1jY+aWwMCJkIxcn2EzJex7XbbcJvNoll0z6h2NYiqluagKK4oN9ouZgWIjDLabUTCSXG5Y5c04QPk5lUyw5PkRVCukv/lFC3J5FiZ35MhmI7XwdPng/9AKV6WGoV3NqRPYPpLTT5ZVZRTVtU5HbAjnWXJpuW+O1SoS7WPlMAHTyXYxf9chegQKb97789LPz1WdXGFPGu5c18W662P4iboTty+2uHOy0Wnm+Zu4i0Kbq9MZ76QFmNh/vozD//6F6oAjsJOxKjdYO6HMOQJijOCYaAOIoM4yWCPgQ+s4HvyIsFHJVCDhIpgBzVTqcXwaXwMdF8LLMaKEa4QhS/s3wJd+IIL0vA0MLzhDmZnFAUKRYU6rIENg5iDIRLxBkA8IhCSqMQmOvGJUIyiFKdIxSpa8YpYzKIWt8jFLnrxi2AMoxjHSMb/MprxjGhMoxrXyMY2uvGNcIyjHOdIxzra8Y4pCNYd9YjHPvrxj4AMpCAHObX9pZFZZLTWdch1B+9oUZHQyg7B7PfIZx2CkX+Y1hQheUltNadeUmsiJxHhSUaAUoLggtcnroUtSZbrE5x0ZBWYKJpUjkJci3TlHeoHSvYNgZahseUmcBlJPmgHlpaU5aEwBpuFWaBlqgyYvAbWHUBIDIEtbKY1OZYyf4VLmtNsBiiviZJs7mubBnNXfpAFMWaQk2LXYOEqgKkOZ3qMnbxIDzdD+cuKfXCD8yycZ+zZMHyCLGL7RAIPEQNQA9AzHfOR2Mcm2gt0UgJE2PTfzGzmoH1S//Sj3szaKTBaTo0CSGgDGI/DDEgXaHK0ZvxkwkP1crRurpSlWnFp2MzWEIGetGcpVedNceoMnZI0Zj6NTU132o3FQE1nTjXbUXm11KUp5qlGQ6kvX6W0AjHNovAYhzeeutVZdbWpaWjaPp8GtbLK6qxD+6pIPRQItubMrbGi2iz2SbaQBTVd99Mrffh6Nb8qk1he48jwmBqLsZHtF2ZrUUfwaqrEPmCxYtvHY0caWcZNNnZdq8nX0sfYATh2syCSLEcoCyq97c0ffYPp38D3uLqBVqZJFY1rX7vbBMStDnOrreCM11NmGo4lIEyR4oDrWcWCDXK2JW5JZ5ga+CU3df9rWlxBVkeQwEGXtTwwIu6Qe93FLJcOqr3sc6G7kNsaKYd5Iy8aLnc5NW0OSIsNRPVi2ihzVle+OaKvjux7X+6KpBn7vYJ4jaE905lPdY1Dn35f1xP37tCftIPgpXJLjwYv6cEJMHBwXUdhk1hYBwuV51Bm6gYPPwXEIgaclUoMXhak+J94EgyL2+Bip4AYeoDw3ve6O2MTS7e/Ji1Nj2XSvB5173dB9t5iE2yFBbtiyaeriJqEPOI6bcHKkcAy75rspCcHr8vPEJ9/kwdgJTmYzL47s4znouYkv6/NmIvfl9BHZGas78TFfchrygfnffC5z+obU40nxWHXWLfM8mPcE/2QCVhvPfq8xpm0Jw7brEvvA1maFpgmOwhAoqaZZDKUU6lNPWokyNDOhmI1f5WgYlPJOqMMzfGaC8hqXCuwjCdkhQVFmMVgr2LYHCx2CcvbUCtSkNm6hrUTnw1tMBMrgyAsFBWxrUFtY5HafnIgfKMI7l/7ZdxQLLeGTWptWO24MjieDLpd+O4L1Drd8z7Bq6krRdHt29n5NsG/q9huLRaciDcW9rpX3GgpJvzYC/9hw6P48FzLe8PGPePBvx1wNW78ih8H+K7nWG8wlpyQKE+5ylfO8pa7XAUhAAAh+QQJAgAXACwAAAAA+gAOAUAF/+AljmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEgsGo/IpHLJbDqf0Kh0SgU6rtcXNpvaOrTbqnh88wLOZ2/JK2i3vWy3QE0yowF0sn7PirvvAHICgISFZ4KAgnl8jI0ncFuIhpOUh3KQWI6amxd+bZWgoXeKYZymVZ6Cg6KslKqXpaeyUJhXkq2gpJizvBcWv78EwsPECMbGxATAy8BgWLqQr9LQcNS9m8zJycfc3d7IxMxrW4CLnZGwmNZ15Hfm10HMB/PzzAX398zMC/z9/v//9C1LJo/eAXHwEtpgNqBhQ4MHl+GbSLGixYsWC9Jz2BChwo8xGHK0N1GgyZMo9f9RFOnQI8iXC5dxnDkAkEaI9ZYBojlyGcyfP1DOhHgTZ9GZKIEqjZGgaVNATqNKnfr0jlSkJwNo3cqVGYOvX10uXSoV0ISzaNOqVQs16oO3cOPK5RoAJYS7d8WOBVr2jtoKgAMLZmvVbVy6iLsuw8sYr969MPui+Su4MmE0UhVo3sw58daUPiGLNiH5zNq0bZ16TowygmvXj0fLXkHVKejbuC3M3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr387dGZcW79hlchG++55UtRxMWz+n1jrzjtLfwuUqHST459FJo88fzfry+EWRSn/9vRcgKvq9QiD/f//FcuAJucUWw4CjyFGghRW6AaB52WgzzDcgdkNQaCPYgYY56Lln3xfiXVGOg8+JhdI/Hn7ITTIBDRTOSRuOMx4KPbbIYnRFkYRRSRECcyRKRJH4IBEsPWSQkUdWaSWSwECEVTNPKhHlAF9SwpNDYvYEzJa/dEmFUBw1mSVO9BxlpkBqTiHVXIqdyZFUcPaJpgV0ySVhnT+UtmBhti0T6GF5/gLWo2ANSigOhp5m6WVn3CnXpnDRZRdjkk5qQ6VpVWYZaog2xZkCzKy6qqeLgeqkqEGQamlqTa2GWGuvRRAqrUcYimsCSQLTawQ5mgQsJ8WCtuyz0EYr7bTUVmvt/7XYZqvtttx26+234IYr7rjklmvuueimq+667LbbB4wqbBhkifC6a4KJacCYojor+uiiO/XaKyQ1qbC34r7fCfzuMwcnaHDDDGsYsML3OpwIhvTNF0i/FC8cDcaHZvhGLR0/4rDGIVfS4I8l0xvxJymLYmDLFb+8Ssy5cEyzyTbjHMrMLRcMss+GrJwwzfINnTLBExParG44UOif0jIPDTStT+cgtSV/MGi1zpN2WKOIOypLnsNJP8y0zfNqJ7aHIcaNwIhcuvzvifqiraLELJ+DxYt9OyfjSTTWSADZwyQbTNkCte330f4O6bHkMS7j5i8rEQ7Q5gChRPcvl0Odbv+REmEpEOeo9+M54xaEvi7pSl5ZwNNLnuS6ul+GLvvuVcrZ0qzmfknl7E83m7mev9fdrvAycVTmmM931HzyaZbMPPINRU+T9tdXv7Mv0/Nkk+V9RgTMTmOCCfz34Js01JTk9+m79GZ/r2mnjVowE5/lazknoFwR1PrSZajaGNApw/oTM3TllUf9ylsFPKABE/i/Ba6mgZEa4LiEFTKpWHArePrMMiAFqQd2y1aXulWqEsCpFsLKJI0xIbdQOAFTDQZVmDEM/nQlQmA0JoYaFBcNbRgYTAEgM5xplas288JfAFF55xoiEStgRCRuRolLVEATLfBE76FLikSsYlSyqBn/BuKmZTQUo2p42EOBHEuG9uJgDhNVrGMpTh/so40Bi9esPL7ggHwslh9xEEg6DfKQiEykIhfJyEY68pGQjKQkJ0nJSlrykpjMpCY3yclOevKToAylKEdJylKa8pSoTKUqV8nKVrrylbCMpSyl4zh5NS1yiaxl03QZuJLhCw95Y9veRta3XzrOXMYMpi0gtky+HS2ZvXQXNJ+pN345k3LTpFzQqvkxtTFTPWDzI8Kq4c1vXu17W9tY1zL2tWvm0mIiuxkuNHbOnaUTZVVbJ9eICTn2pQ1mPltbP9E5THnGTKDa9OXJqEa0eNaTXULTZ0MJYbSESnOhEp2oQ8O5zZ5p/7QQD+1oMwH60Xge017pLKk6+WlRe8JTpVNzJyJTWtKQohSjJIVpRUUKzv3ANKavOGm6/mnQpX3zndbMqVGvKdR2EbWhCJVW1qL20n0WNZ85tWmXplqGqq70qj9rJ0uB9TZtIE4YSTmbMJNaTqI2NTtl3caNWGfCcUbUYG69ZYDiWoy5DiOt4OEmOcvJ0nHWia82kts3Pic6EWQzcgid2WP3qqOxKXaxrIsc4Ki51m6OVUibbalyBmeSwln2GDjyR1lRwsuBOlavdhOt4GY1I38Y7nB+FcYdGcuM1orWt9gh7elsa7izEmC3dF0GcLsA29dGczmww5zp9JG61K3ur//xywkUg5dd80kXH7Wt7uaui9buwlFb0bXA7miHESbBb7vlSu96jdde273Xi+eSr+zYexH3ximI4crdfdXLuwJXZH7qgy+5BPzf2Bn4wcR700b+97rwJfi7+Shkbo73iz9VGHsXJjB4NYwbDuuPwriz8PBIXOLpethe3TsxmSaRvprQ+H8v7liMZ6I9Ht+YejKmH35b9iUfo6EooUPfmM67PAsb+QxIHrCSecJkdhXZeXeIcoN/MWWaVPnDAnnflltXPgQDdpBsckjo+mfmk+Txfm/Z4v6i0j//AXlRcPkyuOD8ADnvic51nvCdAxgXPX+Lz352CP8CfYA/4fkths7/VgQlSBUKAvmDrBmhAwG856gMi9IIXKECFXVBTWdQwRv0NNE8SGoQMqqNFiDhplEtRFX7jNXAeHSf8yfrUw+5XHJcEK5/oest9josnD60rU2TwksNq4Wc2iIzutjYKC4bAM129gqhvSlpx8oxyYbgtSkTRhxmSodxZqNWpv1DcNM6XGC0oRqbEkI2srvdEIj0tOJtqnmz8NX2/na79S0tfp8KLcNaFRaXuEVqr8vgN0T4ChW+DDJqMX8OVxfEi2juI46RjGa8jcA2Dhh/WzzkzorjuEs1RZODvNQiL1kaOy4Vda/7JG8MN7tmLvE55srmvHoNwYF97WE9zY6qdTMiW4PtcTomCemqU/ohmT7sCEGdH2dWJCBZnPJIbp3rWcck2KstyrGf0uyzTLva1872trv97XCPu9znTve62/3ueM+73vfO9777/e+AD7zgB0/4whv+8IhPvOKjFQIAIfkECQQAFwAsAAAAAPoADgFABf/gJY5kaZ5oqq5s675wLM90bd94ru987//AoHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7TIF4LB47C2bk2OAWk0+u9+6cXpNr9vtbbh+b5KL72t5IoJ8hYYlc4Fih4wrFo+PBJKTlAiWlpQEkJuQjZ5ZnJmZl6SlppiUnJ+rPJwHr6+cBbOznJwLuLm6u7u2m5musAeqrMUonAPJycLDm7TP0NHS09LBsMrJxMbbI8jYss++4uPkttDeytrc68eb2O8DddbMsZt18N+b7Psx5O/M8+gFfEeOn8ERCRImrKOwocOHC+k4JDgugMWLGDkx2LhR3cFGDutMGEmypEmTDBv/PljJsqVLjAHIQZg50+PHQyHpmKzAs6dPlBJVtoRJNOMmmkhp2rxZKOeanT6jAl3jUIHVq1iLXiynjyk7p2pOlkypUGtRchHSpl3q1StEhVzjyrXQtq7du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5AjS55MubLly5jxJmKzKPNNQpvx+AHj2VhoQKgVjS5dbDSY1KA7s5Yxl20R13Jm4wglatKp36WAddU9xSO5Xb19k8rU61eqccSLBARHLVxtSNXJARwevZU7bNuxVx9PPtrAfJ26C0GX7buy1Pjeo6YIif4j9Uz8gRcWMPwjZvbZgt8SDr1kVH3YOETP/4KvBAiTS7YNeANYqVVIVkKcPDjUgY9w5CFHEUoIA4VilTiVGgW6pCJLMMmEVIgiukBiSVFJNVZQCmGlACc66tjiUS9yF2MOM5Z4YQJmEYWWWhHAOOQPFB55HSRMRtCcOE+CMmU5WXbp5ZdghinmmGSWaeaZaKap5ppstunmm3DGKeecdNZp55145qnnnnz26eefU+BGCKBIhDYooUHEFgZsriHKA24WRnqooy9AGmmFk1LawmmX1oGbpjlYCoiipIGa6B90ZDrmlnR9IWgYcbLaxKuwrslbcsE9h6Wp/TiHK3DACpeeo8aNg1xyBOQ6yZWR6OqLndM5Y504vFRbLf85wv7Hn5BsRiseLcdZKy4u2DprgX+tvuntI+XVsmV246Abq3vLbPttu/hOc1463NpK7wDUucvqlOf862Sa7AH8L3zxxTMfeo8EuGfCCTMcn8XtIcjvsH0m/I48mzBYDyT3NHzwnfopg67IzUACIMQC/pkiixxa8I6CLAvjIEYQ9vsmhW8FrdCRAWZolkYeniwm0EIHTTTMRmuFNIg+pxllp6g5FLVFBm61yYcfKh1mkSYaiWNCK6b9ozhJiQ0m2RPU+NONVAlFc5JeQ5JU21WjCbfcPZ0IQFVY8djjVWs/wjfHbf4NeAWCE36V4YcrkLgFi98Hp+OAR95Q5VYlOdf/nnB7XhbeeftSpdtzXl03XFtWyWzMvAo98Ja8nmD77dflDgPvz/ou/PDEF2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/778Mcv//yH0Frq+fYLkH7+5Bsqm/n+q1X3SCUARq2GegQ0oB+ql0DUfAqBrsGaA//HPFFJ0FMUXB6nLvhA521Qgh1s3gexFsLoWVA0AhxEBp93Qgym8AKqYiCqVHM/AM6QMy/s3w0BEMMwycpVtJrXlGZlv275qjfKkkRBqHcrJC7HXKwTXhNFkURNQOd5UxwFsICTrXQhL4uV2OJvuqip/2JRSxfIStYTl6WLKS4xT2b0xbF+dQnmtPGIVtwVHIUUrlyksYqz62IUxbQuCxTsjOOyVrkmUUghagsWAStAHxPJi0UqMWT20py6MAlJaZWHVfASh7zgVEh8gZIa2smkF9tUynadUl/xUqUjbbafTt4rX7gEFycbBLNZ/kOVuQymLl2ms16S0mCeFBjw4nLIiBlzkxrLGLumtUyuNJOWG9OkmyiWTElWk5nUxKY0V+lLmH3sYRdD5zglpiduRtNhgGgYPO8QIHb6yWPYABkxGcSJksVnkMd85znX0B9V+hMfAIWmM9NJ0F0KxB50kGdCtzmOX9rykQva1zgnysqK1v9yZBh96D55mU3a9WlmK7nczRqSs2KWVEMs4ejS7JbSmq1UIS29BsxguhKZjo2mD1Bpglia0wPs7CI9Y1ycmNY0iDytpFtT0teS1rczMbWpV01A0TYhuqlSTalrct0Fz5aAqHbNIlMDGwN8OiCxjhVFDTHrhlJnAbV+VZuNa8hbU6M1rvJsrmj1qlrZip/SlY1ucFVI2lZ0OU5kjpxh1atODmu216FtsWeNyTgeu1TJPoVGjzPdZe+GOsfuTSlVNRPn5CbaBGS2q3o7bU1SW6bV1qi1rz0akGRLWPXY1kYkOZKOKHe4y3F2c54NC2g7h9jBfa5wmwCd5Wp23J8lFwCfUGFucMkqXdhyxU6/ndt2LZuA7uo2LuC9bnZZ21zJFfe839WTYceb2ISgjq6cWB1tW6deEx3pvoEVh37B6ie39nVKsrujHhFl4LjGjkmz661VryulB6slwvvl0+6+yaXibZjDV3QeiCE7vRFrz8T0S7GKV8ziFrv4xTCOsYxnTOMa2/jGOM6xjnfM4x77+MdADrKQh0zkIhv5yEieXggAACH5BAkEABcALAAAAAD6AA4BQAX/4CWOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwu0wRotHnNBqbV7bjc5qjX5/iYZb8n+P+ACIKCgAR8h3x5ilWIhYWDkJGShICIi5c4iAebm4gFn5+IiAukpaanp6KHhZqcB5aYsSSIA7W1rq+HoLu8vb6/vq2ctrWwsrK0xJ67qs3Oz6K8ybbGx9Ym08S2ANzcwridh93c2trV1+grz9q43+Du5s7p8xcJ9vbjAPf7/P344/ziNQtAsKBBRAwSJjxHLw6/fBMiSpxIkWI+fg8yatzI0WCAZxBChmTYkM3DcRQr/6hcydIiwH0dPcosiEikTZEkS5o52S0ly58uu/FTQLSo0Zk0oSXSeYwnt4oTL+5DOvNZhKtXczJt6O+e0q9gLWwdS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOIpdi5k7jsYgdvBOSL/Lhx2ciWjYTVmrlNI0d/JomOxOpQ5ynnnp0CHRpSoVSrKsk7LcTdMmDMNvPB/aydado8sg3wvRu38eO94Cn7DfyHcOH58pUjFn2cwD3XxTZPso4Y8T3gXCmnNnv7EYwbPQrnF759do8cOZun4bS6/fvc+CGCn/7gIYUAKiTffC3UB9WBQeUHE/9HDGqknjM3DUjgCgZO9BNQUb10j1EKIMIhhw/yESFzE+JQ4YFS3UOVTFZhFYGEJfJQX4r26MaHixHA1kyMV9ioFI9ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phkqlVZmVdghqYVaq6pxGORTfbGmW4m0WadUdBJpY/a4Vmbj3768BlrpMm2Y6AtDAraaIwiUNpSZKbmzGqsEVDoHzr2YagqV9qmS27NoCKqqM88Cp54JDrpaXGgqDbqq6SUuqkF3/X55Kp7IBeKj7w5U6uUwtWq67DGjVdMqk0+92mrfPIKKnbLQbrnIdlpg9//dNvcV220e3CpLB/WaovtANdya0F2YQoXbjfu1CrduDBi2Z0ttbYXDh+4ZBevlOg56B+4xLBnb77m8qfRvkfW19XC99CYgL6HrIgQgAgHqTDDCzsMMR8S/0cxskzOiN/IQu2zn0ExJcVHgAFWDOSJCKKooT0N1hyiKiNK6yTME1zYUoYl35PyigTVdJNNLvPIs88rJajPPhx6+GFRN1uQc7dRLs10BU4PZZTUUytQ9dW27rwPRBZu3TXUYYtNVVhc8ry2ikSrrAqOSfN79n36+YhjpqL4yXCzgCIqwuCE62Y4C4lzuvjjkEcu+eSUV2755ZhnrvnmnHfu+eeghy76/+ikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AHL/zwxNOlJ+7H35687Xfi3nzrcL4hZxrLhx59GtOjUT3o16ORvQDbp/4882/wHr7s58ee/pJ8tt7+6Yo6cqkfz3ge/yOuzZo3nvcHkv8f9cNc/1rTqEmYqmyPG6AfCiiaA6JJUqEyRaUs9T8/AO6A+zMSBFVBKUJVkAAX1B/IqrRBUXRwUR8MIQDLMy18oYpVu4ogrEYlqxW6kBMZJBCuLCCNSc2Qhs444K+itMNh8alXzRgilIqoqyMCozcvxNoSDyGsJjrrF1DE4QiVFKwo8pBYYEwOFV2BLv8iUss7XgyjGpl1w02UcYoAIw8MC9C4zfQwjsfSWbLOKMdcPauO0LgjtPqIQCZ9y49sBGQg//jGFg4yj48kl7iwVS5CNlJefITkuagzyelUUpOX9FYmy5GPdnnxXdjKoapGuS5vjLE9iEDldFS5RzySchym1CIfZFkOWhrSGezw4sCMNYAARgqYaNTlqWD5Sjeay5dG6ldGqqYNgQ1sGAVD2Uag+bIF+ctum7SFNa95gPdo82BbnJI0H0DNgO2DnNgkpMEyws35XAxj/tDYMyP2No8JKJ1Iuic+BfqwfXKsnyv7mB5DtjeSOTRoNeJnQYb2EX+yjAH1PI3IHso3k0n/lCAUndhFMQrQhDWUoyTr20En2h9wjnQhJY3mSQEQs5g5rGYNqprRcBLTIsmtphK5KU5DCiGk9ZRIWmPa3GjW0rrt9GgQyGhnkuqzpSaAoh0TEVRHctQhUfVCVsUqQvewVa4udElfxVBQZ5aAqB2ibW4DJ9n01jCUpE2pQFPQhr721raNzahnVVJaf7ZWiLbVr2OFxpUG27S8Pm2vYcvqj6zEWJVYFa6SVeyWflpYvdqjbuBEBN66mrWZ2pStoC2aM0Yb2C5t1LMJ4NPfTGHMMb32sRG10WxLUVsx3ValutltrFi4JsQpUrOGM+5xiUu55RaSc84dXXSLR93qWve6KNjNrna3y93ueve74A2veMdL3vKa97zoTa9618ve9rr3vfCNr3xlFwIAOw==); +} diff --git a/resources/sass/_sprites.scss b/resources/sass/_sprites.scss new file mode 100644 index 000000000..ba8c0f9d6 --- /dev/null +++ b/resources/sass/_sprites.scss @@ -0,0 +1,717 @@ +// montage *.spr.png -tile x1 -background none -geometry +0+0 sprites.XX.png +[class^="icon-custom-"], +[class*=" icon-custom-"] { + width: 16px; + height: 24px; + vertical-align: bottom; + background-image: url("https://alttpr.s3.us-east-2.amazonaws.com/sprites.31.png"); +} + +.icon-custom-Random { + background-position: 0 0; +} +.icon-custom-Link { + background-position: percentage((1 - 236)/ 235) 0; +} +.icon-custom-FourSwordsLink { + background-position: percentage((2 - 236)/ 235) 0; +} +.icon-custom-Abigail { + background-position: percentage((3 - 236)/ 235) 0; +} +.icon-custom-Alice { + background-position: percentage((4 - 236)/ 235) 0; +} +.icon-custom-Arrghus { + background-position: percentage((5 - 236)/ 235) 0; +} +.icon-custom-Bandit { + background-position: percentage((6 - 236)/ 235) 0; +} +.icon-custom-Batman { + background-position: percentage((7 - 236)/ 235) 0; +} +.icon-custom-Beau { + background-position: percentage((8 - 236)/ 235) 0; +} +.icon-custom-Bewp { + background-position: percentage((9 - 236)/ 235) 0; +} +.icon-custom-BigKey { + background-position: percentage((10 - 236)/ 235) 0; +} +.icon-custom-Birb { + background-position: percentage((11 - 236)/ 235) 0; +} +.icon-custom-Birdo { + background-position: percentage((12 - 236)/ 235) 0; +} +.icon-custom-BlackMage { + background-position: percentage((13 - 236)/ 235) 0; +} +.icon-custom-BlacksmithLink { + background-position: percentage((14 - 236)/ 235) 0; +} +.icon-custom-Blossom { + background-position: percentage((15 - 236)/ 235) 0; +} +.icon-custom-Bob { + background-position: percentage((16 - 236)/ 235) 0; +} +.icon-custom-Boo2 { + background-position: percentage((17 - 236)/ 235) 0; +} +.icon-custom-Boo { + background-position: percentage((18 - 236)/ 235) 0; +} +.icon-custom-BottleoGoo { + background-position: percentage((19 - 236)/ 235) 0; +} +.icon-custom-Bowser { + background-position: percentage((20 - 236)/ 235) 0; +} +.icon-custom-Branch { + background-position: percentage((21 - 236)/ 235) 0; +} +.icon-custom-Broccoli { + background-position: percentage((22 - 236)/ 235) 0; +} +.icon-custom-Bronzor { + background-position: percentage((23 - 236)/ 235) 0; +} +.icon-custom-BSBoy { + background-position: percentage((24 - 236)/ 235) 0; +} +.icon-custom-BSGirl { + background-position: percentage((25 - 236)/ 235) 0; +} +.icon-custom-Bubbles { + background-position: percentage((26 - 236)/ 235) 0; +} +.icon-custom-BulletBill { + background-position: percentage((27 - 236)/ 235) 0; +} +.icon-custom-Buttercup { + background-position: percentage((28 - 236)/ 235) 0; +} +.icon-custom-Cactuar { + background-position: percentage((29 - 236)/ 235) 0; +} +.icon-custom-Cadence { + background-position: percentage((30 - 236)/ 235) 0; +} +.icon-custom-CasualZelda { + background-position: percentage((31 - 236)/ 235) 0; +} +.icon-custom-MarvintheCat { + background-position: percentage((32 - 236)/ 235) 0; +} +.icon-custom-CatBoo { + background-position: percentage((33 - 236)/ 235) 0; +} +.icon-custom-CD-iLink { + background-position: percentage((34 - 236)/ 235) 0; +} +.icon-custom-Celes { + background-position: percentage((35 - 236)/ 235) 0; +} +.icon-custom-CheepCheep { + background-position: percentage((36 - 236)/ 235) 0; +} +.icon-custom-Chibity { + background-position: percentage((37 - 236)/ 235) 0; +} +.icon-custom-Cirno { + background-position: percentage((38 - 236)/ 235) 0; +} +.icon-custom-Clifford { + background-position: percentage((39 - 236)/ 235) 0; +} +.icon-custom-Clyde { + background-position: percentage((40 - 236)/ 235) 0; +} +.icon-custom-Conker { + background-position: percentage((41 - 236)/ 235) 0; +} +.icon-custom-Corona { + background-position: percentage((42 - 236)/ 235) 0; +} +.icon-custom-Cucco { + background-position: percentage((43 - 236)/ 235) 0; +} +.icon-custom-Cursor { + background-position: percentage((44 - 236)/ 235) 0; +} +.icon-custom-DOwls { + background-position: percentage((45 - 236)/ 235) 0; +} +.icon-custom-DarkBoy { + background-position: percentage((46 - 236)/ 235) 0; +} +.icon-custom-DarkGirl { + background-position: percentage((47 - 236)/ 235) 0; +} +.icon-custom-DarkLinkTunic { + background-position: percentage((48 - 236)/ 235) 0; +} +.icon-custom-DarkLink { + background-position: percentage((49 - 236)/ 235) 0; +} +.icon-custom-DarkSwatchy { + background-position: percentage((50 - 236)/ 235) 0; +} +.icon-custom-DarkZelda { + background-position: percentage((51 - 236)/ 235) 0; +} +.icon-custom-DarkZora { + background-position: percentage((52 - 236)/ 235) 0; +} +.icon-custom-Deadrock { + background-position: percentage((53 - 236)/ 235) 0; +} +.icon-custom-Decidueye { + background-position: percentage((54 - 236)/ 235) 0; +} +.icon-custom-DemonLink { + background-position: percentage((55 - 236)/ 235) 0; +} +.icon-custom-Dragonite { + background-position: percentage((56 - 236)/ 235) 0; +} +.icon-custom-DrakeTheDragon { + background-position: percentage((57 - 236)/ 235) 0; +} +.icon-custom-Eggplant { + background-position: percentage((58 - 236)/ 235) 0; +} +.icon-custom-EmoSaru { + background-position: percentage((59 - 236)/ 235) 0; +} +.icon-custom-Ezlo { + background-position: percentage((60 - 236)/ 235) 0; +} +.icon-custom-FinnMerten { + background-position: percentage((61 - 236)/ 235) 0; +} +.icon-custom-FinnyBear { + background-position: percentage((62 - 236)/ 235) 0; +} +.icon-custom-FloodgateFish { + background-position: percentage((63 - 236)/ 235) 0; +} +.icon-custom-FlavorGuy { + background-position: percentage((64 - 236)/ 235) 0; +} +.icon-custom-FoxLink { + background-position: percentage((65 - 236)/ 235) 0; +} +.icon-custom-Frisk { + background-position: percentage((66 - 236)/ 235) 0; +} +.icon-custom-FrogLink { + background-position: percentage((67 - 236)/ 235) 0; +} +.icon-custom-Fujin { + background-position: percentage((68 - 236)/ 235) 0; +} +.icon-custom-FutureTrunks { + background-position: percentage((69 - 236)/ 235) 0; +} +.icon-custom-Gamer { + background-position: percentage((70 - 236)/ 235) 0; +} +.icon-custom-Ganondorf { + background-position: percentage((71 - 236)/ 235) 0; +} +.icon-custom-Garfield { + background-position: percentage((72 - 236)/ 235) 0; +} +.icon-custom-Garnet { + background-position: percentage((73 - 236)/ 235) 0; +} +.icon-custom-GaroMaster { + background-position: percentage((74 - 236)/ 235) 0; +} +.icon-custom-Gobli { + background-position: percentage((75 - 236)/ 235) 0; +} +.icon-custom-Goomba { + background-position: percentage((76 - 236)/ 235) 0; +} +.icon-custom-GrandPOOBear { + background-position: percentage((77 - 236)/ 235) 0; +} +.icon-custom-GruncleStan { + background-position: percentage((78 - 236)/ 235) 0; +} +.icon-custom-HardhatBeetle { + background-position: percentage((79 - 236)/ 235) 0; +} +.icon-custom-HeadlessLink { + background-position: percentage((80 - 236)/ 235) 0; +} +.icon-custom-HelloKitty { + background-position: percentage((81 - 236)/ 235) 0; +} +.icon-custom-HintTile { + background-position: percentage((82 - 236)/ 235) 0; +} +.icon-custom-HoarderBush { + background-position: percentage((83 - 236)/ 235) 0; +} +.icon-custom-HoarderPot { + background-position: percentage((84 - 236)/ 235) 0; +} +.icon-custom-HoarderRock { + background-position: percentage((85 - 236)/ 235) 0; +} +.icon-custom-HomerSimpson { + background-position: percentage((86 - 236)/ 235) 0; +} +.icon-custom-HyruleKnight { + background-position: percentage((87 - 236)/ 235) 0; +} +.icon-custom-iBazly { + background-position: percentage((88 - 236)/ 235) 0; +} +.icon-custom-Ignignokt { + background-position: percentage((89 - 236)/ 235) 0; +} +.icon-custom-InformantWoman { + background-position: percentage((90 - 236)/ 235) 0; +} +.icon-custom-Inkling { + background-position: percentage((91 - 236)/ 235) 0; +} +.icon-custom-InvisibleLink { + background-position: percentage((92 - 236)/ 235) 0; +} +.icon-custom-JasonFrudnick { + background-position: percentage((93 - 236)/ 235) 0; +} +.icon-custom-Jogurt { + background-position: percentage((94 - 236)/ 235) 0; +} +.icon-custom-Kecleon { + background-position: percentage((95 - 236)/ 235) 0; +} +.icon-custom-KennyMcCormick { + background-position: percentage((96 - 236)/ 235) 0; +} +.icon-custom-Kholdstare { + background-position: percentage((97 - 236)/ 235) 0; +} +.icon-custom-KingGothalion { + background-position: percentage((98 - 236)/ 235) 0; +} +.icon-custom-KingGraham { + background-position: percentage((99 - 236)/ 235) 0; +} +.icon-custom-Kirby { + background-position: percentage((100 - 236)/ 235) 0; +} +.icon-custom-Kore8 { + background-position: percentage((101 - 236)/ 235) 0; +} +.icon-custom-Lakitu { + background-position: percentage((102 - 236)/ 235) 0; +} +.icon-custom-Lest { + background-position: percentage((103 - 236)/ 235) 0; +} +.icon-custom-Lily { + background-position: percentage((104 - 236)/ 235) 0; +} +.icon-custom-HatColorLink { + background-position: percentage((105 - 236)/ 235) 0; +} +.icon-custom-TunicColorLink { + background-position: percentage((106 - 236)/ 235) 0; +} +.icon-custom-Pony { + background-position: percentage((107 - 236)/ 235) 0; +} +.icon-custom-FigaroMerchant { + background-position: percentage((108 - 236)/ 235) 0; +} +.icon-custom-Lucario { + background-position: percentage((109 - 236)/ 235) 0; +} +.icon-custom-Luigi { + background-position: percentage((110 - 236)/ 235) 0; +} +.icon-custom-Magus { + background-position: percentage((111 - 236)/ 235) 0; +} +.icon-custom-Maiden { + background-position: percentage((112 - 236)/ 235) 0; +} +.icon-custom-MangaLink { + background-position: percentage((113 - 236)/ 235) 0; +} +.icon-custom-MapleQueen { + background-position: percentage((114 - 236)/ 235) 0; +} +.icon-custom-Marin { + background-position: percentage((115 - 236)/ 235) 0; +} +.icon-custom-MarioClassic { + background-position: percentage((116 - 236)/ 235) 0; +} +.icon-custom-TanookiMario { + background-position: percentage((117 - 236)/ 235) 0; +} +.icon-custom-MarioandCappy { + background-position: percentage((118 - 236)/ 235) 0; +} +.icon-custom-MarisaKirisame { + background-position: percentage((119 - 236)/ 235) 0; +} +.icon-custom-Matthias { + background-position: percentage((120 - 236)/ 235) 0; +} +.icon-custom-Meatwad { + background-position: percentage((121 - 236)/ 235) 0; +} +.icon-custom-Medallions { + background-position: percentage((122 - 236)/ 235) 0; +} +.icon-custom-Medli { + background-position: percentage((123 - 236)/ 235) 0; +} +.icon-custom-MegamanX { + background-position: percentage((124 - 236)/ 235) 0; +} +.icon-custom-MewLp { + background-position: percentage((125 - 236)/ 235) 0; +} +.icon-custom-MikeJones { + background-position: percentage((126 - 236)/ 235) 0; +} +.icon-custom-MinishLink { + background-position: percentage((127 - 236)/ 235) 0; +} +.icon-custom-MinishCapLink { + background-position: percentage((128 - 236)/ 235) 0; +} +.icon-custom-missingno { + background-position: percentage((129 - 236)/ 235) 0; +} +.icon-custom-ModernLink { + background-position: percentage((130 - 236)/ 235) 0; +} +.icon-custom-Mog { + background-position: percentage((131 - 236)/ 235) 0; +} +.icon-custom-Moosh { + background-position: percentage((132 - 236)/ 235) 0; +} +.icon-custom-Mouse { + background-position: percentage((133 - 236)/ 235) 0; +} +.icon-custom-PowerUpwithPrideMushroom { + background-position: percentage((134 - 236)/ 235) 0; +} +.icon-custom-NatureLink { + background-position: percentage((135 - 236)/ 235) 0; +} +.icon-custom-Navi { + background-position: percentage((136 - 236)/ 235) 0; +} +.icon-custom-NegativeLink { + background-position: percentage((137 - 236)/ 235) 0; +} +.icon-custom-NESLink { + background-position: percentage((138 - 236)/ 235) 0; +} +.icon-custom-NessEarthbound { + background-position: percentage((139 - 236)/ 235) 0; +} +.icon-custom-Nia { + background-position: percentage((140 - 236)/ 235) 0; +} +.icon-custom-OldMan { + background-position: percentage((141 - 236)/ 235) 0; +} +.icon-custom-Ori { + background-position: percentage((142 - 236)/ 235) 0; +} +.icon-custom-OutlineLink { + background-position: percentage((143 - 236)/ 235) 0; +} +.icon-custom-ParallelWorldsLink { + background-position: percentage((144 - 236)/ 235) 0; +} +.icon-custom-Paula { + background-position: percentage((145 - 236)/ 235) 0; +} +.icon-custom-PrincessPeach { + background-position: percentage((146 - 236)/ 235) 0; +} +.icon-custom-PenguinLink { + background-position: percentage((147 - 236)/ 235) 0; +} +.icon-custom-PeteHarvestMoon { + background-position: percentage((148 - 236)/ 235) 0; +} +.icon-custom-PhoenixWright { + background-position: percentage((149 - 236)/ 235) 0; +} +.icon-custom-Pikachu { + background-position: percentage((150 - 236)/ 235) 0; +} +.icon-custom-PinkRibbonLink { + background-position: percentage((151 - 236)/ 235) 0; +} +.icon-custom-PiranhaPlant { + background-position: percentage((152 - 236)/ 235) 0; +} +.icon-custom-PlagueKnight { + background-position: percentage((153 - 236)/ 235) 0; +} +.icon-custom-Pokey { + background-position: percentage((154 - 236)/ 235) 0; +} +.icon-custom-Popoi { + background-position: percentage((155 - 236)/ 235) 0; +} +.icon-custom-Poppy { + background-position: percentage((156 - 236)/ 235) 0; +} +.icon-custom-PowerpuffGirl { + background-position: percentage((157 - 236)/ 235) 0; +} +.icon-custom-PrideLink { + background-position: percentage((158 - 236)/ 235) 0; +} +.icon-custom-Primm { + background-position: percentage((159 - 236)/ 235) 0; +} +.icon-custom-Psyduck { + background-position: percentage((160 - 236)/ 235) 0; +} +.icon-custom-ThePug { + background-position: percentage((161 - 236)/ 235) 0; +} +.icon-custom-PurpleChest { + background-position: percentage((162 - 236)/ 235) 0; +} +.icon-custom-RainbowLink { + background-position: percentage((163 - 236)/ 235) 0; +} +.icon-custom-RickRedacted { + background-position: percentage((164 - 236)/ 235) 0; +} +.icon-custom-Robo-Link9000 { + background-position: percentage((165 - 236)/ 235) 0; +} +.icon-custom-Rocko { + background-position: percentage((166 - 236)/ 235) 0; +} +.icon-custom-Rottytops { + background-position: percentage((167 - 236)/ 235) 0; +} +.icon-custom-RoyKoopa { + background-position: percentage((168 - 236)/ 235) 0; +} +.icon-custom-Rumia { + background-position: percentage((169 - 236)/ 235) 0; +} +.icon-custom-Rydia { + background-position: percentage((170 - 236)/ 235) 0; +} +.icon-custom-Ryu { + background-position: percentage((171 - 236)/ 235) 0; +} +.icon-custom-SailorMoon { + background-position: percentage((172 - 236)/ 235) 0; +} +.icon-custom-Samus { + background-position: percentage((173 - 236)/ 235) 0; +} +.icon-custom-SamusClassic { + background-position: percentage((174 - 236)/ 235) 0; +} +.icon-custom-SantaLink { + background-position: percentage((175 - 236)/ 235) 0; +} +.icon-custom-Scholar { + background-position: percentage((176 - 236)/ 235) 0; +} +.icon-custom-SevenS1ns { + background-position: percentage((177 - 236)/ 235) 0; +} +.icon-custom-Shadow { + background-position: percentage((178 - 236)/ 235) 0; +} +.icon-custom-ShadowSakura { + background-position: percentage((179 - 236)/ 235) 0; +} +.icon-custom-Shantae { + background-position: percentage((180 - 236)/ 235) 0; +} +.icon-custom-Shuppet { + background-position: percentage((181 - 236)/ 235) 0; +} +.icon-custom-ShyGuy { + background-position: percentage((182 - 236)/ 235) 0; +} +.icon-custom-SighnWaive { + background-position: percentage((183 - 236)/ 235) 0; +} +.icon-custom-SNESController { + background-position: percentage((184 - 236)/ 235) 0; +} +.icon-custom-SodaCan { + background-position: percentage((185 - 236)/ 235) 0; +} +.icon-custom-SolaireofAstora { + background-position: percentage((186 - 236)/ 235) 0; +} +.icon-custom-HyruleSoldier { + background-position: percentage((187 - 236)/ 235) 0; +} +.icon-custom-SonictheHedgehog { + background-position: percentage((188 - 236)/ 235) 0; +} +.icon-custom-Sora { + background-position: percentage((189 - 236)/ 235) 0; +} +.icon-custom-SoraKH1 { + background-position: percentage((190 - 236)/ 235) 0; +} +.icon-custom-Squirtle { + background-position: percentage((191 - 236)/ 235) 0; +} +.icon-custom-Stalfos { + background-position: percentage((192 - 236)/ 235) 0; +} +.icon-custom-StaticLink { + background-position: percentage((193 - 236)/ 235) 0; +} +.icon-custom-StickMan { + background-position: percentage((194 - 236)/ 235) 0; +} +.icon-custom-SuperBomb { + background-position: percentage((195 - 236)/ 235) 0; +} +.icon-custom-SuperBunny { + background-position: percentage((196 - 236)/ 235) 0; +} +.icon-custom-SuperMeatBoy { + background-position: percentage((197 - 236)/ 235) 0; +} +.icon-custom-Swatchy { + background-position: percentage((198 - 236)/ 235) 0; +} +.icon-custom-TeaTime { + background-position: percentage((199 - 236)/ 235) 0; +} +.icon-custom-TerraEsper { + background-position: percentage((200 - 236)/ 235) 0; +} +.icon-custom-Tetra { + background-position: percentage((201 - 236)/ 235) 0; +} +.icon-custom-TGH { + background-position: percentage((202 - 236)/ 235) 0; +} +.icon-custom-Thief { + background-position: percentage((203 - 236)/ 235) 0; +} +.icon-custom-Tile { + background-position: percentage((204 - 236)/ 235) 0; +} +.icon-custom-Tingle { + background-position: percentage((205 - 236)/ 235) 0; +} +.icon-custom-TMNT { + background-position: percentage((206 - 236)/ 235) 0; +} +.icon-custom-Toad { + background-position: percentage((207 - 236)/ 235) 0; +} +.icon-custom-Toadette { + background-position: percentage((208 - 236)/ 235) 0; +} +.icon-custom-CaptainToadette { + background-position: percentage((209 - 236)/ 235) 0; +} +.icon-custom-TotemLinks { + background-position: percentage((210 - 236)/ 235) 0; +} +.icon-custom-TrogdortheBurninator { + background-position: percentage((211 - 236)/ 235) 0; +} +.icon-custom-TPZelda { + background-position: percentage((212 - 236)/ 235) 0; +} +.icon-custom-TwoFaced { + background-position: percentage((213 - 236)/ 235) 0; +} +.icon-custom-TytheTasmanianTiger { + background-position: percentage((214 - 236)/ 235) 0; +} +.icon-custom-Ultros { + background-position: percentage((215 - 236)/ 235) 0; +} +.icon-custom-Valeera { + background-position: percentage((216 - 236)/ 235) 0; +} +.icon-custom-VanillaLink { + background-position: percentage((217 - 236)/ 235) 0; +} +.icon-custom-Vaporeon { + background-position: percentage((218 - 236)/ 235) 0; +} +.icon-custom-Vegeta { + background-position: percentage((219 - 236)/ 235) 0; +} +.icon-custom-Vitreous { + background-position: percentage((220 - 236)/ 235) 0; +} +.icon-custom-Vivi { + background-position: percentage((221 - 236)/ 235) 0; +} +.icon-custom-Vivian { + background-position: percentage((222 - 236)/ 235) 0; +} +.icon-custom-Wario { + background-position: percentage((223 - 236)/ 235) 0; +} +.icon-custom-Will { + background-position: percentage((224 - 236)/ 235) 0; +} +.icon-custom-wixB { + background-position: percentage((225 - 236)/ 235) 0; +} +.icon-custom-Wizzrobe { + background-position: percentage((226 - 236)/ 235) 0; +} +.icon-custom-WolfLinkFestive { + background-position: percentage((227 - 236)/ 235) 0; +} +.icon-custom-WolfLinkTP { + background-position: percentage((228 - 236)/ 235) 0; +} +.icon-custom-Yoshi { + background-position: percentage((229 - 236)/ 235) 0; +} +.icon-custom-YunicaTovah { + background-position: percentage((230 - 236)/ 235) 0; +} +.icon-custom-Zandra { + background-position: percentage((231 - 236)/ 235) 0; +} +.icon-custom-ZebraUnicorn { + background-position: percentage((232 - 236)/ 235) 0; +} +.icon-custom-Zelda { + background-position: percentage((233 - 236)/ 235) 0; +} +.icon-custom-ZeroSuitSamus { + background-position: percentage((234 - 236)/ 235) 0; +} +.icon-custom-Zora { + background-position: percentage((235 - 236)/ 235) 0; +} diff --git a/resources/assets/sass/_v-tooltip.scss b/resources/sass/_v-tooltip.scss similarity index 92% rename from resources/assets/sass/_v-tooltip.scss rename to resources/sass/_v-tooltip.scss index 1601c63c7..7cf54fb70 100644 --- a/resources/assets/sass/_v-tooltip.scss +++ b/resources/sass/_v-tooltip.scss @@ -87,7 +87,7 @@ color: black; padding: 24px; border-radius: 5px; - box-shadow: 0 5px 30px rgba(black, .1); + box-shadow: 0 5px 30px rgba(black, 0.1); } .popover-arrow { @@ -95,15 +95,15 @@ } } - &[aria-hidden='true'] { + &[aria-hidden="true"] { visibility: hidden; opacity: 0; - transition: opacity .15s, visibility .15s; + transition: opacity 0.15s, visibility 0.15s; } - &[aria-hidden='false'] { + &[aria-hidden="false"] { visibility: visible; opacity: 1; - transition: opacity .15s; + transition: opacity 0.15s; } } diff --git a/resources/assets/sass/_variables.scss b/resources/sass/_variables.scss similarity index 97% rename from resources/assets/sass/_variables.scss rename to resources/sass/_variables.scss index db9b169dc..157ae3f1d 100644 --- a/resources/assets/sass/_variables.scss +++ b/resources/sass/_variables.scss @@ -1,4 +1,3 @@ - // Body $body-bg: #f5f8fa; @@ -10,7 +9,7 @@ $panel-default-border: $laravel-border-color; $panel-inner-border: $laravel-border-color; // Brands -$brand-primary: #3097D1; +$brand-primary: #3097d1; $brand-info: #8eb4cb; $brand-success: #2ab27b; $brand-warning: #cbb956; diff --git a/resources/assets/sass/_vue-multiselect.scss b/resources/sass/_vue-multiselect.scss similarity index 56% rename from resources/assets/sass/_vue-multiselect.scss rename to resources/sass/_vue-multiselect.scss index 3ead1d8ad..dec64c89f 100644 --- a/resources/assets/sass/_vue-multiselect.scss +++ b/resources/sass/_vue-multiselect.scss @@ -1,17 +1,21 @@ /* corrections to fit in BS4 */ .multiselect.form-control { - padding: 0; + padding: 0; +} +.multiselect__placeholder { + padding-top: 0; + margin-bottom: 4px; } .multiselect__tags { - border: none; - padding-top: 10px; + border: none; + padding-top: 10px; } .multiselect__content-wrapper { - z-index: 995; + z-index: 995; } .multiselect__option--highlight.multiselect__option--selected { - background: #41b883; - color: #fff; + background: #41b883; + color: #fff; } .multiselect--active { z-index: 995; diff --git a/resources/sass/app.scss b/resources/sass/app.scss new file mode 100644 index 000000000..fdb42904e --- /dev/null +++ b/resources/sass/app.scss @@ -0,0 +1,424 @@ +// Fonts +@import url("https://fonts.googleapis.com/css?family=Cabin|Schoolbell:300,400,600"); + +// Variables +@import "variables"; + +@import "sprites"; + +@import "bootstrap4fixes"; + +// Bootstrap +@import "~bootstrap/scss/bootstrap"; +@import "~vue-multiselect/dist/vue-multiselect.min"; +@import "vue-multiselect"; +@import "v-tooltip"; +@import "loading"; +@import "~flag-icon-css/sass/variables"; +@import "~flag-icon-css/sass/flag-icon-base"; +@include flag-icon(us); +@include flag-icon(fr); +@include flag-icon(de); +@include flag-icon(es); + +body { + background-color: #eeeeee; +} + +h4, +.h4, +h5, +.h5 { + font-weight: bold; +} + +a.anchor { + display: block; + position: relative; + top: -70px; + visibility: hidden; +} + +.nav-tabs-sticky { + position: sticky; + top: 53px; + z-index: 990; +} + +.panel-heading-sticky, +.card-heading-sticky { + position: sticky; + top: 93px; + z-index: 990; +} + +.panel-sticky, +.card-sticky { + position: sticky; + top: 0; + z-index: 990; +} + +.navbar { + padding: 0.1rem 2rem; +} + +.navbar-brand { + padding: 0; +} + +.no-resize { + resize: none; +} + +.btn-secondary { + background-color: #ff0000; + border-color: #ff0000; + border-image: none; + color: #ffffff; +} + +ins.adsbygoogle { + margin-top: 10px; +} + +.btn-secondary:hover { + background-color: #c10b0b; + border-color: #c10b0b; + color: #ffffff; +} + +.btn-outline-secondary { + background-color: transparent; + border-color: #868e96; + border-image: none; + color: #868e96; +} + +.btn-outline-secondary:hover { + background-color: #868e96; + border-color: #868e96; + color: #ffffff; +} + +.btn-wrapper { + display: flex; + justify-content: stretch; + padding: 0 140px; +} + +.btn-cta { + flex: 1 0 0px; +} + +.btn-cta .btn, +.btn-cal .btn { + width: 100%; +} + +.btn-cal { + flex: 1 0 0px; + padding: 4px; +} + +.btn-xl { + width: 33%; +} + +.btn-flex { + align-content: stretch; + align-items: stretch; + display: flex; +} + +.btn-flex .btn:first-child { + flex-grow: 1; + text-align: left; +} + +.btn-file { + overflow: hidden; + position: relative; +} +.btn-file input[type="file"] { + background: white; + cursor: inherit; + display: block; + filter: alpha(opacity=0); + font-size: 100px; + min-height: 100%; + min-width: 100%; + opacity: 0; + outline: none; + position: absolute; + right: 0; + text-align: right; + top: 0; +} + +.card-header { + padding: 0.5rem 1.25rem; +} +.card-title { + margin-top: 0.2rem; + margin-bottom: 0; +} + +.cust-tooltip { + color: #3097d1; + padding-left: 2px; +} + +.options-tooltip { + color: #3097d1; + padding-left: 5px; +} + +.input-group-addon .cust-tooltip { + padding-left: 5px; +} + +.panel-heading-btn h3 { + line-height: normal; + overflow: hidden; + padding-top: 8px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.spoiler { + border: 1px solid #808080; + border-radius: 5px; + margin-bottom: 5px; + margin-top: 5px; +} +.spoiler-toggle { + color: #808080; + cursor: default; + font-size: 10px; + font-weight: bold; + padding: 5px; +} +.spoiler-text { + padding: 5px; +} +.pulse { + animation: pulse 4s infinite; + border-radius: 50%; +} +.pulse:hover { + animation: none; +} +.pb-5 { + padding-bottom: 15px; +} + +.handwritten { + font-family: "Schoolbell", serif; +} +.prose { + font-size: 16px; + font-weight: 600; + background-color: #f8f5de; + background-image: linear-gradient( + to right, + rgba(255, 210, 0, 0.4), + rgba(200, 160, 0, 0.1) 11%, + rgba(0, 0, 0, 0) 35%, + rgba(200, 160, 0, 0.1) 65% + ); + box-shadow: inset 0 0 75px rgba(255, 210, 0, 0.3), + inset 0 0 20px rgba(255, 210, 0, 0.4), inset 0 0 30px rgba(220, 120, 0, 0.8); + color: rgba(0, 0, 0, 0.75); + letter-spacing: 0.05em; + line-height: 1.8; + padding: 25px; +} + +.alternate-color span { + font-weight: bold; + text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, + 1px 1px 0 #000; +} +.alternate-color span:nth-of-type(4n) { + color: #e1f7d5; +} +.alternate-color span:nth-of-type(4n + 1) { + color: #ffbdbd; +} +.alternate-color span:nth-of-type(4n + 2) { + color: #c9c9ff; +} +.alternate-color span:nth-of-type(4n + 3) { + color: #f1cbff; +} + +@-webkit-keyframes pulse { + 0% { + -webkit-box-shadow: 0 0 0 0 rgba(200, 200, 200, 0.4); + } + 70% { + -webkit-box-shadow: 0 0 0 10px rgba(200, 200, 200, 0); + } + 100% { + -webkit-box-shadow: 0 0 0 0 rgba(200, 200, 200, 0); + } +} +@keyframes pulse { + 0% { + -moz-box-shadow: 0 0 0 0 rgba(200, 200, 200, 0.4); + box-shadow: 0 0 0 0 rgba(200, 200, 200, 0.4); + } + 70% { + -moz-box-shadow: 0 0 0 10px rgba(200, 200, 200, 0); + box-shadow: 0 0 0 10px rgba(200, 200, 200, 0); + } + 100% { + -moz-box-shadow: 0 0 0 0 rgba(200, 200, 200, 0); + box-shadow: 0 0 0 0 rgba(200, 200, 200, 0); + } +} + +input[readonly].custom-placed, +input[readonly].custom-drops-placed { + background-color: transparent; + border: 0; + font-size: 1em; +} + +.running-now { + color: red; + font-weight: bold; +} + +.tbody-striped { + > tbody { + > tr { + background-color: $table-bg-accent; + } + > tr:nth-of-type(odd) { + background-color: inherit; + } + } + > tbody:nth-of-type(odd) { + > tr { + background-color: inherit; + } + > tr:nth-of-type(odd) { + background-color: $table-bg-accent; + } + } +} + +.table-secondary { + background-color: #eeeeee; +} + +.table-hover > tbody > tr:hover { + background-color: #d6d8db; +} + +.center { + text-align: center; +} + +.btn-cal1 { + background-color: #ad2d2d; + color: #ffffff; +} + +.btn-cal2 { + background-color: #668cd9; + color: #ffffff; +} + +.btn-cal3 { + background-color: #cf9911; + color: #ffffff; +} + +.btn-cal4 { + background-color: #8cbf40; + color: #ffffff; +} + +.btn-cal5 { + background-color: #737373; + color: #ffffff; + margin: 4px; +} + +.btn-cal1:hover { + background-color: #941414; + color: #ffffff; +} + +.btn-cal2:hover { + background-color: #4d73c0; + color: #ffffff; +} + +.btn-cal3:hover { + background-color: #b68000; + color: #ffffff; +} + +.btn-cal4:hover { + background-color: #73a627; + color: #ffffff; +} + +.btn-cal5:hover { + background-color: #737373; + color: #ffffff; + cursor: auto; +} + +// invert dropdown on right nav items +.ml-auto .dropdown-menu { + left: auto !important; + right: 0px; +} + +.w-10 { + width: 10% !important; +} + +.w-20 { + width: 20% !important; +} + +.w-33 { + width: 33.33% !important; +} + +.w-40 { + width: 40% !important; +} + +.w-60 { + width: 60% !important; +} + +.w-80 { + width: 80% !important; +} + +.led-green { + display: inline-table; + width: 12px; + height: 12px; + background-color: #66ff00; + border-radius: 50%; + box-shadow: #000000 0 -1px 7px 1px, inset #55aa00 0 -1px 9px, + #77dd00 0 2px 12px; +} + +strong { + color: $brand-danger; +} + +#options p { + margin-left: 1.25rem; + margin-bottom: 0.5rem; +} diff --git a/resources/views/about.blade.php b/resources/views/about.blade.php index 8dc18ce39..4b91fb740 100644 --- a/resources/views/about.blade.php +++ b/resources/views/about.blade.php @@ -4,31 +4,31 @@
+ class="btn btn-primary btn-lg" + href="/{{ app()->getLocale() }}/start" + role="button">{{ __('navigation.start_playing') }}
+ class="btn btn-outline-secondary btn-lg" + href="/{{ app()->getLocale() }}/watch" + role="button" + style="margin-left:20px;">{{ __('navigation.start_watching') }}
- @foreach (__('about.content') as $block) -

{!! $block !!}

- @endforeach + @foreach (__('about.content') as $block) +

{!! $block !!}

+ @endforeach
- +
- +
@overwrite diff --git a/resources/views/calendar.blade.php b/resources/views/calendar.blade.php index 779269c0d..5761bd87a 100644 --- a/resources/views/calendar.blade.php +++ b/resources/views/calendar.blade.php @@ -3,41 +3,41 @@ @section('content')

{{ __('navigation.calendar') }}

@overwrite diff --git a/resources/views/contribute.blade.php b/resources/views/contribute.blade.php index 42f5400e8..d92e90c6d 100644 --- a/resources/views/contribute.blade.php +++ b/resources/views/contribute.blade.php @@ -3,52 +3,52 @@ @section('content')

{{ __('contribute.header') }}

-

{!! __('contribute.subheader') !!}

+

{!! __('contribute.subheader') !!}

-
-
-

{{ __('contribute.cards.sprite.header') }}

-
-
- @foreach (__('contribute.cards.sprite.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('contribute.cards.sprite.header') }}

+
+
+ @foreach (__('contribute.cards.sprite.content') as $block) +

{!! $block !!}

+ @endforeach +
+
- + -
-
-

{{ __('contribute.cards.live.header') }}

-
-
- @foreach (__('contribute.cards.live.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('contribute.cards.live.header') }}

+
+
+ @foreach (__('contribute.cards.live.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('contribute.cards.other.header') }}

-
-
- @foreach (__('contribute.cards.other.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('contribute.cards.other.header') }}

+
+
+ @foreach (__('contribute.cards.other.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('contribute.cards.discord.header') }}

-
-
- @foreach (__('contribute.cards.discord.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('contribute.cards.discord.header') }}

+
+
+ @foreach (__('contribute.cards.discord.content') as $block) +

{!! $block !!}

+ @endforeach +
+
@overwrite diff --git a/resources/views/customizer.blade.php b/resources/views/customizer.blade.php index 4c45b9a97..c6e614e3c 100644 --- a/resources/views/customizer.blade.php +++ b/resources/views/customizer.blade.php @@ -2,19 +2,14 @@ @section('content')
- +
@overwrite diff --git a/resources/views/daily.blade.php b/resources/views/daily.blade.php index 37e1f9cc4..fd01123d6 100644 --- a/resources/views/daily.blade.php +++ b/resources/views/daily.blade.php @@ -3,29 +3,22 @@ @section('content')

{{ __('daily.header') }}

- @foreach (__('daily.content') as $block) -

{!! $block !!}

- @endforeach + @foreach (__('daily.content') as $block) +

{!! $block !!}

+ @endforeach
- +
- +
@overwrite - diff --git a/resources/views/entrance_randomizer.blade.php b/resources/views/entrance_randomizer.blade.php deleted file mode 100644 index 12aedb7b4..000000000 --- a/resources/views/entrance_randomizer.blade.php +++ /dev/null @@ -1,18 +0,0 @@ -@extends('layouts.default', ['title' => __('navigation.entrance') . ' - ']) - -@section('content') -
- -
- - -@overwrite diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php index b6b908e6c..d0d18201f 100644 --- a/resources/views/errors/404.blade.php +++ b/resources/views/errors/404.blade.php @@ -2,13 +2,13 @@ @section('content')
-
-

Game not found

-
-
-

We're sorry, the Game you are looking for cannot be located at this time.

-
+
+

Game not found

+
+
+

We're sorry, the Game you are looking for cannot be located at this time.

+
- + @overwrite diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php index f79875194..7331964b9 100644 --- a/resources/views/errors/503.blade.php +++ b/resources/views/errors/503.blade.php @@ -1,58 +1,58 @@ - - Be right back. + + Be right back. - + - - - -
-
- -
Be right back.
-
- -
- @if (App::environment() == 'production' || env('AD_TEST')) - - - @endif - + .title { + font-size: 72px; + margin-bottom: 40px; + } + .logo { + margin: -180px auto; + } + + + +
+
+ +
Be right back.
+
+ +
+ @if (App::environment() == 'production' || env('AD_TEST')) + + + @endif + diff --git a/resources/views/game_enemizer.blade.php b/resources/views/game_enemizer.blade.php deleted file mode 100644 index 4a2d7840d..000000000 --- a/resources/views/game_enemizer.blade.php +++ /dev/null @@ -1,85 +0,0 @@ -@extends('layouts.default', ['title' => __('navigation.game_enemizer') . ' - ']) - -@section('content') -

{{ __('enemizer_options.header') }}

-
-

{{ __('enemizer_options.subheader') }}

- -
-
-

{{ __('enemizer_options.cards.enemy_health.header') }}

-
-
- @foreach (__('enemizer_options.cards.enemy_health.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
- -
-
-

{{ __('enemizer_options.cards.enemy_damage.header') }}

-
-
- @foreach (__('enemizer_options.cards.enemy_damage.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
- - - -
-
-

{{ __('enemizer_options.cards.bosses.header') }}

-
-
- @foreach (__('enemizer_options.cards.bosses.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
- -
-
-

{{ __('enemizer_options.cards.enemy_shuffle.header') }}

-
-
- @foreach (__('enemizer_options.cards.enemy_shuffle.content') as $block) -

{!! $block !!}

- @endforeach -
-
- -
-
-

{{ __('enemizer_options.cards.pot_shuffle.header') }}

-
-
- @foreach (__('enemizer_options.cards.pot_shuffle.content') as $block) -

{!! $block !!}

- @endforeach -
-
- -
-
-

{{ __('enemizer_options.cards.palette_shuffle.header') }}

-
-
- @foreach (__('enemizer_options.cards.palette_shuffle.content') as $block) -

{!! $block !!}

- @endforeach -
-
-
-@overwrite diff --git a/resources/views/game_entrance.blade.php b/resources/views/game_entrance.blade.php deleted file mode 100644 index 408a9df0e..000000000 --- a/resources/views/game_entrance.blade.php +++ /dev/null @@ -1,65 +0,0 @@ -@extends('layouts.default', ['title' => __('navigation.game_entrance') . ' - ']) - -@section('content') -

{{ __('entrance_options.header') }}

-
-

{{ __('entrance_options.subheader') }}

- -
-
-

{{ __('entrance_options.cards.simple.header') }}

-
-
- @foreach (__('entrance_options.cards.simple.content') as $block) -

{!! $block !!}

- @endforeach -
-
- -
-
-

{{ __('entrance_options.cards.restricted.header') }}

-
-
- @foreach (__('entrance_options.cards.restricted.content') as $block) -

{!! $block !!}

- @endforeach -
-
- - - -
-
-

{{ __('entrance_options.cards.full.header') }}

-
-
- @foreach (__('entrance_options.cards.full.content') as $block) -

{!! $block !!}

- @endforeach -
-
- -
-
-

{{ __('entrance_options.cards.crossed.header') }}

-
-
- @foreach (__('entrance_options.cards.crossed.content') as $block) -

{!! $block !!}

- @endforeach -
-
- -
-
-

{{ __('entrance_options.cards.insanity.header') }}

-
-
- @foreach (__('entrance_options.cards.insanity.content') as $block) -

{!! $block !!}

- @endforeach -
-
-
-@overwrite diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php index c874f4dfb..2578e8a3b 100644 --- a/resources/views/layouts/base.blade.php +++ b/resources/views/layouts/base.blade.php @@ -1,47 +1,48 @@ - {{ $title or '' }}ALttP VT Randomizer - - - - - + {{ $title ?? '' }}ALttP VT Randomizer + + + + + + - @yield('window') + @yield('window') - - @if (App::environment() == 'production' || env('AD_TEST')) - - - @endif + new Vue({ + el: '#navbar', + i18n: i18n, + store: cStore, + }); + + @if (App::environment() == 'production' || env('AD_TEST')) + + + @endif diff --git a/resources/views/layouts/default.blade.php b/resources/views/layouts/default.blade.php index 21bc211a4..f32f24360 100644 --- a/resources/views/layouts/default.blade.php +++ b/resources/views/layouts/default.blade.php @@ -1,55 +1,53 @@ @extends('layouts.base') @section('window') - -
-
- @yield('content') -
+ +
+
+ @yield('content') +
@overwrite diff --git a/resources/views/options.blade.php b/resources/views/options.blade.php index f083ec5bb..2cf32aa39 100644 --- a/resources/views/options.blade.php +++ b/resources/views/options.blade.php @@ -3,417 +3,433 @@ @section('content')

{{ __('options.header') }}

-

{!! __('options.subheader') !!}

+

{!! __('options.subheader') !!}

-
-
-

{{ __('options.cards.mode.header') }}

-
-
- @foreach (__('options.cards.mode.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
+
+ +
+

{{ __('randomizer.placement.title') }}

+
+
-
-
-

{{ __('options.cards.weapons.header') }}

-
-
- @foreach (__('options.cards.weapons.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
+ +

{{ __('options.cards.glitches_required.header') }}

+
+ @foreach (__('options.cards.glitches_required.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
- + +

{{ __('options.cards.item_placement.header') }}

+
+ @foreach (__('options.cards.item_placement.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
-
-
-

{{ __('options.cards.logic.header') }}

-
-
- @foreach (__('options.cards.logic.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
+ +

{{ __('options.cards.dungeon_items.header') }}

+
+ @foreach (__('options.cards.dungeon_items.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
-
-
-

{{ __('options.cards.goal.header') }}

-
-
- @foreach (__('options.cards.goal.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
+ +

{{ __('options.cards.accessibility.header') }}

+
+ @foreach (__('options.cards.accessibility.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
-
-
-

{{ __('options.cards.difficulty.header') }}

-
-
- @foreach (__('options.cards.difficulty.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -

{{ __('options.cards.difficulty.comparison.header') }}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{ __('randomizer.difficulty.options.easy') }}{{ __('randomizer.difficulty.options.normal') }}{{ __('randomizer.difficulty.options.hard') }}{{ __('randomizer.difficulty.options.expert') }}{{ __('randomizer.difficulty.options.insane') }}
{{ __('options.cards.difficulty.comparison.maximum_health') }}20201493
{{ __('options.cards.difficulty.comparison.heart_containers') }}1111610
{{ __('options.cards.difficulty.comparison.heart_pieces') }}242420200
{{ __('options.cards.difficulty.comparison.maximum_mail') }}{{ __('options.cards.difficulty.comparison.mail_3') }}{{ __('options.cards.difficulty.comparison.mail_3') }}{{ __('options.cards.difficulty.comparison.mail_2') }}{{ __('options.cards.difficulty.comparison.mail_1') }}{{ __('options.cards.difficulty.comparison.mail_1') }}
{{ __('options.cards.difficulty.comparison.number_in_pool') }}42200
{{ __('options.cards.difficulty.comparison.maximum_sword') }}{{ __('options.cards.difficulty.comparison.sword_4') }}{{ __('options.cards.difficulty.comparison.sword_4') }}{{ __('options.cards.difficulty.comparison.sword_3') }}{{ __('options.cards.difficulty.comparison.sword_2') }}{{ __('options.cards.difficulty.comparison.sword_2') }}
{{ __('options.cards.difficulty.comparison.number_in_pool') }}84444
{{ __('options.cards.difficulty.comparison.maximum_shield') }}{{ __('options.cards.difficulty.comparison.shield_3') }}{{ __('options.cards.difficulty.comparison.shield_3') }}{{ __('options.cards.difficulty.comparison.shield_2') }}{{ __('options.cards.difficulty.comparison.shield_1') }}{{ __('options.cards.difficulty.comparison.none') }}
{{ __('options.cards.difficulty.comparison.number_in_pool') }}63330
{{ __('options.cards.difficulty.comparison.shields_store') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}
{{ __('options.cards.difficulty.comparison.maximum_magic') }}{{ __('options.cards.difficulty.comparison.quarter') }}{{ __('options.cards.difficulty.comparison.half') }}{{ __('options.cards.difficulty.comparison.normal') }}{{ __('options.cards.difficulty.comparison.normal') }}{{ __('options.cards.difficulty.comparison.normal') }}
{{ __('options.cards.difficulty.comparison.number_in_pool') }}21000
{{ __('options.cards.difficulty.comparison.number_silvers') }}211tooltip1tooltip0
{{ __('options.cards.difficulty.comparison.number_silvers_swordless') }}211tooltip1tooltip1tooltip
{{ __('options.cards.difficulty.comparison.number_bottles') }}8tooltip4444
{{ __('options.cards.difficulty.comparison.number_lamps') }}31111
{{ __('options.cards.difficulty.comparison.potion_magic') }}tooltip100%100%50%25%0%
{{ __('options.cards.difficulty.comparison.potion_health') }} - tooltip - 2020710
{{ __('options.cards.difficulty.comparison.bug_net_fairy') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}
{{ __('options.cards.difficulty.comparison.powder_bubble') }}{{ __('options.cards.difficulty.comparison.fairy') }}{{ __('options.cards.difficulty.comparison.fairy') }}{{ __('options.cards.difficulty.comparison.heart') }}{{ __('options.cards.difficulty.comparison.heart') }}{{ __('options.cards.difficulty.comparison.bee') }}
{{ __('options.cards.difficulty.comparison.cape_consumption') }}{{ __('options.cards.difficulty.comparison.normal') }}{{ __('options.cards.difficulty.comparison.normal') }}2x3x4x
{{ __('options.cards.difficulty.comparison.byrna_invincible') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}
{{ __('options.cards.difficulty.comparison.stun_boomerang') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}
{{ __('options.cards.difficulty.comparison.stun_hookshot') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}
{{ __('options.cards.difficulty.comparison.capacity_upgrade') }}77000
{{ __('options.cards.difficulty.comparison.drop_rates') }}100%50%50%25%25%
+
+
-
-
+ -
-
-

{{ __('options.cards.variation.header') }}

-
-
- @foreach (__('options.cards.variation.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) - @if (is_array($block)) -
{{ $block['header'] }}
- @foreach ($block['content'] as $subblock) -

{!! $subblock !!}

- @endforeach - @else -

{!! $block !!}

- @endif - @endforeach - @if (isset($section['ohko_table'])) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{{ __('randomizer.difficulty.title') }}{{ $section['ohko_table']['start_time'] }}{{ $section['ohko_table']['green_clock'] }}{{ $section['ohko_table']['red_clock'] }}
{{ __('randomizer.difficulty.options.easy') }}20 {{ $section['ohko_table']['minutes'] }}300
{{ __('randomizer.difficulty.options.normal') }}10 {{ $section['ohko_table']['minutes'] }}250
{{ __('randomizer.difficulty.options.hard') }}7.5 {{ $section['ohko_table']['minutes'] }}201
{{ __('randomizer.difficulty.options.expert') }}5 {{ $section['ohko_table']['minutes'] }}153
{{ __('randomizer.difficulty.options.insane') }}0 {{ $section['ohko_table']['minutes'] }}105
- @endif - @endforeach -
-
+
+ +
+

{{ __('randomizer.goal.title') }}

+
+
-
-
-

{{ __('options.cards.item_pool') }}

-
-
-
-
-
    -
  • 10x Big Key
  • -
  • 1x Blue Mail
  • -
  • 1x Bombos
  • -
  • 1x Book Of Mudora
  • -
  • 1x Boomerang
  • -
  • 4x Bottle (filled with assorted things)
  • -
  • 1x Bow
  • -
  • 1x Bug Catching Net
  • -
  • 1x Cane Of Byrna
  • -
  • 1x Cane Of Somaria
  • -
  • 11x Compass
  • -
  • 12x Dungeon Map
  • -
  • 1x Ether
  • -
  • 1x Fighters Shield
  • -
  • 1x Fighters Sword
  • -
  • 1x Fire Rod
  • -
  • 1x Fire Shield
  • -
  • 1x Flippers
  • -
  • 1x Flute
  • -
  • 1x Golden Sword
  • -
  • 1x ½ Magic
  • -
  • 1x Hammer
  • -
  • 11x Heart Container
  • -
  • 1x Hookshot
  • -
  • 1x Ice Rod
  • -
  • 28x Small Key
  • -
  • 1x Lamp
  • -
  • 1x Magic Cape
  • -
-
-
-
    -
  • 1x Magic Mirror
  • -
  • 1x Magic Powder
  • -
  • 1x Magical Boomerang
  • -
  • 1x Master Sword
  • -
  • 1x Mirror Shield
  • -
  • 1x Moon Pearl
  • -
  • 1x Mushroom
  • -
  • 1x Pegasus Boots
  • -
  • 24x Piece Of Heart
  • -
  • 1x Power Glove
  • -
  • 1x Quake
  • -
  • 1x Red Mail
  • -
  • 1x Shovel
  • -
  • 1x Silver Arrows Upgrade
  • -
  • 1x Tempered Sword
  • -
  • 1x Titans Mitt
  • -
-
    -
  •  
  • -
-
    -
  • 12x Ten Arrows
  • -
  • 1x Single Arrow
  • -
  • 1x Ten Bombs
  • -
  • 16x Three Bombs
  • -
  • 5x Three Hundred Rupees
  • -
  • 1x One Hundred Rupees
  • -
  • 7x Fifty Rupees
  • -
  • 28x Twenty Rupees
  • -
  • 4x Five Rupees
  • -
  • 2x One Rupee
  • -
-
-
-
-
+

{{ __('options.cards.goal.header') }}

+
+ @foreach (__('options.cards.goal.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+ + +

{{ __('options.cards.tower_open.header') }}

+
+ @foreach (__('options.cards.tower_open.content') as $block) +

{!! $block !!}

+ @endforeach +
+ + +

{{ __('options.cards.ganon_open.header') }}

+
+ @foreach (__('options.cards.ganon_open.content') as $block) +

{!! $block !!}

+ @endforeach +
+ +
+
+ +
+ +
+

{{ __('randomizer.gameplay.title') }}

+
+
+ + +

{{ __('options.cards.world_state.header') }}

+
+ @foreach (__('options.cards.world_state.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) + @if (is_array($block)) +
+
{{ $block['header'] }}
+ @foreach ($block['content'] as $subblock) +

{!! $subblock !!}

+ @endforeach +
+ @else +

{!! $block !!}

+ @endif + @endforeach + @endforeach +
+ + +

{{ __('options.cards.entrance_shuffle.header') }}

+
+ @foreach (__('options.cards.entrance_shuffle.subheader') as $block) +

{!! $block !!}

+ @endforeach +
+ @foreach (__('options.cards.entrance_shuffle.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) + @if (is_array($block)) +
+
{{ $block['header'] }}
+ @foreach ($block['content'] as $subblock) +

{!! $subblock !!}

+ @endforeach +
+ @else +

{!! $block !!}

+ @endif + @endforeach + @endforeach +
+ + +

{{ __('options.cards.bosses.header') }}

+
+ @foreach (__('options.cards.bosses.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+ + +

{{ __('options.cards.enemy_shuffle.header') }}

+
+ @foreach (__('options.cards.enemy_shuffle.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+ + +

{{ __('options.cards.hints.header') }}

+
+ @foreach (__('options.cards.hints.content') as $block) +

{!! $block !!}

+ @endforeach +
+ +
+
+ +
+
+

{{ __('options.cards.difficulty.header') }}

+
+
+ + +

{{ __('options.cards.weapons.header') }}

+
+ @foreach (__('options.cards.weapons.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+ + +

{{ __('options.cards.difficulty.item_pool') }}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{ __('randomizer.difficulty.options.normal') }}{{ __('randomizer.difficulty.options.hard') }}{{ __('randomizer.difficulty.options.expert') }}
{{ __('options.cards.difficulty.comparison.maximum_health') }}20148
{{ __('options.cards.difficulty.comparison.heart_containers') }}1173
{{ __('options.cards.difficulty.comparison.heart_pieces') }}24168
{{ __('options.cards.difficulty.comparison.maximum_mail') }}{{ __('options.cards.difficulty.comparison.mail_3') }}{{ __('options.cards.difficulty.comparison.mail_1') }}{{ __('options.cards.difficulty.comparison.mail_1') }}
{{ __('options.cards.difficulty.comparison.maximum_sword') }}{{ __('options.cards.difficulty.comparison.sword_4') }}{{ __('options.cards.difficulty.comparison.sword_3') }}{{ __('options.cards.difficulty.comparison.sword_2') }}
{{ __('options.cards.difficulty.comparison.maximum_shield') }}{{ __('options.cards.difficulty.comparison.shield_3') }}{{ __('options.cards.difficulty.comparison.shield_2') }}{{ __('options.cards.difficulty.comparison.shield_1') }}
{{ __('options.cards.difficulty.comparison.number_silvers') }}{{ __('options.cards.difficulty.comparison.silver') }}{{ __('options.cards.difficulty.comparison.normal') }}tooltip{{ __('options.cards.difficulty.comparison.normal') }}tooltip
{{ __('options.cards.difficulty.comparison.capacity_upgrade') }}700
+ + +

{{ __('options.cards.difficulty.item_functionality') }}

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{ __('randomizer.difficulty.options.normal') }}{{ __('randomizer.difficulty.options.hard') }}{{ __('randomizer.difficulty.options.expert') }}
{{ __('options.cards.difficulty.comparison.potion_magic') }}tooltip100%50%25%
{{ __('options.cards.difficulty.comparison.potion_health') }} + tooltip + 2074
{{ __('options.cards.difficulty.comparison.bug_net_fairy') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}
{{ __('options.cards.difficulty.comparison.powder_bubble') }}{{ __('options.cards.difficulty.comparison.fairy') }}{{ __('options.cards.difficulty.comparison.heart') }}{{ __('options.cards.difficulty.comparison.heart') }}
{{ __('options.cards.difficulty.comparison.cape_consumption') }}{{ __('options.cards.difficulty.comparison.normal') }}2x2x
{{ __('options.cards.difficulty.comparison.byrna_invincible') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}
{{ __('options.cards.difficulty.comparison.stun_boomerang') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}{{ __('options.cards.difficulty.comparison.no') }}
{{ __('options.cards.difficulty.comparison.stun_hookshot') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.yes') }}{{ __('options.cards.difficulty.comparison.no') }}
+ + +

{{ __('options.cards.enemy_damage.header') }}

+
+ @foreach (__('options.cards.enemy_damage.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+ + +

{{ __('options.cards.enemy_health.header') }}

+
+ @foreach (__('options.cards.enemy_health.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+ +
+
+ +
+ +
+

{{ __('options.cards.post_generation.header') }}

+
+
+ @foreach (__('options.cards.post_generation.cards') as $key => $card) + +

{{ $card['header'] }}

+
+ @foreach ($card['content'] as $block) +

{!! $block !!}

+ @endforeach +
+ @endforeach +
+
+ +
+
+

{{ __('options.cards.item_pool') }}

+
+
+
+
+
    +
  • 10x Big Key
  • +
  • 1x Blue Mail
  • +
  • 1x Bombos
  • +
  • 1x Book Of Mudora
  • +
  • 1x Boomerang
  • +
  • 4x Bottle (filled with assorted things)
  • +
  • 1x Bow
  • +
  • 1x Bug Catching Net
  • +
  • 1x Cane Of Byrna
  • +
  • 1x Cane Of Somaria
  • +
  • 11x Compass
  • +
  • 12x Dungeon Map
  • +
  • 1x Ether
  • +
  • 1x Fighters Shield
  • +
  • 1x Fighters Sword
  • +
  • 1x Fire Rod
  • +
  • 1x Fire Shield
  • +
  • 1x Flippers
  • +
  • 1x Flute
  • +
  • 1x Golden Sword
  • +
  • 1x ½ Magic
  • +
  • 1x Hammer
  • +
  • 11x Heart Container
  • +
  • 1x Hookshot
  • +
  • 1x Ice Rod
  • +
  • 28x Small Key
  • +
  • 1x Lamp
  • +
  • 1x Magic Cape
  • +
+
+
+
    +
  • 1x Magic Mirror
  • +
  • 1x Magic Powder
  • +
  • 1x Magical Boomerang
  • +
  • 1x Master Sword
  • +
  • 1x Mirror Shield
  • +
  • 1x Moon Pearl
  • +
  • 1x Mushroom
  • +
  • 1x Pegasus Boots
  • +
  • 24x Piece Of Heart
  • +
  • 1x Power Glove
  • +
  • 1x Quake
  • +
  • 1x Red Mail
  • +
  • 1x Shovel
  • +
  • 1x Silver Arrows Upgrade
  • +
  • 1x Tempered Sword
  • +
  • 1x Titans Mitt
  • +
+
    +
  •  
  • +
+
    +
  • 12x Ten Arrows
  • +
  • 1x Single Arrow
  • +
  • 1x Ten Bombs
  • +
  • 16x Three Bombs
  • +
  • 5x Three Hundred Rupees
  • +
  • 1x One Hundred Rupees
  • +
  • 7x Fifty Rupees
  • +
  • 28x Twenty Rupees
  • +
  • 4x Five Rupees
  • +
  • 2x One Rupee
  • +
+
+
+
+
@overwrite diff --git a/resources/views/patch_from_hash.blade.php b/resources/views/patch_from_hash.blade.php index 45df15b39..693463e8f 100644 --- a/resources/views/patch_from_hash.blade.php +++ b/resources/views/patch_from_hash.blade.php @@ -1,23 +1,17 @@ -@extends('layouts.default', ['title' => sprintf('%s - %s - %s -', $hash, $spoiler->meta->logic, $seed->rules)]) +@extends('layouts.default', ['title' => sprintf('%s - ', $hash)]) @section('content') - +
- +
@overwrite diff --git a/resources/views/races.blade.php b/resources/views/races.blade.php index 9daf8ae09..1af68314b 100644 --- a/resources/views/races.blade.php +++ b/resources/views/races.blade.php @@ -3,94 +3,45 @@ @section('content')

{{ __('races.header') }}

-
-
-

{{ __('races.cards.races.header') }}

-
-
- @foreach (__('races.cards.races.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
+
+
+

{{ __('races.cards.races.header') }}

+
+
+ @foreach (__('races.cards.races.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+
- + -
-
-

{{ __('races.cards.watch.header') }}

-
-
- @foreach (__('races.cards.watch.content') as $block) -

{!! $block !!}

- @endforeach - - -
-

- -
-
+
+
+

{{ __('races.cards.network.header') }}

+
+
+ @foreach (__('races.cards.network.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('races.cards.network.header') }}

-
-
- @foreach (__('races.cards.network.content') as $block) -

{!! $block !!}

- @endforeach -
-
- -
-
-

{{ __('races.cards.tournament.header') }}

-
-
- @foreach (__('races.cards.tournament.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
+
+
+

{{ __('races.cards.tournament.header') }}

+
+
+ @foreach (__('races.cards.tournament.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+
@overwrite diff --git a/resources/views/randomizer.blade.php b/resources/views/randomizer.blade.php index 95ab17a4a..c6cd4ff47 100644 --- a/resources/views/randomizer.blade.php +++ b/resources/views/randomizer.blade.php @@ -2,17 +2,14 @@ @section('content')
- +
@overwrite diff --git a/resources/views/resources.blade.php b/resources/views/resources.blade.php index 7249fb297..f9a87c963 100644 --- a/resources/views/resources.blade.php +++ b/resources/views/resources.blade.php @@ -3,64 +3,64 @@ @section('content')

{{ __('resources.header') }}

-
-
-

{{ __('resources.cards.discord.header') }}

-
-
- @foreach (__('resources.cards.discord.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('resources.cards.discord.header') }}

+
+
+ @foreach (__('resources.cards.discord.content') as $block) +

{!! $block !!}

+ @endforeach +
+
- + -
-
-

{{ __('resources.cards.learn.header') }}

-
-
- @foreach (__('resources.cards.learn.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('resources.cards.learn.header') }}

+
+
+ @foreach (__('resources.cards.learn.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('resources.cards.external.header') }}

-
-
- @foreach (__('resources.cards.external.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('resources.cards.external.header') }}

+
+
+ @foreach (__('resources.cards.external.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('resources.cards.pitfalls.header') }}

-
-
- @foreach (__('resources.cards.pitfalls.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('resources.cards.pitfalls.header') }}

+
+
+ @foreach (__('resources.cards.pitfalls.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('resources.cards.changes.header') }}

-
-
- @foreach (__('resources.cards.changes.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
+
+
+

{{ __('resources.cards.changes.header') }}

+
+
+ @foreach (__('resources.cards.changes.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+
@overwrite diff --git a/resources/views/sprite_preview.blade.php b/resources/views/sprite_preview.blade.php index 01c2f5c4e..7123121b4 100644 --- a/resources/views/sprite_preview.blade.php +++ b/resources/views/sprite_preview.blade.php @@ -2,17 +2,14 @@ @section('content')
- +
@overwrite diff --git a/resources/views/start.blade.php b/resources/views/start.blade.php index b9994555c..c24c1e6ba 100644 --- a/resources/views/start.blade.php +++ b/resources/views/start.blade.php @@ -3,64 +3,64 @@ @section('content')

{{ __('start.header') }}

-

{{ __('start.subheader') }}

+

{{ __('start.subheader') }}

-
-
-

{{ __('start.cards.discord.header') }}

-
-
- @foreach (__('start.cards.discord.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('start.cards.discord.header') }}

+
+
+ @foreach (__('start.cards.discord.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('start.cards.rom.header') }}

-
-
- @foreach (__('start.cards.rom.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('start.cards.rom.header') }}

+
+
+ @foreach (__('start.cards.rom.content') as $block) +

{!! $block !!}

+ @endforeach +
+
- + -
-
-

{{ __('start.cards.randomize.header') }}

-
-
- @foreach (__('start.cards.randomize.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('start.cards.randomize.header') }}

+
+
+ @foreach (__('start.cards.randomize.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('start.cards.emulator.header') }}

-
-
- @foreach (__('start.cards.emulator.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('start.cards.emulator.header') }}

+
+
+ @foreach (__('start.cards.emulator.content') as $block) +

{!! $block !!}

+ @endforeach +
+
-
-
-

{{ __('start.cards.play.header') }}

-
-
- @foreach (__('start.cards.play.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('start.cards.play.header') }}

+
+
+ @foreach (__('start.cards.play.content') as $block) +

{!! $block !!}

+ @endforeach +
+
@overwrite diff --git a/resources/views/updates.blade.php b/resources/views/updates.blade.php index 61655f242..3aba35e7a 100644 --- a/resources/views/updates.blade.php +++ b/resources/views/updates.blade.php @@ -1,739 +1,779 @@ @extends('layouts.default', ['title' => 'Updates - ']) @section('content') -

v30.5

+ +

v31

-
    -
  • Updated Entrance Randomizer to v0.6.2 (now with more hints).
  • -
  • Added new player options
    - Link sprite options
  • -
+
    +
  • Progressive Bows
  • +
  • Unified interface for Item Randomizer, Entrance Randomizer, and Enemizer
  • +
  • Presets!
  • +
  • Triforce Hunt has a turn in point instead of insta-warp to end
  • +
  • New Item Placement option
  • +
  • New Accessibility option
  • +
  • New Fast Ganon goal
  • +
  • New options Tower entry and Ganon vulnerablity
  • +
  • Entrance shuffle supports standard and inverted
  • +
  • Hints can be toggled in main interface
  • +
  • Removed Uncle Assured weapons option
  • +
  • Added Vanilla and Assure weapons options
  • +
  • Difficulty split into Item Pool and Item Functionality
  • +
  • Palette Shuffle has moved to a post-generation option
  • +
  • Pot Shuffle has been removed (for now)
  • +
  • Removed variations
  • +
  • Retro moved to world state
  • +
  • Keysanity moved to Dungeon Items and now has more options
  • +
  • OWG may require mirror wraps now
  • +
  • Customizer logic flags
  • +
  • Customizer starting eq added pendants and crystals
  • +
  • Faster fairies
  • +
  • Fix for bunny pallet when mapping
  • +
  • Fix for losing glove colors
  • +
  • Fix for link's pallet affecting NPCs
  • +
  • MSU-1 Expanded track list
  • +
  • SPC fallback for MSU-1 (NoBGM option is no longer required for MSU-1)
  • +
  • Music logic is fixed in inverted mode
  • +
  • Myramong's wallmaster fix
  • +
  • Added new player options
    + Link sprite options
  • +
- + + + +

v30.5

+
+
    +
  • Updated Entrance Randomizer to v0.6.2 (now with more hints).
  • +
  • Added new player options
    + Link sprite options
  • +
+

v30.4

-
    -
  • Fixed bottle with random in customizer
  • -
  • Fixed key-sanity menu in customizer
  • -
  • Fixed generic key on uncle
  • -
  • Fixed missing 3rd skull woods key
  • -
  • Fixed tablets not having progression due to swords
  • -
  • Fixed junk fill in no logic
  • -
  • Fixed sewers key in inverted
  • -
  • Fixed buying shields in hard+
  • -
  • Updated replacement to be green 20 rupees
  • -
  • Fixed witch text when you have mushroom and talk to her
  • -
  • Fixed hard+ pieces of heart missing
  • -
  • Fixed customizer <3 starting hearts by not allowing < 3 starting hearts
  • -
  • Fixed spelling of Knockout
  • -
  • Added under water to zora and catfish hints
  • -
  • Removed triforce hunt difficulty options description
  • -
  • Fixed Skull Woods Customizer extra key
  • -
+
    +
  • Fixed bottle with random in customizer
  • +
  • Fixed key-sanity menu in customizer
  • +
  • Fixed generic key on uncle
  • +
  • Fixed missing 3rd skull woods key
  • +
  • Fixed tablets not having progression due to swords
  • +
  • Fixed junk fill in no logic
  • +
  • Fixed sewers key in inverted
  • +
  • Fixed buying shields in hard+
  • +
  • Updated replacement to be green 20 rupees
  • +
  • Fixed witch text when you have mushroom and talk to her
  • +
  • Fixed hard+ pieces of heart missing
  • +
  • Fixed customizer <3 starting hearts by not allowing < 3 starting hearts
  • +
  • Fixed spelling of Knockout
  • +
  • Added under water to zora and catfish hints
  • +
  • Removed triforce hunt difficulty options description
  • +
  • Fixed Skull Woods Customizer extra key
  • +

v30.3

-
    -
  • Hints:
      -
    • Fixed a bug where old V29 general hints were sometimes coming through in V30
    • -
    • Fake hints now have a :LinkFace: included to more easily identify them
    • -
  • -
  • Added Race ROM support to Customizer and split generated Customizers to their own tab
  • -
  • Added warning to OHKO/Enemizer that it may be impossible with unlucky enemy placements
  • -
  • In inverted the NPC “thing” in Dark Chapel now instafills your health without any text (but still costs you 20 rupees!)
  • -
  • Fixed a bug where the Blacksmith would give theitem even if you didn’t have 10 rupees!
      -
    • A text box has been added to tell you if you have insufficient rupees
    • -
  • -
  • Fixed a bug in Inverted where some enemies in Agahnim’s Tower and Old Man Cave had DW properties
  • -
  • Added a “loading animation” when ROMS are being generated so people know things are happening!
  • -
  • Fixed a bug where Crystals sometimes wouldn’t drop in boss rooms in extremely rare situations
  • -
  • Updated Pedestal/Tablets texts to reference generic keys in Retro and not specific keys
  • -
  • Updated ER permalinks to include Quick Swap
  • -
  • Bomb/Arrow Capacity Upgrades:
      -
    • Hard: now only sells two +5 upgrades and one +10 upgrade at an increased cost of 200 rupees each
    • -
    • Expert/Insane: removed all capacity upgrades
    • -
  • -
  • Updated Old Man so that he still appears if the Purple Chest has been moved but not turned into the Desert Thief
  • -
  • Added a sprite page to the website detailing more info and crediting the authors
  • -
+
    +
  • Hints:
      +
    • Fixed a bug where old V29 general hints were sometimes coming through in V30
    • +
    • Fake hints now have a :LinkFace: included to more easily identify them
    • +
  • +
  • Added Race ROM support to Customizer and split generated Customizers to their own tab
  • +
  • Added warning to OHKO/Enemizer that it may be impossible with unlucky enemy placements
  • +
  • In inverted the NPC “thing” in Dark Chapel now instafills your health without any text (but still costs you 20 rupees!)
  • +
  • Fixed a bug where the Blacksmith would give theitem even if you didn’t have 10 rupees!
      +
    • A text box has been added to tell you if you have insufficient rupees
    • +
  • +
  • Fixed a bug in Inverted where some enemies in Agahnim’s Tower and Old Man Cave had DW properties
  • +
  • Added a “loading animation” when ROMS are being generated so people know things are happening!
  • +
  • Fixed a bug where Crystals sometimes wouldn’t drop in boss rooms in extremely rare situations
  • +
  • Updated Pedestal/Tablets texts to reference generic keys in Retro and not specific keys
  • +
  • Updated ER permalinks to include Quick Swap
  • +
  • Bomb/Arrow Capacity Upgrades:
      +
    • Hard: now only sells two +5 upgrades and one +10 upgrade at an increased cost of 200 rupees each
    • +
    • Expert/Insane: removed all capacity upgrades
    • +
  • +
  • Updated Old Man so that he still appears if the Purple Chest has been moved but not turned into the Desert Thief
  • +
  • Added a sprite page to the website detailing more info and crediting the authors
  • +

v30.2

-
    -
  • Fixed a bug where ROM corruptions were happening in Enemizer/Inverted
  • -
  • Fixed a bug where exiting to random places on the Overworld were happening in Inverted
  • -
  • Fixed a bug with Gold Sword showing on the title/credits tracker when Swordless
  • -
  • Removed bomb and arrow capacity upgrade references on the website
  • -
  • Removed hammer only logic for Helmasaur (it’s now just ‘Sword or Bow’)
  • -
  • Updated Enemizer label “Bosses” to “Boss Shuffle” for more clarity
  • -
  • Reordered Variations: Keysanity, Retro, Timed Race, Timed OHKO, OHKO
  • -
  • Key-sanity has been relabelled to Keysanity
  • -
  • Removed the guaranteed small key in pinball room of Skull Woods in No Logic
  • -
  • Re-enabled vanilla “fake world” behaviour in all Glitched logics
  • -
  • Fixed a bug where Triforce Pieces were not working properly in Customizer
  • -
  • Arrow capacity upgrades have been removed from Pond of Happiness in Retro
  • -
  • Updated hints for keys in Retro to read “a generic key” instead of the specific key names
  • -
  • Added the missing “Enemy Shuffle” to Entrance Randomizer
  • -
  • Updated all fake hints to be in green text to be clearer that they’re not actual hints
  • -
  • Updated Sahasrahla’s item location to “is held by the Kakariko village elder” instead of “held by a sage” to be clearer
  • -
  • Big Keys are removed from hints in all modes except Keysanity (except for when they’re in a “worst location”)
  • -
  • FIxed a bug where the second copy of Silver Arrows were reverting to Wooden Arrows in Retro/Easy
  • -
  • Updated logic for shops access in Inverted to prevent softlocks (!)
  • -
  • Updated hints for NPC locations to read “held by someone friendly” to be clearer
  • -
  • Reverted Ice Palace logic back to V29 due a keylock which was identified
  • -
+
    +
  • Fixed a bug where ROM corruptions were happening in Enemizer/Inverted
  • +
  • Fixed a bug where exiting to random places on the Overworld were happening in Inverted
  • +
  • Fixed a bug with Gold Sword showing on the title/credits tracker when Swordless
  • +
  • Removed bomb and arrow capacity upgrade references on the website
  • +
  • Removed hammer only logic for Helmasaur (it’s now just ‘Sword or Bow’)
  • +
  • Updated Enemizer label “Bosses” to “Boss Shuffle” for more clarity
  • +
  • Reordered Variations: Keysanity, Retro, Timed Race, Timed OHKO, OHKO
  • +
  • Key-sanity has been relabelled to Keysanity
  • +
  • Removed the guaranteed small key in pinball room of Skull Woods in No Logic
  • +
  • Re-enabled vanilla “fake world” behaviour in all Glitched logics
  • +
  • Fixed a bug where Triforce Pieces were not working properly in Customizer
  • +
  • Arrow capacity upgrades have been removed from Pond of Happiness in Retro
  • +
  • Updated hints for keys in Retro to read “a generic key” instead of the specific key names
  • +
  • Added the missing “Enemy Shuffle” to Entrance Randomizer
  • +
  • Updated all fake hints to be in green text to be clearer that they’re not actual hints
  • +
  • Updated Sahasrahla’s item location to “is held by the Kakariko village elder” instead of “held by a sage” to be clearer
  • +
  • Big Keys are removed from hints in all modes except Keysanity (except for when they’re in a “worst location”)
  • +
  • FIxed a bug where the second copy of Silver Arrows were reverting to Wooden Arrows in Retro/Easy
  • +
  • Updated logic for shops access in Inverted to prevent softlocks (!)
  • +
  • Updated hints for NPC locations to read “held by someone friendly” to be clearer
  • +
  • Reverted Ice Palace logic back to V29 due a keylock which was identified
  • +

v30.1

-
    -
  • Added Standard State/Enemizer initial compatibility
  • -
  • Added Boots as initial equipment to No Logic
  • -
  • Removed generic keys from Customizer
  • -
  • Fixed incorrect text when reading Pedestal Tablet
  • -
  • Updated Enemizer labels:
      -
    • Boss Shuffle: Off, Simple, Full, Chaos
    • -
    • Enemy HP: Default, Easy, Normal, Hard, Brick Wall
    • -
    • Enemy Damage: Default, Shuffled, Chaos
    • -
    -
  • -
  • Hints:
      -
    • Removed Big Keys from non-keysanity hints
    • -
    • Added Progressive Gloves to “unique items” list
    • -
    • Updated Swords to be called “something sharp”
    • -
    • Updated Purple Chest to “in a chest requiring a specialist to unlock”
    • -
    • Lumberjack location no longer has incorrect “requires bombs” instead of “requires boots”
    • -
    • Swamp map chest no longer has incorrect “requires hammer”
    • -
    • The following have been added to “is in plain sight”
        -
      • Spectacle Rock Cave
      • -
      • Spectacle Rock HP
      • -
      • Floating Island
      • -
      • Desert Torch
      • -
      • Ganon’s Tower Torch
      • -
      • Hera Basement Cage
      • -
      -
    • -
    • Desert Torch and Ganon’s Tower Torch now have “requires boots”
    • -
    • Ganon’s Tower Tile Room now has “requires Cane of Somaria”
    • -
    • Kakariko Well Bomb Wall Chest now has “requires bombs”
    • -
    • Sahasrahla’s back 3 chests no longer incorrectly has “requires bombs”
    • -
    • Back of Escape 3 chests no longer incorrectly has “requires bombs”
    • -
    • Most Turtle Rock locations now correctly have “requires Cane of Somaria”
    • -
    • Added Swamp Palace Flooded Room Chests to “are underwater”
    • -
    -
  • -
+
    +
  • Added Standard State/Enemizer initial compatibility
  • +
  • Added Boots as initial equipment to No Logic
  • +
  • Removed generic keys from Customizer
  • +
  • Fixed incorrect text when reading Pedestal Tablet
  • +
  • Updated Enemizer labels:
      +
    • Boss Shuffle: Off, Simple, Full, Chaos
    • +
    • Enemy HP: Default, Easy, Normal, Hard, Brick Wall
    • +
    • Enemy Damage: Default, Shuffled, Chaos
    • +
    +
  • +
  • Hints:
      +
    • Removed Big Keys from non-keysanity hints
    • +
    • Added Progressive Gloves to “unique items” list
    • +
    • Updated Swords to be called “something sharp”
    • +
    • Updated Purple Chest to “in a chest requiring a specialist to unlock”
    • +
    • Lumberjack location no longer has incorrect “requires bombs” instead of “requires boots”
    • +
    • Swamp map chest no longer has incorrect “requires hammer”
    • +
    • The following have been added to “is in plain sight”
        +
      • Spectacle Rock Cave
      • +
      • Spectacle Rock HP
      • +
      • Floating Island
      • +
      • Desert Torch
      • +
      • Ganon’s Tower Torch
      • +
      • Hera Basement Cage
      • +
      +
    • +
    • Desert Torch and Ganon’s Tower Torch now have “requires boots”
    • +
    • Ganon’s Tower Tile Room now has “requires Cane of Somaria”
    • +
    • Kakariko Well Bomb Wall Chest now has “requires bombs”
    • +
    • Sahasrahla’s back 3 chests no longer incorrectly has “requires bombs”
    • +
    • Back of Escape 3 chests no longer incorrectly has “requires bombs”
    • +
    • Most Turtle Rock locations now correctly have “requires Cane of Somaria”
    • +
    • Added Swamp Palace Flooded Room Chests to “are underwater”
    • +
    +
  • +

v30

-
    -
  • Front end rewrite into Vue framework... you have no idea how much went into this
  • -
  • Site translations! De rien! Bitte! ¡De nada!
  • -
  • Fixed a bug where swords weren’t tracked correctly in the stats in Retro
  • -
  • Fixed a bug where the freestanding item in Hera did not increment the Compass item tracker (Easy/Keysanity)
  • -
  • Fixed the keysanity game crashes that happened frequently in Palace of Darkness in Keysanity
  • -
  • Fixed the bug in Zora’s Domain where the ledge item would have graphical issues
  • -
  • Fixed the bug where the 2nd copy of Silver Arrows in Easy didn’t revert back to 10 arrows
  • -
  • Fixed Uncle accidentally giving 300 rupees along with the Bow in non-retro
  • -
  • Fixed a bug where maps/compasses didn’t track correctly in Easy/Keysanity if bosses have a progressive sword
  • -
  • Uncle no longer gives ammo refills unless you’re playing Standard/Randomized or Standard/Swordless
  • -
  • Uncle now has an equal chance to give Swords in Standard/Randomized
  • -
  • Disabled stored weak/strong EG when exiting Palace of Darkness (No Glitches logic only)
  • -
  • Zora will tell you if if you don’t have enough rupees
  • -
  • Easy difficulty starts with 6 hearts and has 3 extra containers in the pool which revert to rupees once you have 20
  • -
  • Added logic in Retro to account for the progressive sword in the take-any cave, and keys and arrows
  • -
  • Added Enemizer
  • -
  • Hard+ mode no longer has Fairies or Full magic’s available in the prize packs
  • -
  • The Lake Hylia Great fairy is back from vacation and now sells her upgrades like any shop
  • -
  • Relatedly, the capacity upgrades have been removed from the item pool
  • -
  • Added Inverted mode!
  • -
  • HINTS! go check your telepathic tiles for sometimes helpful hints
  • -
  • There is the only one save file
  • -
  • There is a tracker on file select and end screens now
  • -
  • You now get full refills on purchased upgrades
  • -
  • Customizer got prize pack editing
  • -
  • Great fairy bottle refills are completely automated and only have 1 text box now, so faster fills
  • -
  • Added new player options
    - Link sprite options
  • -
-
-
View updates
-
-
- -
-
-
+
    +
  • Front end rewrite into Vue framework... you have no idea how much went into this
  • +
  • Site translations! De rien! Bitte! ¡De nada!
  • +
  • Fixed a bug where swords weren’t tracked correctly in the stats in Retro
  • +
  • Fixed a bug where the freestanding item in Hera did not increment the Compass item tracker (Easy/Keysanity)
  • +
  • Fixed the keysanity game crashes that happened frequently in Palace of Darkness in Keysanity
  • +
  • Fixed the bug in Zora’s Domain where the ledge item would have graphical issues
  • +
  • Fixed the bug where the 2nd copy of Silver Arrows in Easy didn’t revert back to 10 arrows
  • +
  • Fixed Uncle accidentally giving 300 rupees along with the Bow in non-retro
  • +
  • Fixed a bug where maps/compasses didn’t track correctly in Easy/Keysanity if bosses have a progressive sword
  • +
  • Uncle no longer gives ammo refills unless you’re playing Standard/Randomized or Standard/Swordless
  • +
  • Uncle now has an equal chance to give Swords in Standard/Randomized
  • +
  • Disabled stored weak/strong EG when exiting Palace of Darkness (No Glitches logic only)
  • +
  • Zora will tell you if if you don’t have enough rupees
  • +
  • Easy difficulty starts with 6 hearts and has 3 extra containers in the pool which revert to rupees once you have 20
  • +
  • Added logic in Retro to account for the progressive sword in the take-any cave, and keys and arrows
  • +
  • Added Enemizer
  • +
  • Hard+ mode no longer has Fairies or Full magic’s available in the prize packs
  • +
  • The Lake Hylia Great fairy is back from vacation and now sells her upgrades like any shop
  • +
  • Relatedly, the capacity upgrades have been removed from the item pool
  • +
  • Added Inverted mode!
  • +
  • HINTS! go check your telepathic tiles for sometimes helpful hints
  • +
  • There is the only one save file
  • +
  • There is a tracker on file select and end screens now
  • +
  • You now get full refills on purchased upgrades
  • +
  • Customizer got prize pack editing
  • +
  • Great fairy bottle refills are completely automated and only have 1 text box now, so faster fills
  • +
  • Added new player options
    + Link sprite options
  • +
+
+
View updates
+
+
+ +
+
+
- +

VT8.29

-
    -
  • Easy mode now gets 2 chances at silver arrow upgrade
  • -
  • Triforce hunt lessens the chance of finding triforce pieces in GT
  • -
  • Removed the GT Junk pre-fill for all glitched modes
  • -
  • Warning message on generation page when you select anything other than No Glitches logic
  • -
  • Small keys in spoiler for key-sanity
  • -
  • Maps/Compasses logically required for completion of dungeon in keysanity
  • -
  • Mirror warp sound is back in background music disable
  • -
  • Better placement of maps/compassess in dungeons
  • -
  • Byrna no longer protects you in hard/expert/insanity, but also uses normal amounts of magic
  • -
  • Customizer:
      -
    • Added "Test Generation" button, so you don't bloat the DB when just testing ideas
    • -
    • Removed some unuseful items
    • -
    • Fixes for better crystal/pendant placement (less broken generations)
    • -
    • Fairy bottle fix
    • -
    • Item listing cleanup and normalizing
    • -
    • Bottles can be set in starting equipment
    • -
    • Name listed in meta section
    • -
    • Item list header should be sticky
    • -
    • Remembers where you were
    • -
    • Save/Restore settings!
    • -
    • Names matter (well, more than they used to)
    • -
    • Add notes to your custom games
    • -
    • Set the hard mode adjustments (e.g. bottle refill)
    • -
    • You can allow dark room navigation
    • -
    • Pendants/Crystals can not be set for more than one dungeon
    • -
    • Pendants/Crystals should be more helpful when selecting them
    • -
    • You can set Link's starting health
    • -
  • -
  • Key-sanity logic fixes
  • -
  • Sahasrahla and Bomb Shop dude will mark your map after you talk to them
  • -
  • Stored water walking glitch is back
  • -
  • Triforce Hunt is now always 20/30 for all difficulties
  • -
  • All Lamps in Easy are before dark rooms
  • -
  • Extra Lamps in Easy are really rupees now
  • -
  • Flute time in credits fixed
  • -
  • Better boss logic for future fun
  • -
  • Added quick swap functionality
  • -
  • If you use a headered rom, the site will try to strip that header out before use (thanks Myramong)
  • -
  • Added new player options
    - Link sprite options
  • -
-
-
View updates
-
-
- -
-
-
+
    +
  • Easy mode now gets 2 chances at silver arrow upgrade
  • +
  • Triforce hunt lessens the chance of finding triforce pieces in GT
  • +
  • Removed the GT Junk pre-fill for all glitched modes
  • +
  • Warning message on generation page when you select anything other than No Glitches logic
  • +
  • Small keys in spoiler for key-sanity
  • +
  • Maps/Compasses logically required for completion of dungeon in keysanity
  • +
  • Mirror warp sound is back in background music disable
  • +
  • Better placement of maps/compassess in dungeons
  • +
  • Byrna no longer protects you in hard/expert/insanity, but also uses normal amounts of magic
  • +
  • Customizer:
      +
    • Added "Test Generation" button, so you don't bloat the DB when just testing ideas
    • +
    • Removed some unuseful items
    • +
    • Fixes for better crystal/pendant placement (less broken generations)
    • +
    • Fairy bottle fix
    • +
    • Item listing cleanup and normalizing
    • +
    • Bottles can be set in starting equipment
    • +
    • Name listed in meta section
    • +
    • Item list header should be sticky
    • +
    • Remembers where you were
    • +
    • Save/Restore settings!
    • +
    • Names matter (well, more than they used to)
    • +
    • Add notes to your custom games
    • +
    • Set the hard mode adjustments (e.g. bottle refill)
    • +
    • You can allow dark room navigation
    • +
    • Pendants/Crystals can not be set for more than one dungeon
    • +
    • Pendants/Crystals should be more helpful when selecting them
    • +
    • You can set Link's starting health
    • +
  • +
  • Key-sanity logic fixes
  • +
  • Sahasrahla and Bomb Shop dude will mark your map after you talk to them
  • +
  • Stored water walking glitch is back
  • +
  • Triforce Hunt is now always 20/30 for all difficulties
  • +
  • All Lamps in Easy are before dark rooms
  • +
  • Extra Lamps in Easy are really rupees now
  • +
  • Flute time in credits fixed
  • +
  • Better boss logic for future fun
  • +
  • Added quick swap functionality
  • +
  • If you use a headered rom, the site will try to strip that header out before use (thanks Myramong)
  • +
  • Added new player options
    + Link sprite options
  • +
+
+
View updates
+
+
+ +
+
+

VT8.28

-
    -
  • Daily Challenges
  • -
  • Tweaked the Bees a little
  • -
  • Glitched modes start Link with Boots
  • -
  • You can always S&Q from Boss room after collecting the boss item
  • -
  • Swordless mode now allows the use of Bombos to get through Ice Palace
  • -
  • Single chests locked behind key doors can contain the keys needed to get to them (1-1 logic)
  • -
  • Fast Menu is now a select for what speed you want
  • -
  • Update to use new zspr format for Sprites
  • -
  • Credits updated
  • -
  • Updated Entrance Randomizer to v0.5.2.1 (has many more options, thanks KevinCathcart)
  • -
  • Some Grammar fixes (thanks fatmanspanda)
  • -
  • Ganon's Tower Big Key logic fix (thanks pancelor)
  • -
  • Rom checksum fix (thanks qwertymodo)
  • -
  • Added API endpoints to allow integrations with sprites/settings (thanks roxas232)
  • -
  • Redesign of the site to be easier to locate information and look nicer (thanks walking_eye)
  • -
  • Customizer fixes based on feedback
      -
    • Bottles work much better
    • -
    • Set starting equipment for Link
    • -
    • Loosened some unnessary logic restrictions
    • -
    • Better error messages when generation fails
    • -
  • -
  • Added new player options
    - Link sprite options
  • -
+
    +
  • Daily Challenges
  • +
  • Tweaked the Bees a little
  • +
  • Glitched modes start Link with Boots
  • +
  • You can always S&Q from Boss room after collecting the boss item
  • +
  • Swordless mode now allows the use of Bombos to get through Ice Palace
  • +
  • Single chests locked behind key doors can contain the keys needed to get to them (1-1 logic)
  • +
  • Fast Menu is now a select for what speed you want
  • +
  • Update to use new zspr format for Sprites
  • +
  • Credits updated
  • +
  • Updated Entrance Randomizer to v0.5.2.1 (has many more options, thanks KevinCathcart)
  • +
  • Some Grammar fixes (thanks fatmanspanda)
  • +
  • Ganon's Tower Big Key logic fix (thanks pancelor)
  • +
  • Rom checksum fix (thanks qwertymodo)
  • +
  • Added API endpoints to allow integrations with sprites/settings (thanks roxas232)
  • +
  • Redesign of the site to be easier to locate information and look nicer (thanks walking_eye)
  • +
  • Customizer fixes based on feedback
      +
    • Bottles work much better
    • +
    • Set starting equipment for Link
    • +
    • Loosened some unnessary logic restrictions
    • +
    • Better error messages when generation fails
    • +
  • +
  • Added new player options
    + Link sprite options
  • +

VT8.27

-
    -
  • Easy difficulty will always have dungeon counts in HUD enabled
  • -
  • Added + to golden bee bottle in menu
  • -
  • Added letter to signify bottle contents for potions in menu
  • -
  • Added "fast menu" under Rom options, not available in Race Roms
  • -
  • Hard/Expert/Insane has default magic usage for Blind/Ice Palace spike room/Turtle Rock laser bridge
  • -
  • Added key-sanity
  • -
  • Updated ending sequence to allow better tag lines
  • -
  • Corrected Bow placement issue in Palace of Darkness
  • -
  • Added insane difficulty
  • -
  • Added Ganon shuffle to ER Madness and Insanity modes
  • -
  • Removed standard mode from ER
  • -
  • Cleaned up the spoiler section of the site to assist in finding things
  • -
  • Complete overhaul of the custom section, see the new customizer
  • -
  • Added many new player options
    - Link sprite options
  • -
-
-
View updates
-
-
- -
-
-
+
    +
  • Easy difficulty will always have dungeon counts in HUD enabled
  • +
  • Added + to golden bee bottle in menu
  • +
  • Added letter to signify bottle contents for potions in menu
  • +
  • Added "fast menu" under Rom options, not available in Race Roms
  • +
  • Hard/Expert/Insane has default magic usage for Blind/Ice Palace spike room/Turtle Rock laser bridge
  • +
  • Added key-sanity
  • +
  • Updated ending sequence to allow better tag lines
  • +
  • Corrected Bow placement issue in Palace of Darkness
  • +
  • Added insane difficulty
  • +
  • Added Ganon shuffle to ER Madness and Insanity modes
  • +
  • Removed standard mode from ER
  • +
  • Cleaned up the spoiler section of the site to assist in finding things
  • +
  • Complete overhaul of the custom section, see the new customizer
  • +
  • Added many new player options
    + Link sprite options
  • +
+
+
View updates
+
+
+ +
+
+

VT8.26.2

-
    -
  • Turtle Rock small key fix
  • -
  • Skull Woods small key fix
  • -
  • Added a few new player options
    - Link sprite options
  • -
+
    +
  • Turtle Rock small key fix
  • +
  • Skull Woods small key fix
  • +
  • Added a few new player options
    + Link sprite options
  • +

VT8.26

-
    -
  • updated timed-OHKO for different difficulties
  • -
  • Boots are no longer guaranteed in Sanctuary for Major Glitches
  • -
  • Hammer can now activate tablets in swordless
  • -
  • Numerous rom related bugs fixed
  • -
  • Added some descriptions to the ER shuffle modes from docs
  • -
  • Waterfall fairy no longer upgrades shield/boomerang
  • -
  • Added Triforce Hunt goal/variation
  • -
  • Bug Net added back to all difficulties (hard/expert cannot catch fairies)
  • -
  • Cape and Byrna use normal magic in all difficulties in Spike cave and spike room in Misery Mire
  • -
  • Spike cave does normal damage in all difficulties
  • -
  • Added easy difficulty
  • -
  • Split difficulties into difficulty and variation
  • -
  • ¼ magic is no longer in normal/hard/expert
  • -
  • Turtle Rock laser bridge requires Cape or Cane of Byrna or Mirror Shield
  • -
  • Byrna (Spike) Cave and Misery Mire spike room now requires Cape or Cane of Byrna
  • -
  • Logic update for keys
  • -
  • Tuning to fill algorithm
  • -
  • Entrance Randomizer integration (thanks LLCoolDave)
  • -
  • Two new chests have been added to Waterfall fairy
  • -
  • Added many new player options (and updated a few)
    - Link sprite options
  • -
-
-
View updates
-
-
- -
-
-
+
    +
  • updated timed-OHKO for different difficulties
  • +
  • Boots are no longer guaranteed in Sanctuary for Major Glitches
  • +
  • Hammer can now activate tablets in swordless
  • +
  • Numerous rom related bugs fixed
  • +
  • Added some descriptions to the ER shuffle modes from docs
  • +
  • Waterfall fairy no longer upgrades shield/boomerang
  • +
  • Added Triforce Hunt goal/variation
  • +
  • Bug Net added back to all difficulties (hard/expert cannot catch fairies)
  • +
  • Cape and Byrna use normal magic in all difficulties in Spike cave and spike room in Misery Mire
  • +
  • Spike cave does normal damage in all difficulties
  • +
  • Added easy difficulty
  • +
  • Split difficulties into difficulty and variation
  • +
  • ¼ magic is no longer in normal/hard/expert
  • +
  • Turtle Rock laser bridge requires Cape or Cane of Byrna or Mirror Shield
  • +
  • Byrna (Spike) Cave and Misery Mire spike room now requires Cape or Cane of Byrna
  • +
  • Logic update for keys
  • +
  • Tuning to fill algorithm
  • +
  • Entrance Randomizer integration (thanks LLCoolDave)
  • +
  • Two new chests have been added to Waterfall fairy
  • +
  • Added many new player options (and updated a few)
    + Link sprite options
  • +
+
+
View updates
+
+
+ +
+
+

VT8.25

-
    -
  • Fake Flippers death safey has been readded
  • -
  • Green Pendant has an asterisk in the map to help with low visual acuity
  • -
  • Digging game plays sound when prize is dug up
  • -
  • Fixed save and quit/continue inconsistencies with Ganon's Boss room
  • -
  • Fixed Cane of Byrna OHKO bug
  • -
  • Spoilers on site should be easier to navigate
  • -
  • Unique hash on player select screen is properly named "hash"
  • -
  • Non-killable Ganon is only not killable in 4th phase
  • -
  • Ganon is more helpful with his dialog when you can't kill him
  • -
  • Using book on a tablet when you don't have an upgraded sword will give you a hint like the Pedestal
  • -
  • Added ability to mute background music
  • -
  • Added Overworld Glitches Logic
  • -
  • Removed Minor Glitches (SpeedRunner) Logic
  • -
  • Uncle's boots hint removed
  • -
  • Overworld bonk locations are no longer randomized
  • -
  • Special chest under Ganon removed in all modes
  • -
  • Added search of spoilers to quickly find items
  • -
  • Skull Woods spike trap room chest set back to Key all the time
  • -
  • New Fill algorithm that maximizes item randomization
  • -
  • Added many new player options
    - Link sprite options
  • -
-
-
View updates
-
-
- -
-
-
+
    +
  • Fake Flippers death safey has been readded
  • +
  • Green Pendant has an asterisk in the map to help with low visual acuity
  • +
  • Digging game plays sound when prize is dug up
  • +
  • Fixed save and quit/continue inconsistencies with Ganon's Boss room
  • +
  • Fixed Cane of Byrna OHKO bug
  • +
  • Spoilers on site should be easier to navigate
  • +
  • Unique hash on player select screen is properly named "hash"
  • +
  • Non-killable Ganon is only not killable in 4th phase
  • +
  • Ganon is more helpful with his dialog when you can't kill him
  • +
  • Using book on a tablet when you don't have an upgraded sword will give you a hint like the Pedestal
  • +
  • Added ability to mute background music
  • +
  • Added Overworld Glitches Logic
  • +
  • Removed Minor Glitches (SpeedRunner) Logic
  • +
  • Uncle's boots hint removed
  • +
  • Overworld bonk locations are no longer randomized
  • +
  • Special chest under Ganon removed in all modes
  • +
  • Added search of spoilers to quickly find items
  • +
  • Skull Woods spike trap room chest set back to Key all the time
  • +
  • New Fill algorithm that maximizes item randomization
  • +
  • Added many new player options
    + Link sprite options
  • +
+
+
View updates
+
+
+ +
+
+

VT8.24

-
    -
  • Sword Upgrades are dealt with differently by the fill algorithm to be distributed more evenly over the game world.
  • -
  • New Full Distribution here
  • -
  • Crystals 5 and 6 are now colored red in the menu (once collected) to avoid confusion over which crystal is which.
  • -
  • Fixed the bug where Purple Chest was removed when you s+q to Sanctuary
  • -
  • Fixed the bug where swords weren’t really removed in Swordless
  • -
  • Fixed the bug where Link sometimes turned into a black bunny…
  • -
  • Fixed the bug where you dug up vultures
  • -
+
    +
  • Sword Upgrades are dealt with differently by the fill algorithm to be distributed more evenly over the game world.
  • +
  • New Full Distribution here
  • +
  • Crystals 5 and 6 are now colored red in the menu (once collected) to avoid confusion over which crystal is which.
  • +
  • Fixed the bug where Purple Chest was removed when you s+q to Sanctuary
  • +
  • Fixed the bug where swords weren’t really removed in Swordless
  • +
  • Fixed the bug where Link sometimes turned into a black bunny…
  • +
  • Fixed the bug where you dug up vultures
  • +

VT8.23

-
    -
  • The bookcase in the throne room of Hyrule Castle can now be moved without Zelda once she has been rescued
  • -
  • The logic for the 4 chests in Sewers have had the Gloves requirement removed as you can no longer softlock
  • -
  • The large rock outside Hyrule Castle which is accessible during the rain state has been blocked with guards
  • -
  • The logic for Link’s House has had the Gloves requirement removed as it no longer poses any problems
  • -
  • Sprite palette updates offering more choices (Bunny, Old Man, Zora etc)
  • -
  • The menu icon for when you found Silver Arrows before bow has been removed
  • -
  • The Arrows HUD icon is now silver when you have Silver Arrows selected in the menu, or found them before Bow
      -
    • This refers to the icon at the top of the screen, next to hearts, rupees and bombs
    • -
  • -
  • Various gameplay elements have had their RNG restored in a way that is consistent for all players
      -
    • The digging game prize is found on a random dig between 1 and 30
    • -
    • The chest game prize is found in either the 1st chest (12.5% chance) or 2nd chest (100% chance)
    • -
    • All boss attack patterns (e.g. Helmasaur’s fireballs, Lanmolas’ spawn patterns, etc)
    • -
  • -
  • All Goals now make Ganon invincible until the Goal conditions are met (e.g. All Dungeons)
  • -
  • Fixed the bug where s+q was temporarily disabled after collecting a crystal or pendant
  • -
  • Fixed a bug in Open mode relating to how the Fat Faerie dealt with Progressive Swords
  • -
  • Fixed various free-roaming text glitches
  • -
  • Fixed various music glitches (Hobo, top floor of Hera)
  • -
  • Fixed a bug with how Ganon’s warps were being handled in the 3rd phase
  • -
  • Fixed the statistics to correctly track swordless boss kills
  • -
  • Maps and compasses have been re-added [hard/expert]
  • -
  • You can s+q/mirror in boss rooms after they’re dead and the heart drop has been collected [glitched]
  • -
  • Ganon can be hurt by the Hammer [swordless]
  • -
  • The curtains in Skull Woods and Aghanim's Tower have been pre-opened [swordless]
  • -
  • You can use medallions swordless outside Misery Mire and Turtle Rock (but nowhere else) [swordless]
  • -
  • The 4 swords have been removed from the pool and replaced with 20 rupees [swordless]
  • -
-
-
View updates
-
-
- -
-
-
+
    +
  • The bookcase in the throne room of Hyrule Castle can now be moved without Zelda once she has been rescued
  • +
  • The logic for the 4 chests in Sewers have had the Gloves requirement removed as you can no longer softlock
  • +
  • The large rock outside Hyrule Castle which is accessible during the rain state has been blocked with guards
  • +
  • The logic for Link’s House has had the Gloves requirement removed as it no longer poses any problems
  • +
  • Sprite palette updates offering more choices (Bunny, Old Man, Zora etc)
  • +
  • The menu icon for when you found Silver Arrows before bow has been removed
  • +
  • The Arrows HUD icon is now silver when you have Silver Arrows selected in the menu, or found them before Bow
      +
    • This refers to the icon at the top of the screen, next to hearts, rupees and bombs
    • +
  • +
  • Various gameplay elements have had their RNG restored in a way that is consistent for all players
      +
    • The digging game prize is found on a random dig between 1 and 30
    • +
    • The chest game prize is found in either the 1st chest (12.5% chance) or 2nd chest (100% chance)
    • +
    • All boss attack patterns (e.g. Helmasaur’s fireballs, Lanmolas’ spawn patterns, etc)
    • +
  • +
  • All Goals now make Ganon invincible until the Goal conditions are met (e.g. All Dungeons)
  • +
  • Fixed the bug where s+q was temporarily disabled after collecting a crystal or pendant
  • +
  • Fixed a bug in Open mode relating to how the Fat Faerie dealt with Progressive Swords
  • +
  • Fixed various free-roaming text glitches
  • +
  • Fixed various music glitches (Hobo, top floor of Hera)
  • +
  • Fixed a bug with how Ganon’s warps were being handled in the 3rd phase
  • +
  • Fixed the statistics to correctly track swordless boss kills
  • +
  • Maps and compasses have been re-added [hard/expert]
  • +
  • You can s+q/mirror in boss rooms after they’re dead and the heart drop has been collected [glitched]
  • +
  • Ganon can be hurt by the Hammer [swordless]
  • +
  • The curtains in Skull Woods and Aghanim's Tower have been pre-opened [swordless]
  • +
  • You can use medallions swordless outside Misery Mire and Turtle Rock (but nowhere else) [swordless]
  • +
  • The 4 swords have been removed from the pool and replaced with 20 rupees [swordless]
  • +
+
+
View updates
+
+
+ +
+
+

VT8.22

-
    -
  • The free lamp cone has been removed in the Light World (dark rooms are still never required the logic)
  • -
  • The frog now persists through s+q (and death) as per vanilla
  • -
  • The frog stays as a frog (spawn in DW) and changes to the smith (spawn in LW) to avoid polarity conflicts
  • -
  • Aghanim's Tower is no longer locked before Zelda has been rescued
  • -
  • Re-added blue balls on Agahnim 1+2 and warps on Ganon with equivalent RNG for all players
  • -
  • Fake flippers death safety fix has been removed from all versions (now acts as per vanilla)
  • -
  • Added functionality to choose from a set of custom sprites for Link
  • -
  • Goals are now controlled by making Ganon invulnerable until the goal conditions have been achieved
      -
    • For example in Master Sword Pedestal Ganon is invulnerable until you pull the item
    • -
  • -
  • Fixed the weird lamp cone graphics caused when a lit torch extinguishes when you do not have the Lamp
  • -
  • Dwarf no longer has Zelda graphics loaded if you s+q to Sanctuary with him (!)
  • -
  • Loose bombs (e.g. from enemies/pulls/bonks) now auto-equip if they’re your first item found
  • -
  • Graphical bugs caused by having access to or beating Agahnim 1 before rescuing Zelda have been fixed
  • -
  • Updated various text, including pedestal definitions, for more clarity
  • -
  • Back-end updates, including changing how base ROM is stored in browser
      -
    • This should be the final time you have to select the JP 1.0 ROM
    • -
  • -
  • Mirror has been removed from the logic of Blacksmith and Purple Chest (because you can s+q with both)
  • -
  • Skull Woods guaranteed small key has been randomized to be in any of the left-loop chests
  • -
  • Light World logic has been updated to account for the removal of the free lamp cone
  • -
  • Logic fixes for Escape/Sewers for various game modes
  • -
  • Created Swordless logic to be fully released as a game mode soon™
  • -
  • After 66% of progression items have been placed the remaining 33% get placed from the end of the list
      -
    • This reduces the bias of situations like Ice Rod being placed in Turtle Rock, etc.
    • -
  • -
  • Silvers and non-required Progressives Swords are no longer placed as progression items
      -
    • This removes the bias of these items being placed in late-game locations
    • -
  • -
  • Non-progression items (e.g. Bug Net) are now placed completely randomly after progressive items
      -
    • This removes the bias of these items being placed in late-game locations
    • -
  • -
  • Beating Agahnim 1 is now tracked in the spoiler playthrough and referred to in the logic
  • -
  • Statistics of item placements using the new algorithm (100k seeds) can be seen - here
  • -
  • Masochist has been renamed to Expert
  • -
  • Powdering anti-faeries turns them into single hearts [hard]
  • -
  • Bottles can be found prefilled with everything except faeries (including from Great Faeries) [hard/expert]
  • -
  • Rupoors have been removed [hard/expert]
  • -
  • Updated logic in Mire, Hera and Swamp to correctly account for duping [glitched]
  • -
  • Map no longer breaks after you’ve beaten Ganon’s Tower [glitched]
  • -
  • Fake DW no longer corrupts Agahnim 2 [glitched]
  • -
-
-
View updates
-
-
- -
-
-
+
    +
  • The free lamp cone has been removed in the Light World (dark rooms are still never required the logic)
  • +
  • The frog now persists through s+q (and death) as per vanilla
  • +
  • The frog stays as a frog (spawn in DW) and changes to the smith (spawn in LW) to avoid polarity conflicts
  • +
  • Aghanim's Tower is no longer locked before Zelda has been rescued
  • +
  • Re-added blue balls on Agahnim 1+2 and warps on Ganon with equivalent RNG for all players
  • +
  • Fake flippers death safety fix has been removed from all versions (now acts as per vanilla)
  • +
  • Added functionality to choose from a set of custom sprites for Link
  • +
  • Goals are now controlled by making Ganon invulnerable until the goal conditions have been achieved
      +
    • For example in Master Sword Pedestal Ganon is invulnerable until you pull the item
    • +
  • +
  • Fixed the weird lamp cone graphics caused when a lit torch extinguishes when you do not have the Lamp
  • +
  • Dwarf no longer has Zelda graphics loaded if you s+q to Sanctuary with him (!)
  • +
  • Loose bombs (e.g. from enemies/pulls/bonks) now auto-equip if they’re your first item found
  • +
  • Graphical bugs caused by having access to or beating Agahnim 1 before rescuing Zelda have been fixed
  • +
  • Updated various text, including pedestal definitions, for more clarity
  • +
  • Back-end updates, including changing how base ROM is stored in browser
      +
    • This should be the final time you have to select the JP 1.0 ROM
    • +
  • +
  • Mirror has been removed from the logic of Blacksmith and Purple Chest (because you can s+q with both)
  • +
  • Skull Woods guaranteed small key has been randomized to be in any of the left-loop chests
  • +
  • Light World logic has been updated to account for the removal of the free lamp cone
  • +
  • Logic fixes for Escape/Sewers for various game modes
  • +
  • Created Swordless logic to be fully released as a game mode soon™
  • +
  • After 66% of progression items have been placed the remaining 33% get placed from the end of the list
      +
    • This reduces the bias of situations like Ice Rod being placed in Turtle Rock, etc.
    • +
  • +
  • Silvers and non-required Progressives Swords are no longer placed as progression items
      +
    • This removes the bias of these items being placed in late-game locations
    • +
  • +
  • Non-progression items (e.g. Bug Net) are now placed completely randomly after progressive items
      +
    • This removes the bias of these items being placed in late-game locations
    • +
  • +
  • Beating Agahnim 1 is now tracked in the spoiler playthrough and referred to in the logic
  • +
  • Statistics of item placements using the new algorithm (100k seeds) can be seen + here
  • +
  • Masochist has been renamed to Expert
  • +
  • Powdering anti-faeries turns them into single hearts [hard]
  • +
  • Bottles can be found prefilled with everything except faeries (including from Great Faeries) [hard/expert]
  • +
  • Rupoors have been removed [hard/expert]
  • +
  • Updated logic in Mire, Hera and Swamp to correctly account for duping [glitched]
  • +
  • Map no longer breaks after you’ve beaten Ganon’s Tower [glitched]
  • +
  • Fake DW no longer corrupts Agahnim 2 [glitched]
  • +
+
+
View updates
+
+
+ +
+
+

V8 Updates

-

Switched to VT web based version

+

Switched to VT web based version

-
-

Modes

-

Open

-
    -
  • Link’s Uncle is now a regular item location and the Fighter’s Sword is part of the item pool
  • -
  • You no longer get a free lamp cone in the Sewers or anywhere in the Light World
  • -
  • Speaking to Uncle/speaking to Zelda in her cell no longer reactivates the rain state
  • -
  • Hyrule Castle/Sewer small key can be placed anywhere (except Boom chest + Zelda’s cell)
  • -
  • Casual logic has had lamp updates for all of Light World (Eastern, DM, AT)
  • -
  • Boss logic has been updated to account for the potential lack of sword
  • -
  • Updated Fighter’s Sword so collecting it doesn’t downgrade higher level swords
  • -
  • Link’s House and Sanctuary are default S+Q points which are available from the start
  • -
  • All interim s+q points have been removed (Uncle, Zelda’s cell, throne room, Old Man in DM caves)
  • -
  • Hyrule Castle gate is always open
  • -
  • Zelda is pre-rescued in Sanctuary
  • -
  • Castle/Sewers mantle door is now pushable without Zelda following you
  • -
-
+
+

Modes

+

Open

+
    +
  • Link’s Uncle is now a regular item location and the Fighter’s Sword is part of the item pool
  • +
  • You no longer get a free lamp cone in the Sewers or anywhere in the Light World
  • +
  • Speaking to Uncle/speaking to Zelda in her cell no longer reactivates the rain state
  • +
  • Hyrule Castle/Sewer small key can be placed anywhere (except Boom chest + Zelda’s cell)
  • +
  • Casual logic has had lamp updates for all of Light World (Eastern, DM, AT)
  • +
  • Boss logic has been updated to account for the potential lack of sword
  • +
  • Updated Fighter’s Sword so collecting it doesn’t downgrade higher level swords
  • +
  • Link’s House and Sanctuary are default S+Q points which are available from the start
  • +
  • All interim s+q points have been removed (Uncle, Zelda’s cell, throne room, Old Man in DM caves)
  • +
  • Hyrule Castle gate is always open
  • +
  • Zelda is pre-rescued in Sanctuary
  • +
  • Castle/Sewers mantle door is now pushable without Zelda following you
  • +
+
-
-

Difficulties

-

Expert

-
    -
  • Magic Cape has had its magic consumption rate quadrupled
  • -
  • Added a single bottle to Casual/Speedrunner and all four bottles to Major Glitches
  • -
  • Magic Powder no longer turns anti-faeries/bunny-spinner into faeries (bees!)
  • -
  • Increased the cost of shields to 9999 rupees
  • -
  • Silver Arrows are not in the pool
  • -
  • 12 Heart Pieces (no Heart Containers)
  • -
  • Only Master Sword is in the item pool (no Tempered or Gold)
  • -
  • All shields and mails have been removed from the item pool
  • -
  • No Cane of Byrna, ½ or ¼ Magic, Capacity Upgrades, Boomerangs or Bug Net
  • -
  • Cane of Byrna cave has had the spike damage reduced to ¼ heart making the chest accessible
  • -
  • Potions refill 1 heart (red/blue) and ¼ magic bar (green/blue) and are default cost
  • -
-

Hard

-
    -
  • Magic Cape has had its magic consumption rate doubled
  • -
  • Added two bottles to Casual/Minor Glitches and all four bottles in Major Glitches
  • -
  • Increased the cost of shields to 2x rupees
  • -
  • Only the Master Sword and the Tempered Sword are in the item pool (no Gold)
  • -
  • A safety chest below Ganon containing Silver Arrows has been added
  • -
  • Magic Powder no longer turns anti-faeries/bunny-spinner into faeries (bees!)
  • -
  • 24 Heart Pieces (no Heart Containers)
  • -
  • Blue Mail (no red Mail)
  • -
  • Fighter’s Shield and Fire Shield (no Mirror Shield)
  • -
  • No Cane of Byrna, ½ or ¼ Magic, Capacity Upgrades, Boomerangs or Bug Net
  • -
  • Cane of Byrna cave has had the spike damage reduced to ¼ heart making the chest accessible
  • -
  • Potions refill 5 hearts (red/blue) and ½ magic (green/blue) and are default cost
  • -
-
+
+

Difficulties

+

Expert

+
    +
  • Magic Cape has had its magic consumption rate quadrupled
  • +
  • Added a single bottle to Casual/Speedrunner and all four bottles to Major Glitches
  • +
  • Magic Powder no longer turns anti-faeries/bunny-spinner into faeries (bees!)
  • +
  • Increased the cost of shields to 9999 rupees
  • +
  • Silver Arrows are not in the pool
  • +
  • 12 Heart Pieces (no Heart Containers)
  • +
  • Only Master Sword is in the item pool (no Tempered or Gold)
  • +
  • All shields and mails have been removed from the item pool
  • +
  • No Cane of Byrna, ½ or ¼ Magic, Capacity Upgrades, Boomerangs or Bug Net
  • +
  • Cane of Byrna cave has had the spike damage reduced to ¼ heart making the chest accessible
  • +
  • Potions refill 1 heart (red/blue) and ¼ magic bar (green/blue) and are default cost
  • +
+

Hard

+
    +
  • Magic Cape has had its magic consumption rate doubled
  • +
  • Added two bottles to Casual/Minor Glitches and all four bottles in Major Glitches
  • +
  • Increased the cost of shields to 2x rupees
  • +
  • Only the Master Sword and the Tempered Sword are in the item pool (no Gold)
  • +
  • A safety chest below Ganon containing Silver Arrows has been added
  • +
  • Magic Powder no longer turns anti-faeries/bunny-spinner into faeries (bees!)
  • +
  • 24 Heart Pieces (no Heart Containers)
  • +
  • Blue Mail (no red Mail)
  • +
  • Fighter’s Shield and Fire Shield (no Mirror Shield)
  • +
  • No Cane of Byrna, ½ or ¼ Magic, Capacity Upgrades, Boomerangs or Bug Net
  • +
  • Cane of Byrna cave has had the spike damage reduced to ¼ heart making the chest accessible
  • +
  • Potions refill 5 hearts (red/blue) and ½ magic (green/blue) and are default cost
  • +
+
-
-

Logics

-

Major Glitches

-
    -
  • Crystals always drop while in the fake DW irrespective of conflicting pendants
  • -
  • Swamp Palace water levels now work as per vanilla (no safety fix)
  • -
  • The fake dark world now works as per vanilla
  • -
  • Removed auto lamp cone everywhere except Sewers
  • -
  • Agahnim 2 is always in Ganon’s Tower regardless of fake DW
  • -
-

Minor Glitches

-
    -
  • Removed auto lamp cone everywhere except Sewers
  • -
-

No Glitches (Casual)

-
    -
  • Pendants and crystals are now fully randomized between the 3 Light World and 7 Dark World dungeons
      -
    • The map correctly shows where pendants and crystals are located
    • -
  • -
  • The arrow and bomb capacity upgrades are split over six +5 upgrades and one +10 upgrade (as per vanilla)
      -
    • You don’t get a bomb/arrow refill in addition to the maximum upgrade
    • -
    • Bomb upgrades replaced “3 bombs” and Arrow upgrades replaced “10 Arrows”
    • -
    • The 50 bomb and 70 arrow capacity upgrades have been removed (will feature in later versions)
    • -
  • -
  • The Master Sword pedestal, Smithy and Fat Faerie are now regular item locations and the swords are in the pool
      -
    • Master Sword pedestal: This gives you the item without changing your sword
    • -
    • Smithy: He gives you his item in exchange for 10 rupees and skips the tempering process (switch)
    • -
    • Fat Faerie: Mechanics have been overhauled as follows:
        -
      • Added 2 chests as item locations replacing Silver Arrows and Gold Sword
      • -
      • Limited what you can throw to her to just bottles.
      • -
    • -
  • -
  • Swords, shields and mails are progressive (e.g. Master → Tempered → Gold)
  • -
  • Bosses can drop dungeon items (map, compasses, small keys and big keys) where the logic allows
  • -
  • The bonk keys in Desert Palace and Ganon’s Tower are now regular item locations
  • -
  • The freestanding small key in Tower of Hera is now a regular item location
  • -
  • Re-added the key doors in Misery Mire and Ganon’s Tower
  • -
  • Silver Arrows are part of the regular prize pool as an upgrade only (not a second copy of the bow)
  • -
  • Pull prize packs (3 prizes) and enemy prize packs (56 prizes) have been merged into one larger pool
  • -
  • The drop pool also includes the rupee crab (2 prizes), stunned enemies (1 prize) and saved fish (1 prize)
  • -
  • Overworld bonk prizes (62 prizes) are randomized between themselves
  • -
  • Enemy prize packs now randomizes both the enemies and the prizes
      -
    • The Book of Mudora translates the Hylian text at the Master Sword pedestal to tell you what the item is
    • -
  • -
  • It is not guaranteed to be found before the need to get the Master Sword pedestal item
  • -
  • The zoom function of the map has been restored back to default behaviour
  • -
  • The s+q menu is now in English!
  • -
  • Lots and lots of text updates, translation to English and removal, including the opening credits sequence!
  • -
  • Link’s House can now contain the Fire Shield and Mirror Shield
  • -
  • Link’s Uncle no longer gives you the Fighter’s Shield (also removed from his sprite) and it is part of the item pool
  • -
  • There is a 5% chance Link’s Uncle will tell you which part of the world contains the Pegasus Boots
  • -
  • Master Sword icon has been removed from the map
  • -
  • Chest game 2nd chest is no longer guaranteed 100 rupees
  • -
  • Crystal dungeons always play DW dungeon music; pendant dungeons always play LW dungeon music
  • -
  • The fake flippers safety fix has been removed from all versions
  • -
  • The phantom lamp cone has been fixed (when you light a torch with Fire Rod without Lamp)
  • -
  • The Smithy no longer has Mirror as a forced requirement as he will persist through s+q as per vanilla
  • -
-
+
+

Logics

+

Major Glitches

+
    +
  • Crystals always drop while in the fake DW irrespective of conflicting pendants
  • +
  • Swamp Palace water levels now work as per vanilla (no safety fix)
  • +
  • The fake dark world now works as per vanilla
  • +
  • Removed auto lamp cone everywhere except Sewers
  • +
  • Agahnim 2 is always in Ganon’s Tower regardless of fake DW
  • +
+

Minor Glitches

+
    +
  • Removed auto lamp cone everywhere except Sewers
  • +
+

No Glitches (Casual)

+
    +
  • Pendants and crystals are now fully randomized between the 3 Light World and 7 Dark World dungeons
      +
    • The map correctly shows where pendants and crystals are located
    • +
  • +
  • The arrow and bomb capacity upgrades are split over six +5 upgrades and one +10 upgrade (as per vanilla)
      +
    • You don’t get a bomb/arrow refill in addition to the maximum upgrade
    • +
    • Bomb upgrades replaced “3 bombs” and Arrow upgrades replaced “10 Arrows”
    • +
    • The 50 bomb and 70 arrow capacity upgrades have been removed (will feature in later versions)
    • +
  • +
  • The Master Sword pedestal, Smithy and Fat Faerie are now regular item locations and the swords are in the pool
      +
    • Master Sword pedestal: This gives you the item without changing your sword
    • +
    • Smithy: He gives you his item in exchange for 10 rupees and skips the tempering process (switch)
    • +
    • Fat Faerie: Mechanics have been overhauled as follows:
        +
      • Added 2 chests as item locations replacing Silver Arrows and Gold Sword
      • +
      • Limited what you can throw to her to just bottles.
      • +
    • +
  • +
  • Swords, shields and mails are progressive (e.g. Master → Tempered → Gold)
  • +
  • Bosses can drop dungeon items (map, compasses, small keys and big keys) where the logic allows
  • +
  • The bonk keys in Desert Palace and Ganon’s Tower are now regular item locations
  • +
  • The freestanding small key in Tower of Hera is now a regular item location
  • +
  • Re-added the key doors in Misery Mire and Ganon’s Tower
  • +
  • Silver Arrows are part of the regular prize pool as an upgrade only (not a second copy of the bow)
  • +
  • Pull prize packs (3 prizes) and enemy prize packs (56 prizes) have been merged into one larger pool
  • +
  • The drop pool also includes the rupee crab (2 prizes), stunned enemies (1 prize) and saved fish (1 prize)
  • +
  • Overworld bonk prizes (62 prizes) are randomized between themselves
  • +
  • Enemy prize packs now randomizes both the enemies and the prizes
      +
    • The Book of Mudora translates the Hylian text at the Master Sword pedestal to tell you what the item is
    • +
  • +
  • It is not guaranteed to be found before the need to get the Master Sword pedestal item
  • +
  • The zoom function of the map has been restored back to default behaviour
  • +
  • The s+q menu is now in English!
  • +
  • Lots and lots of text updates, translation to English and removal, including the opening credits sequence!
  • +
  • Link’s House can now contain the Fire Shield and Mirror Shield
  • +
  • Link’s Uncle no longer gives you the Fighter’s Shield (also removed from his sprite) and it is part of the item pool
  • +
  • There is a 5% chance Link’s Uncle will tell you which part of the world contains the Pegasus Boots
  • +
  • Master Sword icon has been removed from the map
  • +
  • Chest game 2nd chest is no longer guaranteed 100 rupees
  • +
  • Crystal dungeons always play DW dungeon music; pendant dungeons always play LW dungeon music
  • +
  • The fake flippers safety fix has been removed from all versions
  • +
  • The phantom lamp cone has been fixed (when you light a torch with Fire Rod without Lamp)
  • +
  • The Smithy no longer has Mirror as a forced requirement as he will persist through s+q as per vanilla
  • +
+

V7 Updates

-
    -
  • Boss hearts and the ½ magic bat statue have been added as new item locations
  • -
  • Bomb and arrow capacity upgrades have been added to the item pool (70 arrows and 50 bombs)
  • -
  • Magic capacity upgrades have been added to the the item pool (⅔ chance for ½ and ⅓ chance for ¼)
  • -
  • Pendants are randomized between the 3 LW dungeons (excluding Aghanim's Tower)
  • -
  • Crystals are randomized between the 7 DW dungeons (excluding Ganon’s Tower)
  • -
  • The Master Sword, Tempered Sword and Gold Sword are randomized between themselves
  • -
  • The Fat Faerie now accepts the Fighter’s Sword and Master Sword in addition to the Tempered Sword
  • -
  • The Smithy and Fat Faerie will always give you their swords (but it won’t downgrade if it’s worse)
  • -
  • Swords can no longer be downgraded at the Master Sword pedestal or by the Smithy
  • -
  • The Smithy no longer needs to be rescued to spawn the Super Bomb (only crystals 5 and 6 are required)
  • -
  • Mothula now takes damage from the Gold Sword (tempered sword damage values)
  • -
  • The door to Aghanim's Tower is now locked until Zelda has been rescued (prevents issues with game states)
  • -
  • The purple chest now returns to its initial location if left on the overworld when you enter a dungeon
  • -
  • You will always respawn on the Pyramid if you die to Ganon (even if Agahnim has not been defeated)
  • -
  • The light world flute boy has been removed (fixed issues with crashes and music playing elsewhere)
  • -
  • Removed all unnecessary Ganon warps in his third phase
  • -
  • The old man on Death Mountain and the Sanctuary priest no longer refill your magic
  • -
  • The 3 pots in Link’s house have been changed back to hearts
  • -
  • The menu now lets you toggle between Bow/Silver Arrows (press Y) and pendants/crystals (press Select)
  • -
  • The map accounts for pendant/crystal randomization and the zoom functionality has been removed
  • -
  • The map now horizontally flips the green pendant to address colorblindness accessibility concerns
  • -
  • Removed more useless dialogue and text (including Japanese item text in the menu)
  • -
  • The credits have been completely overhauled to show various statistics
  • -
  • Added randomized text to Link’s uncle
  • -
+
    +
  • Boss hearts and the ½ magic bat statue have been added as new item locations
  • +
  • Bomb and arrow capacity upgrades have been added to the item pool (70 arrows and 50 bombs)
  • +
  • Magic capacity upgrades have been added to the the item pool (⅔ chance for ½ and ⅓ chance for ¼)
  • +
  • Pendants are randomized between the 3 LW dungeons (excluding Aghanim's Tower)
  • +
  • Crystals are randomized between the 7 DW dungeons (excluding Ganon’s Tower)
  • +
  • The Master Sword, Tempered Sword and Gold Sword are randomized between themselves
  • +
  • The Fat Faerie now accepts the Fighter’s Sword and Master Sword in addition to the Tempered Sword
  • +
  • The Smithy and Fat Faerie will always give you their swords (but it won’t downgrade if it’s worse)
  • +
  • Swords can no longer be downgraded at the Master Sword pedestal or by the Smithy
  • +
  • The Smithy no longer needs to be rescued to spawn the Super Bomb (only crystals 5 and 6 are required)
  • +
  • Mothula now takes damage from the Gold Sword (tempered sword damage values)
  • +
  • The door to Aghanim's Tower is now locked until Zelda has been rescued (prevents issues with game states)
  • +
  • The purple chest now returns to its initial location if left on the overworld when you enter a dungeon
  • +
  • You will always respawn on the Pyramid if you die to Ganon (even if Agahnim has not been defeated)
  • +
  • The light world flute boy has been removed (fixed issues with crashes and music playing elsewhere)
  • +
  • Removed all unnecessary Ganon warps in his third phase
  • +
  • The old man on Death Mountain and the Sanctuary priest no longer refill your magic
  • +
  • The 3 pots in Link’s house have been changed back to hearts
  • +
  • The menu now lets you toggle between Bow/Silver Arrows (press Y) and pendants/crystals (press Select)
  • +
  • The map accounts for pendant/crystal randomization and the zoom functionality has been removed
  • +
  • The map now horizontally flips the green pendant to address colorblindness accessibility concerns
  • +
  • Removed more useless dialogue and text (including Japanese item text in the menu)
  • +
  • The credits have been completely overhauled to show various statistics
  • +
  • Added randomized text to Link’s uncle
  • +

V6 Updates

-
    -
  • The Chest Game is limited to 2 chests per session to prevent crashes (error with v5.2)
  • -
  • The cursed dwarf is removed when you die or s+q with him following you (error with v5.11)
  • -
  • The third phase of Ganon has no additional warps (error with v5.13)
  • -
  • The bat statue now has a ⅔ chance for ½ magic and ⅓ chance for ¼ magic
  • -
  • The sanctuary priest is now immortal and also refills your magic
  • -
  • The old man on Death Mountain also refills your magic
  • -
  • The 3 pots in Link’s house have been changed from hearts to a full magic jar and 2 faeries
  • -
  • Defeating Agahnim removes followers and keeps the doors to Hyrule Castle open
  • -
  • Removed a key door in Ganon’s Tower (1F) and Misery Mire (B2) for better key randomization
  • -
  • Removed the opening psychic message and invisible follower
  • -
  • Removed all Pyramid text after defeating Agahnim
  • -
  • Bug fixes (shadow pendant, big key icons, wide sprites, faerie fountains, toggle items, arrow HUD icon)
  • -
  • Logic fixes and improvements, including always restricting Boots to be accessible without Mitts
  • -
+
    +
  • The Chest Game is limited to 2 chests per session to prevent crashes (error with v5.2)
  • +
  • The cursed dwarf is removed when you die or s+q with him following you (error with v5.11)
  • +
  • The third phase of Ganon has no additional warps (error with v5.13)
  • +
  • The bat statue now has a ⅔ chance for ½ magic and ⅓ chance for ¼ magic
  • +
  • The sanctuary priest is now immortal and also refills your magic
  • +
  • The old man on Death Mountain also refills your magic
  • +
  • The 3 pots in Link’s house have been changed from hearts to a full magic jar and 2 faeries
  • +
  • Defeating Agahnim removes followers and keeps the doors to Hyrule Castle open
  • +
  • Removed a key door in Ganon’s Tower (1F) and Misery Mire (B2) for better key randomization
  • +
  • Removed the opening psychic message and invisible follower
  • +
  • Removed all Pyramid text after defeating Agahnim
  • +
  • Bug fixes (shadow pendant, big key icons, wide sprites, faerie fountains, toggle items, arrow HUD icon)
  • +
  • Logic fixes and improvements, including always restricting Boots to be accessible without Mitts
  • +

V5 Updates

-
    -
  • Bottles are randomly filled upon collection with an equal chance for each bottle prize, including empty
  • -
  • Throwing bottles into Faerie fountains now yields an equal chance for each bottle prize, including empty
  • -
  • Big Faeries heal your magic in addition to your health
  • -
  • Digging Game is randomized and guaranteed on first attempt (15th dig)
  • -
  • Chest Game is randomized and guaranteed on first attempt (2nd chest); you can open all chests in one go
  • -
  • The medallions required to open Misery Mire and Turtle Rock are randomized
  • -
  • Mushroom, Magic Powder and Flute are all randomized
  • -
  • Boomerangs, Mushroom/Powder and Shovel/Flute slots can contain both items, toggling between them with Y
  • -
  • Bottles do not auto-open when selected in the menu; instead you open with X and toggle between them with Y
  • -
  • Dying/s+q from a non-dungeon underworld room in the DW now correctly takes you back to LW (error with v3.5)
  • -
  • The Frog follower is removed if you return to the LW when you s+q or die whilst he is following you
  • -
  • You can dig up items (hearts, rupees, bombs, arrows, chickens, mines, etc.)
  • -
  • Ganon will not warp more than twice between hits during his third phase
  • -
  • Logic improvements (rewritten algorithms to improve item distribution, removal of Hammer/Mitts restrictions)
  • -
  • NPCs which contain a downgrade of an item you already own will now (harmlessly) give you their items
  • -
  • Crystal dialogue, Master Sword dialogue, all item text and some Agahnim dialogue removed
  • -
  • Credits updated to reflect what King Zora sold you
  • -
  • Bug fixes (bottles not showing in inventory if gotten early, HUD not updating for Silver Arrows)
  • -
+
    +
  • Bottles are randomly filled upon collection with an equal chance for each bottle prize, including empty
  • +
  • Throwing bottles into Faerie fountains now yields an equal chance for each bottle prize, including empty
  • +
  • Big Faeries heal your magic in addition to your health
  • +
  • Digging Game is randomized and guaranteed on first attempt (15th dig)
  • +
  • Chest Game is randomized and guaranteed on first attempt (2nd chest); you can open all chests in one go
  • +
  • The medallions required to open Misery Mire and Turtle Rock are randomized
  • +
  • Mushroom, Magic Powder and Flute are all randomized
  • +
  • Boomerangs, Mushroom/Powder and Shovel/Flute slots can contain both items, toggling between them with Y
  • +
  • Bottles do not auto-open when selected in the menu; instead you open with X and toggle between them with Y
  • +
  • Dying/s+q from a non-dungeon underworld room in the DW now correctly takes you back to LW (error with v3.5)
  • +
  • The Frog follower is removed if you return to the LW when you s+q or die whilst he is following you
  • +
  • You can dig up items (hearts, rupees, bombs, arrows, chickens, mines, etc.)
  • +
  • Ganon will not warp more than twice between hits during his third phase
  • +
  • Logic improvements (rewritten algorithms to improve item distribution, removal of Hammer/Mitts restrictions)
  • +
  • NPCs which contain a downgrade of an item you already own will now (harmlessly) give you their items
  • +
  • Crystal dialogue, Master Sword dialogue, all item text and some Agahnim dialogue removed
  • +
  • Credits updated to reflect what King Zora sold you
  • +
  • Bug fixes (bottles not showing in inventory if gotten early, HUD not updating for Silver Arrows)
  • +

V4 Updates

-
    -
  • NPCs are no longer guaranteed to give unique items
  • -
  • Catfish throws a bomb if his item is a downgrade of an item you already have
  • -
  • Non-chest heart pieces are now randomized
  • -
  • Bombos and Ether tablets are now randomized
  • -
  • Book of Mudora is now randomized
  • -
  • Both 300 rupee NPCs are randomized
  • -
  • Link no longer needs the Lamp to move the bookshelf during Escape
  • -
  • Lamp placement is no longer restricted to Escape
  • -
  • Playing flute for flute boy will not cause him to disappear (although he disappears after receiving his item)
  • -
  • Link does not need the Lamp to see in the dark in the LW
  • -
  • LW menu now always shows pendants and DW menu now always shows crystals
  • -
  • Maximum rupee cap has been increased to 9999
  • -
  • Silver Arrows can no longer be downgraded to regular Bow
  • -
  • Invisible follower fix (s+q/flute after Master Sword before getting the log text now removes the invisible follower)
  • -
  • Logic improvements (Lamp, Book, Ether and Bombos placement; overall item placement is more balanced)
  • -
  • Small key algorithm has been improved, including preventing them from being in Big Chests
  • -
  • Five 100 rupee prizes were added to the prize pool (replaced three red rupees and the two duplicate Lamps)
  • -
  • Swamp’s first room correctly empties when leaving the LW and DW overworld screens (error with v1.2)
  • -
  • Link instantly dies and all faeries are removed if damage is taken during fake flippers after transitioning screens
  • -
+
    +
  • NPCs are no longer guaranteed to give unique items
  • +
  • Catfish throws a bomb if his item is a downgrade of an item you already have
  • +
  • Non-chest heart pieces are now randomized
  • +
  • Bombos and Ether tablets are now randomized
  • +
  • Book of Mudora is now randomized
  • +
  • Both 300 rupee NPCs are randomized
  • +
  • Link no longer needs the Lamp to move the bookshelf during Escape
  • +
  • Lamp placement is no longer basic to Escape
  • +
  • Playing flute for flute boy will not cause him to disappear (although he disappears after receiving his item)
  • +
  • Link does not need the Lamp to see in the dark in the LW
  • +
  • LW menu now always shows pendants and DW menu now always shows crystals
  • +
  • Maximum rupee cap has been increased to 9999
  • +
  • Silver Arrows can no longer be downgraded to regular Bow
  • +
  • Invisible follower fix (s+q/flute after Master Sword before getting the log text now removes the invisible follower)
  • +
  • Logic improvements (Lamp, Book, Ether and Bombos placement; overall item placement is more balanced)
  • +
  • Small key algorithm has been improved, including preventing them from being in Big Chests
  • +
  • Five 100 rupee prizes were added to the prize pool (replaced three red rupees and the two duplicate Lamps)
  • +
  • Swamp’s first room correctly empties when leaving the LW and DW overworld screens (error with v1.2)
  • +
  • Link instantly dies and all faeries are removed if damage is taken during fake flippers after transitioning screens
  • +

V3 Updates

-
    -
  • Fire Shield is now an NPC/chest item (replaced a 20 rupee chest)
  • -
  • Mirror Shield and Red Mail are restricted to the DW
  • -
  • Can no longer downgrade the Magic Boomerang and Mirror Shield
  • -
  • Fire Shield and Mirror Shield cannot be found in Link’s house (to prevent downgrade)
  • -
  • S+Q from DW after killing Agahnim in absence of Mirror now returns you to LW
  • -
  • Cannot enter the fake LW if you s+q in a DW dungeon (error with v1.3)
  • -
  • Small keys are now more generously placed within D1, D4 and D7
  • -
  • 0bb patch fixed (error with v1.4)
  • -
  • Mitts/Gloves patch fixed (error with v1.5)
  • -
  • Functionality added to generate a ‘random spoiler’ log file
  • -
  • Bug fixes (crashes)
  • -
  • Logic improvements (Sanctuary, Swamp Palace, Turtle Rock, Book of Mudora)
  • -
  • Output font changed to fixed-width
  • -
  • ROM size has been increased to 2MB to allow for further changes
  • -
+
    +
  • Fire Shield is now an NPC/chest item (replaced a 20 rupee chest)
  • +
  • Mirror Shield and Red Mail are basic to the DW
  • +
  • Can no longer downgrade the Magic Boomerang and Mirror Shield
  • +
  • Fire Shield and Mirror Shield cannot be found in Link’s house (to prevent downgrade)
  • +
  • S+Q from DW after killing Agahnim in absence of Mirror now returns you to LW
  • +
  • Cannot enter the fake LW if you s+q in a DW dungeon (error with v1.3)
  • +
  • Small keys are now more generously placed within D1, D4 and D7
  • +
  • 0bb patch fixed (error with v1.4)
  • +
  • Mitts/Gloves patch fixed (error with v1.5)
  • +
  • Functionality added to generate a ‘random spoiler’ log file
  • +
  • Bug fixes (crashes)
  • +
  • Logic improvements (Sanctuary, Swamp Palace, Turtle Rock, Book of Mudora)
  • +
  • Output font changed to fixed-width
  • +
  • ROM size has been increased to 2MB to allow for further changes
  • +

V2 Updates

-
    -
  • Bug fixes (seed creation error)
  • -
  • Logic improvements (accounting for access to lower DW with Hookshot)
  • -
+
    +
  • Bug fixes (seed creation error)
  • +
  • Logic improvements (accounting for access to lower DW with Hookshot)
  • +

V1 Updates

-
    -
  • All unique chests and NPC rewards are randomized; NPCs always give unique items
  • -
  • Swamp Palace water levels reset upon leaving the overworld screen
  • -
  • Can no longer enter the fake DW after dying in a DW dungeon before killing Agahnim
  • -
  • Agahnim 1 and 2 will no longer attack with blue balls
  • -
  • Can no longer downgrade Titan’s Mitts to Power Gloves
  • -
+
    +
  • All unique chests and NPC rewards are randomized; NPCs always give unique items
  • +
  • Swamp Palace water levels reset upon leaving the overworld screen
  • +
  • Can no longer enter the fake DW after dying in a DW dungeon before killing Agahnim
  • +
  • Agahnim 1 and 2 will no longer attack with blue balls
  • +
  • Can no longer downgrade Titan’s Mitts to Power Gloves
  • +
@overwrite diff --git a/resources/views/watch.blade.php b/resources/views/watch.blade.php index 98023ebc9..54f9e708c 100644 --- a/resources/views/watch.blade.php +++ b/resources/views/watch.blade.php @@ -3,80 +3,31 @@ @section('content')

{{ __('watch.header') }}

-
-
-

{{ __('watch.cards.twitch.header') }}

-
-
- @foreach (__('watch.cards.twitch.content') as $block) -

{!! $block !!}

- @endforeach - - -
-

- -
-
+
+
+

{{ __('watch.cards.tournament.header') }}

+
+
+ @foreach (__('watch.cards.tournament.sections') as $section) +

{{ $section['header'] }}

+ @foreach ($section['content'] as $block) +

{!! $block !!}

+ @endforeach + @endforeach +
+
- + -
-
-

{{ __('watch.cards.tournament.header') }}

-
-
- @foreach (__('watch.cards.tournament.sections') as $section) -

{{ $section['header'] }}

- @foreach ($section['content'] as $block) -

{!! $block !!}

- @endforeach - @endforeach -
-
- -
-
-

{{ __('watch.cards.youtube.header') }}

-
-
- @foreach (__('watch.cards.youtube.content') as $block) -

{!! $block !!}

- @endforeach -
-
+
+
+

{{ __('watch.cards.youtube.header') }}

+
+
+ @foreach (__('watch.cards.youtube.content') as $block) +

{!! $block !!}

+ @endforeach +
+
@overwrite diff --git a/routes/api.php b/routes/api.php index 0a89c9d53..8cdb06d4f 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,5 +14,11 @@ */ Route::get('/user', function (Request $request) { - return $request->user(); + return $request->user(); })->middleware('auth:api'); + +Route::post('randomizer', 'RandomizerController@generateSeed')->middleware('throttle:150,360'); + +Route::post('customizer', 'CustomizerController@generateSeed')->middleware('throttle:50,360'); + +Route::post('customizer/test', 'CustomizerController@testGenerateSeed')->middleware('throttle:200,360'); diff --git a/routes/console.php b/routes/console.php index d1c593bf4..012414576 100644 --- a/routes/console.php +++ b/routes/console.php @@ -1,332 +1,382 @@ addDays($i); - $feature = ALttP\FeaturedGame::firstOrNew([ - 'day' => $date->toDateString(), - ]); - if (!$feature->exists) { - $difficulty = head(weighted_random_pick(array_combine(array_keys(config('alttp.randomizer.item.difficulties')), array_keys(config('alttp.randomizer.item.difficulties'))), - config('alttp.randomizer.daily_weights.item.difficulties'))); - $logic = head(weighted_random_pick(array_combine(array_keys(config('alttp.randomizer.item.logics')), array_keys(config('alttp.randomizer.item.logics'))), - config('alttp.randomizer.daily_weights.item.logics'))); - $goal = head(weighted_random_pick(array_combine(array_keys(config('alttp.randomizer.item.goals')), array_keys(config('alttp.randomizer.item.goals'))), - config('alttp.randomizer.daily_weights.item.goals'))); - $variation = head(weighted_random_pick(array_combine(array_keys(config('alttp.randomizer.item.variations')), array_keys(config('alttp.randomizer.item.variations'))), - config('alttp.randomizer.daily_weights.item.variations'))); - $game_mode = head(weighted_random_pick(array_combine(array_keys(config('alttp.randomizer.item.modes')), array_keys(config('alttp.randomizer.item.modes'))), - config('alttp.randomizer.daily_weights.item.modes'))); - $weapons_mode = head(weighted_random_pick(array_combine(array_keys(config('alttp.randomizer.item.weapons')), array_keys(config('alttp.randomizer.item.weapons'))), - config('alttp.randomizer.daily_weights.item.weapons'))); - - config([ - 'alttp.mode.state' => $game_mode, - 'alttp.mode.weapons' => $weapons_mode, - ]); - - $rom = new ALttP\Rom(env('ENEMIZER_BASE', null)); - $rom->applyPatchFile(public_path('js/base2current.json')); - $rand = new ALttP\Randomizer($difficulty, $logic, $goal, $variation); - - $rand->makeSeed(); - $rand->writeToRom($rom); - - $patch = $rom->getWriteLog(); - $spoiler = $rand->getSpoiler([ - 'name' => 'Daily Challenge: ' . $date->toFormattedDateString(), - 'tournament' => true, - '_meta' => [ - 'enemizer' => false, - 'size' => 2, - 'spoilers' => false, - ], - ]); - $hash = $rand->saveSeedRecord(); - - $rom->setSeedString(str_pad(sprintf("VT TOURNEY %s", $hash), 21, ' ')); - $rom->rummageTable(); - $rom->setStartScreenHash($rand->getSeedRecord()->hashArray()); - $patch = patch_merge_minify($rom->getWriteLog()); - $rand->updateSeedRecordPatch($patch); - $spoiler = array_except(array_only($spoiler, ['meta']), ['meta.seed']); - - $seed_record = ALttP\Seed::where('hash', $hash)->first(); - - $feature->seed_id = $seed_record->id; - $feature->description = sprintf("%s %s %s %s %s", $difficulty, $game_mode, $logic, $goal, $variation); - $feature->save(); - - $save_data = json_encode([ - 'logic' => $rand->getLogic(), - 'difficulty' => $difficulty, - 'patch' => $patch, - 'spoiler' => $spoiler, - 'hash' => $hash, - 'size' => 2, - 'generated' => $rand->getSeedRecord()->created_at ? $rand->getSeedRecord()->created_at->toIso8601String() : now()->toIso8601String(), - ]); - - SendPatchToDisk::dispatch($seed_record); - cache(['hash.' . $hash => $save_data], now()->addDays(7)); - } - } + for ($i = 0; $i < $days; ++$i) { + $date = Carbon::now()->addDays($i); + $feature = ALttP\FeaturedGame::firstOrNew([ + 'day' => $date->toDateString(), + ]); + if (!$feature->exists) { + $entry_crystals_ganon = getWeighted('ganon_open'); + $crystals_ganon = $entry_crystals_ganon === 'random' ? get_random_int(0, 7) : $entry_crystals_ganon; + $entry_crystals_tower = getWeighted('tower_open'); + $crystals_tower = $entry_crystals_tower === 'random' ? get_random_int(0, 7) : $entry_crystals_tower; + + $world = World::factory(getWeighted('world_state'), [ + 'itemPlacement' => getWeighted('item_placement'), + 'dungeonItems' => getWeighted('dungeon_items'), + 'accessibility' => getWeighted('accessibility'), + 'goal' => getWeighted('goals'), + 'crystals.ganon' => $crystals_ganon, + 'crystals.tower' => $crystals_tower, + 'entrances' => getWeighted('entrance_shuffle'), + 'mode.weapons' => getWeighted('weapons'), + 'tournament' => true, + 'spoil.Hints' => getWeighted('hints'), + 'logic' => getWeighted('glitches_required'), + 'item.pool' => getWeighted('item_pool'), + 'item.functionality' => getWeighted('item_functionality'), + 'enemizer.bossShuffle' => getWeighted('boss_shuffle'), + 'enemizer.enemyShuffle' => getWeighted('enemy_shuffle'), + 'enemizer.enemyDamage' => getWeighted('enemy_damage'), + 'enemizer.enemyHealth' => getWeighted('enemy_health'), + ]); + + $rom = new Rom(env('ENEMIZER_BASE', null)); + $rom->applyPatchFile(public_path('js/base2current.json')); + + if ($world->config('entrances') !== 'none') { + $rand = new EntranceRandomizer([$world]); + } else { + $rand = new Randomizer([$world]); + } + + $rand->randomize(); + $world->writeToRom($rom, true); + + // E.R. is responsible for verifying winnability of itself + if ($world->config('entrances') === 'none') { + $worlds = new WorldCollection($rand->getWorlds()); + + if (!$worlds->isWinnable()) { + throw new Exception('Game Unwinnable'); + } + } + + $patch = $rom->getWriteLog(); + $spoiler = $world->getSpoiler([ + 'name' => 'Daily Challenge: ' . $date->toFormattedDateString(), + 'entry_crystals_ganon' => $entry_crystals_ganon, + 'entry_crystals_tower' => $entry_crystals_tower, + 'worlds' => 1, + 'spoilers' => false, + ]); + + if ($world->isEnemized()) { + $en = new Enemizer($world, $patch); + $en->randomize(); + $en->writeToRom($rom); + $patch = $rom->getWriteLog(); + $world->updateSeedRecordPatch($patch); + } + + $seed_record = $world->getSeedRecord(); + + $feature->seed_id = $seed_record->id; + $feature->description = vsprintf("%s %s %s", [ + $world->config('goal'), + $world->config('mode.weapons'), + $world->config('logic'), + ]); + $feature->save(); + + $spoiler = array_except( + array_only($spoiler, ['meta']), + [ + 'meta.seed', + 'meta.crystals_ganon', + 'meta.crystals_tower' + ] + ); + + $save_data = json_encode([ + 'logic' => $world->config('logic'), + 'patch' => patch_merge_minify($patch), + 'spoiler' => $spoiler, + 'hash' => $seed_record->hash, + 'generated' => $seed_record->created_at ? $seed_record->created_at->toIso8601String() : now()->toIso8601String(), + 'size' => $spoiler['meta']['size'] ?? 2, + ]); + + $seed_record->save(); + SendPatchToDisk::dispatch($seed_record); + cache(['hash.' . $seed_record->hash => $save_data], now()->addDays(7)); + } + } }); Artisan::command('alttp:compressgfx {input} {output}', function ($input, $output) { - if (!is_readable($input)) { - return $this->error("Can't read file"); - } - if (file_exists($output) && !is_writable($output) || !is_writable(dirname($output))) { - return $this->error("Can't write file"); - } + if (!is_readable($input)) { + return $this->error("Can't read file"); + } + if (file_exists($output) && !is_writable($output) || !is_writable(dirname($output))) { + return $this->error("Can't write file"); + } - $lz2 = new ALttP\Support\Lz2(); - file_put_contents($output, pack('C*', ...$lz2->compress(array_values(unpack("C*", file_get_contents($input)))))); + $lz2 = new ALttP\Support\Lz2(); + file_put_contents($output, pack('C*', ...$lz2->compress(array_values(unpack("C*", file_get_contents($input)))))); - $this->info(sprintf('Compressed: `%s` to `%s`', $input, $output)); + $this->info(sprintf('Compressed: `%s` to `%s`', $input, $output)); }); Artisan::command('alttp:decompressgfx {input} {output}', function ($input, $output) { - if (!is_readable($input)) { - return $this->error("Can't read file"); - } - if (file_exists($output) && !is_writable($output) || !is_writable(dirname($output))) { - return $this->error("Can't write file"); - } + if (!is_readable($input)) { + return $this->error("Can't read file"); + } + if (file_exists($output) && !is_writable($output) || !is_writable(dirname($output))) { + return $this->error("Can't write file"); + } - $lz2 = new ALttP\Support\Lz2(); - file_put_contents($output, pack('C*', ...$lz2->decompress(array_values(unpack("C*", file_get_contents($input)))))); + $lz2 = new ALttP\Support\Lz2(); + file_put_contents($output, pack('C*', ...$lz2->decompress(array_values(unpack("C*", file_get_contents($input)))))); - $this->info(sprintf('Decompressed: `%s` to `%s`', $input, $output)); + $this->info(sprintf('Decompressed: `%s` to `%s`', $input, $output)); }); Artisan::command('alttp:romtospr {rom} {output}', function ($rom, $output) { - if (filesize($rom) == 1048576 || filesize($rom) == 2097152) { - file_put_contents($output, file_get_contents($rom, false, null, 0x80000, 0x7000) - . file_get_contents($rom, false, null, 0xDD308, 120)); - } + if (filesize($rom) == 1048576 || filesize($rom) == 2097152) { + file_put_contents($output, file_get_contents($rom, false, null, 0x80000, 0x7000) + . file_get_contents($rom, false, null, 0xDD308, 120)); + } }); -Artisan::command('alttp:sprtopng {sprites}', function($sprites) { - if (is_dir($sprites)) { - $sprites = array_map(function($filename) use ($sprites) { - return "$sprites/$filename"; - }, scandir($sprites)); - $sprites = array_filter($sprites, function($file) { - return is_readable($file) && !in_array($file, ['.', '..']); - }); - } else { - if (!is_readable($filename)) { - return; - } - $sprites = [$sprites]; - } - foreach ($sprites as $spr_file) { - try { - $spr = new Zspr($spr_file); - } catch (Exception $e) { - continue; - } - - $sprite = $spr->getPixelBytes(); - $palette = array_map(function($bytes) { - return $bytes[0] + ($bytes[1] << 8); - }, array_chunk(array_slice($spr->getPaletteBytes(), 0, 30), 2)); - - $im = imagecreatetruecolor(16, 24); - imagesavealpha($im, true); - - $palettes = [imagecolorallocatealpha($im, 0, 0, 0, 127)]; - foreach ($palette as $color) { - $palettes[] = imagecolorallocate($im, ($color & 0x1F) * 8, (($color & 0x3E0) >> 5) * 8, (($color & 0x7C00) >> 10) * 8); - } - imagefill($im, 0, 0, $palettes[0]); - - // shadow - $shadow_color = imagecolorallocate($im, 40, 40, 40); - $shadow = [ - [0,0,0,1,1,1,1,1,1,0,0,0], - [0,1,1,1,1,1,1,1,1,1,1,0], - [1,1,1,1,1,1,1,1,1,1,1,1], - [1,1,1,1,1,1,1,1,1,1,1,1], - [0,1,1,1,1,1,1,1,1,1,1,0], - [0,0,0,1,1,1,1,1,1,0,0,0], - ]; - for ($y = 0; $y < 6; ++$y) { - for ($x = 0; $x < 12; ++$x) { - if ($shadow[$y][$x]) { - imagesetpixel($im, $x + 2, $y + 17, $shadow_color); - } - } - } - - $body = Sprite::load16x16($sprite, 0x4C0); - - for ($x = 0; $x < 16; ++$x) { - for ($y = 0; $y < 16; ++$y) { - imagesetpixel($im, $x, $y + 8, $palettes[$body[$x][$y]]); - } - } - - $head = Sprite::load16x16($sprite, 0x40); - - for ($x = 0; $x < 16; ++$x) { - for ($y = 0; $y < 16; ++$y) { - imagesetpixel($im, $x, $y, $palettes[$head[$x][$y]]); - } - } - - $dst = imagecreatetruecolor(16 * 8, 24 * 8); - imagealphablending($dst, false); - imagesavealpha($dst, true); - imagecopyresized($dst, $im, 0, 0, 0, 0, 16 * 8, 24 * 8, 16, 24); - - imagepng($im, "$spr_file.png"); - imagedestroy($im); - imagepng($dst, "$spr_file.lg.png"); - imagedestroy($dst); - - //montage *.zspr.lg.png -tile 6x -background none -geometry +4+4 sprites.X.lg.png - //montage *.zspr.png -tile x1 -background none -geometry +0+0 sprites.X.png - } +Artisan::command('alttp:sprtopng {sprites}', function ($sprites) { + if (is_dir($sprites)) { + $sprites = array_map(function ($filename) use ($sprites) { + return "$sprites/$filename"; + }, scandir($sprites)); + $sprites = array_filter($sprites, function ($file) { + return is_readable($file) && !in_array($file, ['.', '..']); + }); + } else { + if (!is_readable($sprites)) { + return; + } + $sprites = [$sprites]; + } + foreach ($sprites as $spr_file) { + try { + $spr = new Zspr($spr_file); + } catch (Exception $e) { + continue; + } + + $sprite = $spr->getPixelBytes(); + $palette = array_map(function ($bytes) { + return $bytes[0] + ($bytes[1] << 8); + }, array_chunk(array_slice($spr->getPaletteBytes(), 0, 30), 2)); + + $im = imagecreatetruecolor(16, 24); + imagesavealpha($im, true); + + $palettes = [imagecolorallocatealpha($im, 0, 0, 0, 127)]; + foreach ($palette as $color) { + $palettes[] = imagecolorallocate($im, ($color & 0x1F) * 8, (($color & 0x3E0) >> 5) * 8, (($color & 0x7C00) >> 10) * 8); + } + imagefill($im, 0, 0, $palettes[0]); + + // shadow + $shadow_color = imagecolorallocate($im, 40, 40, 40); + $shadow = [ + [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], + [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0], + ]; + for ($y = 0; $y < 6; ++$y) { + for ($x = 0; $x < 12; ++$x) { + if ($shadow[$y][$x]) { + imagesetpixel($im, $x + 2, $y + 17, $shadow_color); + } + } + } + + $body = Sprite::load16x16($sprite, 0x4C0); + + for ($x = 0; $x < 16; ++$x) { + for ($y = 0; $y < 16; ++$y) { + imagesetpixel($im, $x, $y + 8, $palettes[$body[$x][$y]]); + } + } + + $head = Sprite::load16x16($sprite, 0x40); + + for ($x = 0; $x < 16; ++$x) { + for ($y = 0; $y < 16; ++$y) { + imagesetpixel($im, $x, $y, $palettes[$head[$x][$y]]); + } + } + + $dst = imagecreatetruecolor(16 * 8, 24 * 8); + imagealphablending($dst, false); + imagesavealpha($dst, true); + imagecopyresized($dst, $im, 0, 0, 0, 0, 16 * 8, 24 * 8, 16, 24); + + imagepng($im, "$spr_file.png"); + imagedestroy($im); + imagepng($dst, "$spr_file.lg.png"); + imagedestroy($dst); + + //montage *.zspr.lg.png -tile 6x -background none -geometry +4+4 sprites.X.lg.png + //montage *.zspr.png -tile x1 -background none -geometry +0+0 sprites.X.png + } }); -Artisan::command('alttp:sprconf {sprites}', function($sprites) { - if (!is_dir($sprites)) { - return $this->error('Must be a directory of zsprs'); - } - - $sprites = array_map(function($filename) use ($sprites) { - return "$sprites/$filename"; - }, scandir($sprites)); - - $output = []; - $i = 0; - foreach ($sprites as $spr_file) { - try { - $spr = new Zspr($spr_file); - } catch (Exception $e) { - continue; - } - $output[basename($spr_file)] = [ - 'name' => $spr->getDisplayText(), - 'author' => $spr->getAuthor(), - ]; - $this->info(sprintf(".icon-custom-%s {background-position: percentage((%d - 215)/ 214) 0}", str_replace([' ', ')', '(', '.', "'"], '', $spr->getDisplayText()), ++$i)); - } - file_put_contents(config_path('sprites.php'), preg_replace('/ /', "\t", - preg_replace(["/^array \(/", "/\)$/", "/=>\s*array\s*\(/", "/\),/"], [" [', '],'], var_export($output, true)) - )); +Artisan::command('alttp:sprconf {sprites}', function ($sprites) { + if (!is_dir($sprites)) { + return $this->error('Must be a directory of zsprs'); + } + + $sprites = array_map(function ($filename) use ($sprites) { + return "$sprites/$filename"; + }, scandir($sprites)); + + $output = []; + $i = 0; + foreach ($sprites as $spr_file) { + try { + $spr = new Zspr($spr_file); + } catch (Exception $e) { + continue; + } + $output[basename($spr_file)] = [ + 'name' => $spr->getDisplayText(), + 'author' => $spr->getAuthor(), + ]; + $this->info(sprintf(".icon-custom-%s {background-position: percentage((%d - 236)/ 235) 0}", str_replace([' ', ')', '(', '.', "'"], '', $spr->getDisplayText()), ++$i)); + } + file_put_contents(config_path('sprites.php'), preg_replace( + '/ /', + " ", + preg_replace(["/^array \(/", "/\)$/", "/=>\s*array\s*\(/", "/\),/"], [" [', '],'], var_export($output, true)) + )); }); -Artisan::command('alttp:sprpub', function() { - foreach (Storage::disk('sprites')->allFiles('') as $file) { - if (preg_match('/\.DS_Store$/', $file)) { - continue; - } - if (preg_match('/\.gitignore$/', $file)) { - continue; - } - if (Storage::disk('images')->has($file)) { - continue; - } - - $this->info($file); - Storage::disk('images')->put($file, Storage::disk('sprites')->get($file), [ - 'headers' => [ - 'Access-Control-Expose-Headers' => 'Access-Control-Allow-Origin', - 'Access-Control-Allow-Origin' => '*', - ] - ]); - } +Artisan::command('alttp:sprpub', function () { + foreach (Storage::disk('sprites')->allFiles('') as $file) { + if (preg_match('/\.DS_Store$/', $file)) { + continue; + } + if (preg_match('/\.gitignore$/', $file)) { + continue; + } + if (Storage::disk('images')->has($file)) { + continue; + } + + $this->info($file); + Storage::disk('images')->put($file, Storage::disk('sprites')->get($file), [ + 'headers' => [ + 'Access-Control-Expose-Headers' => 'Access-Control-Allow-Origin', + 'Access-Control-Allow-Origin' => '*', + ] + ]); + } }); // this is a dirty hack to get some stats fast // @TODO: make this a proper command, and clean it up -Artisan::command('alttp:ss {dir} {outdir}', function($dir, $outdir) { - $files = scandir($dir); - $out = [ - 'items' => [ - 'spheres' => [], - 'full' => [], - 'required' => [], - ], - 'locations' => [ - 'spheres' => [], - 'full' => [], - 'required' => [], - ], - ]; - foreach ($files as $file) { - $data = json_decode(file_get_contents("$dir/$file"), true); - if (!$data) { - continue; - } - foreach ($data as $section => $sdata) { - if (in_array($section, ['playthrough', 'meta', 'Special', 'Shops'])) { - continue; - } - foreach ($sdata as $location => $item) { - if (strpos($item, 'Bottle') === 0) { - $item = 'Bottle'; - } - if (!isset($out['items']['full'][$item][$location])) { - $out['items']['full'][$item][$location] = 0; - } - if (!isset($out['locations']['full'][$location][$item])) { - $out['locations']['full'][$location][$item] = 0; - } - ++$out['items']['full'][$item][$location]; - ++$out['locations']['full'][$location][$item]; - } - - } - foreach ($data['playthrough'] as $key => $sphere) { - if (!is_numeric($key)) { - continue; - } - foreach (array_collapse($sphere) as $location => $item) { - if (strpos($item, 'Bottle') === 0) { - $item = 'Bottle'; - } - if (!isset($out['items']['spheres'][$item][$key])) { - $out['items']['spheres'][$item][$key] = 0; - } - if (!isset($out['locations']['spheres'][$location][$key])) { - $out['locations']['spheres'][$location][$key] = 0; - } - ++$out['items']['spheres'][$item][$key]; - ++$out['locations']['spheres'][$location][$key]; - if (!isset($out['items']['required'][$item][$location])) { - $out['items']['required'][$item][$location] = 0; - } - if (!isset($out['locations']['required'][$location][$item])) { - $out['locations']['required'][$location][$item] = 0; - } - ++$out['items']['required'][$item][$location]; - ++$out['locations']['required'][$location][$item]; - } - } - } - - foreach ($out as $key => $section) { - foreach ($section as $type => $data) { - $mdata = Distribution::_assureColumnsExist($data); - ksortr($mdata); - - $csv = fopen(sprintf("%s/%s_%s.csv", $outdir, $key, $type), 'w'); - fputcsv($csv, array_merge(['item'], array_keys(reset($mdata)))); - foreach ($mdata as $name => $item) { - fputcsv($csv, array_merge([$name], $item)); - } - fclose($csv); - } - } +Artisan::command('alttp:ss {dir} {outdir}', function ($dir, $outdir) { + $files = scandir($dir); + $out = [ + 'items' => [ + 'spheres' => [], + 'full' => [], + 'required' => [], + ], + 'locations' => [ + 'spheres' => [], + 'full' => [], + 'required' => [], + ], + ]; + foreach ($files as $file) { + $data = json_decode(file_get_contents("$dir/$file"), true); + if (!$data) { + continue; + } + foreach ($data as $section => $sdata) { + if (in_array($section, ['playthrough', 'meta', 'Special', 'Shops'])) { + continue; + } + foreach ($sdata as $location => $item) { + if (strpos($item, 'Bottle') === 0) { + $item = 'Bottle'; + } + if (!isset($out['items']['full'][$item][$location])) { + $out['items']['full'][$item][$location] = 0; + } + if (!isset($out['locations']['full'][$location][$item])) { + $out['locations']['full'][$location][$item] = 0; + } + ++$out['items']['full'][$item][$location]; + ++$out['locations']['full'][$location][$item]; + } + } + foreach ($data['playthrough'] as $key => $sphere) { + if (!is_numeric($key)) { + continue; + } + foreach (array_collapse($sphere) as $location => $item) { + if (strpos($item, 'Bottle') === 0) { + $item = 'Bottle'; + } + if (!isset($out['items']['spheres'][$item][$key])) { + $out['items']['spheres'][$item][$key] = 0; + } + if (!isset($out['locations']['spheres'][$location][$key])) { + $out['locations']['spheres'][$location][$key] = 0; + } + ++$out['items']['spheres'][$item][$key]; + ++$out['locations']['spheres'][$location][$key]; + if (!isset($out['items']['required'][$item][$location])) { + $out['items']['required'][$item][$location] = 0; + } + if (!isset($out['locations']['required'][$location][$item])) { + $out['locations']['required'][$location][$item] = 0; + } + ++$out['items']['required'][$item][$location]; + ++$out['locations']['required'][$location][$item]; + } + } + } + + foreach ($out as $key => $section) { + foreach ($section as $type => $data) { + $mdata = Distribution::_assureColumnsExist($data); + ksortr($mdata); + + $csv = fopen(sprintf("%s/%s_%s.csv", $outdir, $key, $type), 'w'); + fputcsv($csv, array_merge(['item'], array_keys(reset($mdata)))); + foreach ($mdata as $name => $item) { + fputcsv($csv, array_merge([$name], $item)); + } + fclose($csv); + } + } }); diff --git a/routes/web.php b/routes/web.php index fb714dba7..f01f175a0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,132 +1,127 @@ middleware('throttle:150,360'); - Route::get('randomizer/settings', 'SettingsController@item'); -Route::any('seed/{seed_id?}', 'ItemRandomizerController@generateSeed')->middleware('throttle:150,360'); - -Route::get('spoiler/{seed_id}', 'ItemRandomizerController@generateSpoiler'); - Route::get('sprites', 'SettingsController@sprites'); -Route::any('test/{seed_id?}', 'ItemRandomizerController@testGenerateSeed'); - -Route::any('hash/{hash}', function(Request $request, $hash) { - $cache_hash = 'hash.' . $hash; - $payload = cache($cache_hash); - if (!$payload) { - try { - cache([$cache_hash => Storage::get($hash . '.json')], now()->addDays(7)); - return cache($cache_hash); - } catch (\Exception $e) { - logger()->error($e); - } - abort(404); - } - - return $payload; +Route::any('hash/{hash}', static function ($hash) { + $cache_hash = 'hash.' . $hash; + $payload = cache($cache_hash); + if (!$payload) { + try { + $stored = Storage::get($hash . '.json'); + if (mb_strpos($stored, "\x1f\x8b") === 0) { + $stored = gzdecode($stored); + } + cache([$cache_hash => $stored], now()->addDays(7)); + return $stored; + } catch (\Exception $e) { + try { + cache([$cache_hash => Storage::get($hash . '.json')], now()->addDays(7)); + return cache($cache_hash); + } catch (\Exception $e2) { + logger()->error($e2->getMessage()); + } + } + abort(404); + } + + return $payload; }); // @TODO: perhaps a front end page that checks their localStorage for prefered locale? -Route::get('h/{hash}', function(Request $request, $hash) { - return redirect(config('app.locale') . '/h/' . $hash); +Route::get('h/{hash}', static function ($hash) { + return redirect(config('app.locale') . '/h/' . $hash); }); -Route::prefix('{lang?}')->middleware('locale')->group(function() { - Route::view('/', 'about'); +Route::prefix('{lang?}')->middleware('locale')->group(function () { + Route::view('/', 'about'); - Route::view('about', 'about'); + Route::view('about', 'about'); - Route::view('calendar', 'calendar'); + Route::view('calendar', 'calendar'); - Route::view('contribute', 'contribute'); + Route::view('contribute', 'contribute'); - Route::view('customize{r?}', 'customizer'); + Route::view('customize{r?}', 'customizer'); - Route::view('entrance/randomize{r?}', 'entrance_randomizer'); + Route::redirect('entrance/randomize{r?}', 'randomizer', 301); - Route::view('game_modes', 'options'); + Route::redirect('game_modes', 'options', 301); - Route::view('game_logics', 'options'); + Route::redirect('game_logics', 'options', 301); - Route::view('game_difficulties', 'options'); + Route::redirect('game_difficulties', 'options', 301); - Route::view('game_variations', 'options'); + Route::redirect('game_variations', 'options', 301); - Route::view('game_enemizer', 'game_enemizer'); + Route::redirect('game_enemizer', 'options', 301); - Route::view('game_entrance', 'game_entrance'); + Route::redirect('game_entrance', 'options', 301); - Route::view('help', 'start'); + Route::view('help', 'start'); - Route::redirect('info', 'help'); + Route::redirect('info', 'help', 301); - Route::view('options', 'options'); + Route::view('options', 'options'); - Route::view('races', 'races'); + Route::view('races', 'races'); - Route::view('randomize{r?}', 'randomizer'); + Route::view('randomize{r?}', 'randomizer'); - Route::view('resources', 'resources'); + Route::view('resources', 'resources'); - Route::redirect('special', '/'); + Route::redirect('special', '/'); - Route::view('sprite_preview', 'sprite_preview'); + Route::view('sprite_preview', 'sprite_preview'); - Route::view('start', 'start'); + Route::view('start', 'start'); - Route::view('updates', 'updates'); + Route::view('updates', 'updates'); - Route::view('watch', 'watch'); + Route::view('watch', 'watch'); - Route::get('daily', function(Request $request) { - $featured = ALttP\FeaturedGame::today(); - if (!$featured) { - $exitCode = Artisan::call('alttp:dailies', ['days' => 1]); - $featured = ALttP\FeaturedGame::today(); - } - $seed = $featured->seed; - if ($seed) { - $build = ALttP\Build::where('build', $seed->build)->first(); - if (!$build) { - abort(404); - } - return view('daily', [ - 'hash' => $seed->hash, - 'md5' => $build->hash, - 'patch' => $build->patch, - 'daily' => $featured->day, - ]); - } - abort(404); - }); + Route::get('daily', static function () { + $featured = ALttP\FeaturedGame::today(); + if (!$featured) { + $exitCode = Artisan::call('alttp:dailies', ['days' => 1]); + $featured = ALttP\FeaturedGame::today(); + } + $seed = $featured->seed; + if ($seed) { + $build = ALttP\Build::where('build', $seed->build)->first(); + if (!$build) { + abort(404); + } + return view('daily', [ + 'hash' => $seed->hash, + 'md5' => $build->hash, + 'patch' => $build->patch, + 'daily' => $featured->day, + ]); + } + abort(404); + }); - Route::get('h/{hash}', function(Request $request, $lang, $hash) { - $seed = ALttP\Seed::where('hash', $hash)->first(); - if ($seed) { - $build = ALttP\Build::where('build', $seed->build)->first(); - if (!$build) { - abort(404); - } - return view('patch_from_hash', [ - 'hash' => $hash, - 'md5' => $build->hash, - 'patch' => $build->patch, - 'seed' => $seed, - 'spoiler' => json_decode($seed->spoiler), - ]); - } - abort(404); - }); + Route::get('h/{hash}', static function ($lang, $hash) { + $seed = ALttP\Seed::where('hash', $hash)->first(); + if ($seed) { + $build = ALttP\Build::where('build', $seed->build)->first(); + if (!$build) { + abort(404); + } + return view('patch_from_hash', [ + 'hash' => $hash, + 'md5' => $build->hash, + 'patch' => $build->patch, + 'seed' => $seed, + 'spoiler' => json_decode($seed->spoiler), + ]); + } + abort(404); + }); }); - - diff --git a/server.php b/server.php index 823b50d67..0b68ff4b1 100644 --- a/server.php +++ b/server.php @@ -7,8 +7,8 @@ // This file allows us to emulate Apache's "mod_rewrite" functionality from the // built-in PHP web server. This provides a convenient way to test a Laravel // application without having installed a "real" web server software here. -if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { +if ($uri !== '/' && file_exists(__DIR__ . '/public' . $uri)) { return false; } -require_once __DIR__.'/public/index.php'; +require_once __DIR__ . '/public/index.php'; diff --git a/storage/design/customizer_items.psd b/storage/design/customizer_items.psd index e5d7bb356..988aee454 100644 Binary files a/storage/design/customizer_items.psd and b/storage/design/customizer_items.psd differ diff --git a/storage/design/logo.psd b/storage/design/logo.psd index 9614a5ffc..d1b90b0cd 100644 Binary files a/storage/design/logo.psd and b/storage/design/logo.psd differ diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore index d6b7ef32c..01e4a6cda 100644 --- a/storage/framework/cache/.gitignore +++ b/storage/framework/cache/.gitignore @@ -1,2 +1,3 @@ * +!data/ !.gitignore diff --git a/strings/ganon_1.txt b/strings/ganon_1.txt index 61bbdae53..83786504c 100644 --- a/strings/ganon_1.txt +++ b/strings/ganon_1.txt @@ -56,7 +56,7 @@ the majority of land slugs have two pairs of 'feelers' -,or tentacles, +or tentacles, on their head. - If you were a @@ -247,4 +247,4 @@ Duck will not betray you and in fact cannot speak. -- \ No newline at end of file +- diff --git a/strings/hint.txt b/strings/hint.txt index a24c0fdcd..c1d36a9ed 100644 --- a/strings/hint.txt +++ b/strings/hint.txt @@ -94,11 +94,37 @@ either. > A dog exists somewhere. > - -Your car keys -are in the -laundry. > +If all else +fails use +fire. > - -The umbrella +Items are +required to +win. > +- +Did you try +checking +vanilla? > +- +> If you find +my lunch, +don't eat it. +- +Deadrocks are +annoying. > +- +Mist Form is in the -break room. > +Catacombs. > +- +Maybe you +could hire a +detective? > +- +> READ +or the owl +will eat you. +- +> Bunnies +are cute. - diff --git a/strings/triforce.txt b/strings/triforce.txt index d5e74b95d..d4b5dc871 100644 --- a/strings/triforce.txt +++ b/strings/triforce.txt @@ -134,3 +134,7 @@ train. that bow placement? - +I promise the +next seed will +be better. +- diff --git a/strings/uncle.txt b/strings/uncle.txt index 1966e566a..7522d63d1 100644 --- a/strings/uncle.txt +++ b/strings/uncle.txt @@ -144,3 +144,33 @@ I must go my planet needs me - +Are we in +go mode yet? +- +Darn, I +thought this +was combo. +- +Don't check +anything I +wouldn't! +- +I know where +the bow is! +- +This message +will self +destruct. +- +Time to cast +Meteo on +Ganon! +- +I have a +long, full +life ahead! +- +Why did that +soda have a +skull on it? +- diff --git a/tests/Browser/ExampleTest.php b/tests/Browser/ExampleTest.php deleted file mode 100644 index 8cecde93f..000000000 --- a/tests/Browser/ExampleTest.php +++ /dev/null @@ -1,28 +0,0 @@ -browse(function (Browser $browser) { - $browser->visit('/') - ->assertTitle('ALttP VT Randomizer'); - }); - } - - public function testDifficultiesPage() { - $this->browse(function (Browser $browser) { - $browser->visit(new Difficulties) - ->assertSee("Normal"); - }); - } - -} diff --git a/tests/Browser/Pages/Difficulties.php b/tests/Browser/Pages/Difficulties.php deleted file mode 100644 index b1447aa21..000000000 --- a/tests/Browser/Pages/Difficulties.php +++ /dev/null @@ -1,18 +0,0 @@ -assertPathIs($this->url()); - } - - public function elements() { - return []; - } -} diff --git a/tests/Browser/Pages/HomePage.php b/tests/Browser/Pages/HomePage.php deleted file mode 100644 index 13bef0329..000000000 --- a/tests/Browser/Pages/HomePage.php +++ /dev/null @@ -1,34 +0,0 @@ - '#selector', - ]; - } -} diff --git a/tests/Browser/Pages/Page.php b/tests/Browser/Pages/Page.php deleted file mode 100644 index bfce5bff6..000000000 --- a/tests/Browser/Pages/Page.php +++ /dev/null @@ -1,16 +0,0 @@ - '#selector', - ]; - } -} diff --git a/tests/Browser/console/.gitignore b/tests/Browser/console/.gitignore deleted file mode 100644 index d6b7ef32c..000000000 --- a/tests/Browser/console/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/tests/Browser/console/testBasicExample-0.log b/tests/Browser/console/testBasicExample-0.log new file mode 100644 index 000000000..759b60fad --- /dev/null +++ b/tests/Browser/console/testBasicExample-0.log @@ -0,0 +1,32 @@ +[ + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/build\/css\/app-8e671e2d8b.css - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288662 + }, + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/build\/js\/app-3d50b16868.js - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288662 + }, + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/build\/js\/all-6554e95847.js - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288662 + }, + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/build\/js\/all-6554e95847.js - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288662 + }, + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/favicon.ico - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288685 + } +] \ No newline at end of file diff --git a/tests/Browser/console/testDifficultiesPage-0.log b/tests/Browser/console/testDifficultiesPage-0.log new file mode 100644 index 000000000..3d52cf9d5 --- /dev/null +++ b/tests/Browser/console/testDifficultiesPage-0.log @@ -0,0 +1,26 @@ +[ + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/build\/js\/app-3d50b16868.js - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288763 + }, + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/build\/css\/app-8e671e2d8b.css - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288763 + }, + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/build\/js\/all-6554e95847.js - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288763 + }, + { + "level": "SEVERE", + "message": "http:\/\/localhost:8000\/build\/js\/all-6554e95847.js - Failed to load resource: the server responded with a status of 404 (Not Found)", + "source": "network", + "timestamp": 1498097288778 + } +] \ No newline at end of file diff --git a/tests/Browser/screenshots/.gitignore b/tests/Browser/screenshots/.gitignore deleted file mode 100644 index d6b7ef32c..000000000 --- a/tests/Browser/screenshots/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php index add5d131d..ab9240255 100644 --- a/tests/CreatesApplication.php +++ b/tests/CreatesApplication.php @@ -1,18 +1,22 @@ -make(Kernel::class)->bootstrap(); + $app->make(Kernel::class)->bootstrap(); - return $app; - } + return $app; + } } diff --git a/tests/DuskTestCase.php b/tests/DuskTestCase.php deleted file mode 100644 index 89cdbe9ed..000000000 --- a/tests/DuskTestCase.php +++ /dev/null @@ -1,38 +0,0 @@ -addArguments([ - '--disable-gpu', - '--headless' - ]); - - return RemoteWebDriver::create( - 'http://localhost:9515', DesiredCapabilities::chrome()->setCapability( - ChromeOptions::CAPABILITY, $options - ) - ); - } -} diff --git a/tests/HelpersTest.php b/tests/HelpersTest.php index 6615af5a5..5f75ebf79 100644 --- a/tests/HelpersTest.php +++ b/tests/HelpersTest.php @@ -1,110 +1,118 @@ assertNotEquals(fy_shuffle($unshuffled), $unshuffled); - } + $this->assertNotEquals(fy_shuffle($unshuffled), $unshuffled); + } - public function testMtShuffleSameValues() { - $unshuffled = range(0, 1000); - $shuffled = fy_shuffle($unshuffled); + public function testMtShuffleSameValues() + { + $unshuffled = range(0, 1000); + $shuffled = fy_shuffle($unshuffled); - sort($unshuffled); - sort($shuffled); + sort($unshuffled); + sort($shuffled); - $this->assertEquals($unshuffled, $shuffled); - } + $this->assertEquals($unshuffled, $shuffled); + } - public function testKsortr() { - $unsorted = [ - 'zed' => [ - '1' => '2', - 'red' => '4', - 'fed' => 0, - ], - 'yo' => [ - '3' => 'hello', - 'goo' => 'foo', - 'bar' => 'baz', - ], - ]; - ksortr($unsorted); - $this->assertSame([ - 'yo' => [ - 'bar' => 'baz', - 'goo' => 'foo', - '3' => 'hello', - ], - 'zed' => [ - 'fed' => 0, - 'red' => '4', - '1' => '2', - ], - ], $unsorted); - } + public function testKsortr() + { + $unsorted = [ + 'zed' => [ + '1' => '2', + 'red' => '4', + 'fed' => 0, + ], + 'yo' => [ + '3' => 'hello', + 'goo' => 'foo', + 'bar' => 'baz', + ], + ]; + ksortr($unsorted); + $this->assertSame([ + 'yo' => [ + 'bar' => 'baz', + 'goo' => 'foo', + '3' => 'hello', + ], + 'zed' => [ + 'fed' => 0, + 'red' => '4', + '1' => '2', + ], + ], $unsorted); + } - public function testPatchMinify() { - $patch = [ - [1 => [2]], - [2 => [3]], - [5 => [5, 4]], - [2 => [4]], - ]; + public function testPatchMinify() + { + $patch = [ + [1 => [2]], + [2 => [3]], + [5 => [5, 4]], + [2 => [4]], + ]; - $this->assertEquals([ - [1 => [2, 4]], - [5 => [5, 4]], - ], patch_merge_minify($patch)); - } + $this->assertEquals([ + [1 => [2, 4]], + [5 => [5, 4]], + ], patch_merge_minify($patch)); + } - public function testPatchMinifyParam2() { - $patch = [ - [1 => [2]], - [2 => [3]], - [5 => [5, 4]], - [2 => [4]], - ]; + public function testPatchMinifyParam2() + { + $patch = [ + [1 => [2]], + [2 => [3]], + [5 => [5, 4]], + [2 => [4]], + ]; - $this->assertEquals([ - [1 => [2, 4]], - [5 => [5, 4]], - ], patch_merge_minify([], $patch)); - } + $this->assertEquals([ + [1 => [2, 4]], + [5 => [5, 4]], + ], patch_merge_minify([], $patch)); + } - public function testSnesToPc() { - $this->assertEquals(snes_to_pc(0x008123), 0x000123); - $this->assertEquals(snes_to_pc(0x808123), 0x000123); - $this->assertEquals(snes_to_pc(0x018456), 0x008456); - $this->assertEquals(snes_to_pc(0x818456), 0x008456); - $this->assertEquals(snes_to_pc(0x04FFFF), 0x027FFF); - $this->assertEquals(snes_to_pc(0x05FFFF), 0x02FFFF); - } - public function testPcToSnes() { - $this->assertEquals(pc_to_snes(0x000123), 0x008123); - $this->assertEquals(pc_to_snes(0x008456), 0x018456); - $this->assertEquals(pc_to_snes(0x027FFF), 0x04FFFF); - $this->assertEquals(pc_to_snes(0x02FFFF), 0x05FFFF); - } - - public function testPatchMergeMinify() { - $patch = [ - [1 => [2]], - [2 => [3]], - [5 => [5, 4]], - [2 => [4]], - ]; - $patch_2 = [ - [1 => [0]], - [2 => [2, 3, 4]], - [7 => [0, 1]], - [8 => [4]], - ]; - $this->assertEquals([ - [1 => [0, 2, 3, 4, 5, 4, 0, 4]], - ], patch_merge_minify($patch, $patch_2)); - } + public function testSnesToPc() + { + $this->assertEquals(snes_to_pc(0x008123), 0x000123); + $this->assertEquals(snes_to_pc(0x808123), 0x000123); + $this->assertEquals(snes_to_pc(0x018456), 0x008456); + $this->assertEquals(snes_to_pc(0x818456), 0x008456); + $this->assertEquals(snes_to_pc(0x04FFFF), 0x027FFF); + $this->assertEquals(snes_to_pc(0x05FFFF), 0x02FFFF); + } + public function testPcToSnes() + { + $this->assertEquals(pc_to_snes(0x000123), 0x008123); + $this->assertEquals(pc_to_snes(0x008456), 0x018456); + $this->assertEquals(pc_to_snes(0x027FFF), 0x04FFFF); + $this->assertEquals(pc_to_snes(0x02FFFF), 0x05FFFF); + } + public function testPatchMergeMinify() + { + $patch = [ + [1 => [2]], + [2 => [3]], + [5 => [5, 4]], + [2 => [4]], + ]; + $patch_2 = [ + [1 => [0]], + [2 => [2, 3, 4]], + [7 => [0, 1]], + [8 => [4]], + ]; + $this->assertEquals([ + [1 => [0, 2, 3, 4, 5, 4, 0, 4]], + ], patch_merge_minify($patch, $patch_2)); + } } diff --git a/tests/Inverted/ThievesTownTest.php b/tests/Inverted/ThievesTownTest.php index ce8926706..70c3c2c8d 100644 --- a/tests/Inverted/ThievesTownTest.php +++ b/tests/Inverted/ThievesTownTest.php @@ -1,4 +1,6 @@ -world = World::factory('inverted', 'test_rules', 'NoGlitches'); - $this->world->getRegion('Thieves Town')->setBoss(new Boss("Dummy Boss")); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - - - public function fillPool() { - return [ - ["Thieves' Town - Attic", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Attic", false, 'KeyD4', [], ['KeyD4']], - - ["Thieves' Town - Big Key Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Map Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Compass Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Ambush Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Big Chest", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Big Chest", true, 'KeyD4', [], ['KeyD4']], - - ["Thieves' Town - Blind's Cell", false, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Boss", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Boss", false, 'KeyD4', [], ['KeyD4']], - ]; - } - - public function accessPool() { - return [ - ["Thieves' Town - Attic", false, []], - ["Thieves' Town - Attic", false, [], ['BigKeyD4']], - ["Thieves' Town - Attic", false, [], ['KeyD4']], - ["Thieves' Town - Attic", true, ['BigKeyD4', 'KeyD4']], - - ["Thieves' Town - Big Key Chest", true, []], - - ["Thieves' Town - Map Chest", true, []], - - ["Thieves' Town - Compass Chest", true, []], - - ["Thieves' Town - Ambush Chest", true, []], - - ["Thieves' Town - Big Chest", false, []], - ["Thieves' Town - Big Chest", false, [], ['BigKeyD4']], - ["Thieves' Town - Big Chest", false, [], ['Hammer']], - ["Thieves' Town - Big Chest", true, ['Hammer', 'KeyD4', 'BigKeyD4']], - - ["Thieves' Town - Blind's Cell", false, []], - ["Thieves' Town - Blind's Cell", false, [], ['BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['BigKeyD4']], - - ["Thieves' Town - Boss", false, []], - ["Thieves' Town - Boss", false, [], ['BigKeyD4']], - ["Thieves' Town - Boss", false, [], ['KeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'BigKeyD4']], - ]; - } +class ThievesTownTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('inverted', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->world->getRegion('Thieves Town')->setBoss(new Boss("Dummy Boss")); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + + + public function fillPool() + { + return [ + ["Thieves' Town - Attic", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Attic", false, 'KeyD4', [], ['KeyD4']], + + ["Thieves' Town - Big Key Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Map Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Compass Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Ambush Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Big Chest", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Big Chest", true, 'KeyD4', [], ['KeyD4']], + + ["Thieves' Town - Blind's Cell", false, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Boss", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Boss", false, 'KeyD4', [], ['KeyD4']], + ]; + } + + public function accessPool() + { + return [ + ["Thieves' Town - Attic", false, []], + ["Thieves' Town - Attic", false, [], ['BigKeyD4']], + ["Thieves' Town - Attic", false, [], ['KeyD4']], + ["Thieves' Town - Attic", true, ['BigKeyD4', 'KeyD4']], + + ["Thieves' Town - Big Key Chest", true, []], + + ["Thieves' Town - Map Chest", true, []], + + ["Thieves' Town - Compass Chest", true, []], + + ["Thieves' Town - Ambush Chest", true, []], + + ["Thieves' Town - Big Chest", false, []], + ["Thieves' Town - Big Chest", false, [], ['BigKeyD4']], + ["Thieves' Town - Big Chest", false, [], ['Hammer']], + ["Thieves' Town - Big Chest", true, ['Hammer', 'KeyD4', 'BigKeyD4']], + + ["Thieves' Town - Blind's Cell", false, []], + ["Thieves' Town - Blind's Cell", false, [], ['BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['BigKeyD4']], + + ["Thieves' Town - Boss", false, []], + ["Thieves' Town - Boss", false, [], ['BigKeyD4']], + ["Thieves' Town - Boss", false, [], ['KeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'BigKeyD4']], + ]; + } } diff --git a/tests/Inverted/TurtleRockTest.php b/tests/Inverted/TurtleRockTest.php index d5c58b254..5fde302bc 100644 --- a/tests/Inverted/TurtleRockTest.php +++ b/tests/Inverted/TurtleRockTest.php @@ -8,244 +8,252 @@ /** * @group Inverted */ -class TurtleRockTest extends TestCase { - public function setUp() { - parent::setUp(); - $this->world = World::factory('inverted', 'test_rules', 'NoGlitches'); - $this->world->getRegion('Turtle Rock')->setBoss(new Boss("Dummy Boss")); - $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get('Quake')); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Turtle Rock - Chain Chomps", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Compass Chest", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Roller Room - Left", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Roller Room - Right", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Big Chest", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Big Key Chest", true, 'BigKeyD7', ['KeyD7', 'KeyD7'], ['BigKeyD7']], - - ["Turtle Rock - Crystaroller Room", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Left", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Right", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Left", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Right", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Boss", false, 'BigKeyD7', [], ['BigKeyD7']], - ["Turtle Rock - Boss", false, 'KeyD7', [], ['KeyD7']], - ]; - } - - public function accessPool() { - return [ - ["Turtle Rock - Chain Chomps", false, []], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - - ["Turtle Rock - Compass Chest", false, []], - ["Turtle Rock - Compass Chest", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - - ["Turtle Rock - Roller Room - Left", false, []], - ["Turtle Rock - Roller Room - Left", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Roller Room - Left", false, [], ['FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - - ["Turtle Rock - Roller Room - Right", false, []], - ["Turtle Rock - Roller Room - Right", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Roller Room - Right", false, [], ['FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - - ["Turtle Rock - Big Chest", false, []], - ["Turtle Rock - Big Chest", false, [], ['BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Big Key Chest", false, []], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - - ["Turtle Rock - Crystaroller Room", false, []], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Left", false, []], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Right", false, []], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Left", false, []], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Right", false, []], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Boss", false, []], - ["Turtle Rock - Boss", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Boss", false, [], ['BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ]; - } +class TurtleRockTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('inverted', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->world->getRegion('Turtle Rock')->setBoss(new Boss("Dummy Boss")); + $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get('Quake', $this->world)); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Turtle Rock - Chain Chomps", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Compass Chest", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Roller Room - Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Roller Room - Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Big Chest", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Big Key Chest", true, 'BigKeyD7', ['KeyD7', 'KeyD7'], ['BigKeyD7']], + + ["Turtle Rock - Crystaroller Room", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Boss", false, 'BigKeyD7', [], ['BigKeyD7']], + ["Turtle Rock - Boss", false, 'KeyD7', [], ['KeyD7']], + ]; + } + + public function accessPool() + { + return [ + ["Turtle Rock - Chain Chomps", false, []], + ["Turtle Rock - Chain Chomps", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + + ["Turtle Rock - Compass Chest", false, []], + ["Turtle Rock - Compass Chest", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + + ["Turtle Rock - Roller Room - Left", false, []], + ["Turtle Rock - Roller Room - Left", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Roller Room - Left", false, [], ['FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + + ["Turtle Rock - Roller Room - Right", false, []], + ["Turtle Rock - Roller Room - Right", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Roller Room - Right", false, [], ['FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + + ["Turtle Rock - Big Chest", false, []], + ["Turtle Rock - Big Chest", false, [], ['BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Big Key Chest", false, []], + ["Turtle Rock - Big Key Chest", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7']], + + ["Turtle Rock - Crystaroller Room", false, []], + ["Turtle Rock - Crystaroller Room", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['MoonPearl', 'Flute', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['MoonPearl', 'Flute', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Left", false, []], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Right", false, []], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Left", false, []], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Right", false, []], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Boss", false, []], + ["Turtle Rock - Boss", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Boss", false, [], ['BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ]; + } } diff --git a/tests/ItemTest.php b/tests/ItemTest.php index e83e6100f..555f32d4f 100644 --- a/tests/ItemTest.php +++ b/tests/ItemTest.php @@ -1,87 +1,110 @@ 0x31, 't1' => 0x90]); - - $this->assertEquals('Test', $item->getName()); - } - - public function testGetNiceName() { - $item = new Item('Test', 'Testing Item', [0x0F, 0x00, 't0' => 0x31, 't1' => 0x90]); - - $this->assertEquals('Testing Item', $item->getNiceName()); - } - - public function testToString() { - $item = new Item('Test', 'Testing Item', [0x0F]); - - $this->assertEquals('Testa:1:{i:0;i:15;}', (string) $item); - } - - public function testGetL1Sword() { - $this->assertEquals([0x49], Item::get('L1Sword')->getBytes()); - } - - public function testGetL1SwordAndShield() { - $this->assertEquals([0x00], Item::get('L1SwordAndShield')->getBytes()); - } - - public function testGetL2Sword() { - $this->assertEquals([0x01], Item::get('L2Sword')->getBytes()); - } - - public function testGetMasterSword() { - $this->assertEquals([0x50], Item::get('MasterSword')->getBytes()); - } - - public function testGetL3Sword() { - $this->assertEquals([0x02], Item::get('L3Sword')->getBytes()); - } - - public function testGetL4Sword() { - $this->assertEquals([0x03], Item::get('L4Sword')->getBytes()); - } - - public function testGetRupoor() { - $this->assertEquals([0x59], Item::get('Rupoor')->getBytes()); - } - - public function testGetRupoorWithByte() { - $this->assertEquals(Item::get('Rupoor'), Item::getWithByte(0x59)); - } - - public function testGetRupoorWithBytes() { - $this->assertEquals(Item::get('Rupoor'), Item::getWithBytes([0x59])); - } - - public function testGetNothing() { - $this->assertEquals([0x5A], Item::get('Nothing')->getBytes()); - } - - public function testGetRedClock() { - $this->assertEquals([0x5B], Item::get('RedClock')->getBytes()); - } - - public function testGetBlueClock() { - $this->assertEquals([0x5C], Item::get('BlueClock')->getBytes()); - } - - public function testGetGreenClock() { - $this->assertEquals([0x5D], Item::get('GreenClock')->getBytes()); - } - - public function testGetProgressiveSword() { - $this->assertEquals([0x5E], Item::get('ProgressiveSword')->getBytes()); - } - - public function testGetProgressiveShield() { - $this->assertEquals([0x5F], Item::get('ProgressiveShield')->getBytes()); - } - - public function testGetProgressiveArmor() { - $this->assertEquals([0x60], Item::get('ProgressiveArmor')->getBytes()); - } +use ALttP\World; + +class ItemTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + public function testGetName() + { + $item = new Item('Test', [0x0F, 0x00, 't0' => 0x31, 't1' => 0x90], $this->world); + + $this->assertEquals('Test:' . $this->world->id, $item->getName()); + } + + public function testGetNiceName() + { + $item = new Item('Test', [0x0F, 0x00, 't0' => 0x31, 't1' => 0x90], $this->world); + + $this->assertEquals('Testing Item', $item->getNiceName()); + } + + public function testToString() + { + $item = new Item('Test', [0x0F], $this->world); + + $this->assertEquals('Testa:1:{i:0;i:15;}', (string) $item); + } + + public function testGetL1Sword() + { + $this->assertEquals([0x49], Item::get('L1Sword', $this->world)->getBytes()); + } + + public function testGetL1SwordAndShield() + { + $this->assertEquals([0x00], Item::get('L1SwordAndShield', $this->world)->getBytes()); + } + + public function testGetL2Sword() + { + $this->assertEquals([0x01], Item::get('L2Sword', $this->world)->getBytes()); + } + + public function testGetMasterSword() + { + $this->assertEquals([0x50], Item::get('MasterSword', $this->world)->getBytes()); + } + + public function testGetL3Sword() + { + $this->assertEquals([0x02], Item::get('L3Sword', $this->world)->getBytes()); + } + + public function testGetL4Sword() + { + $this->assertEquals([0x03], Item::get('L4Sword', $this->world)->getBytes()); + } + + public function testGetRupoor() + { + $this->assertEquals([0x59], Item::get('Rupoor', $this->world)->getBytes()); + } + + public function testGetNothing() + { + $this->assertEquals([0x5A], Item::get('Nothing', $this->world)->getBytes()); + } + + public function testGetRedClock() + { + $this->assertEquals([0x5B], Item::get('RedClock', $this->world)->getBytes()); + } + + public function testGetBlueClock() + { + $this->assertEquals([0x5C], Item::get('BlueClock', $this->world)->getBytes()); + } + + public function testGetGreenClock() + { + $this->assertEquals([0x5D], Item::get('GreenClock', $this->world)->getBytes()); + } + + public function testGetProgressiveSword() + { + $this->assertEquals([0x5E], Item::get('ProgressiveSword', $this->world)->getBytes()); + } + + public function testGetProgressiveShield() + { + $this->assertEquals([0x5F], Item::get('ProgressiveShield', $this->world)->getBytes()); + } + + public function testGetProgressiveArmor() + { + $this->assertEquals([0x60], Item::get('ProgressiveArmor', $this->world)->getBytes()); + } } diff --git a/tests/LightWorldTest.php b/tests/LightWorldTest.php index df807985e..9cda733ea 100644 --- a/tests/LightWorldTest.php +++ b/tests/LightWorldTest.php @@ -5,20 +5,23 @@ /** * @group config */ -class LightWorldTest extends TestCase { - public function testBlacksmithAddressSwordShuffleOn() { - config(['alttp.test_rules.region.swordsInPool' => true]); +class LightWorldTest extends TestCase +{ + public function testBlacksmithAddressSwordShuffleOn() + { + $world = World::factory('standard', [ + 'region.swordsInPool' => true, + ]); - $world = World::factory('standard', 'test_rules'); + $this->assertEquals([0x18002A], $world->getLocation("Blacksmith")->getAddress()); + } - $this->assertEquals([0x18002A], $world->getLocation("Blacksmith")->getAddress()); - } + public function testBlacksmithAddressSwordShuffleOff() + { + $world = World::factory('standard', [ + 'region.swordsInPool' => false, + ]); - public function testBlacksmithAddressSwordShuffleOff() { - config(['alttp.test_rules.region.swordsInPool' => false]); - - $world = World::factory('standard', 'test_rules'); - - $this->assertEquals([0x3355C], $world->getLocation("Blacksmith")->getAddress()); - } + $this->assertEquals([0x3355C], $world->getLocation("Blacksmith")->getAddress()); + } } diff --git a/tests/MajorGlitches/DarkWorld/NorthEastTest.php b/tests/MajorGlitches/DarkWorld/NorthEastTest.php index 44fda26e3..e6731c262 100644 --- a/tests/MajorGlitches/DarkWorld/NorthEastTest.php +++ b/tests/MajorGlitches/DarkWorld/NorthEastTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } +class NorthEastTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); + //if ($access) { + // print_r(array_map(function($i) { + // return $i->getName(); + // }, $this->collected->values())); + // die; + //} - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Catfish", false, []], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove']], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove']], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'TitansMitt']], - ["Catfish", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Catfish", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Catfish", true, ['MoonPearl', 'TitansMitt', 'Flippers']], + public function accessPool() + { + return [ + ["Catfish", false, []], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove']], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove']], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'TitansMitt']], + ["Catfish", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Catfish", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Catfish", true, ['MoonPearl', 'TitansMitt', 'Flippers']], - ["Pyramid", false, []], - ["Pyramid", true, ['DefeatAgahnim']], - ["Pyramid", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Pyramid", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Pyramid", true, ['MoonPearl', 'TitansMitt', 'Flippers']], + ["Pyramid", false, []], + ["Pyramid", true, ['DefeatAgahnim']], + ["Pyramid", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Pyramid", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Pyramid", true, ['MoonPearl', 'TitansMitt', 'Flippers']], - ["Pyramid Fairy - Sword", false, []], - ["Pyramid Fairy - Sword", false, [], ['AnySword']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", false, []], + ["Pyramid Fairy - Sword", false, [], ['AnySword']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", false, []], - ["Pyramid Fairy - Bow", false, [], ['AnyBow']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", false, []], + ["Pyramid Fairy - Bow", false, [], ['AnyBow']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", false, []], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", false, []], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", false, []], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", false, []], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Ganon", false, []], - ["Ganon", false, [], ['MoonPearl']], - ["Ganon", false, [], ['DefeatAgahnim2']], - ]; - } + ["Ganon", false, []], + ["Ganon", false, [], ['MoonPearl']], + ["Ganon", false, [], ['DefeatAgahnim2']], + ]; + } } diff --git a/tests/MajorGlitches/DarkWorld/NorthWestTest.php b/tests/MajorGlitches/DarkWorld/NorthWestTest.php index f772a36eb..b4ed5746c 100644 --- a/tests/MajorGlitches/DarkWorld/NorthWestTest.php +++ b/tests/MajorGlitches/DarkWorld/NorthWestTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } +class NorthWestTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Brewery", false, []], - ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Brewery", true, ['MoonPearl', 'TitansMitt']], - ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Brewery", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + public function accessPool() + { + return [ + ["Brewery", false, []], + ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Brewery", true, ['MoonPearl', 'TitansMitt']], + ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Brewery", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["C-Shaped House", false, []], - ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["C-Shaped House", true, ['MoonPearl', 'TitansMitt']], - ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["C-Shaped House", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["C-Shaped House", true, []], - ["Chest Game", false, []], - ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Chest Game", true, ['MoonPearl', 'TitansMitt']], - ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Chest Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Chest Game", true, []], - ["Hammer Pegs", false, []], - ["Hammer Pegs", false, [], ['Hammer']], - ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'TitansMitt']], + ["Hammer Pegs", false, []], + ["Hammer Pegs", false, [], ['Hammer']], + ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'TitansMitt']], - ["Bumper Cave", false, []], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'TitansMitt']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'Hammer']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'PowerGlove', 'Hammer']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Bumper Cave", true, []], - ["Blacksmith", false, []], - ["Blacksmith", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Blacksmith", true, ['MoonPearl', 'TitansMitt']], + ["Blacksmith", false, []], + ["Blacksmith", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Blacksmith", true, ['MoonPearl', 'TitansMitt']], - ["Purple Chest", false, []], - ["Purple Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Purple Chest", true, ['MoonPearl', 'TitansMitt']], - ]; - } + ["Purple Chest", false, []], + ["Purple Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Purple Chest", true, ['MoonPearl', 'TitansMitt']], + ]; + } } diff --git a/tests/MajorGlitches/DarkWorld/SouthTest.php b/tests/MajorGlitches/DarkWorld/SouthTest.php index 955ee9b60..43b3cd3f5 100644 --- a/tests/MajorGlitches/DarkWorld/SouthTest.php +++ b/tests/MajorGlitches/DarkWorld/SouthTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } +class SouthTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Hype Cave - Top", false, []], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Top", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + public function accessPool() + { + return [ + ["Hype Cave - Top", false, []], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Top", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Middle Right", false, []], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Middle Right", false, []], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Middle Left", false, []], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Middle Left", false, []], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Bottom", false, []], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Bottom", false, []], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - NPC", false, []], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - NPC", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - NPC", false, []], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - NPC", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Stumpy", false, []], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Stumpy", true, ['MoonPearl', 'TitansMitt']], - ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Stumpy", false, []], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Stumpy", true, ['MoonPearl', 'TitansMitt']], + ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Digging Game", false, []], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Digging Game", true, ['MoonPearl', 'TitansMitt']], - ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ]; - } + ["Digging Game", false, []], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Digging Game", true, ['MoonPearl', 'TitansMitt']], + ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ]; + } } diff --git a/tests/MajorGlitches/DeathMountain/EastTest.php b/tests/MajorGlitches/DeathMountain/EastTest.php index 8d25de17c..7c683c50c 100644 --- a/tests/MajorGlitches/DeathMountain/EastTest.php +++ b/tests/MajorGlitches/DeathMountain/EastTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } +class EastTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Spiral Cave", false, []], - ["Spiral Cave", true, ['PegasusBoots']], - ["Spiral Cave", true, ['Flute', 'Hookshot']], - ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Spiral Cave", false, ['ProgressiveGlove', 'Hookshot']], + public function accessPool() + { + return [ + ["Spiral Cave", true, []], - ["Paradox Cave Lower - Far Left", false, []], - ["Paradox Cave Lower - Far Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Left", true, []], - ["Paradox Cave Lower - Left", false, []], - ["Paradox Cave Lower - Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Left", true, []], - ["Paradox Cave Lower - Middle", false, []], - ["Paradox Cave Lower - Middle", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Middle", true, []], - ["Paradox Cave Lower - Right", false, []], - ["Paradox Cave Lower - Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Right", true, []], - ["Paradox Cave Lower - Far Right", false, []], - ["Paradox Cave Lower - Far Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Right", true, []], - ["Paradox Cave Upper - Left", false, []], - ["Paradox Cave Upper - Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Left", true, []], - ["Paradox Cave Upper - Right", false, []], - ["Paradox Cave Upper - Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ]; - } + ["Paradox Cave Upper - Right", true, []], + ]; + } } diff --git a/tests/MajorGlitches/DesertPalaceTest.php b/tests/MajorGlitches/DesertPalaceTest.php index c5c0f058d..d28f75ff9 100644 --- a/tests/MajorGlitches/DesertPalaceTest.php +++ b/tests/MajorGlitches/DesertPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider entryPool - */ - public function testEntry(bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getRegion('Desert Palace') - ->canEnter($this->world->getLocations(), $this->collected)); - } - - public function entryPool() { - return [ - [true, ['BookOfMudora']], - [true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - [true, ['Flute', 'MagicMirror', 'TitansMitt']], - ]; - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Desert Palace - Big Key Chest", false, 'KeyP2', [], ['KeyP2']], - ["Desert Palace - Compass Chest", false, 'KeyP2', [], ['KeyP2']], - - ["Desert Palace - Big Chest", false, 'BigKeyP2', [], ['BigKeyP2']], - - ["Desert Palace - Boss", false, 'BigKeyP2', [], ['BigKeyP2']], - ["Desert Palace - Boss", false, 'KeyP2', [], ['KeyP2']], - ]; - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Desert Palace - Map Chest", false, []], - ["Desert Palace - Map Chest", true, ['BookOfMudora']], - ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Desert Palace - Big Chest", false, []], - ["Desert Palace - Big Chest", true, ['BookOfMudora', 'BigKeyP2']], - ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'BigKeyP2']], - - ["Desert Palace - Torch", false, []], - ["Desert Palace - Torch", false, [], ['PegasusBoots']], - ["Desert Palace - Torch", true, ['BookOfMudora', 'PegasusBoots']], - ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'PegasusBoots']], - ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'TitansMitt', 'PegasusBoots']], - - ["Desert Palace - Compass Chest", false, []], - ["Desert Palace - Compass Chest", false, [], ['KeyP2']], - ["Desert Palace - Compass Chest", true, ['BookOfMudora', 'KeyP2']], - ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], - ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], - - ["Desert Palace - Big Key Chest", false, []], - ["Desert Palace - Big Key Chest", false, [], ['KeyP2']], - ["Desert Palace - Big Key Chest", true, ['BookOfMudora', 'KeyP2']], - ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], - ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], - - ["Desert Palace - Boss", false, []], - ["Desert Palace - Boss", false, [], ['BigKeyP2']], - ["Desert Palace - Boss", false, [], ['Lamp', 'FireRod']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'PowerGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'PowerGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'TitansMitt', 'BigKeyP2']], - ]; - } +class DesertPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider entryPool + */ + public function testEntry(bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getRegion('Desert Palace') + ->canEnter($this->world->getLocations(), $this->collected)); + } + + public function entryPool() + { + return [ + [true, ['BookOfMudora']], + [true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + [true, ['Flute', 'MagicMirror', 'TitansMitt']], + ]; + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Desert Palace - Big Key Chest", false, 'KeyP2', [], ['KeyP2']], + ["Desert Palace - Compass Chest", false, 'KeyP2', [], ['KeyP2']], + + ["Desert Palace - Big Chest", false, 'BigKeyP2', [], ['BigKeyP2']], + + ["Desert Palace - Boss", false, 'BigKeyP2', [], ['BigKeyP2']], + ["Desert Palace - Boss", false, 'KeyP2', [], ['KeyP2']], + ]; + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPool() + { + return [ + ["Desert Palace - Map Chest", false, []], + ["Desert Palace - Map Chest", true, ['BookOfMudora']], + ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Desert Palace - Big Chest", false, []], + ["Desert Palace - Big Chest", true, ['BookOfMudora', 'BigKeyP2']], + ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'BigKeyP2']], + + ["Desert Palace - Torch", false, []], + ["Desert Palace - Torch", false, [], ['PegasusBoots']], + ["Desert Palace - Torch", true, ['BookOfMudora', 'PegasusBoots']], + ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'PegasusBoots']], + ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'TitansMitt', 'PegasusBoots']], + + ["Desert Palace - Compass Chest", false, []], + ["Desert Palace - Compass Chest", false, [], ['KeyP2']], + ["Desert Palace - Compass Chest", true, ['BookOfMudora', 'KeyP2']], + ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], + ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], + + ["Desert Palace - Big Key Chest", false, []], + ["Desert Palace - Big Key Chest", false, [], ['KeyP2']], + ["Desert Palace - Big Key Chest", true, ['BookOfMudora', 'KeyP2']], + ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], + ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], + + ["Desert Palace - Boss", false, []], + ["Desert Palace - Boss", false, [], ['BigKeyP2']], + ["Desert Palace - Boss", false, [], ['Lamp', 'FireRod']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'PowerGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'PowerGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'TitansMitt', 'BigKeyP2']], + ]; + } } diff --git a/tests/MajorGlitches/EasternPalaceTest.php b/tests/MajorGlitches/EasternPalaceTest.php index fbee0ae6c..c8f107c9c 100644 --- a/tests/MajorGlitches/EasternPalaceTest.php +++ b/tests/MajorGlitches/EasternPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - // Entry - public function testNothingRequiredToEnter() { - $this->assertTrue($this->world->getRegion('Eastern Palace') - ->canEnter($this->world->getLocations(), $this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Eastern Palace - Compass Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Cannonball Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Big Chest", false, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Map Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Big Key Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Boss", false, 'BigKeyP1', [], ['BigKeyP1']], - ]; - } - - public function accessPool() { - return [ - ["Eastern Palace - Compass Chest", true, []], - - ["Eastern Palace - Cannonball Chest", true, []], - - ["Eastern Palace - Big Chest", false, []], - ["Eastern Palace - Big Chest", false, [], ['BigKeyP1']], - ["Eastern Palace - Big Chest", true, ['BigKeyP1']], - - ["Eastern Palace - Map Chest", true, []], - - ["Eastern Palace - Big Key Chest", false, []], - ["Eastern Palace - Big Key Chest", false, [], ['Lamp']], - ["Eastern Palace - Big Key Chest", true, ['Lamp']], - - - ["Eastern Palace - Boss", false, []], - ["Eastern Palace - Boss", false, [], ['Lamp']], - ["Eastern Palace - Boss", false, [], ['AnyBow']], - ["Eastern Palace - Boss", false, [], ['BigKeyP1']], - ["Eastern Palace - Boss", true, ['Lamp', 'Bow', 'BigKeyP1']], - ]; - } +class EasternPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + // Entry + public function testNothingRequiredToEnter() + { + $this->assertTrue($this->world->getRegion('Eastern Palace') + ->canEnter($this->world->getLocations(), $this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Eastern Palace - Compass Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Cannonball Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Big Chest", false, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Map Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Big Key Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Boss", false, 'BigKeyP1', [], ['BigKeyP1']], + ]; + } + + public function accessPool() + { + return [ + ["Eastern Palace - Compass Chest", true, []], + + ["Eastern Palace - Cannonball Chest", true, []], + + ["Eastern Palace - Big Chest", false, []], + ["Eastern Palace - Big Chest", false, [], ['BigKeyP1']], + ["Eastern Palace - Big Chest", true, ['BigKeyP1']], + + ["Eastern Palace - Map Chest", true, []], + + ["Eastern Palace - Big Key Chest", false, []], + ["Eastern Palace - Big Key Chest", false, [], ['Lamp']], + ["Eastern Palace - Big Key Chest", true, ['Lamp']], + + + ["Eastern Palace - Boss", false, []], + ["Eastern Palace - Boss", false, [], ['Lamp']], + ["Eastern Palace - Boss", false, [], ['AnyBow']], + ["Eastern Palace - Boss", false, [], ['BigKeyP1']], + ["Eastern Palace - Boss", true, ['Lamp', 'BowAndArrows', 'BigKeyP1']], + ]; + } } diff --git a/tests/MajorGlitches/GanonsTowerTest.php b/tests/MajorGlitches/GanonsTowerTest.php index 436e95113..5d330719c 100644 --- a/tests/MajorGlitches/GanonsTowerTest.php +++ b/tests/MajorGlitches/GanonsTowerTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - +class GanonsTowerTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function fillPool() { - return [ - ["Ganon's Tower - Bob's Torch", true, 'BigKeyA2', [], ['BigKeyA2']], + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - ["Ganon's Tower - DMs Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - ["Ganon's Tower - DMs Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + $this->addCollected($items); - ["Ganon's Tower - DMs Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - ["Ganon's Tower - DMs Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - ["Ganon's Tower - Randomizer Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + $this->addCollected($items); - ["Ganon's Tower - Randomizer Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } - ["Ganon's Tower - Randomizer Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + public function fillPool() + { + return [ + ["Ganon's Tower - Bob's Torch", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Firesnake Room", true, 'BigKeyA2', [], ['BigKeyA2']], + ["Ganon's Tower - DMs Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Map Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + ["Ganon's Tower - DMs Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Big Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Hope Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], + ["Ganon's Tower - DMs Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - DMs Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Hope Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Bob's Chest", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Tile Room", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Chest", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Mini Helmasaur Room - Left", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Mini Helmasaur Room - Right", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Pre-Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - ]; - } - - public function accessPool() { - return [ - ["Ganon's Tower - Bob's Torch", false, []], - ["Ganon's Tower - Bob's Torch", false, [], ['PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - DMs Room - Top Left", false, []], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - DMs Room - Top Right", false, []], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - DMs Room - Bottom Left", false, []], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - DMs Room - Bottom Right", false, []], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Randomizer Room - Top Left", false, []], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Randomizer Room - Top Right", false, []], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Randomizer Room - Bottom Left", false, []], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Randomizer Room - Bottom Right", false, []], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Firesnake Room", false, []], - ["Ganon's Tower - Firesnake Room", false, [], ['Hammer']], - ["Ganon's Tower - Firesnake Room", false, [], ['Hookshot']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Map Chest", false, []], - ["Ganon's Tower - Map Chest", false, [], ['Hammer']], - ["Ganon's Tower - Map Chest", false, [], ['Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Big Chest", false, []], - ["Ganon's Tower - Big Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Hope Room - Left", false, []], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Hope Room - Right", false, []], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Bob's Chest", false, []], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Tile Room", false, []], - ["Ganon's Tower - Tile Room", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Compass Room - Top Left", false, []], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Compass Room - Top Right", false, []], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Compass Room - Bottom Left", false, []], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Compass Room - Bottom Right", false, []], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Big Key Chest", false, []], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Big Key Room - Left", false, []], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Big Key Room - Right", false, []], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Mini Helmasaur Room - Left", false, []], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['AnyBow']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['BigKeyA2']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Mini Helmasaur Room - Right", false, []], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['AnyBow']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['BigKeyA2']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Pre-Moldorm Chest", false, []], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['AnyBow']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Moldorm Chest", false, []], - ["Ganon's Tower - Moldorm Chest", false, [], ['Hookshot']], - ["Ganon's Tower - Moldorm Chest", false, [], ['AnyBow']], - ["Ganon's Tower - Moldorm Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ]; - } + ["Ganon's Tower - Randomizer Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Firesnake Room", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Map Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Hope Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Hope Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Bob's Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Tile Room", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Mini Helmasaur Room - Left", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Mini Helmasaur Room - Right", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Pre-Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + ]; + } + + public function accessPool() + { + return [ + ["Ganon's Tower - Bob's Torch", false, []], + ["Ganon's Tower - Bob's Torch", false, [], ['PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - DMs Room - Top Left", false, []], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - DMs Room - Top Right", false, []], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - DMs Room - Bottom Left", false, []], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - DMs Room - Bottom Right", false, []], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Randomizer Room - Top Left", false, []], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Randomizer Room - Top Right", false, []], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Randomizer Room - Bottom Left", false, []], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Randomizer Room - Bottom Right", false, []], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Firesnake Room", false, []], + ["Ganon's Tower - Firesnake Room", false, [], ['Hammer']], + ["Ganon's Tower - Firesnake Room", false, [], ['Hookshot']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Map Chest", false, []], + ["Ganon's Tower - Map Chest", false, [], ['Hammer']], + ["Ganon's Tower - Map Chest", false, [], ['Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Big Chest", false, []], + ["Ganon's Tower - Big Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Hope Room - Left", true, []], + + ["Ganon's Tower - Hope Room - Right", true, []], + + ["Ganon's Tower - Bob's Chest", false, []], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Tile Room", false, []], + ["Ganon's Tower - Tile Room", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Compass Room - Top Left", false, []], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Compass Room - Top Right", false, []], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Compass Room - Bottom Left", false, []], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Compass Room - Bottom Right", false, []], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Big Key Chest", false, []], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Big Key Room - Left", false, []], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Big Key Room - Right", false, []], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Mini Helmasaur Room - Left", false, []], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['AnyBow']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['BigKeyA2']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Mini Helmasaur Room - Right", false, []], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['AnyBow']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['BigKeyA2']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Pre-Moldorm Chest", false, []], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['AnyBow']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Moldorm Chest", false, []], + ["Ganon's Tower - Moldorm Chest", false, [], ['Hookshot']], + ["Ganon's Tower - Moldorm Chest", false, [], ['AnyBow']], + ["Ganon's Tower - Moldorm Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ]; + } } diff --git a/tests/MajorGlitches/HyruleCastleEscapeTest.php b/tests/MajorGlitches/HyruleCastleEscapeTest.php index 66be8aa0f..9378ef7bd 100644 --- a/tests/MajorGlitches/HyruleCastleEscapeTest.php +++ b/tests/MajorGlitches/HyruleCastleEscapeTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } +class HyruleCastleEscapeTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } - public function fillPool() { - return [ + public function fillPool() + { + return [ - ["Sanctuary", false, 'KeyH2', [], ['KeyH2']], + ["Sanctuary", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Left", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Left", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Middle", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Middle", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Right", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Right", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Dark Cross", true, 'KeyH2', [], ['KeyH2']], + ["Sewers - Dark Cross", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Boomerang Chest", true, 'KeyH2', [], ['KeyH2']], + ["Hyrule Castle - Boomerang Chest", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Map Chest", true, 'KeyH2', [], ['KeyH2']], + ["Hyrule Castle - Map Chest", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Zelda's Cell", true, 'KeyH2', [], ['KeyH2']], - ]; - } + ["Hyrule Castle - Zelda's Cell", true, 'KeyH2', [], ['KeyH2']], + ]; + } - public function accessPool() { - return [ - ["Sanctuary", true, ['L1Sword', 'KeyH2']], + public function accessPool() + { + return [ + ["Sanctuary", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Left", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Left", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Middle", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Middle", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Right", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Right", true, ['UncleSword', 'KeyH2']], - ["Sewers - Dark Cross", true, ['L1Sword']], + ["Sewers - Dark Cross", true, ['UncleSword']], - ["Hyrule Castle - Boomerang Chest", true, ['L1Sword']], + ["Hyrule Castle - Boomerang Chest", true, ['UncleSword']], - ["Hyrule Castle - Map Chest", true, ['L1Sword']], + ["Hyrule Castle - Map Chest", true, ['UncleSword']], - ["Hyrule Castle - Zelda's Cell", true, ['L1Sword']], - ]; - } + ["Hyrule Castle - Zelda's Cell", true, ['UncleSword']], + ]; + } } diff --git a/tests/MajorGlitches/HyruleCastleTowerTest.php b/tests/MajorGlitches/HyruleCastleTowerTest.php index ca7428cff..78c89d26a 100644 --- a/tests/MajorGlitches/HyruleCastleTowerTest.php +++ b/tests/MajorGlitches/HyruleCastleTowerTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } +class HyruleCastleTowerTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - // Entry + // Entry - // Completion - public function testSwordRequiredToComplete() { - $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') - ->canComplete($this->world->getLocations(), $this->allItemsExcept(['AnySword']))); - } + // Completion + public function testSwordRequiredToComplete() + { + $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') + ->canComplete($this->world->getLocations(), $this->allItemsExcept(['AnySword']))); + } } diff --git a/tests/MajorGlitches/IcePalaceTest.php b/tests/MajorGlitches/IcePalaceTest.php index 139896f07..13a5d472a 100644 --- a/tests/MajorGlitches/IcePalaceTest.php +++ b/tests/MajorGlitches/IcePalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } +class IcePalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } - public function fillPool() { - return [ - ["Ice Palace - Big Key Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + public function fillPool() + { + return [ + ["Ice Palace - Big Key Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Compass Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Compass Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Map Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Map Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Spike Room", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Spike Room", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Freezor Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Freezor Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Iced T Room", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Iced T Room", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Big Chest", false, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Big Chest", false, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Boss", false, 'BigKeyD5', [], ['BigKeyD5']], - ]; - } + ["Ice Palace - Boss", false, 'BigKeyD5', [], ['BigKeyD5']], + ]; + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Ice Palace - Big Key Chest", false, []], - ["Ice Palace - Big Key Chest", false, [], ['Gloves']], - ["Ice Palace - Big Key Chest", false, [], ['Hammer']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + public function accessPool() + { + return [ + ["Ice Palace - Big Key Chest", false, []], + ["Ice Palace - Big Key Chest", false, [], ['Gloves']], + ["Ice Palace - Big Key Chest", false, [], ['Hammer']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Compass Chest", false, []], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", false, []], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Map Chest", false, []], - ["Ice Palace - Map Chest", false, [], ['Gloves']], - ["Ice Palace - Map Chest", false, [], ['Hammer']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", false, []], + ["Ice Palace - Map Chest", false, [], ['Gloves']], + ["Ice Palace - Map Chest", false, [], ['Hammer']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", false, []], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", false, []], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Freezor Chest", false, []], - ["Ice Palace - Freezor Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", false, []], + ["Ice Palace - Freezor Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", false, []], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", false, []], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", false, []], - ["Ice Palace - Big Chest", false, [], ['BigKeyD5']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", false, []], + ["Ice Palace - Big Chest", false, [], ['BigKeyD5']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Boss", false, []], - ["Ice Palace - Boss", false, [], ['Gloves']], - ["Ice Palace - Boss", false, [], ['Hammer']], - //["Ice Palace - Boss", false, [], ['BigKeyD5']], - ["Ice Palace - Boss", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ]; - } + ["Ice Palace - Boss", false, []], + ["Ice Palace - Boss", false, [], ['Gloves']], + ["Ice Palace - Boss", false, [], ['Hammer']], + //["Ice Palace - Boss", false, [], ['BigKeyD5']], + ["Ice Palace - Boss", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ]; + } } diff --git a/tests/MajorGlitches/LightWorldTest.php b/tests/MajorGlitches/LightWorldTest.php index c61325361..404490d51 100644 --- a/tests/MajorGlitches/LightWorldTest.php +++ b/tests/MajorGlitches/LightWorldTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } +class LightWorldTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - $this->addCollected($items); + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->addCollected($items); - public function accessPool() { - return [ - ["Master Sword Pedestal", false, []], - ["Master Sword Pedestal", false, [], ['PendantOfCourage']], - ["Master Sword Pedestal", false, [], ['PendantOfWisdom']], - ["Master Sword Pedestal", false, [], ['PendantOfPower']], - ["Master Sword Pedestal", true, ['PendantOfCourage', 'PendantOfWisdom', 'PendantOfPower']], + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - ["Link's Uncle", true, []], + public function accessPool() + { + return [ + ["Master Sword Pedestal", false, []], + ["Master Sword Pedestal", false, [], ['PendantOfCourage']], + ["Master Sword Pedestal", false, [], ['PendantOfWisdom']], + ["Master Sword Pedestal", false, [], ['PendantOfPower']], + ["Master Sword Pedestal", true, ['PendantOfCourage', 'PendantOfWisdom', 'PendantOfPower']], - ["Secret Passage", true, ['L1Sword']], + ["Link's Uncle", true, []], - ["King's Tomb", false, []], - ["King's Tomb", false, [], ['PegasusBoots']], - ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'ProgressiveGlove']], - ["King's Tomb", true, ['PegasusBoots', 'TitansMitt']], - ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'PowerGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["Secret Passage", true, ['UncleSword']], - ["Floodgate Chest", true, []], + ["King's Tomb", false, []], + ["King's Tomb", false, [], ['PegasusBoots']], + ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'ProgressiveGlove']], + ["King's Tomb", true, ['PegasusBoots', 'TitansMitt']], + ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'PowerGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MoonPearl', 'MagicMirror']], + + ["Floodgate Chest", true, []], + + ["Link's House", true, []], + + ["Kakariko Tavern", true, []], + + ["Chicken House", true, []], + + ["Aginah's Cave", true, []], + + ["Sahasrahla's Hut - Left", true, []], + + ["Sahasrahla's Hut - Middle", true, []], + + ["Sahasrahla's Hut - Right", true, []], + + ["Kakariko Well - Top", true, []], + + ["Kakariko Well - Left", true, []], + + ["Kakariko Well - Middle", true, []], + + ["Kakariko Well - Right", true, []], + + ["Kakariko Well - Bottom", true, []], + + ["Blind's Hideout - Top", true, []], + + ["Blind's Hideout - Left", true, []], + + ["Blind's Hideout - Right", true, []], + + ["Blind's Hideout - Far Left", true, []], + + ["Blind's Hideout - Far Right", true, []], + + ["Pegasus Rocks", false, []], + ["Pegasus Rocks", false, [], ['PegasusBoots']], + ["Pegasus Rocks", true, ['PegasusBoots']], + + ["Mini Moldorm Cave - Far Left", true, []], + + ["Mini Moldorm Cave - Left", true, []], + + ["Mini Moldorm Cave - Right", true, []], - ["Link's House", true, []], - - ["Kakariko Tavern", true, []], + ["Mini Moldorm Cave - Far Right", true, []], - ["Chicken House", true, []], + ["Ice Rod Cave", true, []], - ["Aginah's Cave", true, []], + ["Bottle Merchant", true, []], - ["Sahasrahla's Hut - Left", true, []], + ["Sahasrahla", false, []], + ["Sahasrahla", false, [], ['PendantOfCourage']], + ["Sahasrahla", true, ['PendantOfCourage']], - ["Sahasrahla's Hut - Middle", true, []], + ["Magic Bat", false, []], + ["Magic Bat", false, [], ['Powder']], + ["Magic Bat", true, ['Powder', 'Hammer']], + ["Magic Bat", true, ['Powder', 'ProgressiveGlove', 'ProgressiveGlove', 'MoonPearl', 'MagicMirror']], + ["Magic Bat", true, ['Powder', 'TitansMitt', 'MoonPearl', 'MagicMirror']], - ["Sahasrahla's Hut - Right", true, []], + ["Sick Kid", false, []], + ["Sick Kid", false, [], ['AnyBottle']], + ["Sick Kid", true, ['BottleWithBee']], + ["Sick Kid", true, ['BottleWithFairy']], + ["Sick Kid", true, ['BottleWithRedPotion']], + ["Sick Kid", true, ['BottleWithGreenPotion']], + ["Sick Kid", true, ['BottleWithBluePotion']], + ["Sick Kid", true, ['Bottle']], + ["Sick Kid", true, ['BottleWithGoldBee']], - ["Kakariko Well - Top", true, []], + ["Hobo", true, []], - ["Kakariko Well - Left", true, []], - - ["Kakariko Well - Middle", true, []], - - ["Kakariko Well - Right", true, []], - - ["Kakariko Well - Bottom", true, []], - - ["Blind's Hideout - Top", true, []], - - ["Blind's Hideout - Left", true, []], - - ["Blind's Hideout - Right", true, []], - - ["Blind's Hideout - Far Left", true, []], - - ["Blind's Hideout - Far Right", true, []], - - ["Pegasus Rocks", false, []], - ["Pegasus Rocks", false, [], ['PegasusBoots']], - ["Pegasus Rocks", true, ['PegasusBoots']], - - ["Mini Moldorm Cave - Far Left", true, []], - - ["Mini Moldorm Cave - Left", true, []], - - ["Mini Moldorm Cave - Right", true, []], - - ["Mini Moldorm Cave - Far Right", true, []], - - ["Ice Rod Cave", true, []], - - ["Bottle Merchant", true, []], + ["Bombos Tablet", false, []], + ["Bombos Tablet", false, [], ['UpgradedSword']], + ["Bombos Tablet", false, [], ['BookOfMudora']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Sahasrahla", false, []], - ["Sahasrahla", false, [], ['PendantOfCourage']], - ["Sahasrahla", true, ['PendantOfCourage']], - - ["Magic Bat", false, []], - ["Magic Bat", false, [], ['Powder']], - ["Magic Bat", true, ['Powder', 'Hammer']], - ["Magic Bat", true, ['Powder', 'ProgressiveGlove', 'ProgressiveGlove', 'MoonPearl', 'MagicMirror']], - ["Magic Bat", true, ['Powder', 'TitansMitt', 'MoonPearl', 'MagicMirror']], - - ["Sick Kid", false, []], - ["Sick Kid", false, [], ['AnyBottle']], - ["Sick Kid", true, ['BottleWithBee']], - ["Sick Kid", true, ['BottleWithFairy']], - ["Sick Kid", true, ['BottleWithRedPotion']], - ["Sick Kid", true, ['BottleWithGreenPotion']], - ["Sick Kid", true, ['BottleWithBluePotion']], - ["Sick Kid", true, ['Bottle']], - ["Sick Kid", true, ['BottleWithGoldBee']], + ["King Zora", true, []], - ["Hobo", true, []], + ["Lost Woods Hideout", true, []], - ["Bombos Tablet", false, []], - ["Bombos Tablet", false, [], ['UpgradedSword']], - ["Bombos Tablet", false, [], ['BookOfMudora']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Lumberjack Tree", false, []], + ["Lumberjack Tree", false, [], ['PegasusBoots']], + ["Lumberjack Tree", false, [], ['DefeatAgahnim']], + ["Lumberjack Tree", true, ['PegasusBoots', 'DefeatAgahnim']], - ["King Zora", true, []], + ["Cave 45", true, []], - ["Lost Woods Hideout", true, []], - - ["Lumberjack Tree", false, []], - ["Lumberjack Tree", false, [], ['PegasusBoots']], - ["Lumberjack Tree", false, [], ['DefeatAgahnim']], - ["Lumberjack Tree", true, ['PegasusBoots', 'DefeatAgahnim']], - - ["Cave 45", false, []], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Graveyard Ledge", false, []], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Checkerboard Cave", false, []], - ["Checkerboard Cave", false, [], ['Gloves']], - ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Mini Moldorm Cave - NPC", true, []], - - ["Library", false, []], - ["Library", false, [], ['PegasusBoots']], - ["Library", true, ['PegasusBoots']], - - ["Mushroom", true, []], - - ["Potion Shop", false, []], - ["Potion Shop", false, [], ['Mushroom']], - ["Potion Shop", true, ['Mushroom']], - - ["Maze Race", true, []], - - ["Desert Ledge", false, []], - ["Desert Ledge", true, ['BookOfMudora']], - ["Desert Ledge", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Desert Ledge", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Lake Hylia Island", false, []], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'DefeatAgahnim']], - - ["Sunken Treasure", true, []], - - ["Zora's Ledge", false, []], - ["Zora's Ledge", true, ['Flippers']], - ["Zora's Ledge", true, ['MoonPearl', 'PegasusBoots']], - - ["Flute Spot", false, []], - ["Flute Spot", false, [], ['Shovel']], - ["Flute Spot", true, ['Shovel']], - - ["Waterfall Fairy - Left", false, []], - ["Waterfall Fairy - Left", false, [], ['Flippers', 'MoonPearl']], - ["Waterfall Fairy - Left", true, ['Flippers']], - ["Waterfall Fairy - Left", true, ['MoonPearl']], - - ["Waterfall Fairy - Right", false, []], - ["Waterfall Fairy - Right", false, [], ['Flippers', 'MoonPearl']], - ["Waterfall Fairy - Right", true, ['Flippers']], - ["Waterfall Fairy - Right", true, ['MoonPearl']], - ]; - } + ["Graveyard Ledge", false, []], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Checkerboard Cave", false, []], + ["Checkerboard Cave", false, [], ['Gloves']], + ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Mini Moldorm Cave - NPC", true, []], + + ["Library", false, []], + ["Library", false, [], ['PegasusBoots']], + ["Library", true, ['PegasusBoots']], + + ["Mushroom", true, []], + + ["Potion Shop", false, []], + ["Potion Shop", false, [], ['Mushroom']], + ["Potion Shop", true, ['Mushroom']], + + ["Maze Race", true, []], + + ["Desert Ledge", false, []], + ["Desert Ledge", true, ['BookOfMudora']], + ["Desert Ledge", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Desert Ledge", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Lake Hylia Island", true, []], + + ["Sunken Treasure", true, []], + + ["Zora's Ledge", false, []], + ["Zora's Ledge", true, ['Flippers']], + ["Zora's Ledge", true, ['PegasusBoots']], + + ["Flute Spot", false, []], + ["Flute Spot", false, [], ['Shovel']], + ["Flute Spot", true, ['Shovel']], + + ["Waterfall Fairy - Left", false, []], + ["Waterfall Fairy - Left", true, ['Flippers']], + ["Waterfall Fairy - Left", true, ['MoonPearl']], + ["Waterfall Fairy - Left", true, ['PegasusBoots']], + + ["Waterfall Fairy - Right", false, []], + ["Waterfall Fairy - Right", true, ['Flippers']], + ["Waterfall Fairy - Right", true, ['MoonPearl']], + ["Waterfall Fairy - Right", true, ['PegasusBoots']], + ]; + } } diff --git a/tests/MajorGlitches/MiseryMireTest.php b/tests/MajorGlitches/MiseryMireTest.php index 7eabeb191..1fbdb809d 100644 --- a/tests/MajorGlitches/MiseryMireTest.php +++ b/tests/MajorGlitches/MiseryMireTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - - $this->world->getLocation("Misery Mire Medallion")->setItem(Item::get('Ether')); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Misery Mire - Big Chest", false, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Main Lobby", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Big Key Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Compass Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Bridge Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Map Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Spike Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Boss", false, 'BigKeyD6', [], ['BigKeyD6']], - ]; - } - - public function accessPool() { - return [ - ["Misery Mire - Big Chest", false, []], - ["Misery Mire - Big Chest", false, [], ['BigKeyD6']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Main Lobby", false, []], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Big Key Chest", false, []], - ["Misery Mire - Big Key Chest", false, [], ['FireRod', 'Lamp']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Compass Chest", false, []], - ["Misery Mire - Compass Chest", false, [], ['FireRod', 'Lamp']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Bridge Chest", false, []], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Map Chest", false, []], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Spike Chest", false, []], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'Cape']], - - ["Misery Mire - Boss", false, []], - ["Misery Mire - Boss", false, [], ['Lamp']], - ["Misery Mire - Boss", false, [], ['CaneOfSomaria']], - ["Misery Mire - Boss", false, [], ['BigKeyD6']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ]; - } +class MiseryMireTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + + $this->world->getLocation("Misery Mire Medallion")->setItem(Item::get('Ether', $this->world)); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Misery Mire - Big Chest", false, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Main Lobby", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Big Key Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Compass Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Bridge Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Map Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Spike Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Boss", false, 'BigKeyD6', [], ['BigKeyD6']], + ]; + } + + public function accessPool() + { + return [ + ["Misery Mire - Big Chest", false, []], + ["Misery Mire - Big Chest", false, [], ['BigKeyD6']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Main Lobby", false, []], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Big Key Chest", false, []], + ["Misery Mire - Big Key Chest", false, [], ['FireRod', 'Lamp']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Compass Chest", false, []], + ["Misery Mire - Compass Chest", false, [], ['FireRod', 'Lamp']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Bridge Chest", false, []], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Map Chest", false, []], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Spike Chest", false, []], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'Cape']], + + ["Misery Mire - Boss", false, []], + ["Misery Mire - Boss", false, [], ['Lamp']], + ["Misery Mire - Boss", false, [], ['CaneOfSomaria']], + ["Misery Mire - Boss", false, [], ['BigKeyD6']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ]; + } } diff --git a/tests/MajorGlitches/PalaceOfDarknessTest.php b/tests/MajorGlitches/PalaceOfDarknessTest.php index bd9e0d426..e3fc82dad 100644 --- a/tests/MajorGlitches/PalaceOfDarknessTest.php +++ b/tests/MajorGlitches/PalaceOfDarknessTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Palace of Darkness - Big Key Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - The Arena - Ledge", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - The Arena - Bridge", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Big Chest", false, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Compass Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Harmless Hellway", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Stalfos Basement", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Basement - Left", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Basement - Right", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Map Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Maze - Top", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Maze - Bottom", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Shooter Room", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Boss", false, 'BigKeyD1', [], ['BigKeyD1']], - ]; - } - - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Palace of Darkness - Big Key Chest", false, []], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - The Arena - Ledge", false, []], - ["Palace of Darkness - The Arena - Ledge", false, [], ['AnyBow']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - The Arena - Bridge", false, []], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'PowerGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], - - ["Palace of Darkness - Big Chest", false, []], - ["Palace of Darkness - Big Chest", false, [], ['Lamp']], - ["Palace of Darkness - Big Chest", false, [], ['BigKeyD1']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Compass Chest", false, []], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Harmless Hellway", false, []], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Stalfos Basement", false, []], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'PowerGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Basement - Left", false, []], - ["Palace of Darkness - Dark Basement - Left", false, [], ['Lamp']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Basement - Right", false, []], - ["Palace of Darkness - Dark Basement - Right", false, [], ['Lamp']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Map Chest", false, []], - ["Palace of Darkness - Map Chest", false, [], ['AnyBow']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Maze - Top", false, []], - ["Palace of Darkness - Dark Maze - Top", false, [], ['Lamp']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Maze - Bottom", false, []], - ["Palace of Darkness - Dark Maze - Bottom", false, [], ['Lamp']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Shooter Room", false, []], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Boss", false, []], - ["Palace of Darkness - Boss", false, [], ['Lamp']], - ["Palace of Darkness - Boss", false, [], ['Hammer']], - ["Palace of Darkness - Boss", false, [], ['AnyBow']], - ["Palace of Darkness - Boss", false, [], ['BigKeyD1']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'DefeatAgahnim']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'PowerGlove']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'TitansMitt']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'ProgressiveGlove']], - ]; - } +class PalaceOfDarknessTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Palace of Darkness - Big Key Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - The Arena - Ledge", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - The Arena - Bridge", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Big Chest", false, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Compass Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Harmless Hellway", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Stalfos Basement", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Basement - Left", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Basement - Right", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Map Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Maze - Top", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Maze - Bottom", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Shooter Room", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Boss", false, 'BigKeyD1', [], ['BigKeyD1']], + ]; + } + + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPool() + { + return [ + ["Palace of Darkness - Big Key Chest", false, []], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - The Arena - Ledge", false, []], + ["Palace of Darkness - The Arena - Ledge", false, [], ['AnyBow']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - The Arena - Bridge", false, []], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'PowerGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], + + ["Palace of Darkness - Big Chest", false, []], + ["Palace of Darkness - Big Chest", false, [], ['Lamp']], + ["Palace of Darkness - Big Chest", false, [], ['BigKeyD1']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Compass Chest", false, []], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Harmless Hellway", false, []], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Stalfos Basement", false, []], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'PowerGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Basement - Left", false, []], + ["Palace of Darkness - Dark Basement - Left", false, [], ['Lamp']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Basement - Right", false, []], + ["Palace of Darkness - Dark Basement - Right", false, [], ['Lamp']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Map Chest", false, []], + ["Palace of Darkness - Map Chest", false, [], ['AnyBow']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Maze - Top", false, []], + ["Palace of Darkness - Dark Maze - Top", false, [], ['Lamp']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Maze - Bottom", false, []], + ["Palace of Darkness - Dark Maze - Bottom", false, [], ['Lamp']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Shooter Room", true, []], + + ["Palace of Darkness - Boss", false, []], + ["Palace of Darkness - Boss", false, [], ['Lamp']], + ["Palace of Darkness - Boss", false, [], ['Hammer']], + ["Palace of Darkness - Boss", false, [], ['AnyBow']], + ["Palace of Darkness - Boss", false, [], ['BigKeyD1']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'DefeatAgahnim']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'PowerGlove']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'TitansMitt']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'ProgressiveGlove']], + ]; + } } diff --git a/tests/MajorGlitches/SkullWoodsTest.php b/tests/MajorGlitches/SkullWoodsTest.php index 3312fea66..7c1be547f 100644 --- a/tests/MajorGlitches/SkullWoodsTest.php +++ b/tests/MajorGlitches/SkullWoodsTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Skull Woods - Big Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Big Key Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Compass Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Map Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Bridge Room", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Pot Prison", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Pinball Room", false, 'BigKeyD3', [], ['BigKeyD3']], - ["Skull Woods - Pinball Room", true, 'KeyD3', [], ['KeyD3']], - - ["Skull Woods - Boss", true, 'BigKeyD3', [], ['BigKeyD3']], - ["Skull Woods - Boss", false, 'KeyD3', [], ['KeyD3']], - ]; - } - - public function accessPool() { - return [ - ["Skull Woods - Big Chest", false, []], - ["Skull Woods - Big Chest", false, [], ['BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'TitansMitt', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD3']], - - ["Skull Woods - Big Key Chest", false, []], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Compass Chest", false, []], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Map Chest", false, []], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Bridge Room", false, []], - ["Skull Woods - Bridge Room", false, [], ['FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'TitansMitt', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod']], - - ["Skull Woods - Pot Prison", false, []], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Pinball Room", false, []], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Boss", false, []], - ["Skull Woods - Boss", false, [], ['FireRod']], - ["Skull Woods - Boss", false, [], ['AnySword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ]; - } +class SkullWoodsTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Skull Woods - Big Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Big Key Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Compass Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Map Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Bridge Room", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Pot Prison", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Pinball Room", false, 'BigKeyD3', [], ['BigKeyD3']], + ["Skull Woods - Pinball Room", true, 'KeyD3', [], ['KeyD3']], + + ["Skull Woods - Boss", true, 'BigKeyD3', [], ['BigKeyD3']], + ["Skull Woods - Boss", false, 'KeyD3', [], ['KeyD3']], + ]; + } + + public function accessPool() + { + return [ + ["Skull Woods - Big Chest", false, []], + ["Skull Woods - Big Chest", false, [], ['BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'TitansMitt', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD3']], + + ["Skull Woods - Big Key Chest", true, []], + + ["Skull Woods - Compass Chest", true, []], + + ["Skull Woods - Map Chest", true, []], + + ["Skull Woods - Bridge Room", false, []], + ["Skull Woods - Bridge Room", false, [], ['FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'TitansMitt', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod']], + + ["Skull Woods - Pot Prison", true, []], + + ["Skull Woods - Pinball Room", true, []], + + ["Skull Woods - Boss", false, []], + ["Skull Woods - Boss", false, [], ['FireRod']], + ["Skull Woods - Boss", false, [], ['AnySword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ]; + } } diff --git a/tests/MajorGlitches/SwampPalaceTest.php b/tests/MajorGlitches/SwampPalaceTest.php index 09e5dbd7d..59939bddc 100644 --- a/tests/MajorGlitches/SwampPalaceTest.php +++ b/tests/MajorGlitches/SwampPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - - $this->world->getLocation("Misery Mire Medallion")->setItem(Item::get('Ether')); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Swamp Palace - Entrance", false, 'BigKeyD2', [], ['BigKeyD2']], - ["Swamp Palace - Entrance", true, 'KeyD2', [], ['KeyD2']], - - ["Swamp Palace - Big Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Big Key Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Map Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - West Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Compass Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Flooded Room - Left", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Flooded Room - Right", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Waterfall Room", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Boss", true, 'BigKeyD2', [], ['BigKeyD2']], - ]; - } - - public function accessPool() { - return [ - ["Swamp Palace - Entrance", false, []], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], - - ["Swamp Palace - Big Chest", false, []], - ["Swamp Palace - Big Chest", false, [], ['Flippers']], - ["Swamp Palace - Big Chest", false, [], ['BigKeyD2', 'BigKeyD6', 'BigKeyP3']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Big Key Chest", false, []], - ["Swamp Palace - Big Key Chest", false, [], ['Flippers']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Map Chest", false, []], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], - - ["Swamp Palace - West Chest", false, []], - ["Swamp Palace - West Chest", false, [], ['Flippers']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Compass Chest", false, []], - ["Swamp Palace - Compass Chest", false, [], ['Flippers']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Flooded Room - Left", false, []], - ["Swamp Palace - Flooded Room - Left", false, [], ['Flippers']], - ["Swamp Palace - Flooded Room - Left", false, [], ['Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Flooded Room - Right", false, []], - ["Swamp Palace - Flooded Room - Right", false, [], ['Flippers']], - ["Swamp Palace - Flooded Room - Right", false, [], ['Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Waterfall Room", false, []], - ["Swamp Palace - Waterfall Room", false, [], ['Flippers']], - ["Swamp Palace - Waterfall Room", false, [], ['Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Boss", false, []], - ["Swamp Palace - Boss", false, [], ['Flippers']], - ["Swamp Palace - Boss", false, [], ['Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ]; - } +class SwampPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + + $this->world->getLocation("Misery Mire Medallion")->setItem(Item::get('Ether', $this->world)); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Swamp Palace - Entrance", false, 'BigKeyD2', [], ['BigKeyD2']], + ["Swamp Palace - Entrance", true, 'KeyD2', [], ['KeyD2']], + + ["Swamp Palace - Big Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Big Key Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Map Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - West Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Compass Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Flooded Room - Left", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Flooded Room - Right", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Waterfall Room", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Boss", true, 'BigKeyD2', [], ['BigKeyD2']], + ]; + } + + public function accessPool() + { + return [ + ["Swamp Palace - Entrance", false, []], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], + + ["Swamp Palace - Big Chest", false, []], + ["Swamp Palace - Big Chest", false, [], ['Flippers']], + ["Swamp Palace - Big Chest", false, [], ['BigKeyD2', 'BigKeyD6', 'BigKeyP3']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Big Key Chest", false, []], + ["Swamp Palace - Big Key Chest", false, [], ['Flippers']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Map Chest", false, []], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], + + ["Swamp Palace - West Chest", false, []], + ["Swamp Palace - West Chest", false, [], ['Flippers']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Compass Chest", false, []], + ["Swamp Palace - Compass Chest", false, [], ['Flippers']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Flooded Room - Left", false, []], + ["Swamp Palace - Flooded Room - Left", false, [], ['Flippers']], + ["Swamp Palace - Flooded Room - Left", false, [], ['Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Flooded Room - Right", false, []], + ["Swamp Palace - Flooded Room - Right", false, [], ['Flippers']], + ["Swamp Palace - Flooded Room - Right", false, [], ['Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Waterfall Room", false, []], + ["Swamp Palace - Waterfall Room", false, [], ['Flippers']], + ["Swamp Palace - Waterfall Room", false, [], ['Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Boss", false, []], + ["Swamp Palace - Boss", false, [], ['Flippers']], + ["Swamp Palace - Boss", false, [], ['Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ]; + } } diff --git a/tests/MajorGlitches/ThievesTownTest.php b/tests/MajorGlitches/ThievesTownTest.php index 78ab83b26..b282df198 100644 --- a/tests/MajorGlitches/ThievesTownTest.php +++ b/tests/MajorGlitches/ThievesTownTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - - - public function fillPool() { - return [ - ["Thieves' Town - Attic", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Attic", false, 'KeyD4', [], ['KeyD4']], - - ["Thieves' Town - Big Key Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Map Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Compass Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Ambush Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Big Chest", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Big Chest", true, 'KeyD4', [], ['KeyD4']], - - ["Thieves' Town - Blind's Cell", false, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Boss", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Boss", false, 'KeyD4', [], ['KeyD4']], - ]; - } - - public function accessPool() { - return [ - ["Thieves' Town - Attic", false, []], - ["Thieves' Town - Attic", false, [], ['BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'TitansMitt', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'KeyD4', 'BigKeyD4']], - - ["Thieves' Town - Big Key Chest", false, []], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Map Chest", false, []], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Compass Chest", false, []], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Ambush Chest", false, []], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Big Chest", false, []], - ["Thieves' Town - Big Chest", false, [], ['BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'TitansMitt', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - - ["Thieves' Town - Blind's Cell", false, []], - ["Thieves' Town - Blind's Cell", false, [], ['BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'TitansMitt', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4']], - - ["Thieves' Town - Boss", false, []], - ["Thieves' Town - Boss", false, [], ['BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'Hammer']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'Hammer']], - ]; - } +class ThievesTownTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + + + public function fillPool() + { + return [ + ["Thieves' Town - Attic", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Attic", false, 'KeyD4', [], ['KeyD4']], + + ["Thieves' Town - Big Key Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Map Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Compass Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Ambush Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Big Chest", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Big Chest", true, 'KeyD4', [], ['KeyD4']], + + ["Thieves' Town - Blind's Cell", false, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Boss", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Boss", false, 'KeyD4', [], ['KeyD4']], + ]; + } + + public function accessPool() + { + return [ + ["Thieves' Town - Attic", false, []], + ["Thieves' Town - Attic", false, [], ['BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'TitansMitt', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'KeyD4', 'BigKeyD4']], + + ["Thieves' Town - Big Key Chest", false, []], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Map Chest", false, []], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Compass Chest", false, []], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Ambush Chest", false, []], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Big Chest", false, []], + ["Thieves' Town - Big Chest", false, [], ['BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'TitansMitt', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + + ["Thieves' Town - Blind's Cell", false, []], + ["Thieves' Town - Blind's Cell", false, [], ['BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'TitansMitt', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4']], + + ["Thieves' Town - Boss", false, []], + ["Thieves' Town - Boss", false, [], ['BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'Hammer']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'Hammer']], + ]; + } } diff --git a/tests/MajorGlitches/TowerOfHeraTest.php b/tests/MajorGlitches/TowerOfHeraTest.php index 799118685..ebb876b68 100644 --- a/tests/MajorGlitches/TowerOfHeraTest.php +++ b/tests/MajorGlitches/TowerOfHeraTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - - public function fillPool() { - return [ - ["Tower of Hera - Big Key Chest", true, 'BigKeyP3', [], ['BigKeyP3']], - ["Tower of Hera - Big Key Chest", true, 'KeyP3', [], ['KeyP3']], - - ["Tower of Hera - Basement Cage", true, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Map Chest", true, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Compass Chest", false, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Big Chest", false, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Boss", false, 'BigKeyP3', [], ['BigKeyP3']], - ]; - } - - public function accessPool() { - return [ - ["Tower of Hera - Big Key Chest", false, []], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], - - ["Tower of Hera - Basement Cage", false, []], - ["Tower of Hera - Basement Cage", true, ['Flute', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['Flute', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], - - ["Tower of Hera - Map Chest", false, []], - ["Tower of Hera - Map Chest", true, ['Flute', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['Flute', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], - - ["Tower of Hera - Compass Chest", false, []], - ["Tower of Hera - Compass Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - - ["Tower of Hera - Big Chest", false, []], - ["Tower of Hera - Big Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - - ["Tower of Hera - Boss", false, []], - ["Tower of Hera - Boss", false, [], ['AnySword', 'Hammer']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ]; - } +class TowerOfHeraTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + + public function fillPool() + { + return [ + ["Tower of Hera - Big Key Chest", true, 'BigKeyP3', [], ['BigKeyP3']], + ["Tower of Hera - Big Key Chest", true, 'KeyP3', [], ['KeyP3']], + + ["Tower of Hera - Basement Cage", true, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Map Chest", true, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Compass Chest", false, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Big Chest", false, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Boss", false, 'BigKeyP3', [], ['BigKeyP3']], + ]; + } + + public function accessPool() + { + return [ + ["Tower of Hera - Big Key Chest", false, []], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], + + ["Tower of Hera - Basement Cage", false, []], + ["Tower of Hera - Basement Cage", true, ['Flute', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['Flute', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], + + ["Tower of Hera - Map Chest", false, []], + ["Tower of Hera - Map Chest", true, ['Flute', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['Flute', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], + + ["Tower of Hera - Compass Chest", false, []], + ["Tower of Hera - Compass Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + + ["Tower of Hera - Big Chest", false, []], + ["Tower of Hera - Big Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + + ["Tower of Hera - Boss", false, []], + ["Tower of Hera - Boss", false, [], ['AnySword', 'Hammer']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ]; + } } diff --git a/tests/MajorGlitches/TurtleRockTest.php b/tests/MajorGlitches/TurtleRockTest.php index 6c8f059bd..204273da2 100644 --- a/tests/MajorGlitches/TurtleRockTest.php +++ b/tests/MajorGlitches/TurtleRockTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'MajorGlitches'); - - $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get('Quake')); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - // Entry - public function testCanEnterWithEverything() { - $this->assertTrue($this->world->getRegion('Turtle Rock') - ->canEnter($this->world->getLocations(), $this->allItems())); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Turtle Rock - Chain Chomps", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Compass Chest", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Roller Room - Left", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Roller Room - Right", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Big Chest", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Big Key Chest", true, 'BigKeyD7', ['KeyD7', 'KeyD7'], ['BigKeyD7']], - - ["Turtle Rock - Crystaroller Room", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Left", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Right", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Left", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Right", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Boss", false, 'BigKeyD7', [], ['BigKeyD7']], - ["Turtle Rock - Boss", false, 'KeyD7', [], ['KeyD7']], - ]; - } - - public function accessPool() { - return [ - ["Turtle Rock - Chain Chomps", false, []], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - - ["Turtle Rock - Compass Chest", false, []], - ["Turtle Rock - Compass Chest", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - - ["Turtle Rock - Roller Room - Left", false, []], - ["Turtle Rock - Roller Room - Left", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Roller Room - Left", false, [], ['FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - - ["Turtle Rock - Roller Room - Right", false, []], - ["Turtle Rock - Roller Room - Right", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Roller Room - Right", false, [], ['FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - - ["Turtle Rock - Big Chest", false, []], - ["Turtle Rock - Big Chest", false, [], ['BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Big Key Chest", false, []], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - - ["Turtle Rock - Crystaroller Room", false, []], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Left", false, []], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Right", false, []], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Left", false, []], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Right", false, []], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Boss", false, []], - ["Turtle Rock - Boss", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Boss", false, [], ['IceRod']], - ["Turtle Rock - Boss", false, [], ['FireRod']], - ["Turtle Rock - Boss", false, [], ['BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ]; - } +class TurtleRockTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'MajorGlitches']); + + $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get('Quake', $this->world)); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + // Entry + public function testCanEnterWithEverything() + { + $this->assertTrue($this->world->getRegion('Turtle Rock') + ->canEnter($this->world->getLocations(), $this->allItems())); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Turtle Rock - Chain Chomps", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Compass Chest", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Roller Room - Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Roller Room - Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Big Chest", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Big Key Chest", true, 'BigKeyD7', ['KeyD7', 'KeyD7'], ['BigKeyD7']], + + ["Turtle Rock - Crystaroller Room", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Boss", false, 'BigKeyD7', [], ['BigKeyD7']], + ["Turtle Rock - Boss", false, 'KeyD7', [], ['KeyD7']], + ]; + } + + public function accessPool() + { + return [ + ["Turtle Rock - Chain Chomps", false, []], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + + ["Turtle Rock - Compass Chest", false, []], + ["Turtle Rock - Compass Chest", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + + ["Turtle Rock - Roller Room - Left", false, []], + ["Turtle Rock - Roller Room - Left", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Roller Room - Left", false, [], ['FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + + ["Turtle Rock - Roller Room - Right", false, []], + ["Turtle Rock - Roller Room - Right", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Roller Room - Right", false, [], ['FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + + ["Turtle Rock - Big Chest", false, []], + ["Turtle Rock - Big Chest", false, [], ['BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Big Key Chest", false, []], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + + ["Turtle Rock - Crystaroller Room", false, []], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Left", false, []], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Right", false, []], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Left", false, []], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Right", false, []], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Boss", false, []], + ["Turtle Rock - Boss", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Boss", false, [], ['IceRod']], + ["Turtle Rock - Boss", false, [], ['FireRod']], + ["Turtle Rock - Boss", false, [], ['BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ]; + } } diff --git a/tests/NoGlitches/DarkWorld/DeathMountain/EastTest.php b/tests/NoGlitches/DarkWorld/DeathMountain/EastTest.php index 658e0809c..950f6ce04 100644 --- a/tests/NoGlitches/DarkWorld/DeathMountain/EastTest.php +++ b/tests/NoGlitches/DarkWorld/DeathMountain/EastTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class EastTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Superbunny Cave - Top", false, []], - ["Superbunny Cave - Top", false, [], ['Gloves']], - ["Superbunny Cave - Top", false, [], ['MoonPearl']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp']], + public function accessPool() + { + return [ + ["Superbunny Cave - Top", false, []], + ["Superbunny Cave - Top", false, [], ['Gloves']], + ["Superbunny Cave - Top", false, [], ['MoonPearl']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp']], - ["Superbunny Cave - Bottom", false, []], - ["Superbunny Cave - Bottom", false, [], ['Gloves']], - ["Superbunny Cave - Bottom", false, [], ['MoonPearl']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp']], + ["Superbunny Cave - Bottom", false, []], + ["Superbunny Cave - Bottom", false, [], ['Gloves']], + ["Superbunny Cave - Bottom", false, [], ['MoonPearl']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp']], - ["Hookshot Cave - Bottom Right", false, []], - ["Hookshot Cave - Bottom Right", false, [], ['Gloves']], - ["Hookshot Cave - Bottom Right", false, [], ['MoonPearl']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute', 'PegasusBoots']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute', 'PegasusBoots']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp', 'PegasusBoots']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", false, []], + ["Hookshot Cave - Bottom Right", false, [], ['Gloves']], + ["Hookshot Cave - Bottom Right", false, [], ['MoonPearl']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp', 'PegasusBoots']], - ["Hookshot Cave - Bottom Left", false, []], - ["Hookshot Cave - Bottom Left", false, [], ['Gloves']], - ["Hookshot Cave - Bottom Left", false, [], ['MoonPearl']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Bottom Left", false, []], + ["Hookshot Cave - Bottom Left", false, [], ['Gloves']], + ["Hookshot Cave - Bottom Left", false, [], ['MoonPearl']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Top Left", false, []], - ["Hookshot Cave - Top Left", false, [], ['Gloves']], - ["Hookshot Cave - Top Left", false, [], ['MoonPearl']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Top Left", false, []], + ["Hookshot Cave - Top Left", false, [], ['Gloves']], + ["Hookshot Cave - Top Left", false, [], ['MoonPearl']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Top Right", false, []], - ["Hookshot Cave - Top Right", false, [], ['Gloves']], - ["Hookshot Cave - Top Right", false, [], ['MoonPearl']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ]; - } + ["Hookshot Cave - Top Right", false, []], + ["Hookshot Cave - Top Right", false, [], ['Gloves']], + ["Hookshot Cave - Top Right", false, [], ['MoonPearl']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ]; + } } diff --git a/tests/NoGlitches/DarkWorld/DeathMountain/WestTest.php b/tests/NoGlitches/DarkWorld/DeathMountain/WestTest.php index d297f6c11..8274a7cf5 100644 --- a/tests/NoGlitches/DarkWorld/DeathMountain/WestTest.php +++ b/tests/NoGlitches/DarkWorld/DeathMountain/WestTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class WestTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Spike Cave", false, []], - ["Spike Cave", false, [], ['Gloves']], - ["Spike Cave", false, [], ['MoonPearl']], - ["Spike Cave", false, [], ['Hammer']], - ["Spike Cave", false, [], ['Cape', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], - ]; - } + public function accessPool() + { + return [ + ["Spike Cave", false, []], + ["Spike Cave", false, [], ['Gloves']], + ["Spike Cave", false, [], ['MoonPearl']], + ["Spike Cave", false, [], ['Hammer']], + ["Spike Cave", false, [], ['Cape', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], + ]; + } } diff --git a/tests/NoGlitches/DarkWorld/MireTest.php b/tests/NoGlitches/DarkWorld/MireTest.php index 0be432599..d5bf21d8a 100644 --- a/tests/NoGlitches/DarkWorld/MireTest.php +++ b/tests/NoGlitches/DarkWorld/MireTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Mire Shed - Left", false, []], - ["Mire Shed - Left", false, [], ['Gloves']], - ["Mire Shed - Left", false, [], ['MoonPearl']], - ["Mire Shed - Left", false, [], ['Flute']], - ["Mire Shed - Left", true, ['MoonPearl', 'Flute', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Mire Shed - Left", true, ['MoonPearl', 'Flute', 'TitansMitt']], - - ["Mire Shed - Right", false, []], - ["Mire Shed - Right", false, [], ['Gloves']], - ["Mire Shed - Right", false, [], ['MoonPearl']], - ["Mire Shed - Right", false, [], ['Flute']], - ["Mire Shed - Right", true, ['MoonPearl', 'Flute', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Mire Shed - Right", true, ['MoonPearl', 'Flute', 'TitansMitt']], - ]; - } +class MireTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPool() + { + return [ + ["Mire Shed - Left", false, []], + ["Mire Shed - Left", false, [], ['Gloves']], + ["Mire Shed - Left", false, [], ['MoonPearl']], + ["Mire Shed - Left", false, [], ['Flute']], + ["Mire Shed - Left", true, ['MoonPearl', 'Flute', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Mire Shed - Left", true, ['MoonPearl', 'Flute', 'TitansMitt']], + + ["Mire Shed - Right", false, []], + ["Mire Shed - Right", false, [], ['Gloves']], + ["Mire Shed - Right", false, [], ['MoonPearl']], + ["Mire Shed - Right", false, [], ['Flute']], + ["Mire Shed - Right", true, ['MoonPearl', 'Flute', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Mire Shed - Right", true, ['MoonPearl', 'Flute', 'TitansMitt']], + ]; + } } diff --git a/tests/NoGlitches/DarkWorld/NorthEastTest.php b/tests/NoGlitches/DarkWorld/NorthEastTest.php index 98fad3995..e11363a07 100644 --- a/tests/NoGlitches/DarkWorld/NorthEastTest.php +++ b/tests/NoGlitches/DarkWorld/NorthEastTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class NorthEastTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Catfish", false, []], - ["Catfish", false, [], ['Gloves']], - ["Catfish", false, [], ['MoonPearl']], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove']], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove']], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'TitansMitt']], - ["Catfish", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Catfish", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Catfish", true, ['MoonPearl', 'TitansMitt', 'Flippers']], + public function accessPool() + { + return [ + ["Catfish", false, []], + ["Catfish", false, [], ['Gloves']], + ["Catfish", false, [], ['MoonPearl']], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove']], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove']], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'TitansMitt']], + ["Catfish", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Catfish", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Catfish", true, ['MoonPearl', 'TitansMitt', 'Flippers']], - ["Pyramid", false, []], - ["Pyramid", true, ['DefeatAgahnim']], - ["Pyramid", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Pyramid", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Pyramid", true, ['MoonPearl', 'TitansMitt', 'Flippers']], + ["Pyramid", false, []], + ["Pyramid", true, ['DefeatAgahnim']], + ["Pyramid", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Pyramid", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Pyramid", true, ['MoonPearl', 'TitansMitt', 'Flippers']], - ["Pyramid Fairy - Sword", false, []], - ["Pyramid Fairy - Sword", false, [], ['MoonPearl']], - ["Pyramid Fairy - Sword", false, [], ['Crystal5']], - ["Pyramid Fairy - Sword", false, [], ['Crystal6']], - ["Pyramid Fairy - Sword", false, [], ['AnySword']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", false, []], + ["Pyramid Fairy - Sword", false, [], ['MoonPearl']], + ["Pyramid Fairy - Sword", false, [], ['Crystal5']], + ["Pyramid Fairy - Sword", false, [], ['Crystal6']], + ["Pyramid Fairy - Sword", false, [], ['AnySword']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", false, []], - ["Pyramid Fairy - Bow", false, [], ['MoonPearl']], - ["Pyramid Fairy - Bow", false, [], ['Crystal5']], - ["Pyramid Fairy - Bow", false, [], ['Crystal6']], - ["Pyramid Fairy - Bow", false, [], ['AnyBow']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", false, []], + ["Pyramid Fairy - Bow", false, [], ['MoonPearl']], + ["Pyramid Fairy - Bow", false, [], ['Crystal5']], + ["Pyramid Fairy - Bow", false, [], ['Crystal6']], + ["Pyramid Fairy - Bow", false, [], ['AnyBow']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", false, []], - ["Pyramid Fairy - Left", false, [], ['MoonPearl']], - ["Pyramid Fairy - Left", false, [], ['Crystal5']], - ["Pyramid Fairy - Left", false, [], ['Crystal6']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", false, []], + ["Pyramid Fairy - Left", false, [], ['MoonPearl']], + ["Pyramid Fairy - Left", false, [], ['Crystal5']], + ["Pyramid Fairy - Left", false, [], ['Crystal6']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", false, []], - ["Pyramid Fairy - Right", false, [], ['MoonPearl']], - ["Pyramid Fairy - Right", false, [], ['Crystal5']], - ["Pyramid Fairy - Right", false, [], ['Crystal6']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", false, []], + ["Pyramid Fairy - Right", false, [], ['MoonPearl']], + ["Pyramid Fairy - Right", false, [], ['Crystal5']], + ["Pyramid Fairy - Right", false, [], ['Crystal6']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Ganon", false, []], - ["Ganon", false, [], ['MoonPearl']], - ["Ganon", false, [], ['DefeatAgahnim2']], - ]; - } + ["Ganon", false, []], + ["Ganon", false, [], ['MoonPearl']], + ["Ganon", false, [], ['DefeatAgahnim2']], + ]; + } } diff --git a/tests/NoGlitches/DarkWorld/NorthWestTest.php b/tests/NoGlitches/DarkWorld/NorthWestTest.php index 0c38fe0e0..ba7df526b 100644 --- a/tests/NoGlitches/DarkWorld/NorthWestTest.php +++ b/tests/NoGlitches/DarkWorld/NorthWestTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class NorthWestTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Brewery", false, []], - ["Brewery", false, [], ['MoonPearl']], - ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Brewery", true, ['MoonPearl', 'TitansMitt']], - ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Brewery", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + public function accessPool() + { + return [ + ["Brewery", false, []], + ["Brewery", false, [], ['MoonPearl']], + ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Brewery", true, ['MoonPearl', 'TitansMitt']], + ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Brewery", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["C-Shaped House", false, []], - ["C-Shaped House", false, [], ['MoonPearl']], - ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["C-Shaped House", true, ['MoonPearl', 'TitansMitt']], - ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["C-Shaped House", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["C-Shaped House", false, []], + ["C-Shaped House", false, [], ['MoonPearl']], + ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["C-Shaped House", true, ['MoonPearl', 'TitansMitt']], + ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["C-Shaped House", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Chest Game", false, []], - ["Chest Game", false, [], ['MoonPearl']], - ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Chest Game", true, ['MoonPearl', 'TitansMitt']], - ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Chest Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Chest Game", false, []], + ["Chest Game", false, [], ['MoonPearl']], + ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Chest Game", true, ['MoonPearl', 'TitansMitt']], + ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Chest Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hammer Pegs", false, []], - ["Hammer Pegs", false, [], ['MoonPearl']], - ["Hammer Pegs", false, [], ['Hammer']], - ["Hammer Pegs", false, [], ['Gloves']], - ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'TitansMitt']], + ["Hammer Pegs", false, []], + ["Hammer Pegs", false, [], ['MoonPearl']], + ["Hammer Pegs", false, [], ['Hammer']], + ["Hammer Pegs", false, [], ['Gloves']], + ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'TitansMitt']], - ["Bumper Cave", false, []], - ["Bumper Cave", false, [], ['MoonPearl']], - ["Bumper Cave", false, [], ['Cape']], - ["Bumper Cave", false, [], ['Gloves']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'TitansMitt']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'Hammer']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'PowerGlove', 'Hammer']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Bumper Cave", false, []], + ["Bumper Cave", false, [], ['MoonPearl']], + ["Bumper Cave", false, [], ['Cape']], + ["Bumper Cave", false, [], ['Gloves']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'TitansMitt']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'Hammer']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'PowerGlove', 'Hammer']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Blacksmith", false, []], - ["Blacksmith", false, [], ['Gloves']], - ["Blacksmith", false, [], ['MoonPearl']], - ["Blacksmith", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Blacksmith", true, ['MoonPearl', 'TitansMitt']], + ["Blacksmith", false, []], + ["Blacksmith", false, [], ['Gloves']], + ["Blacksmith", false, [], ['MoonPearl']], + ["Blacksmith", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Blacksmith", true, ['MoonPearl', 'TitansMitt']], - ["Purple Chest", false, []], - ["Purple Chest", false, [], ['Gloves']], - ["Purple Chest", false, [], ['MoonPearl']], - ["Purple Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Purple Chest", true, ['MoonPearl', 'TitansMitt']], - ]; - } + ["Purple Chest", false, []], + ["Purple Chest", false, [], ['Gloves']], + ["Purple Chest", false, [], ['MoonPearl']], + ["Purple Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Purple Chest", true, ['MoonPearl', 'TitansMitt']], + ]; + } } diff --git a/tests/NoGlitches/DarkWorld/SouthTest.php b/tests/NoGlitches/DarkWorld/SouthTest.php index d03177fc2..24a5db814 100644 --- a/tests/NoGlitches/DarkWorld/SouthTest.php +++ b/tests/NoGlitches/DarkWorld/SouthTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class SouthTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Hype Cave - Top", false, []], - ["Hype Cave - Top", false, [], ['MoonPearl']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Top", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + public function accessPool() + { + return [ + ["Hype Cave - Top", false, []], + ["Hype Cave - Top", false, [], ['MoonPearl']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Top", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Middle Right", false, []], - ["Hype Cave - Middle Right", false, [], ['MoonPearl']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Middle Right", false, []], + ["Hype Cave - Middle Right", false, [], ['MoonPearl']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Middle Left", false, []], - ["Hype Cave - Middle Left", false, [], ['MoonPearl']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Middle Left", false, []], + ["Hype Cave - Middle Left", false, [], ['MoonPearl']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Bottom", false, []], - ["Hype Cave - Bottom", false, [], ['MoonPearl']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Bottom", false, []], + ["Hype Cave - Bottom", false, [], ['MoonPearl']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - NPC", false, []], - ["Hype Cave - NPC", false, [], ['MoonPearl']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - NPC", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - NPC", false, []], + ["Hype Cave - NPC", false, [], ['MoonPearl']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - NPC", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Stumpy", false, []], - ["Stumpy", false, [], ['MoonPearl']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Stumpy", true, ['MoonPearl', 'TitansMitt']], - ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Stumpy", false, []], + ["Stumpy", false, [], ['MoonPearl']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Stumpy", true, ['MoonPearl', 'TitansMitt']], + ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Digging Game", false, []], - ["Digging Game", false, [], ['MoonPearl']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Digging Game", true, ['MoonPearl', 'TitansMitt']], - ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ]; - } + ["Digging Game", false, []], + ["Digging Game", false, [], ['MoonPearl']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Digging Game", true, ['MoonPearl', 'TitansMitt']], + ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ]; + } } diff --git a/tests/NoGlitches/DeathMountain/EastTest.php b/tests/NoGlitches/DeathMountain/EastTest.php index 61b263a9b..97af7ceff 100644 --- a/tests/NoGlitches/DeathMountain/EastTest.php +++ b/tests/NoGlitches/DeathMountain/EastTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $medallion - * @param array $items - * @param array $except - * - * @dataProvider accessPoolWithMedallion - */ - public function testLocationWithMedallion(string $location, bool $access, string $medallion, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get($medallion)); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPoolWithMedallion() { - return [ - ["Mimic Cave", false, 'Quake', []], - ["Mimic Cave", false, 'Quake', [], ['Quake']], - ["Mimic Cave", false, 'Quake', [], ['Gloves', 'Flute']], - ["Mimic Cave", false, 'Quake', [], ['Hammer']], - ["Mimic Cave", false, 'Quake', [], ['MagicMirror']], - ["Mimic Cave", false, 'Quake', [], ['MoonPearl']], - ["Mimic Cave", false, 'Quake', [], ['CaneOfSomaria']], - ["Mimic Cave", false, 'Ether', []], - ["Mimic Cave", false, 'Ether', [], ['Ether']], - ["Mimic Cave", false, 'Ether', [], ['Gloves', 'Flute']], - ["Mimic Cave", false, 'Ether', [], ['Hammer']], - ["Mimic Cave", false, 'Ether', [], ['MagicMirror']], - ["Mimic Cave", false, 'Ether', [], ['MoonPearl']], - ["Mimic Cave", false, 'Ether', [], ['CaneOfSomaria']], - ["Mimic Cave", false, 'Bombos', []], - ["Mimic Cave", false, 'Bombos', [], ['Bombos']], - ["Mimic Cave", false, 'Bombos', [], ['Gloves', 'Flute']], - ["Mimic Cave", false, 'Bombos', [], ['Hammer']], - ["Mimic Cave", false, 'Bombos', [], ['MagicMirror']], - ["Mimic Cave", false, 'Bombos', [], ['MoonPearl']], - ["Mimic Cave", false, 'Bombos', [], ['CaneOfSomaria']], - ]; - } - - public function accessPool() { - return [ - ["Spiral Cave", false, []], - ["Spiral Cave", false, [], ['Gloves', 'Flute']], - ["Spiral Cave", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], - ["Spiral Cave", false, [], ['MagicMirror', 'Hookshot']], - ["Spiral Cave", false, [], ['Hammer', 'Hookshot']], - ["Spiral Cave", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Spiral Cave", false, ['ProgressiveGlove', 'Hookshot']], - ["Spiral Cave", false, ['Flute', 'MagicMirror']], - ["Spiral Cave", false, ['Flute', 'Hammer']], - ["Spiral Cave", true, ['Flute', 'Hookshot']], - ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Spiral Cave", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Spiral Cave", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Spiral Cave", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Spiral Cave", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Spiral Cave", true, ['Flute', 'MagicMirror', 'Hammer']], - - ["Paradox Cave Lower - Far Left", false, []], - ["Paradox Cave Lower - Far Left", false, [], ['Gloves', 'Flute']], - ["Paradox Cave Lower - Far Left", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], - ["Paradox Cave Lower - Far Left", false, [], ['MagicMirror', 'Hookshot']], - ["Paradox Cave Lower - Far Left", false, [], ['Hammer', 'Hookshot']], - ["Paradox Cave Lower - Far Left", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Paradox Cave Lower - Far Left", false, ['ProgressiveGlove', 'Hookshot']], - ["Paradox Cave Lower - Far Left", false, ['Flute', 'MagicMirror']], - ["Paradox Cave Lower - Far Left", false, ['Flute', 'Hammer']], - ["Paradox Cave Lower - Far Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Left", true, ['Flute', 'MagicMirror', 'Hammer']], - - ["Paradox Cave Lower - Left", false, []], - ["Paradox Cave Lower - Left", false, [], ['Gloves', 'Flute']], - ["Paradox Cave Lower - Left", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], - ["Paradox Cave Lower - Left", false, [], ['MagicMirror', 'Hookshot']], - ["Paradox Cave Lower - Left", false, [], ['Hammer', 'Hookshot']], - ["Paradox Cave Lower - Left", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Paradox Cave Lower - Left", false, ['ProgressiveGlove', 'Hookshot']], - ["Paradox Cave Lower - Left", false, ['Flute', 'MagicMirror']], - ["Paradox Cave Lower - Left", false, ['Flute', 'Hammer']], - ["Paradox Cave Lower - Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Left", true, ['Flute', 'MagicMirror', 'Hammer']], - - ["Paradox Cave Lower - Middle", false, []], - ["Paradox Cave Lower - Middle", false, [], ['Gloves', 'Flute']], - ["Paradox Cave Lower - Middle", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], - ["Paradox Cave Lower - Middle", false, [], ['MagicMirror', 'Hookshot']], - ["Paradox Cave Lower - Middle", false, [], ['Hammer', 'Hookshot']], - ["Paradox Cave Lower - Middle", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Paradox Cave Lower - Middle", false, ['ProgressiveGlove', 'Hookshot']], - ["Paradox Cave Lower - Middle", false, ['Flute', 'MagicMirror']], - ["Paradox Cave Lower - Middle", false, ['Flute', 'Hammer']], - ["Paradox Cave Lower - Middle", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Middle", true, ['Flute', 'MagicMirror', 'Hammer']], - - ["Paradox Cave Lower - Right", false, []], - ["Paradox Cave Lower - Right", false, [], ['Gloves', 'Flute']], - ["Paradox Cave Lower - Right", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], - ["Paradox Cave Lower - Right", false, [], ['MagicMirror', 'Hookshot']], - ["Paradox Cave Lower - Right", false, [], ['Hammer', 'Hookshot']], - ["Paradox Cave Lower - Right", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Paradox Cave Lower - Right", false, ['ProgressiveGlove', 'Hookshot']], - ["Paradox Cave Lower - Right", false, ['Flute', 'MagicMirror']], - ["Paradox Cave Lower - Right", false, ['Flute', 'Hammer']], - ["Paradox Cave Lower - Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Right", true, ['Flute', 'MagicMirror', 'Hammer']], - - ["Paradox Cave Lower - Far Right", false, []], - ["Paradox Cave Lower - Far Right", false, [], ['Gloves', 'Flute']], - ["Paradox Cave Lower - Far Right", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], - ["Paradox Cave Lower - Far Right", false, [], ['MagicMirror', 'Hookshot']], - ["Paradox Cave Lower - Far Right", false, [], ['Hammer', 'Hookshot']], - ["Paradox Cave Lower - Far Right", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Paradox Cave Lower - Far Right", false, ['ProgressiveGlove', 'Hookshot']], - ["Paradox Cave Lower - Far Right", false, ['Flute', 'MagicMirror']], - ["Paradox Cave Lower - Far Right", false, ['Flute', 'Hammer']], - ["Paradox Cave Lower - Far Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Right", true, ['Flute', 'MagicMirror', 'Hammer']], - - ["Paradox Cave Upper - Left", false, []], - ["Paradox Cave Upper - Left", false, [], ['Gloves', 'Flute']], - ["Paradox Cave Upper - Left", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], - ["Paradox Cave Upper - Left", false, [], ['MagicMirror', 'Hookshot']], - ["Paradox Cave Upper - Left", false, [], ['Hammer', 'Hookshot']], - ["Paradox Cave Upper - Left", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Paradox Cave Upper - Left", false, ['ProgressiveGlove', 'Hookshot']], - ["Paradox Cave Upper - Left", false, ['Flute', 'MagicMirror']], - ["Paradox Cave Upper - Left", false, ['Flute', 'Hammer']], - ["Paradox Cave Upper - Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Left", true, ['Flute', 'MagicMirror', 'Hammer']], - - ["Paradox Cave Upper - Right", false, []], - ["Paradox Cave Upper - Right", false, [], ['Gloves', 'Flute']], - ["Paradox Cave Upper - Right", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], - ["Paradox Cave Upper - Right", false, [], ['MagicMirror', 'Hookshot']], - ["Paradox Cave Upper - Right", false, [], ['Hammer', 'Hookshot']], - ["Paradox Cave Upper - Right", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Paradox Cave Upper - Right", false, ['ProgressiveGlove', 'Hookshot']], - ["Paradox Cave Upper - Right", false, ['Flute', 'MagicMirror']], - ["Paradox Cave Upper - Right", false, ['Flute', 'Hammer']], - ["Paradox Cave Upper - Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Right", true, ['Flute', 'MagicMirror', 'Hammer']], - ]; - } +class EastTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $medallion + * @param array $items + * @param array $except + * + * @dataProvider accessPoolWithMedallion + */ + public function testLocationWithMedallion(string $location, bool $access, string $medallion, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get($medallion, $this->world)); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPoolWithMedallion() + { + return [ + ["Mimic Cave", false, 'Quake', []], + ["Mimic Cave", false, 'Quake', [], ['Quake']], + ["Mimic Cave", false, 'Quake', [], ['Gloves', 'Flute']], + ["Mimic Cave", false, 'Quake', [], ['Hammer']], + ["Mimic Cave", false, 'Quake', [], ['MagicMirror']], + ["Mimic Cave", false, 'Quake', [], ['MoonPearl']], + ["Mimic Cave", false, 'Quake', [], ['CaneOfSomaria']], + ["Mimic Cave", false, 'Ether', []], + ["Mimic Cave", false, 'Ether', [], ['Ether']], + ["Mimic Cave", false, 'Ether', [], ['Gloves', 'Flute']], + ["Mimic Cave", false, 'Ether', [], ['Hammer']], + ["Mimic Cave", false, 'Ether', [], ['MagicMirror']], + ["Mimic Cave", false, 'Ether', [], ['MoonPearl']], + ["Mimic Cave", false, 'Ether', [], ['CaneOfSomaria']], + ["Mimic Cave", false, 'Bombos', []], + ["Mimic Cave", false, 'Bombos', [], ['Bombos']], + ["Mimic Cave", false, 'Bombos', [], ['Gloves', 'Flute']], + ["Mimic Cave", false, 'Bombos', [], ['Hammer']], + ["Mimic Cave", false, 'Bombos', [], ['MagicMirror']], + ["Mimic Cave", false, 'Bombos', [], ['MoonPearl']], + ["Mimic Cave", false, 'Bombos', [], ['CaneOfSomaria']], + ]; + } + + public function accessPool() + { + return [ + ["Spiral Cave", false, []], + ["Spiral Cave", false, [], ['Gloves', 'Flute']], + ["Spiral Cave", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], + ["Spiral Cave", false, [], ['MagicMirror', 'Hookshot']], + ["Spiral Cave", false, [], ['Hammer', 'Hookshot']], + ["Spiral Cave", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Spiral Cave", false, ['ProgressiveGlove', 'Hookshot']], + ["Spiral Cave", false, ['Flute', 'MagicMirror']], + ["Spiral Cave", false, ['Flute', 'Hammer']], + ["Spiral Cave", true, ['Flute', 'Hookshot']], + ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Spiral Cave", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Spiral Cave", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Spiral Cave", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Spiral Cave", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Spiral Cave", true, ['Flute', 'MagicMirror', 'Hammer']], + + ["Paradox Cave Lower - Far Left", false, []], + ["Paradox Cave Lower - Far Left", false, [], ['Gloves', 'Flute']], + ["Paradox Cave Lower - Far Left", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], + ["Paradox Cave Lower - Far Left", false, [], ['MagicMirror', 'Hookshot']], + ["Paradox Cave Lower - Far Left", false, [], ['Hammer', 'Hookshot']], + ["Paradox Cave Lower - Far Left", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Paradox Cave Lower - Far Left", false, ['ProgressiveGlove', 'Hookshot']], + ["Paradox Cave Lower - Far Left", false, ['Flute', 'MagicMirror']], + ["Paradox Cave Lower - Far Left", false, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Far Left", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Left", true, ['Flute', 'MagicMirror', 'Hammer']], + + ["Paradox Cave Lower - Left", false, []], + ["Paradox Cave Lower - Left", false, [], ['Gloves', 'Flute']], + ["Paradox Cave Lower - Left", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], + ["Paradox Cave Lower - Left", false, [], ['MagicMirror', 'Hookshot']], + ["Paradox Cave Lower - Left", false, [], ['Hammer', 'Hookshot']], + ["Paradox Cave Lower - Left", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Paradox Cave Lower - Left", false, ['ProgressiveGlove', 'Hookshot']], + ["Paradox Cave Lower - Left", false, ['Flute', 'MagicMirror']], + ["Paradox Cave Lower - Left", false, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Left", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Left", true, ['Flute', 'MagicMirror', 'Hammer']], + + ["Paradox Cave Lower - Middle", false, []], + ["Paradox Cave Lower - Middle", false, [], ['Gloves', 'Flute']], + ["Paradox Cave Lower - Middle", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], + ["Paradox Cave Lower - Middle", false, [], ['MagicMirror', 'Hookshot']], + ["Paradox Cave Lower - Middle", false, [], ['Hammer', 'Hookshot']], + ["Paradox Cave Lower - Middle", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Paradox Cave Lower - Middle", false, ['ProgressiveGlove', 'Hookshot']], + ["Paradox Cave Lower - Middle", false, ['Flute', 'MagicMirror']], + ["Paradox Cave Lower - Middle", false, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Middle", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Middle", true, ['Flute', 'MagicMirror', 'Hammer']], + + ["Paradox Cave Lower - Right", false, []], + ["Paradox Cave Lower - Right", false, [], ['Gloves', 'Flute']], + ["Paradox Cave Lower - Right", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], + ["Paradox Cave Lower - Right", false, [], ['MagicMirror', 'Hookshot']], + ["Paradox Cave Lower - Right", false, [], ['Hammer', 'Hookshot']], + ["Paradox Cave Lower - Right", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Paradox Cave Lower - Right", false, ['ProgressiveGlove', 'Hookshot']], + ["Paradox Cave Lower - Right", false, ['Flute', 'MagicMirror']], + ["Paradox Cave Lower - Right", false, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Right", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Right", true, ['Flute', 'MagicMirror', 'Hammer']], + + ["Paradox Cave Lower - Far Right", false, []], + ["Paradox Cave Lower - Far Right", false, [], ['Gloves', 'Flute']], + ["Paradox Cave Lower - Far Right", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], + ["Paradox Cave Lower - Far Right", false, [], ['MagicMirror', 'Hookshot']], + ["Paradox Cave Lower - Far Right", false, [], ['Hammer', 'Hookshot']], + ["Paradox Cave Lower - Far Right", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Paradox Cave Lower - Far Right", false, ['ProgressiveGlove', 'Hookshot']], + ["Paradox Cave Lower - Far Right", false, ['Flute', 'MagicMirror']], + ["Paradox Cave Lower - Far Right", false, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Far Right", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Right", true, ['Flute', 'MagicMirror', 'Hammer']], + + ["Paradox Cave Upper - Left", false, []], + ["Paradox Cave Upper - Left", false, [], ['Gloves', 'Flute']], + ["Paradox Cave Upper - Left", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], + ["Paradox Cave Upper - Left", false, [], ['MagicMirror', 'Hookshot']], + ["Paradox Cave Upper - Left", false, [], ['Hammer', 'Hookshot']], + ["Paradox Cave Upper - Left", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Paradox Cave Upper - Left", false, ['ProgressiveGlove', 'Hookshot']], + ["Paradox Cave Upper - Left", false, ['Flute', 'MagicMirror']], + ["Paradox Cave Upper - Left", false, ['Flute', 'Hammer']], + ["Paradox Cave Upper - Left", true, ['Flute', 'Hookshot']], + ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Left", true, ['Flute', 'MagicMirror', 'Hammer']], + + ["Paradox Cave Upper - Right", false, []], + ["Paradox Cave Upper - Right", false, [], ['Gloves', 'Flute']], + ["Paradox Cave Upper - Right", false, [], ['MagicMirror', 'Hammer', 'Hookshot']], + ["Paradox Cave Upper - Right", false, [], ['MagicMirror', 'Hookshot']], + ["Paradox Cave Upper - Right", false, [], ['Hammer', 'Hookshot']], + ["Paradox Cave Upper - Right", false, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Paradox Cave Upper - Right", false, ['ProgressiveGlove', 'Hookshot']], + ["Paradox Cave Upper - Right", false, ['Flute', 'MagicMirror']], + ["Paradox Cave Upper - Right", false, ['Flute', 'Hammer']], + ["Paradox Cave Upper - Right", true, ['Flute', 'Hookshot']], + ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Right", true, ['Flute', 'MagicMirror', 'Hammer']], + ]; + } } diff --git a/tests/NoGlitches/DeathMountain/WestTest.php b/tests/NoGlitches/DeathMountain/WestTest.php index 0b1e8b416..9319a1f9b 100644 --- a/tests/NoGlitches/DeathMountain/WestTest.php +++ b/tests/NoGlitches/DeathMountain/WestTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class WestTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Ether Tablet", false, []], - ["Ether Tablet", false, [], ['Gloves', 'Flute']], - ["Ether Tablet", false, [], ['Lamp', 'Flute']], - ["Ether Tablet", false, [], ['MagicMirror', 'Hookshot']], - ["Ether Tablet", false, [], ['MagicMirror', 'Hammer']], - ["Ether Tablet", false, [], ['UpgradedSword']], - ["Ether Tablet", false, [], ['BookOfMudora']], - ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], + public function accessPool() + { + return [ + ["Ether Tablet", false, []], + ["Ether Tablet", false, [], ['Gloves', 'Flute']], + ["Ether Tablet", false, [], ['Lamp', 'Flute']], + ["Ether Tablet", false, [], ['MagicMirror', 'Hookshot']], + ["Ether Tablet", false, [], ['MagicMirror', 'Hammer']], + ["Ether Tablet", false, [], ['UpgradedSword']], + ["Ether Tablet", false, [], ['BookOfMudora']], + ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], - ["Old Man", false, []], - ["Old Man", false, [], ['Gloves', 'Flute']], - ["Old Man", false, [], ['Lamp']], - ["Old Man", true, ['Flute', 'Lamp']], - ["Old Man", true, ['ProgressiveGlove', 'Lamp']], - ["Old Man", true, ['PowerGlove', 'Lamp']], - ["Old Man", true, ['TitansMitt', 'Lamp']], + ["Old Man", false, []], + ["Old Man", false, [], ['Gloves', 'Flute']], + ["Old Man", false, [], ['Lamp']], + ["Old Man", true, ['Flute', 'Lamp']], + ["Old Man", true, ['ProgressiveGlove', 'Lamp']], + ["Old Man", true, ['PowerGlove', 'Lamp']], + ["Old Man", true, ['TitansMitt', 'Lamp']], - ["Spectacle Rock Cave", false, []], - ["Spectacle Rock Cave", false, [], ['Gloves', 'Flute']], - ["Spectacle Rock Cave", true, ['Flute']], - ["Spectacle Rock Cave", true, ['ProgressiveGlove', 'Lamp']], - ["Spectacle Rock Cave", true, ['PowerGlove', 'Lamp']], - ["Spectacle Rock Cave", true, ['TitansMitt', 'Lamp']], + ["Spectacle Rock Cave", false, []], + ["Spectacle Rock Cave", false, [], ['Gloves', 'Flute']], + ["Spectacle Rock Cave", true, ['Flute']], + ["Spectacle Rock Cave", true, ['ProgressiveGlove', 'Lamp']], + ["Spectacle Rock Cave", true, ['PowerGlove', 'Lamp']], + ["Spectacle Rock Cave", true, ['TitansMitt', 'Lamp']], - ["Spectacle Rock", false, []], - ["Spectacle Rock", false, [], ['Gloves', 'Flute']], - ["Spectacle Rock", false, [], ['MagicMirror']], - ["Spectacle Rock", true, ['Flute', 'MagicMirror']], - ["Spectacle Rock", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Spectacle Rock", true, ['PowerGlove', 'Lamp', 'MagicMirror']], - ["Spectacle Rock", true, ['TitansMitt', 'Lamp', 'MagicMirror']], - ]; - } + ["Spectacle Rock", false, []], + ["Spectacle Rock", false, [], ['Gloves', 'Flute']], + ["Spectacle Rock", false, [], ['MagicMirror']], + ["Spectacle Rock", true, ['Flute', 'MagicMirror']], + ["Spectacle Rock", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Spectacle Rock", true, ['PowerGlove', 'Lamp', 'MagicMirror']], + ["Spectacle Rock", true, ['TitansMitt', 'Lamp', 'MagicMirror']], + ]; + } } diff --git a/tests/NoGlitches/DesertPalaceTest.php b/tests/NoGlitches/DesertPalaceTest.php index b28f79239..b6b40b488 100644 --- a/tests/NoGlitches/DesertPalaceTest.php +++ b/tests/NoGlitches/DesertPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider entryPool - */ - public function testEntry(bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getRegion('Desert Palace') - ->canEnter($this->world->getLocations(), $this->collected)); - } - - public function entryPool() { - return [ - [false, []], - [true, ['BookOfMudora']], - [true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - [true, ['Flute', 'MagicMirror', 'TitansMitt']], - ]; - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Desert Palace - Big Key Chest", false, 'KeyP2', [], ['KeyP2']], - ["Desert Palace - Compass Chest", false, 'KeyP2', [], ['KeyP2']], - - ["Desert Palace - Big Chest", false, 'BigKeyP2', [], ['BigKeyP2']], - - ["Desert Palace - Boss", false, 'BigKeyP2', [], ['BigKeyP2']], - ["Desert Palace - Boss", false, 'KeyP2', [], ['KeyP2']], - ]; - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Desert Palace - Map Chest", false, []], - ["Desert Palace - Map Chest", true, ['BookOfMudora']], - ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Desert Palace - Big Chest", false, []], - ["Desert Palace - Big Chest", true, ['BookOfMudora', 'BigKeyP2']], - ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'BigKeyP2']], - - ["Desert Palace - Torch", false, []], - ["Desert Palace - Torch", false, [], ['PegasusBoots']], - ["Desert Palace - Torch", true, ['BookOfMudora', 'PegasusBoots']], - ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'PegasusBoots']], - ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'TitansMitt', 'PegasusBoots']], - - ["Desert Palace - Compass Chest", false, []], - ["Desert Palace - Compass Chest", false, [], ['KeyP2']], - ["Desert Palace - Compass Chest", true, ['BookOfMudora', 'KeyP2']], - ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], - ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], - - ["Desert Palace - Big Key Chest", false, []], - ["Desert Palace - Big Key Chest", false, [], ['KeyP2']], - ["Desert Palace - Big Key Chest", true, ['BookOfMudora', 'KeyP2']], - ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], - ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], - - ["Desert Palace - Boss", false, []], - ["Desert Palace - Boss", false, [], ['KeyP2']], - ["Desert Palace - Boss", false, [], ['BigKeyP2']], - ["Desert Palace - Boss", false, [], ['Gloves']], - ["Desert Palace - Boss", false, [], ['Lamp', 'FireRod']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'PowerGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'PowerGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'TitansMitt', 'BigKeyP2']], - ]; - } - - /** - * @dataProvider dungeonItemsPool - */ - public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) { - if ($config) { - config(["alttp.test_rules.$config" => $free]); - } - - $this->assertEquals($access, $this->world->getRegion('Desert Palace')->canFill(Item::get($item_name))); - } - - public function dungeonItemsPool() { - return [ - [true, 'Key'], - [false, 'KeyH2'], - [false, 'KeyH1'], - [false, 'KeyP1'], - [true, 'KeyP2'], - [false, 'KeyA1'], - [false, 'KeyD2'], - [false, 'KeyD1'], - [false, 'KeyD6'], - [false, 'KeyD3'], - [false, 'KeyD5'], - [false, 'KeyP3'], - [false, 'KeyD4'], - [false, 'KeyD7'], - [false, 'KeyA2'], - - [true, 'BigKey'], - [false, 'BigKeyH2'], - [false, 'BigKeyH1'], - [false, 'BigKeyP1'], - [true, 'BigKeyP2'], - [false, 'BigKeyA1'], - [false, 'BigKeyD2'], - [false, 'BigKeyD1'], - [false, 'BigKeyD6'], - [false, 'BigKeyD3'], - [false, 'BigKeyD5'], - [false, 'BigKeyP3'], - [false, 'BigKeyD4'], - [false, 'BigKeyD7'], - [false, 'BigKeyA2'], - - [true, 'Map', false, 'region.wildMaps'], - [true, 'Map', true, 'region.wildMaps'], - [false, 'MapH2', false, 'region.wildMaps'], - [true, 'MapH2', true, 'region.wildMaps'], - [false, 'MapH1', false, 'region.wildMaps'], - [true, 'MapH1', true, 'region.wildMaps'], - [false, 'MapP1', false, 'region.wildMaps'], - [true, 'MapP1', true, 'region.wildMaps'], - [true, 'MapP2', false, 'region.wildMaps'], - [true, 'MapP2', true, 'region.wildMaps'], - [false, 'MapA1', false, 'region.wildMaps'], - [true, 'MapA1', true, 'region.wildMaps'], - [false, 'MapD2', false, 'region.wildMaps'], - [true, 'MapD2', true, 'region.wildMaps'], - [false, 'MapD1', false, 'region.wildMaps'], - [true, 'MapD1', true, 'region.wildMaps'], - [false, 'MapD6', false, 'region.wildMaps'], - [true, 'MapD6', true, 'region.wildMaps'], - [false, 'MapD3', false, 'region.wildMaps'], - [true, 'MapD3', true, 'region.wildMaps'], - [false, 'MapD5', false, 'region.wildMaps'], - [true, 'MapD5', true, 'region.wildMaps'], - [false, 'MapP3', false, 'region.wildMaps'], - [true, 'MapP3', true, 'region.wildMaps'], - [false, 'MapD4', false, 'region.wildMaps'], - [true, 'MapD4', true, 'region.wildMaps'], - [false, 'MapD7', false, 'region.wildMaps'], - [true, 'MapD7', true, 'region.wildMaps'], - [false, 'MapA2', false, 'region.wildMaps'], - [true, 'MapA2', true, 'region.wildMaps'], - - [true, 'Compass', false, 'region.wildCompasses'], - [true, 'Compass', true, 'region.wildCompasses'], - [false, 'CompassH2', false, 'region.wildCompasses'], - [true, 'CompassH2', true, 'region.wildCompasses'], - [false, 'CompassH1', false, 'region.wildCompasses'], - [true, 'CompassH1', true, 'region.wildCompasses'], - [false, 'CompassP1', false, 'region.wildCompasses'], - [true, 'CompassP1', true, 'region.wildCompasses'], - [true, 'CompassP2', false, 'region.wildCompasses'], - [true, 'CompassP2', true, 'region.wildCompasses'], - [false, 'CompassA1', false, 'region.wildCompasses'], - [true, 'CompassA1', true, 'region.wildCompasses'], - [false, 'CompassD2', false, 'region.wildCompasses'], - [true, 'CompassD2', true, 'region.wildCompasses'], - [false, 'CompassD1', false, 'region.wildCompasses'], - [true, 'CompassD1', true, 'region.wildCompasses'], - [false, 'CompassD6', false, 'region.wildCompasses'], - [true, 'CompassD6', true, 'region.wildCompasses'], - [false, 'CompassD3', false, 'region.wildCompasses'], - [true, 'CompassD3', true, 'region.wildCompasses'], - [false, 'CompassD5', false, 'region.wildCompasses'], - [true, 'CompassD5', true, 'region.wildCompasses'], - [false, 'CompassP3', false, 'region.wildCompasses'], - [true, 'CompassP3', true, 'region.wildCompasses'], - [false, 'CompassD4', false, 'region.wildCompasses'], - [true, 'CompassD4', true, 'region.wildCompasses'], - [false, 'CompassD7', false, 'region.wildCompasses'], - [true, 'CompassD7', true, 'region.wildCompasses'], - [false, 'CompassA2', false, 'region.wildCompasses'], - [true, 'CompassA2', true, 'region.wildCompasses'], - ]; - } +class DesertPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider entryPool + */ + public function testEntry(bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getRegion('Desert Palace') + ->canEnter($this->world->getLocations(), $this->collected)); + } + + public function entryPool() + { + return [ + [false, []], + [true, ['BookOfMudora']], + [true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + [true, ['Flute', 'MagicMirror', 'TitansMitt']], + ]; + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Desert Palace - Big Key Chest", false, 'KeyP2', [], ['KeyP2']], + ["Desert Palace - Compass Chest", false, 'KeyP2', [], ['KeyP2']], + + ["Desert Palace - Big Chest", false, 'BigKeyP2', [], ['BigKeyP2']], + + ["Desert Palace - Boss", false, 'BigKeyP2', [], ['BigKeyP2']], + ["Desert Palace - Boss", false, 'KeyP2', [], ['KeyP2']], + ]; + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPool() + { + return [ + ["Desert Palace - Map Chest", false, []], + ["Desert Palace - Map Chest", true, ['BookOfMudora']], + ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Desert Palace - Big Chest", false, []], + ["Desert Palace - Big Chest", true, ['BookOfMudora', 'BigKeyP2']], + ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'BigKeyP2']], + + ["Desert Palace - Torch", false, []], + ["Desert Palace - Torch", false, [], ['PegasusBoots']], + ["Desert Palace - Torch", true, ['BookOfMudora', 'PegasusBoots']], + ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'PegasusBoots']], + ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'TitansMitt', 'PegasusBoots']], + + ["Desert Palace - Compass Chest", false, []], + ["Desert Palace - Compass Chest", false, [], ['KeyP2']], + ["Desert Palace - Compass Chest", true, ['BookOfMudora', 'KeyP2']], + ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], + ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], + + ["Desert Palace - Big Key Chest", false, []], + ["Desert Palace - Big Key Chest", false, [], ['KeyP2']], + ["Desert Palace - Big Key Chest", true, ['BookOfMudora', 'KeyP2']], + ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], + ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], + + ["Desert Palace - Boss", false, []], + ["Desert Palace - Boss", false, [], ['KeyP2']], + ["Desert Palace - Boss", false, [], ['BigKeyP2']], + ["Desert Palace - Boss", false, [], ['Gloves']], + ["Desert Palace - Boss", false, [], ['Lamp', 'FireRod']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'PowerGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'PowerGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'TitansMitt', 'BigKeyP2']], + ]; + } + + /** + * @dataProvider dungeonItemsPool + */ + public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) + { + if ($config) { + config([$config => $free]); + } + + $this->assertEquals($access, $this->world->getRegion('Desert Palace')->canFill(Item::get($item_name, $this->world))); + } + + public function dungeonItemsPool() + { + return [ + [true, 'Key'], + [false, 'KeyH2'], + [false, 'KeyH1'], + [false, 'KeyP1'], + [true, 'KeyP2'], + [false, 'KeyA1'], + [false, 'KeyD2'], + [false, 'KeyD1'], + [false, 'KeyD6'], + [false, 'KeyD3'], + [false, 'KeyD5'], + [false, 'KeyP3'], + [false, 'KeyD4'], + [false, 'KeyD7'], + [false, 'KeyA2'], + + [true, 'BigKey'], + [false, 'BigKeyH2'], + [false, 'BigKeyH1'], + [false, 'BigKeyP1'], + [true, 'BigKeyP2'], + [false, 'BigKeyA1'], + [false, 'BigKeyD2'], + [false, 'BigKeyD1'], + [false, 'BigKeyD6'], + [false, 'BigKeyD3'], + [false, 'BigKeyD5'], + [false, 'BigKeyP3'], + [false, 'BigKeyD4'], + [false, 'BigKeyD7'], + [false, 'BigKeyA2'], + + [true, 'Map', false, 'region.wildMaps'], + [true, 'Map', true, 'region.wildMaps'], + [false, 'MapH2', false, 'region.wildMaps'], + [true, 'MapH2', true, 'region.wildMaps'], + [false, 'MapH1', false, 'region.wildMaps'], + [true, 'MapH1', true, 'region.wildMaps'], + [false, 'MapP1', false, 'region.wildMaps'], + [true, 'MapP1', true, 'region.wildMaps'], + [true, 'MapP2', false, 'region.wildMaps'], + [true, 'MapP2', true, 'region.wildMaps'], + [false, 'MapA1', false, 'region.wildMaps'], + [true, 'MapA1', true, 'region.wildMaps'], + [false, 'MapD2', false, 'region.wildMaps'], + [true, 'MapD2', true, 'region.wildMaps'], + [false, 'MapD1', false, 'region.wildMaps'], + [true, 'MapD1', true, 'region.wildMaps'], + [false, 'MapD6', false, 'region.wildMaps'], + [true, 'MapD6', true, 'region.wildMaps'], + [false, 'MapD3', false, 'region.wildMaps'], + [true, 'MapD3', true, 'region.wildMaps'], + [false, 'MapD5', false, 'region.wildMaps'], + [true, 'MapD5', true, 'region.wildMaps'], + [false, 'MapP3', false, 'region.wildMaps'], + [true, 'MapP3', true, 'region.wildMaps'], + [false, 'MapD4', false, 'region.wildMaps'], + [true, 'MapD4', true, 'region.wildMaps'], + [false, 'MapD7', false, 'region.wildMaps'], + [true, 'MapD7', true, 'region.wildMaps'], + [false, 'MapA2', false, 'region.wildMaps'], + [true, 'MapA2', true, 'region.wildMaps'], + + [true, 'Compass', false, 'region.wildCompasses'], + [true, 'Compass', true, 'region.wildCompasses'], + [false, 'CompassH2', false, 'region.wildCompasses'], + [true, 'CompassH2', true, 'region.wildCompasses'], + [false, 'CompassH1', false, 'region.wildCompasses'], + [true, 'CompassH1', true, 'region.wildCompasses'], + [false, 'CompassP1', false, 'region.wildCompasses'], + [true, 'CompassP1', true, 'region.wildCompasses'], + [true, 'CompassP2', false, 'region.wildCompasses'], + [true, 'CompassP2', true, 'region.wildCompasses'], + [false, 'CompassA1', false, 'region.wildCompasses'], + [true, 'CompassA1', true, 'region.wildCompasses'], + [false, 'CompassD2', false, 'region.wildCompasses'], + [true, 'CompassD2', true, 'region.wildCompasses'], + [false, 'CompassD1', false, 'region.wildCompasses'], + [true, 'CompassD1', true, 'region.wildCompasses'], + [false, 'CompassD6', false, 'region.wildCompasses'], + [true, 'CompassD6', true, 'region.wildCompasses'], + [false, 'CompassD3', false, 'region.wildCompasses'], + [true, 'CompassD3', true, 'region.wildCompasses'], + [false, 'CompassD5', false, 'region.wildCompasses'], + [true, 'CompassD5', true, 'region.wildCompasses'], + [false, 'CompassP3', false, 'region.wildCompasses'], + [true, 'CompassP3', true, 'region.wildCompasses'], + [false, 'CompassD4', false, 'region.wildCompasses'], + [true, 'CompassD4', true, 'region.wildCompasses'], + [false, 'CompassD7', false, 'region.wildCompasses'], + [true, 'CompassD7', true, 'region.wildCompasses'], + [false, 'CompassA2', false, 'region.wildCompasses'], + [true, 'CompassA2', true, 'region.wildCompasses'], + ]; + } } diff --git a/tests/NoGlitches/EasternPalaceTest.php b/tests/NoGlitches/EasternPalaceTest.php index ccb01a9f9..755deb8ee 100644 --- a/tests/NoGlitches/EasternPalaceTest.php +++ b/tests/NoGlitches/EasternPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - // Entry - public function testNothingRequiredToEnter() { - $this->assertTrue($this->world->getRegion('Eastern Palace') - ->canEnter($this->world->getLocations(), $this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Eastern Palace - Compass Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Cannonball Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Big Chest", false, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Map Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Big Key Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Boss", false, 'BigKeyP1', [], ['BigKeyP1']], - ]; - } - - public function accessPool() { - return [ - ["Eastern Palace - Compass Chest", true, []], - - ["Eastern Palace - Cannonball Chest", true, []], - - ["Eastern Palace - Big Chest", false, []], - ["Eastern Palace - Big Chest", false, [], ['BigKeyP1']], - ["Eastern Palace - Big Chest", true, ['BigKeyP1']], - - ["Eastern Palace - Map Chest", true, []], - - ["Eastern Palace - Big Key Chest", false, []], - ["Eastern Palace - Big Key Chest", false, [], ['Lamp']], - ["Eastern Palace - Big Key Chest", true, ['Lamp']], - - - ["Eastern Palace - Boss", false, []], - ["Eastern Palace - Boss", false, [], ['Lamp']], - ["Eastern Palace - Boss", false, [], ['AnyBow']], - ["Eastern Palace - Boss", false, [], ['BigKeyP1']], - ["Eastern Palace - Boss", true, ['Lamp', 'Bow', 'BigKeyP1']], - ]; - } - - /** - * @dataProvider dungeonItemsPool - */ - public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) { - if ($config) { - config(["alttp.test_rules.$config" => $free]); - } - - $this->assertEquals($access, $this->world->getRegion('Eastern Palace')->canFill(Item::get($item_name))); - } - - public function dungeonItemsPool() { - return [ - [true, 'Key'], - [false, 'KeyH2'], - [false, 'KeyH1'], - [true, 'KeyP1'], - [false, 'KeyP2'], - [false, 'KeyA1'], - [false, 'KeyD2'], - [false, 'KeyD1'], - [false, 'KeyD6'], - [false, 'KeyD3'], - [false, 'KeyD5'], - [false, 'KeyP3'], - [false, 'KeyD4'], - [false, 'KeyD7'], - [false, 'KeyA2'], - - [true, 'BigKey'], - [false, 'BigKeyH2'], - [false, 'BigKeyH1'], - [true, 'BigKeyP1'], - [false, 'BigKeyP2'], - [false, 'BigKeyA1'], - [false, 'BigKeyD2'], - [false, 'BigKeyD1'], - [false, 'BigKeyD6'], - [false, 'BigKeyD3'], - [false, 'BigKeyD5'], - [false, 'BigKeyP3'], - [false, 'BigKeyD4'], - [false, 'BigKeyD7'], - [false, 'BigKeyA2'], - - [true, 'Map', false, 'region.wildMaps'], - [true, 'Map', true, 'region.wildMaps'], - [false, 'MapH2', false, 'region.wildMaps'], - [true, 'MapH2', true, 'region.wildMaps'], - [false, 'MapH1', false, 'region.wildMaps'], - [true, 'MapH1', true, 'region.wildMaps'], - [true, 'MapP1', false, 'region.wildMaps'], - [true, 'MapP1', true, 'region.wildMaps'], - [false, 'MapP2', false, 'region.wildMaps'], - [true, 'MapP2', true, 'region.wildMaps'], - [false, 'MapA1', false, 'region.wildMaps'], - [true, 'MapA1', true, 'region.wildMaps'], - [false, 'MapD2', false, 'region.wildMaps'], - [true, 'MapD2', true, 'region.wildMaps'], - [false, 'MapD1', false, 'region.wildMaps'], - [true, 'MapD1', true, 'region.wildMaps'], - [false, 'MapD6', false, 'region.wildMaps'], - [true, 'MapD6', true, 'region.wildMaps'], - [false, 'MapD3', false, 'region.wildMaps'], - [true, 'MapD3', true, 'region.wildMaps'], - [false, 'MapD5', false, 'region.wildMaps'], - [true, 'MapD5', true, 'region.wildMaps'], - [false, 'MapP3', false, 'region.wildMaps'], - [true, 'MapP3', true, 'region.wildMaps'], - [false, 'MapD4', false, 'region.wildMaps'], - [true, 'MapD4', true, 'region.wildMaps'], - [false, 'MapD7', false, 'region.wildMaps'], - [true, 'MapD7', true, 'region.wildMaps'], - [false, 'MapA2', false, 'region.wildMaps'], - [true, 'MapA2', true, 'region.wildMaps'], - - [true, 'Compass', false, 'region.wildCompasses'], - [true, 'Compass', true, 'region.wildCompasses'], - [false, 'CompassH2', false, 'region.wildCompasses'], - [true, 'CompassH2', true, 'region.wildCompasses'], - [false, 'CompassH1', false, 'region.wildCompasses'], - [true, 'CompassH1', true, 'region.wildCompasses'], - [true, 'CompassP1', false, 'region.wildCompasses'], - [true, 'CompassP1', true, 'region.wildCompasses'], - [false, 'CompassP2', false, 'region.wildCompasses'], - [true, 'CompassP2', true, 'region.wildCompasses'], - [false, 'CompassA1', false, 'region.wildCompasses'], - [true, 'CompassA1', true, 'region.wildCompasses'], - [false, 'CompassD2', false, 'region.wildCompasses'], - [true, 'CompassD2', true, 'region.wildCompasses'], - [false, 'CompassD1', false, 'region.wildCompasses'], - [true, 'CompassD1', true, 'region.wildCompasses'], - [false, 'CompassD6', false, 'region.wildCompasses'], - [true, 'CompassD6', true, 'region.wildCompasses'], - [false, 'CompassD3', false, 'region.wildCompasses'], - [true, 'CompassD3', true, 'region.wildCompasses'], - [false, 'CompassD5', false, 'region.wildCompasses'], - [true, 'CompassD5', true, 'region.wildCompasses'], - [false, 'CompassP3', false, 'region.wildCompasses'], - [true, 'CompassP3', true, 'region.wildCompasses'], - [false, 'CompassD4', false, 'region.wildCompasses'], - [true, 'CompassD4', true, 'region.wildCompasses'], - [false, 'CompassD7', false, 'region.wildCompasses'], - [true, 'CompassD7', true, 'region.wildCompasses'], - [false, 'CompassA2', false, 'region.wildCompasses'], - [true, 'CompassA2', true, 'region.wildCompasses'], - ]; - } +class EasternPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + // Entry + public function testNothingRequiredToEnter() + { + $this->assertTrue($this->world->getRegion('Eastern Palace') + ->canEnter($this->world->getLocations(), $this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Eastern Palace - Compass Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Cannonball Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Big Chest", false, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Map Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Big Key Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Boss", false, 'BigKeyP1', [], ['BigKeyP1']], + ]; + } + + public function accessPool() + { + return [ + ["Eastern Palace - Compass Chest", true, []], + + ["Eastern Palace - Cannonball Chest", true, []], + + ["Eastern Palace - Big Chest", false, []], + ["Eastern Palace - Big Chest", false, [], ['BigKeyP1']], + ["Eastern Palace - Big Chest", true, ['BigKeyP1']], + + ["Eastern Palace - Map Chest", true, []], + + ["Eastern Palace - Big Key Chest", false, []], + ["Eastern Palace - Big Key Chest", false, [], ['Lamp']], + ["Eastern Palace - Big Key Chest", true, ['Lamp']], + + + ["Eastern Palace - Boss", false, []], + ["Eastern Palace - Boss", false, [], ['Lamp']], + ["Eastern Palace - Boss", false, [], ['AnyBow']], + ["Eastern Palace - Boss", false, [], ['BigKeyP1']], + ["Eastern Palace - Boss", true, ['Lamp', 'BowAndArrows', 'BigKeyP1']], + ]; + } + + /** + * @dataProvider dungeonItemsPool + */ + public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) + { + if ($config) { + config([$config => $free]); + } + + $this->assertEquals($access, $this->world->getRegion('Eastern Palace')->canFill(Item::get($item_name, $this->world))); + } + + public function dungeonItemsPool() + { + return [ + [true, 'Key'], + [false, 'KeyH2'], + [false, 'KeyH1'], + [true, 'KeyP1'], + [false, 'KeyP2'], + [false, 'KeyA1'], + [false, 'KeyD2'], + [false, 'KeyD1'], + [false, 'KeyD6'], + [false, 'KeyD3'], + [false, 'KeyD5'], + [false, 'KeyP3'], + [false, 'KeyD4'], + [false, 'KeyD7'], + [false, 'KeyA2'], + + [true, 'BigKey'], + [false, 'BigKeyH2'], + [false, 'BigKeyH1'], + [true, 'BigKeyP1'], + [false, 'BigKeyP2'], + [false, 'BigKeyA1'], + [false, 'BigKeyD2'], + [false, 'BigKeyD1'], + [false, 'BigKeyD6'], + [false, 'BigKeyD3'], + [false, 'BigKeyD5'], + [false, 'BigKeyP3'], + [false, 'BigKeyD4'], + [false, 'BigKeyD7'], + [false, 'BigKeyA2'], + + [true, 'Map', false, 'region.wildMaps'], + [true, 'Map', true, 'region.wildMaps'], + [false, 'MapH2', false, 'region.wildMaps'], + [true, 'MapH2', true, 'region.wildMaps'], + [false, 'MapH1', false, 'region.wildMaps'], + [true, 'MapH1', true, 'region.wildMaps'], + [true, 'MapP1', false, 'region.wildMaps'], + [true, 'MapP1', true, 'region.wildMaps'], + [false, 'MapP2', false, 'region.wildMaps'], + [true, 'MapP2', true, 'region.wildMaps'], + [false, 'MapA1', false, 'region.wildMaps'], + [true, 'MapA1', true, 'region.wildMaps'], + [false, 'MapD2', false, 'region.wildMaps'], + [true, 'MapD2', true, 'region.wildMaps'], + [false, 'MapD1', false, 'region.wildMaps'], + [true, 'MapD1', true, 'region.wildMaps'], + [false, 'MapD6', false, 'region.wildMaps'], + [true, 'MapD6', true, 'region.wildMaps'], + [false, 'MapD3', false, 'region.wildMaps'], + [true, 'MapD3', true, 'region.wildMaps'], + [false, 'MapD5', false, 'region.wildMaps'], + [true, 'MapD5', true, 'region.wildMaps'], + [false, 'MapP3', false, 'region.wildMaps'], + [true, 'MapP3', true, 'region.wildMaps'], + [false, 'MapD4', false, 'region.wildMaps'], + [true, 'MapD4', true, 'region.wildMaps'], + [false, 'MapD7', false, 'region.wildMaps'], + [true, 'MapD7', true, 'region.wildMaps'], + [false, 'MapA2', false, 'region.wildMaps'], + [true, 'MapA2', true, 'region.wildMaps'], + + [true, 'Compass', false, 'region.wildCompasses'], + [true, 'Compass', true, 'region.wildCompasses'], + [false, 'CompassH2', false, 'region.wildCompasses'], + [true, 'CompassH2', true, 'region.wildCompasses'], + [false, 'CompassH1', false, 'region.wildCompasses'], + [true, 'CompassH1', true, 'region.wildCompasses'], + [true, 'CompassP1', false, 'region.wildCompasses'], + [true, 'CompassP1', true, 'region.wildCompasses'], + [false, 'CompassP2', false, 'region.wildCompasses'], + [true, 'CompassP2', true, 'region.wildCompasses'], + [false, 'CompassA1', false, 'region.wildCompasses'], + [true, 'CompassA1', true, 'region.wildCompasses'], + [false, 'CompassD2', false, 'region.wildCompasses'], + [true, 'CompassD2', true, 'region.wildCompasses'], + [false, 'CompassD1', false, 'region.wildCompasses'], + [true, 'CompassD1', true, 'region.wildCompasses'], + [false, 'CompassD6', false, 'region.wildCompasses'], + [true, 'CompassD6', true, 'region.wildCompasses'], + [false, 'CompassD3', false, 'region.wildCompasses'], + [true, 'CompassD3', true, 'region.wildCompasses'], + [false, 'CompassD5', false, 'region.wildCompasses'], + [true, 'CompassD5', true, 'region.wildCompasses'], + [false, 'CompassP3', false, 'region.wildCompasses'], + [true, 'CompassP3', true, 'region.wildCompasses'], + [false, 'CompassD4', false, 'region.wildCompasses'], + [true, 'CompassD4', true, 'region.wildCompasses'], + [false, 'CompassD7', false, 'region.wildCompasses'], + [true, 'CompassD7', true, 'region.wildCompasses'], + [false, 'CompassA2', false, 'region.wildCompasses'], + [true, 'CompassA2', true, 'region.wildCompasses'], + ]; + } } diff --git a/tests/NoGlitches/GanonsTowerTest.php b/tests/NoGlitches/GanonsTowerTest.php index 8104a7f19..0c8062fab 100644 --- a/tests/NoGlitches/GanonsTowerTest.php +++ b/tests/NoGlitches/GanonsTowerTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } +class GanonsTowerTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - $this->addCollected($items); + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } + $this->addCollected($items); + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function fillPool() { - return [ - ["Ganon's Tower - Bob's Torch", true, 'BigKeyA2', [], ['BigKeyA2']], + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - ["Ganon's Tower - DMs Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - DMs Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - DMs Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - DMs Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Randomizer Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Randomizer Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Randomizer Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Randomizer Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Firesnake Room", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Map Chest", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Hope Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Hope Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Bob's Chest", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Tile Room", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Chest", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Mini Helmasaur Room - Left", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Mini Helmasaur Room - Right", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Pre-Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - ]; - } - - public function accessPool() { - return [ - ["Ganon's Tower - Bob's Torch", false, []], - ["Ganon's Tower - Bob's Torch", false, [], ['MoonPearl']], - ["Ganon's Tower - Bob's Torch", false, [], ['TitansMitt']], - ["Ganon's Tower - Bob's Torch", false, [], ['Crystal1']], - ["Ganon's Tower - Bob's Torch", false, [], ['Crystal2']], - ["Ganon's Tower - Bob's Torch", false, [], ['Crystal3']], - ["Ganon's Tower - Bob's Torch", false, [], ['Crystal4']], - ["Ganon's Tower - Bob's Torch", false, [], ['Crystal5']], - ["Ganon's Tower - Bob's Torch", false, [], ['Crystal6']], - ["Ganon's Tower - Bob's Torch", false, [], ['Crystal7']], - ["Ganon's Tower - Bob's Torch", false, [], ['PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - DMs Room - Top Left", false, []], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['MoonPearl']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['TitansMitt']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal1']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal2']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal3']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal4']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal5']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal6']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal7']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - DMs Room - Top Right", false, []], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['MoonPearl']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['TitansMitt']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal1']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal2']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal3']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal4']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal5']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal6']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal7']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - DMs Room - Bottom Left", false, []], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['MoonPearl']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['TitansMitt']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal1']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal2']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal3']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal4']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal5']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal6']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - DMs Room - Bottom Right", false, []], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['MoonPearl']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['TitansMitt']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal1']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal2']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal3']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal4']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal5']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal6']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Randomizer Room - Top Left", false, []], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['MoonPearl']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['TitansMitt']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal1']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal2']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal3']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal4']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal5']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal6']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Randomizer Room - Top Right", false, []], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['MoonPearl']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['TitansMitt']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal1']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal2']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal3']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal4']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal5']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal6']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Randomizer Room - Bottom Left", false, []], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['MoonPearl']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['TitansMitt']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal1']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal2']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal3']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal4']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal5']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal6']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Randomizer Room - Bottom Right", false, []], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['MoonPearl']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['TitansMitt']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal1']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal2']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal3']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal4']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal5']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal6']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Firesnake Room", false, []], - ["Ganon's Tower - Firesnake Room", false, [], ['MoonPearl']], - ["Ganon's Tower - Firesnake Room", false, [], ['TitansMitt']], - ["Ganon's Tower - Firesnake Room", false, [], ['Crystal1']], - ["Ganon's Tower - Firesnake Room", false, [], ['Crystal2']], - ["Ganon's Tower - Firesnake Room", false, [], ['Crystal3']], - ["Ganon's Tower - Firesnake Room", false, [], ['Crystal4']], - ["Ganon's Tower - Firesnake Room", false, [], ['Crystal5']], - ["Ganon's Tower - Firesnake Room", false, [], ['Crystal6']], - ["Ganon's Tower - Firesnake Room", false, [], ['Crystal7']], - ["Ganon's Tower - Firesnake Room", false, [], ['Hammer']], - ["Ganon's Tower - Firesnake Room", false, [], ['Hookshot']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Map Chest", false, []], - ["Ganon's Tower - Map Chest", false, [], ['MoonPearl']], - ["Ganon's Tower - Map Chest", false, [], ['TitansMitt']], - ["Ganon's Tower - Map Chest", false, [], ['Crystal1']], - ["Ganon's Tower - Map Chest", false, [], ['Crystal2']], - ["Ganon's Tower - Map Chest", false, [], ['Crystal3']], - ["Ganon's Tower - Map Chest", false, [], ['Crystal4']], - ["Ganon's Tower - Map Chest", false, [], ['Crystal5']], - ["Ganon's Tower - Map Chest", false, [], ['Crystal6']], - ["Ganon's Tower - Map Chest", false, [], ['Crystal7']], - ["Ganon's Tower - Map Chest", false, [], ['Hammer']], - ["Ganon's Tower - Map Chest", false, [], ['Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Big Chest", false, []], - ["Ganon's Tower - Big Chest", false, [], ['MoonPearl']], - ["Ganon's Tower - Big Chest", false, [], ['TitansMitt']], - ["Ganon's Tower - Big Chest", false, [], ['Crystal1']], - ["Ganon's Tower - Big Chest", false, [], ['Crystal2']], - ["Ganon's Tower - Big Chest", false, [], ['Crystal3']], - ["Ganon's Tower - Big Chest", false, [], ['Crystal4']], - ["Ganon's Tower - Big Chest", false, [], ['Crystal5']], - ["Ganon's Tower - Big Chest", false, [], ['Crystal6']], - ["Ganon's Tower - Big Chest", false, [], ['Crystal7']], - ["Ganon's Tower - Big Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Hope Room - Left", false, []], - ["Ganon's Tower - Hope Room - Left", false, [], ['MoonPearl']], - ["Ganon's Tower - Hope Room - Left", false, [], ['TitansMitt']], - ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal1']], - ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal2']], - ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal3']], - ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal4']], - ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal5']], - ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal6']], - ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Hope Room - Right", false, []], - ["Ganon's Tower - Hope Room - Right", false, [], ['MoonPearl']], - ["Ganon's Tower - Hope Room - Right", false, [], ['TitansMitt']], - ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal1']], - ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal2']], - ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal3']], - ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal4']], - ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal5']], - ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal6']], - ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Bob's Chest", false, []], - ["Ganon's Tower - Bob's Chest", false, [], ['MoonPearl']], - ["Ganon's Tower - Bob's Chest", false, [], ['TitansMitt']], - ["Ganon's Tower - Bob's Chest", false, [], ['Crystal1']], - ["Ganon's Tower - Bob's Chest", false, [], ['Crystal2']], - ["Ganon's Tower - Bob's Chest", false, [], ['Crystal3']], - ["Ganon's Tower - Bob's Chest", false, [], ['Crystal4']], - ["Ganon's Tower - Bob's Chest", false, [], ['Crystal5']], - ["Ganon's Tower - Bob's Chest", false, [], ['Crystal6']], - ["Ganon's Tower - Bob's Chest", false, [], ['Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Tile Room", false, []], - ["Ganon's Tower - Tile Room", false, [], ['MoonPearl']], - ["Ganon's Tower - Tile Room", false, [], ['TitansMitt']], - ["Ganon's Tower - Tile Room", false, [], ['Crystal1']], - ["Ganon's Tower - Tile Room", false, [], ['Crystal2']], - ["Ganon's Tower - Tile Room", false, [], ['Crystal3']], - ["Ganon's Tower - Tile Room", false, [], ['Crystal4']], - ["Ganon's Tower - Tile Room", false, [], ['Crystal5']], - ["Ganon's Tower - Tile Room", false, [], ['Crystal6']], - ["Ganon's Tower - Tile Room", false, [], ['Crystal7']], - ["Ganon's Tower - Tile Room", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Compass Room - Top Left", false, []], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['MoonPearl']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['TitansMitt']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal1']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal2']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal3']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal4']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal5']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal6']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Compass Room - Top Right", false, []], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['MoonPearl']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['TitansMitt']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal1']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal2']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal3']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal4']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal5']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal6']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Compass Room - Bottom Left", false, []], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['MoonPearl']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['TitansMitt']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal1']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal2']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal3']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal4']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal5']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal6']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Compass Room - Bottom Right", false, []], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['MoonPearl']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['TitansMitt']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal1']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal2']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal3']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal4']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal5']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal6']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Big Key Chest", false, []], - ["Ganon's Tower - Big Key Chest", false, [], ['MoonPearl']], - ["Ganon's Tower - Big Key Chest", false, [], ['TitansMitt']], - ["Ganon's Tower - Big Key Chest", false, [], ['Crystal1']], - ["Ganon's Tower - Big Key Chest", false, [], ['Crystal2']], - ["Ganon's Tower - Big Key Chest", false, [], ['Crystal3']], - ["Ganon's Tower - Big Key Chest", false, [], ['Crystal4']], - ["Ganon's Tower - Big Key Chest", false, [], ['Crystal5']], - ["Ganon's Tower - Big Key Chest", false, [], ['Crystal6']], - ["Ganon's Tower - Big Key Chest", false, [], ['Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Big Key Room - Left", false, []], - ["Ganon's Tower - Big Key Room - Left", false, [], ['MoonPearl']], - ["Ganon's Tower - Big Key Room - Left", false, [], ['TitansMitt']], - ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal1']], - ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal2']], - ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal3']], - ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal4']], - ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal5']], - ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal6']], - ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Big Key Room - Right", false, []], - ["Ganon's Tower - Big Key Room - Right", false, [], ['MoonPearl']], - ["Ganon's Tower - Big Key Room - Right", false, [], ['TitansMitt']], - ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal1']], - ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal2']], - ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal3']], - ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal4']], - ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal5']], - ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal6']], - ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Mini Helmasaur Room - Left", false, []], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['MoonPearl']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['TitansMitt']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal1']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal2']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal3']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal4']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal5']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal6']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['AnyBow']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['BigKeyA2']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Mini Helmasaur Room - Right", false, []], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['MoonPearl']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['TitansMitt']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal1']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal2']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal3']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal4']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal5']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal6']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['AnyBow']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['BigKeyA2']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Pre-Moldorm Chest", false, []], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['MoonPearl']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['TitansMitt']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal1']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal2']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal3']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal4']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal5']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal6']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['AnyBow']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - - ["Ganon's Tower - Moldorm Chest", false, []], - ["Ganon's Tower - Moldorm Chest", false, [], ['MoonPearl']], - ["Ganon's Tower - Moldorm Chest", false, [], ['TitansMitt']], - ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal1']], - ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal2']], - ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal3']], - ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal4']], - ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal5']], - ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal6']], - ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal7']], - ["Ganon's Tower - Moldorm Chest", false, [], ['Hookshot']], - ["Ganon's Tower - Moldorm Chest", false, [], ['AnyBow']], - ["Ganon's Tower - Moldorm Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], - ]; - } + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + + public function fillPool() + { + return [ + ["Ganon's Tower - Bob's Torch", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - DMs Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - DMs Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - DMs Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - DMs Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Firesnake Room", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Map Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Hope Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Hope Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Bob's Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Tile Room", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Mini Helmasaur Room - Left", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Mini Helmasaur Room - Right", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Pre-Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + ]; + } + + public function accessPool() + { + return [ + ["Ganon's Tower - Bob's Torch", false, []], + ["Ganon's Tower - Bob's Torch", false, [], ['MoonPearl']], + ["Ganon's Tower - Bob's Torch", false, [], ['TitansMitt']], + ["Ganon's Tower - Bob's Torch", false, [], ['Crystal1']], + ["Ganon's Tower - Bob's Torch", false, [], ['Crystal2']], + ["Ganon's Tower - Bob's Torch", false, [], ['Crystal3']], + ["Ganon's Tower - Bob's Torch", false, [], ['Crystal4']], + ["Ganon's Tower - Bob's Torch", false, [], ['Crystal5']], + ["Ganon's Tower - Bob's Torch", false, [], ['Crystal6']], + ["Ganon's Tower - Bob's Torch", false, [], ['Crystal7']], + ["Ganon's Tower - Bob's Torch", false, [], ['PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - DMs Room - Top Left", false, []], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['MoonPearl']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['TitansMitt']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal1']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal2']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal3']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal4']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal5']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal6']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Crystal7']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - DMs Room - Top Right", false, []], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['MoonPearl']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['TitansMitt']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal1']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal2']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal3']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal4']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal5']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal6']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Crystal7']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - DMs Room - Bottom Left", false, []], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['MoonPearl']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['TitansMitt']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal1']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal2']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal3']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal4']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal5']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal6']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - DMs Room - Bottom Right", false, []], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['MoonPearl']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['TitansMitt']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal1']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal2']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal3']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal4']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal5']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal6']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Randomizer Room - Top Left", false, []], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['MoonPearl']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['TitansMitt']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal1']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal2']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal3']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal4']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal5']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal6']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Randomizer Room - Top Right", false, []], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['MoonPearl']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['TitansMitt']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal1']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal2']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal3']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal4']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal5']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal6']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Randomizer Room - Bottom Left", false, []], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['MoonPearl']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['TitansMitt']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal1']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal2']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal3']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal4']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal5']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal6']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Randomizer Room - Bottom Right", false, []], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['MoonPearl']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['TitansMitt']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal1']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal2']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal3']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal4']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal5']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal6']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Firesnake Room", false, []], + ["Ganon's Tower - Firesnake Room", false, [], ['MoonPearl']], + ["Ganon's Tower - Firesnake Room", false, [], ['TitansMitt']], + ["Ganon's Tower - Firesnake Room", false, [], ['Crystal1']], + ["Ganon's Tower - Firesnake Room", false, [], ['Crystal2']], + ["Ganon's Tower - Firesnake Room", false, [], ['Crystal3']], + ["Ganon's Tower - Firesnake Room", false, [], ['Crystal4']], + ["Ganon's Tower - Firesnake Room", false, [], ['Crystal5']], + ["Ganon's Tower - Firesnake Room", false, [], ['Crystal6']], + ["Ganon's Tower - Firesnake Room", false, [], ['Crystal7']], + ["Ganon's Tower - Firesnake Room", false, [], ['Hammer']], + ["Ganon's Tower - Firesnake Room", false, [], ['Hookshot']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Map Chest", false, []], + ["Ganon's Tower - Map Chest", false, [], ['MoonPearl']], + ["Ganon's Tower - Map Chest", false, [], ['TitansMitt']], + ["Ganon's Tower - Map Chest", false, [], ['Crystal1']], + ["Ganon's Tower - Map Chest", false, [], ['Crystal2']], + ["Ganon's Tower - Map Chest", false, [], ['Crystal3']], + ["Ganon's Tower - Map Chest", false, [], ['Crystal4']], + ["Ganon's Tower - Map Chest", false, [], ['Crystal5']], + ["Ganon's Tower - Map Chest", false, [], ['Crystal6']], + ["Ganon's Tower - Map Chest", false, [], ['Crystal7']], + ["Ganon's Tower - Map Chest", false, [], ['Hammer']], + ["Ganon's Tower - Map Chest", false, [], ['Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Big Chest", false, []], + ["Ganon's Tower - Big Chest", false, [], ['MoonPearl']], + ["Ganon's Tower - Big Chest", false, [], ['TitansMitt']], + ["Ganon's Tower - Big Chest", false, [], ['Crystal1']], + ["Ganon's Tower - Big Chest", false, [], ['Crystal2']], + ["Ganon's Tower - Big Chest", false, [], ['Crystal3']], + ["Ganon's Tower - Big Chest", false, [], ['Crystal4']], + ["Ganon's Tower - Big Chest", false, [], ['Crystal5']], + ["Ganon's Tower - Big Chest", false, [], ['Crystal6']], + ["Ganon's Tower - Big Chest", false, [], ['Crystal7']], + ["Ganon's Tower - Big Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Hope Room - Left", false, []], + ["Ganon's Tower - Hope Room - Left", false, [], ['MoonPearl']], + ["Ganon's Tower - Hope Room - Left", false, [], ['TitansMitt']], + ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal1']], + ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal2']], + ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal3']], + ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal4']], + ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal5']], + ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal6']], + ["Ganon's Tower - Hope Room - Left", false, [], ['Crystal7']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Hope Room - Right", false, []], + ["Ganon's Tower - Hope Room - Right", false, [], ['MoonPearl']], + ["Ganon's Tower - Hope Room - Right", false, [], ['TitansMitt']], + ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal1']], + ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal2']], + ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal3']], + ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal4']], + ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal5']], + ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal6']], + ["Ganon's Tower - Hope Room - Right", false, [], ['Crystal7']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Bob's Chest", false, []], + ["Ganon's Tower - Bob's Chest", false, [], ['MoonPearl']], + ["Ganon's Tower - Bob's Chest", false, [], ['TitansMitt']], + ["Ganon's Tower - Bob's Chest", false, [], ['Crystal1']], + ["Ganon's Tower - Bob's Chest", false, [], ['Crystal2']], + ["Ganon's Tower - Bob's Chest", false, [], ['Crystal3']], + ["Ganon's Tower - Bob's Chest", false, [], ['Crystal4']], + ["Ganon's Tower - Bob's Chest", false, [], ['Crystal5']], + ["Ganon's Tower - Bob's Chest", false, [], ['Crystal6']], + ["Ganon's Tower - Bob's Chest", false, [], ['Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Tile Room", false, []], + ["Ganon's Tower - Tile Room", false, [], ['MoonPearl']], + ["Ganon's Tower - Tile Room", false, [], ['TitansMitt']], + ["Ganon's Tower - Tile Room", false, [], ['Crystal1']], + ["Ganon's Tower - Tile Room", false, [], ['Crystal2']], + ["Ganon's Tower - Tile Room", false, [], ['Crystal3']], + ["Ganon's Tower - Tile Room", false, [], ['Crystal4']], + ["Ganon's Tower - Tile Room", false, [], ['Crystal5']], + ["Ganon's Tower - Tile Room", false, [], ['Crystal6']], + ["Ganon's Tower - Tile Room", false, [], ['Crystal7']], + ["Ganon's Tower - Tile Room", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Compass Room - Top Left", false, []], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['MoonPearl']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['TitansMitt']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal1']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal2']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal3']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal4']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal5']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal6']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Compass Room - Top Right", false, []], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['MoonPearl']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['TitansMitt']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal1']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal2']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal3']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal4']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal5']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal6']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Compass Room - Bottom Left", false, []], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['MoonPearl']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['TitansMitt']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal1']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal2']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal3']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal4']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal5']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal6']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Compass Room - Bottom Right", false, []], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['MoonPearl']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['TitansMitt']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal1']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal2']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal3']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal4']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal5']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal6']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Big Key Chest", false, []], + ["Ganon's Tower - Big Key Chest", false, [], ['MoonPearl']], + ["Ganon's Tower - Big Key Chest", false, [], ['TitansMitt']], + ["Ganon's Tower - Big Key Chest", false, [], ['Crystal1']], + ["Ganon's Tower - Big Key Chest", false, [], ['Crystal2']], + ["Ganon's Tower - Big Key Chest", false, [], ['Crystal3']], + ["Ganon's Tower - Big Key Chest", false, [], ['Crystal4']], + ["Ganon's Tower - Big Key Chest", false, [], ['Crystal5']], + ["Ganon's Tower - Big Key Chest", false, [], ['Crystal6']], + ["Ganon's Tower - Big Key Chest", false, [], ['Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Big Key Room - Left", false, []], + ["Ganon's Tower - Big Key Room - Left", false, [], ['MoonPearl']], + ["Ganon's Tower - Big Key Room - Left", false, [], ['TitansMitt']], + ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal1']], + ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal2']], + ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal3']], + ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal4']], + ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal5']], + ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal6']], + ["Ganon's Tower - Big Key Room - Left", false, [], ['Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Big Key Room - Right", false, []], + ["Ganon's Tower - Big Key Room - Right", false, [], ['MoonPearl']], + ["Ganon's Tower - Big Key Room - Right", false, [], ['TitansMitt']], + ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal1']], + ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal2']], + ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal3']], + ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal4']], + ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal5']], + ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal6']], + ["Ganon's Tower - Big Key Room - Right", false, [], ['Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Mini Helmasaur Room - Left", false, []], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['MoonPearl']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['TitansMitt']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal1']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal2']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal3']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal4']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal5']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal6']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['AnyBow']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['BigKeyA2']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Mini Helmasaur Room - Right", false, []], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['MoonPearl']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['TitansMitt']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal1']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal2']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal3']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal4']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal5']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal6']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['AnyBow']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['BigKeyA2']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Pre-Moldorm Chest", false, []], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['MoonPearl']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['TitansMitt']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal1']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal2']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal3']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal4']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal5']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal6']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['AnyBow']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + + ["Ganon's Tower - Moldorm Chest", false, []], + ["Ganon's Tower - Moldorm Chest", false, [], ['MoonPearl']], + ["Ganon's Tower - Moldorm Chest", false, [], ['TitansMitt']], + ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal1']], + ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal2']], + ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal3']], + ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal4']], + ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal5']], + ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal6']], + ["Ganon's Tower - Moldorm Chest", false, [], ['Crystal7']], + ["Ganon's Tower - Moldorm Chest", false, [], ['Hookshot']], + ["Ganon's Tower - Moldorm Chest", false, [], ['AnyBow']], + ["Ganon's Tower - Moldorm Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'Crystal1', 'Crystal2', 'Crystal3', 'Crystal4', 'Crystal5', 'Crystal6', 'Crystal7']], + ]; + } } diff --git a/tests/NoGlitches/HyruleCastleEscapeTest.php b/tests/NoGlitches/HyruleCastleEscapeTest.php index 38e74b373..64fdb9749 100644 --- a/tests/NoGlitches/HyruleCastleEscapeTest.php +++ b/tests/NoGlitches/HyruleCastleEscapeTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class HyruleCastleEscapeTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } - public function fillPool() { - return [ + public function fillPool() + { + return [ - ["Sanctuary", false, 'KeyH2', [], ['KeyH2']], + ["Sanctuary", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Left", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Left", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Middle", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Middle", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Right", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Right", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Dark Cross", true, 'KeyH2', [], ['KeyH2']], + ["Sewers - Dark Cross", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Boomerang Chest", true, 'KeyH2', [], ['KeyH2']], + ["Hyrule Castle - Boomerang Chest", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Map Chest", true, 'KeyH2', [], ['KeyH2']], + ["Hyrule Castle - Map Chest", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Zelda's Cell", true, 'KeyH2', [], ['KeyH2']], - ]; - } + ["Hyrule Castle - Zelda's Cell", true, 'KeyH2', [], ['KeyH2']], + ]; + } - public function accessPool() { - return [ - ["Sanctuary", true, ['L1Sword', 'KeyH2']], + public function accessPool() + { + return [ + ["Sanctuary", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Left", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Left", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Middle", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Middle", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Right", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Right", true, ['UncleSword', 'KeyH2']], - ["Sewers - Dark Cross", true, ['L1Sword']], + ["Sewers - Dark Cross", true, ['UncleSword']], - ["Hyrule Castle - Boomerang Chest", true, ['L1Sword']], + ["Hyrule Castle - Boomerang Chest", true, ['UncleSword']], - ["Hyrule Castle - Map Chest", true, ['L1Sword']], + ["Hyrule Castle - Map Chest", true, ['UncleSword']], - ["Hyrule Castle - Zelda's Cell", true, ['L1Sword']], - ]; - } + ["Hyrule Castle - Zelda's Cell", true, ['UncleSword']], + ]; + } } diff --git a/tests/NoGlitches/HyruleCastleTowerTest.php b/tests/NoGlitches/HyruleCastleTowerTest.php index 005836f35..a70235278 100644 --- a/tests/NoGlitches/HyruleCastleTowerTest.php +++ b/tests/NoGlitches/HyruleCastleTowerTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class HyruleCastleTowerTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - // Entry - public function testCapeOrUpgradedSwordRequiredToEnter() { - $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') - ->canEnter($this->world->getLocations(), $this->allItemsExcept(['Cape', 'UpgradedSword']))); - } + // Entry + public function testCapeOrUpgradedSwordRequiredToEnter() + { + $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') + ->canEnter($this->world->getLocations(), $this->allItemsExcept(['Cape', 'UpgradedSword']))); + } - // Completion - public function testSwordRequiredToComplete() { - $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') - ->canComplete($this->world->getLocations(), $this->allItemsExcept(['AnySword']))); - } + // Completion + public function testSwordRequiredToComplete() + { + $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') + ->canComplete($this->world->getLocations(), $this->allItemsExcept(['AnySword']))); + } } diff --git a/tests/NoGlitches/IcePalaceTest.php b/tests/NoGlitches/IcePalaceTest.php index 076f83564..922d82d9e 100644 --- a/tests/NoGlitches/IcePalaceTest.php +++ b/tests/NoGlitches/IcePalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } +class IcePalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } - public function fillPool() { - return [ - ["Ice Palace - Big Key Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + public function fillPool() + { + return [ + ["Ice Palace - Big Key Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Compass Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Compass Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Map Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Map Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Spike Room", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Spike Room", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Freezor Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Freezor Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Iced T Room", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Iced T Room", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Big Chest", false, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Big Chest", false, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Boss", false, 'BigKeyD5', [], ['BigKeyD5']], - ]; - } + ["Ice Palace - Boss", false, 'BigKeyD5', [], ['BigKeyD5']], + ]; + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Ice Palace - Big Key Chest", false, []], - ["Ice Palace - Big Key Chest", false, [], ['TitansMitt']], - ["Ice Palace - Big Key Chest", false, [], ['MoonPearl']], - ["Ice Palace - Big Key Chest", false, [], ['Flippers']], - ["Ice Palace - Big Key Chest", false, [], ['Hammer']], - ["Ice Palace - Big Key Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + public function accessPool() + { + return [ + ["Ice Palace - Big Key Chest", false, []], + ["Ice Palace - Big Key Chest", false, [], ['TitansMitt']], + ["Ice Palace - Big Key Chest", false, [], ['MoonPearl']], + ["Ice Palace - Big Key Chest", false, [], ['Flippers']], + ["Ice Palace - Big Key Chest", false, [], ['Hammer']], + ["Ice Palace - Big Key Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Compass Chest", false, []], - ["Ice Palace - Compass Chest", false, [], ['TitansMitt']], - ["Ice Palace - Compass Chest", false, [], ['MoonPearl']], - ["Ice Palace - Compass Chest", false, [], ['Flippers']], - ["Ice Palace - Compass Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", false, []], + ["Ice Palace - Compass Chest", false, [], ['TitansMitt']], + ["Ice Palace - Compass Chest", false, [], ['MoonPearl']], + ["Ice Palace - Compass Chest", false, [], ['Flippers']], + ["Ice Palace - Compass Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Map Chest", false, []], - ["Ice Palace - Map Chest", false, [], ['TitansMitt']], - ["Ice Palace - Map Chest", false, [], ['MoonPearl']], - ["Ice Palace - Map Chest", false, [], ['Flippers']], - ["Ice Palace - Map Chest", false, [], ['Hammer']], - ["Ice Palace - Map Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", false, []], + ["Ice Palace - Map Chest", false, [], ['TitansMitt']], + ["Ice Palace - Map Chest", false, [], ['MoonPearl']], + ["Ice Palace - Map Chest", false, [], ['Flippers']], + ["Ice Palace - Map Chest", false, [], ['Hammer']], + ["Ice Palace - Map Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", false, []], - ["Ice Palace - Spike Room", false, [], ['TitansMitt']], - ["Ice Palace - Spike Room", false, [], ['MoonPearl']], - ["Ice Palace - Spike Room", false, [], ['Flippers']], - ["Ice Palace - Spike Room", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", false, []], + ["Ice Palace - Spike Room", false, [], ['TitansMitt']], + ["Ice Palace - Spike Room", false, [], ['MoonPearl']], + ["Ice Palace - Spike Room", false, [], ['Flippers']], + ["Ice Palace - Spike Room", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Freezor Chest", false, []], - ["Ice Palace - Freezor Chest", false, [], ['TitansMitt']], - ["Ice Palace - Freezor Chest", false, [], ['MoonPearl']], - ["Ice Palace - Freezor Chest", false, [], ['Flippers']], - ["Ice Palace - Freezor Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", false, []], + ["Ice Palace - Freezor Chest", false, [], ['TitansMitt']], + ["Ice Palace - Freezor Chest", false, [], ['MoonPearl']], + ["Ice Palace - Freezor Chest", false, [], ['Flippers']], + ["Ice Palace - Freezor Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", false, []], - ["Ice Palace - Iced T Room", false, [], ['TitansMitt']], - ["Ice Palace - Iced T Room", false, [], ['MoonPearl']], - ["Ice Palace - Iced T Room", false, [], ['Flippers']], - ["Ice Palace - Iced T Room", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", false, []], + ["Ice Palace - Iced T Room", false, [], ['TitansMitt']], + ["Ice Palace - Iced T Room", false, [], ['MoonPearl']], + ["Ice Palace - Iced T Room", false, [], ['Flippers']], + ["Ice Palace - Iced T Room", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", false, []], - ["Ice Palace - Big Chest", false, [], ['TitansMitt']], - ["Ice Palace - Big Chest", false, [], ['MoonPearl']], - ["Ice Palace - Big Chest", false, [], ['Flippers']], - ["Ice Palace - Big Chest", false, [], ['BigKeyD5']], - ["Ice Palace - Big Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", false, []], + ["Ice Palace - Big Chest", false, [], ['TitansMitt']], + ["Ice Palace - Big Chest", false, [], ['MoonPearl']], + ["Ice Palace - Big Chest", false, [], ['Flippers']], + ["Ice Palace - Big Chest", false, [], ['BigKeyD5']], + ["Ice Palace - Big Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Boss", false, []], - ["Ice Palace - Boss", false, [], ['TitansMitt']], - ["Ice Palace - Boss", false, [], ['MoonPearl']], - ["Ice Palace - Boss", false, [], ['Flippers']], - ["Ice Palace - Boss", false, [], ['Hammer']], - ["Ice Palace - Boss", false, [], ['BigKeyD5']], - ["Ice Palace - Boss", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ]; - } + ["Ice Palace - Boss", false, []], + ["Ice Palace - Boss", false, [], ['TitansMitt']], + ["Ice Palace - Boss", false, [], ['MoonPearl']], + ["Ice Palace - Boss", false, [], ['Flippers']], + ["Ice Palace - Boss", false, [], ['Hammer']], + ["Ice Palace - Boss", false, [], ['BigKeyD5']], + ["Ice Palace - Boss", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ]; + } } diff --git a/tests/NoGlitches/LightWorldTest.php b/tests/NoGlitches/LightWorldTest.php index 594345d65..0e3269453 100644 --- a/tests/NoGlitches/LightWorldTest.php +++ b/tests/NoGlitches/LightWorldTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } +class LightWorldTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - $this->addCollected($items); + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - public function accessPool() { - return [ - ["Master Sword Pedestal", false, []], - ["Master Sword Pedestal", false, [], ['PendantOfCourage']], - ["Master Sword Pedestal", false, [], ['PendantOfWisdom']], - ["Master Sword Pedestal", false, [], ['PendantOfPower']], - ["Master Sword Pedestal", true, ['PendantOfCourage', 'PendantOfWisdom', 'PendantOfPower']], + $this->addCollected($items); - ["Link's Uncle", true, []], + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - ["Secret Passage", true, ['L1Sword']], + public function accessPool() + { + return [ + ["Master Sword Pedestal", false, []], + ["Master Sword Pedestal", false, [], ['PendantOfCourage']], + ["Master Sword Pedestal", false, [], ['PendantOfWisdom']], + ["Master Sword Pedestal", false, [], ['PendantOfPower']], + ["Master Sword Pedestal", true, ['PendantOfCourage', 'PendantOfWisdom', 'PendantOfPower']], - ["King's Tomb", false, []], - ["King's Tomb", false, [], ['PegasusBoots']], - ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'ProgressiveGlove']], - ["King's Tomb", true, ['PegasusBoots', 'TitansMitt']], - ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'PowerGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["Link's Uncle", true, []], - ["Floodgate Chest", true, []], + ["Secret Passage", true, ['UncleSword']], - ["Link's House", true, []], - - ["Kakariko Tavern", true, []], - - ["Chicken House", true, []], - - ["Aginah's Cave", true, []], - - ["Sahasrahla's Hut - Left", true, []], - - ["Sahasrahla's Hut - Middle", true, []], - - ["Sahasrahla's Hut - Right", true, []], - - ["Kakariko Well - Top", true, []], - - ["Kakariko Well - Left", true, []], - - ["Kakariko Well - Middle", true, []], - - ["Kakariko Well - Right", true, []], - - ["Kakariko Well - Bottom", true, []], - - ["Blind's Hideout - Top", true, []], - - ["Blind's Hideout - Left", true, []], - - ["Blind's Hideout - Right", true, []], - - ["Blind's Hideout - Far Left", true, []], - - ["Blind's Hideout - Far Right", true, []], - - ["Pegasus Rocks", false, []], - ["Pegasus Rocks", false, [], ['PegasusBoots']], - ["Pegasus Rocks", true, ['PegasusBoots']], - - ["Mini Moldorm Cave - Far Left", true, []], - - ["Mini Moldorm Cave - Left", true, []], - - ["Mini Moldorm Cave - Right", true, []], - - ["Mini Moldorm Cave - Far Right", true, []], - - ["Ice Rod Cave", true, []], - - ["Bottle Merchant", true, []], - - ["Sahasrahla", false, []], - ["Sahasrahla", false, [], ['PendantOfCourage']], - ["Sahasrahla", true, ['PendantOfCourage']], - - ["Magic Bat", false, []], - ["Magic Bat", false, [], ['Powder']], - ["Magic Bat", true, ['Powder', 'Hammer']], - ["Magic Bat", true, ['Powder', 'ProgressiveGlove', 'ProgressiveGlove', 'MoonPearl', 'MagicMirror']], - ["Magic Bat", true, ['Powder', 'TitansMitt', 'MoonPearl', 'MagicMirror']], - - ["Sick Kid", false, []], - ["Sick Kid", false, [], ['AnyBottle']], - ["Sick Kid", true, ['BottleWithBee']], - ["Sick Kid", true, ['BottleWithFairy']], - ["Sick Kid", true, ['BottleWithRedPotion']], - ["Sick Kid", true, ['BottleWithGreenPotion']], - ["Sick Kid", true, ['BottleWithBluePotion']], - ["Sick Kid", true, ['Bottle']], - ["Sick Kid", true, ['BottleWithGoldBee']], - - ["Hobo", false, []], - ["Hobo", false, [], ['Flippers']], - ["Hobo", true, ['Flippers']], - - ["Bombos Tablet", false, []], - ["Bombos Tablet", false, [], ['MagicMirror']], - ["Bombos Tablet", false, [], ['UpgradedSword']], - ["Bombos Tablet", false, [], ['BookOfMudora']], - ["Bombos Tablet", false, [], ['MoonPearl']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["King Zora", false, []], - ["King Zora", false, [], ['Gloves', 'Flippers']], - ["King Zora", true, ['Flippers']], - ["King Zora", true, ['ProgressiveGlove']], - ["King Zora", true, ['PowerGlove']], - ["King Zora", true, ['TitansMitt']], - - ["Lost Woods Hideout", true, []], - - ["Lumberjack Tree", false, []], - ["Lumberjack Tree", false, [], ['PegasusBoots']], - ["Lumberjack Tree", false, [], ['DefeatAgahnim']], - ["Lumberjack Tree", true, ['PegasusBoots', 'DefeatAgahnim']], - - ["Cave 45", false, []], - ["Cave 45", false, [], ['MagicMirror']], - ["Cave 45", false, [], ['MoonPearl']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Graveyard Ledge", false, []], - ["Graveyard Ledge", false, [], ['MagicMirror']], - ["Graveyard Ledge", false, [], ['MoonPearl']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Checkerboard Cave", false, []], - ["Checkerboard Cave", false, [], ['Gloves']], - ["Checkerboard Cave", false, [], ['Flute']], - ["Checkerboard Cave", false, [], ['MagicMirror']], - ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Mini Moldorm Cave - NPC", true, []], - - ["Library", false, []], - ["Library", false, [], ['PegasusBoots']], - ["Library", true, ['PegasusBoots']], - - ["Mushroom", true, []], - - ["Potion Shop", false, []], - ["Potion Shop", false, [], ['Mushroom']], - ["Potion Shop", true, ['Mushroom']], - - ["Maze Race", true, []], - - ["Desert Ledge", false, []], - ["Desert Ledge", true, ['BookOfMudora']], - ["Desert Ledge", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Desert Ledge", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Lake Hylia Island", false, []], - ["Lake Hylia Island", false, [], ['MagicMirror']], - ["Lake Hylia Island", false, [], ['MoonPearl']], - ["Lake Hylia Island", false, [], ['Flippers']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'DefeatAgahnim']], - - ["Sunken Treasure", true, []], - - ["Zora's Ledge", false, []], - ["Zora's Ledge", false, [], ['Flippers']], - ["Zora's Ledge", true, ['Flippers']], - - ["Flute Spot", false, []], - ["Flute Spot", false, [], ['Shovel']], - ["Flute Spot", true, ['Shovel']], - - ["Waterfall Fairy - Left", false, []], - ["Waterfall Fairy - Left", false, [], ['Flippers']], - ["Waterfall Fairy - Left", true, ['Flippers']], - - ["Waterfall Fairy - Right", false, []], - ["Waterfall Fairy - Right", false, [], ['Flippers']], - ["Waterfall Fairy - Right", true, ['Flippers']], - ]; - } + ["King's Tomb", false, []], + ["King's Tomb", false, [], ['PegasusBoots']], + ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'ProgressiveGlove']], + ["King's Tomb", true, ['PegasusBoots', 'TitansMitt']], + ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'PowerGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MoonPearl', 'MagicMirror']], + + ["Floodgate Chest", true, []], + + ["Link's House", true, []], + + ["Kakariko Tavern", true, []], + + ["Chicken House", true, []], + + ["Aginah's Cave", true, []], + + ["Sahasrahla's Hut - Left", true, []], + + ["Sahasrahla's Hut - Middle", true, []], + + ["Sahasrahla's Hut - Right", true, []], + + ["Kakariko Well - Top", true, []], + + ["Kakariko Well - Left", true, []], + + ["Kakariko Well - Middle", true, []], + + ["Kakariko Well - Right", true, []], + + ["Kakariko Well - Bottom", true, []], + + ["Blind's Hideout - Top", true, []], + + ["Blind's Hideout - Left", true, []], + + ["Blind's Hideout - Right", true, []], + + ["Blind's Hideout - Far Left", true, []], + + ["Blind's Hideout - Far Right", true, []], + + ["Pegasus Rocks", false, []], + ["Pegasus Rocks", false, [], ['PegasusBoots']], + ["Pegasus Rocks", true, ['PegasusBoots']], + + ["Mini Moldorm Cave - Far Left", true, []], + + ["Mini Moldorm Cave - Left", true, []], + + ["Mini Moldorm Cave - Right", true, []], + + ["Mini Moldorm Cave - Far Right", true, []], + + ["Ice Rod Cave", true, []], + + ["Bottle Merchant", true, []], + + ["Sahasrahla", false, []], + ["Sahasrahla", false, [], ['PendantOfCourage']], + ["Sahasrahla", true, ['PendantOfCourage']], + + ["Magic Bat", false, []], + ["Magic Bat", false, [], ['Powder']], + ["Magic Bat", true, ['Powder', 'Hammer']], + ["Magic Bat", true, ['Powder', 'ProgressiveGlove', 'ProgressiveGlove', 'MoonPearl', 'MagicMirror']], + ["Magic Bat", true, ['Powder', 'TitansMitt', 'MoonPearl', 'MagicMirror']], + + ["Sick Kid", false, []], + ["Sick Kid", false, [], ['AnyBottle']], + ["Sick Kid", true, ['BottleWithBee']], + ["Sick Kid", true, ['BottleWithFairy']], + ["Sick Kid", true, ['BottleWithRedPotion']], + ["Sick Kid", true, ['BottleWithGreenPotion']], + ["Sick Kid", true, ['BottleWithBluePotion']], + ["Sick Kid", true, ['Bottle']], + ["Sick Kid", true, ['BottleWithGoldBee']], + + ["Hobo", false, []], + ["Hobo", false, [], ['Flippers']], + ["Hobo", true, ['Flippers']], + + ["Bombos Tablet", false, []], + ["Bombos Tablet", false, [], ['MagicMirror']], + ["Bombos Tablet", false, [], ['UpgradedSword']], + ["Bombos Tablet", false, [], ['BookOfMudora']], + ["Bombos Tablet", false, [], ['MoonPearl']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["King Zora", false, []], + ["King Zora", false, [], ['Gloves', 'Flippers']], + ["King Zora", true, ['Flippers']], + ["King Zora", true, ['ProgressiveGlove']], + ["King Zora", true, ['PowerGlove']], + ["King Zora", true, ['TitansMitt']], + + ["Lost Woods Hideout", true, []], + + ["Lumberjack Tree", false, []], + ["Lumberjack Tree", false, [], ['PegasusBoots']], + ["Lumberjack Tree", false, [], ['DefeatAgahnim']], + ["Lumberjack Tree", true, ['PegasusBoots', 'DefeatAgahnim']], + + ["Cave 45", false, []], + ["Cave 45", false, [], ['MagicMirror']], + ["Cave 45", false, [], ['MoonPearl']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Graveyard Ledge", false, []], + ["Graveyard Ledge", false, [], ['MagicMirror']], + ["Graveyard Ledge", false, [], ['MoonPearl']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Checkerboard Cave", false, []], + ["Checkerboard Cave", false, [], ['Gloves']], + ["Checkerboard Cave", false, [], ['Flute']], + ["Checkerboard Cave", false, [], ['MagicMirror']], + ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Mini Moldorm Cave - NPC", true, []], + + ["Library", false, []], + ["Library", false, [], ['PegasusBoots']], + ["Library", true, ['PegasusBoots']], + + ["Mushroom", true, []], + + ["Potion Shop", false, []], + ["Potion Shop", false, [], ['Mushroom']], + ["Potion Shop", true, ['Mushroom']], + + ["Maze Race", true, []], + + ["Desert Ledge", false, []], + ["Desert Ledge", true, ['BookOfMudora']], + ["Desert Ledge", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Desert Ledge", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Lake Hylia Island", false, []], + ["Lake Hylia Island", false, [], ['MagicMirror']], + ["Lake Hylia Island", false, [], ['MoonPearl']], + ["Lake Hylia Island", false, [], ['Flippers']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'TitansMitt']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'DefeatAgahnim']], + + ["Sunken Treasure", true, []], + + ["Zora's Ledge", false, []], + ["Zora's Ledge", false, [], ['Flippers']], + ["Zora's Ledge", true, ['Flippers']], + + ["Flute Spot", false, []], + ["Flute Spot", false, [], ['Shovel']], + ["Flute Spot", true, ['Shovel']], + + ["Waterfall Fairy - Left", false, []], + ["Waterfall Fairy - Left", false, [], ['Flippers']], + ["Waterfall Fairy - Left", true, ['Flippers']], + + ["Waterfall Fairy - Right", false, []], + ["Waterfall Fairy - Right", false, [], ['Flippers']], + ["Waterfall Fairy - Right", true, ['Flippers']], + ]; + } } diff --git a/tests/NoGlitches/MiseryMireTest.php b/tests/NoGlitches/MiseryMireTest.php index 15e1b8404..e2a591a23 100644 --- a/tests/NoGlitches/MiseryMireTest.php +++ b/tests/NoGlitches/MiseryMireTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - - $this->world->getLocation("Misery Mire Medallion")->setItem(Item::get('Ether')); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Misery Mire - Big Chest", false, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Main Lobby", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Big Key Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Compass Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Bridge Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Map Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Spike Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Boss", false, 'BigKeyD6', [], ['BigKeyD6']], - ]; - } - - public function accessPool() { - return [ - ["Misery Mire - Big Chest", false, []], - ["Misery Mire - Big Chest", false, [], ['MoonPearl']], - ["Misery Mire - Big Chest", false, [], ['TitansMitt']], - ["Misery Mire - Big Chest", false, [], ['Flute']], - ["Misery Mire - Big Chest", false, [], ['BigKeyD6']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Main Lobby", false, []], - ["Misery Mire - Main Lobby", false, [], ['MoonPearl']], - ["Misery Mire - Main Lobby", false, [], ['TitansMitt']], - ["Misery Mire - Main Lobby", false, [], ['Flute']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Big Key Chest", false, []], - ["Misery Mire - Big Key Chest", false, [], ['MoonPearl']], - ["Misery Mire - Big Key Chest", false, [], ['TitansMitt']], - ["Misery Mire - Big Key Chest", false, [], ['Flute']], - ["Misery Mire - Big Key Chest", false, [], ['FireRod', 'Lamp']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Compass Chest", false, []], - ["Misery Mire - Compass Chest", false, [], ['MoonPearl']], - ["Misery Mire - Compass Chest", false, [], ['TitansMitt']], - ["Misery Mire - Compass Chest", false, [], ['Flute']], - ["Misery Mire - Compass Chest", false, [], ['FireRod', 'Lamp']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Bridge Chest", false, []], - ["Misery Mire - Bridge Chest", false, [], ['MoonPearl']], - ["Misery Mire - Bridge Chest", false, [], ['TitansMitt']], - ["Misery Mire - Bridge Chest", false, [], ['Flute']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Map Chest", false, []], - ["Misery Mire - Map Chest", false, [], ['MoonPearl']], - ["Misery Mire - Map Chest", false, [], ['TitansMitt']], - ["Misery Mire - Map Chest", false, [], ['Flute']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Spike Chest", false, []], - ["Misery Mire - Spike Chest", false, [], ['MoonPearl']], - ["Misery Mire - Spike Chest", false, [], ['TitansMitt']], - ["Misery Mire - Spike Chest", false, [], ['Flute']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'Cape']], - - ["Misery Mire - Boss", false, []], - ["Misery Mire - Boss", false, [], ['MoonPearl']], - ["Misery Mire - Boss", false, [], ['TitansMitt']], - ["Misery Mire - Boss", false, [], ['Flute']], - ["Misery Mire - Boss", false, [], ['Lamp']], - ["Misery Mire - Boss", false, [], ['CaneOfSomaria']], - ["Misery Mire - Boss", false, [], ['BigKeyD6']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ]; - } +class MiseryMireTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + + $this->world->getLocation("Misery Mire Medallion")->setItem(Item::get('Ether', $this->world)); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Misery Mire - Big Chest", false, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Main Lobby", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Big Key Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Compass Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Bridge Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Map Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Spike Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Boss", false, 'BigKeyD6', [], ['BigKeyD6']], + ]; + } + + public function accessPool() + { + return [ + ["Misery Mire - Big Chest", false, []], + ["Misery Mire - Big Chest", false, [], ['MoonPearl']], + ["Misery Mire - Big Chest", false, [], ['TitansMitt']], + ["Misery Mire - Big Chest", false, [], ['Flute']], + ["Misery Mire - Big Chest", false, [], ['BigKeyD6']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Main Lobby", false, []], + ["Misery Mire - Main Lobby", false, [], ['MoonPearl']], + ["Misery Mire - Main Lobby", false, [], ['TitansMitt']], + ["Misery Mire - Main Lobby", false, [], ['Flute']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Big Key Chest", false, []], + ["Misery Mire - Big Key Chest", false, [], ['MoonPearl']], + ["Misery Mire - Big Key Chest", false, [], ['TitansMitt']], + ["Misery Mire - Big Key Chest", false, [], ['Flute']], + ["Misery Mire - Big Key Chest", false, [], ['FireRod', 'Lamp']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Compass Chest", false, []], + ["Misery Mire - Compass Chest", false, [], ['MoonPearl']], + ["Misery Mire - Compass Chest", false, [], ['TitansMitt']], + ["Misery Mire - Compass Chest", false, [], ['Flute']], + ["Misery Mire - Compass Chest", false, [], ['FireRod', 'Lamp']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Bridge Chest", false, []], + ["Misery Mire - Bridge Chest", false, [], ['MoonPearl']], + ["Misery Mire - Bridge Chest", false, [], ['TitansMitt']], + ["Misery Mire - Bridge Chest", false, [], ['Flute']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Map Chest", false, []], + ["Misery Mire - Map Chest", false, [], ['MoonPearl']], + ["Misery Mire - Map Chest", false, [], ['TitansMitt']], + ["Misery Mire - Map Chest", false, [], ['Flute']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Spike Chest", false, []], + ["Misery Mire - Spike Chest", false, [], ['MoonPearl']], + ["Misery Mire - Spike Chest", false, [], ['TitansMitt']], + ["Misery Mire - Spike Chest", false, [], ['Flute']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'Cape']], + + ["Misery Mire - Boss", false, []], + ["Misery Mire - Boss", false, [], ['MoonPearl']], + ["Misery Mire - Boss", false, [], ['TitansMitt']], + ["Misery Mire - Boss", false, [], ['Flute']], + ["Misery Mire - Boss", false, [], ['Lamp']], + ["Misery Mire - Boss", false, [], ['CaneOfSomaria']], + ["Misery Mire - Boss", false, [], ['BigKeyD6']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ]; + } } diff --git a/tests/NoGlitches/PalaceOfDarknessTest.php b/tests/NoGlitches/PalaceOfDarknessTest.php index 679a1486a..09ea0deb9 100644 --- a/tests/NoGlitches/PalaceOfDarknessTest.php +++ b/tests/NoGlitches/PalaceOfDarknessTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider entryPool - */ - public function testEntry(bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getRegion('Palace of Darkness') - ->canEnter($this->world->getLocations(), $this->collected)); - } - - public function entryPool() { - return [ - [false, []], - [false, ['MoonPearl']], - ]; - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Palace of Darkness - Big Key Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - The Arena - Ledge", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - The Arena - Bridge", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Big Chest", false, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Compass Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Harmless Hellway", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Stalfos Basement", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Basement - Left", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Basement - Right", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Map Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Maze - Top", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Maze - Bottom", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Shooter Room", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Boss", false, 'BigKeyD1', [], ['BigKeyD1']], - ]; - } - - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Palace of Darkness - Big Key Chest", false, []], - ["Palace of Darkness - Big Key Chest", false, [], ['MoonPearl']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - The Arena - Ledge", false, []], - ["Palace of Darkness - The Arena - Ledge", false, [], ['MoonPearl']], - ["Palace of Darkness - The Arena - Ledge", false, [], ['AnyBow']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - The Arena - Bridge", false, []], - ["Palace of Darkness - The Arena - Bridge", false, [], ['MoonPearl']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'PowerGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], - - ["Palace of Darkness - Big Chest", false, []], - ["Palace of Darkness - Big Chest", false, [], ['MoonPearl']], - ["Palace of Darkness - Big Chest", false, [], ['Lamp']], - ["Palace of Darkness - Big Chest", false, [], ['BigKeyD1']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Compass Chest", false, []], - ["Palace of Darkness - Compass Chest", false, [], ['MoonPearl']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Harmless Hellway", false, []], - ["Palace of Darkness - Harmless Hellway", false, [], ['MoonPearl']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Stalfos Basement", false, []], - ["Palace of Darkness - Stalfos Basement", false, [], ['MoonPearl']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'PowerGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Basement - Left", false, []], - ["Palace of Darkness - Dark Basement - Left", false, [], ['MoonPearl']], - ["Palace of Darkness - Dark Basement - Left", false, [], ['Lamp']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Basement - Right", false, []], - ["Palace of Darkness - Dark Basement - Right", false, [], ['MoonPearl']], - ["Palace of Darkness - Dark Basement - Right", false, [], ['Lamp']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Map Chest", false, []], - ["Palace of Darkness - Map Chest", false, [], ['MoonPearl']], - ["Palace of Darkness - Map Chest", false, [], ['AnyBow']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Maze - Top", false, []], - ["Palace of Darkness - Dark Maze - Top", false, [], ['MoonPearl']], - ["Palace of Darkness - Dark Maze - Top", false, [], ['Lamp']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Maze - Bottom", false, []], - ["Palace of Darkness - Dark Maze - Bottom", false, [], ['MoonPearl']], - ["Palace of Darkness - Dark Maze - Bottom", false, [], ['Lamp']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Shooter Room", false, []], - ["Palace of Darkness - Shooter Room", false, [], ['MoonPearl']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Boss", false, []], - ["Palace of Darkness - Boss", false, [], ['MoonPearl']], - ["Palace of Darkness - Boss", false, [], ['Lamp']], - ["Palace of Darkness - Boss", false, [], ['Hammer']], - ["Palace of Darkness - Boss", false, [], ['AnyBow']], - ["Palace of Darkness - Boss", false, [], ['BigKeyD1']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'DefeatAgahnim']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'PowerGlove']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'TitansMitt']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'ProgressiveGlove']], - ]; - } +class PalaceOfDarknessTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider entryPool + */ + public function testEntry(bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getRegion('Palace of Darkness') + ->canEnter($this->world->getLocations(), $this->collected)); + } + + public function entryPool() + { + return [ + [false, []], + [false, ['MoonPearl']], + ]; + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Palace of Darkness - Big Key Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - The Arena - Ledge", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - The Arena - Bridge", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Big Chest", false, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Compass Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Harmless Hellway", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Stalfos Basement", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Basement - Left", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Basement - Right", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Map Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Maze - Top", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Maze - Bottom", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Shooter Room", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Boss", false, 'BigKeyD1', [], ['BigKeyD1']], + ]; + } + + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPool() + { + return [ + ["Palace of Darkness - Big Key Chest", false, []], + ["Palace of Darkness - Big Key Chest", false, [], ['MoonPearl']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - The Arena - Ledge", false, []], + ["Palace of Darkness - The Arena - Ledge", false, [], ['MoonPearl']], + ["Palace of Darkness - The Arena - Ledge", false, [], ['AnyBow']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - The Arena - Bridge", false, []], + ["Palace of Darkness - The Arena - Bridge", false, [], ['MoonPearl']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'PowerGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], + + ["Palace of Darkness - Big Chest", false, []], + ["Palace of Darkness - Big Chest", false, [], ['MoonPearl']], + ["Palace of Darkness - Big Chest", false, [], ['Lamp']], + ["Palace of Darkness - Big Chest", false, [], ['BigKeyD1']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Compass Chest", false, []], + ["Palace of Darkness - Compass Chest", false, [], ['MoonPearl']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Harmless Hellway", false, []], + ["Palace of Darkness - Harmless Hellway", false, [], ['MoonPearl']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Stalfos Basement", false, []], + ["Palace of Darkness - Stalfos Basement", false, [], ['MoonPearl']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'PowerGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Basement - Left", false, []], + ["Palace of Darkness - Dark Basement - Left", false, [], ['MoonPearl']], + ["Palace of Darkness - Dark Basement - Left", false, [], ['Lamp']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Basement - Right", false, []], + ["Palace of Darkness - Dark Basement - Right", false, [], ['MoonPearl']], + ["Palace of Darkness - Dark Basement - Right", false, [], ['Lamp']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Map Chest", false, []], + ["Palace of Darkness - Map Chest", false, [], ['MoonPearl']], + ["Palace of Darkness - Map Chest", false, [], ['AnyBow']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Maze - Top", false, []], + ["Palace of Darkness - Dark Maze - Top", false, [], ['MoonPearl']], + ["Palace of Darkness - Dark Maze - Top", false, [], ['Lamp']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Maze - Bottom", false, []], + ["Palace of Darkness - Dark Maze - Bottom", false, [], ['MoonPearl']], + ["Palace of Darkness - Dark Maze - Bottom", false, [], ['Lamp']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Shooter Room", false, []], + ["Palace of Darkness - Shooter Room", false, [], ['MoonPearl']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Boss", false, []], + ["Palace of Darkness - Boss", false, [], ['MoonPearl']], + ["Palace of Darkness - Boss", false, [], ['Lamp']], + ["Palace of Darkness - Boss", false, [], ['Hammer']], + ["Palace of Darkness - Boss", false, [], ['AnyBow']], + ["Palace of Darkness - Boss", false, [], ['BigKeyD1']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'DefeatAgahnim']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'PowerGlove']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'TitansMitt']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'ProgressiveGlove']], + ]; + } } diff --git a/tests/NoGlitches/SkullWoodsTest.php b/tests/NoGlitches/SkullWoodsTest.php index 7889d59d8..0efabd259 100644 --- a/tests/NoGlitches/SkullWoodsTest.php +++ b/tests/NoGlitches/SkullWoodsTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Skull Woods - Big Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Big Key Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Compass Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Map Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Bridge Room", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Pot Prison", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Pinball Room", false, 'BigKeyD3', [], ['BigKeyD3']], - ["Skull Woods - Pinball Room", true, 'KeyD3', [], ['KeyD3']], - - ["Skull Woods - Boss", true, 'BigKeyD3', [], ['BigKeyD3']], - ["Skull Woods - Boss", false, 'KeyD3', [], ['KeyD3']], - ]; - } - - public function accessPool() { - return [ - ["Skull Woods - Big Chest", false, []], - ["Skull Woods - Big Chest", false, [], ['MoonPearl']], - ["Skull Woods - Big Chest", false, [], ['BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'TitansMitt', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD3']], - - ["Skull Woods - Big Key Chest", false, []], - ["Skull Woods - Big Key Chest", false, [], ['MoonPearl']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Compass Chest", false, []], - ["Skull Woods - Compass Chest", false, [], ['MoonPearl']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Map Chest", false, []], - ["Skull Woods - Map Chest", false, [], ['MoonPearl']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Bridge Room", false, []], - ["Skull Woods - Bridge Room", false, [], ['MoonPearl']], - ["Skull Woods - Bridge Room", false, [], ['FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'TitansMitt', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod']], - - ["Skull Woods - Pot Prison", false, []], - ["Skull Woods - Pot Prison", false, [], ['MoonPearl']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Pinball Room", false, []], - ["Skull Woods - Pinball Room", false, [], ['MoonPearl']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Boss", false, []], - ["Skull Woods - Boss", false, [], ['MoonPearl']], - ["Skull Woods - Boss", false, [], ['FireRod']], - ["Skull Woods - Boss", false, [], ['AnySword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ]; - } - - /** - * @dataProvider dungeonItemsPool - */ - public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) { - if ($config) { - config(["alttp.test_rules.$config" => $free]); - } - - $this->assertEquals($access, $this->world->getRegion('Skull Woods')->canFill(Item::get($item_name))); - } - - public function dungeonItemsPool() { - return [ - [true, 'Key'], - [false, 'KeyH2'], - [false, 'KeyH1'], - [false, 'KeyP1'], - [false, 'KeyP2'], - [false, 'KeyA1'], - [false, 'KeyD2'], - [false, 'KeyD1'], - [false, 'KeyD6'], - [true, 'KeyD3'], - [false, 'KeyD5'], - [false, 'KeyP3'], - [false, 'KeyD4'], - [false, 'KeyD7'], - [false, 'KeyA2'], - - [true, 'BigKey'], - [false, 'BigKeyH2'], - [false, 'BigKeyH1'], - [false, 'BigKeyP1'], - [false, 'BigKeyP2'], - [false, 'BigKeyA1'], - [false, 'BigKeyD2'], - [false, 'BigKeyD1'], - [false, 'BigKeyD6'], - [true, 'BigKeyD3'], - [false, 'BigKeyD5'], - [false, 'BigKeyP3'], - [false, 'BigKeyD4'], - [false, 'BigKeyD7'], - [false, 'BigKeyA2'], - - [true, 'Map', false, 'region.wildMaps'], - [true, 'Map', true, 'region.wildMaps'], - [false, 'MapH2', false, 'region.wildMaps'], - [true, 'MapH2', true, 'region.wildMaps'], - [false, 'MapH1', false, 'region.wildMaps'], - [true, 'MapH1', true, 'region.wildMaps'], - [false, 'MapP1', false, 'region.wildMaps'], - [true, 'MapP1', true, 'region.wildMaps'], - [false, 'MapP2', false, 'region.wildMaps'], - [true, 'MapP2', true, 'region.wildMaps'], - [false, 'MapA1', false, 'region.wildMaps'], - [true, 'MapA1', true, 'region.wildMaps'], - [false, 'MapD2', false, 'region.wildMaps'], - [true, 'MapD2', true, 'region.wildMaps'], - [false, 'MapD1', false, 'region.wildMaps'], - [true, 'MapD1', true, 'region.wildMaps'], - [false, 'MapD6', false, 'region.wildMaps'], - [true, 'MapD6', true, 'region.wildMaps'], - [true, 'MapD3', false, 'region.wildMaps'], - [true, 'MapD3', true, 'region.wildMaps'], - [false, 'MapD5', false, 'region.wildMaps'], - [true, 'MapD5', true, 'region.wildMaps'], - [false, 'MapP3', false, 'region.wildMaps'], - [true, 'MapP3', true, 'region.wildMaps'], - [false, 'MapD4', false, 'region.wildMaps'], - [true, 'MapD4', true, 'region.wildMaps'], - [false, 'MapD7', false, 'region.wildMaps'], - [true, 'MapD7', true, 'region.wildMaps'], - [false, 'MapA2', false, 'region.wildMaps'], - [true, 'MapA2', true, 'region.wildMaps'], - - [true, 'Compass', false, 'region.wildCompasses'], - [true, 'Compass', true, 'region.wildCompasses'], - [false, 'CompassH2', false, 'region.wildCompasses'], - [true, 'CompassH2', true, 'region.wildCompasses'], - [false, 'CompassH1', false, 'region.wildCompasses'], - [true, 'CompassH1', true, 'region.wildCompasses'], - [false, 'CompassP1', false, 'region.wildCompasses'], - [true, 'CompassP1', true, 'region.wildCompasses'], - [false, 'CompassP2', false, 'region.wildCompasses'], - [true, 'CompassP2', true, 'region.wildCompasses'], - [false, 'CompassA1', false, 'region.wildCompasses'], - [true, 'CompassA1', true, 'region.wildCompasses'], - [false, 'CompassD2', false, 'region.wildCompasses'], - [true, 'CompassD2', true, 'region.wildCompasses'], - [false, 'CompassD1', false, 'region.wildCompasses'], - [true, 'CompassD1', true, 'region.wildCompasses'], - [false, 'CompassD6', false, 'region.wildCompasses'], - [true, 'CompassD6', true, 'region.wildCompasses'], - [true, 'CompassD3', false, 'region.wildCompasses'], - [true, 'CompassD3', true, 'region.wildCompasses'], - [false, 'CompassD5', false, 'region.wildCompasses'], - [true, 'CompassD5', true, 'region.wildCompasses'], - [false, 'CompassP3', false, 'region.wildCompasses'], - [true, 'CompassP3', true, 'region.wildCompasses'], - [false, 'CompassD4', false, 'region.wildCompasses'], - [true, 'CompassD4', true, 'region.wildCompasses'], - [false, 'CompassD7', false, 'region.wildCompasses'], - [true, 'CompassD7', true, 'region.wildCompasses'], - [false, 'CompassA2', false, 'region.wildCompasses'], - [true, 'CompassA2', true, 'region.wildCompasses'], - ]; - } +class SkullWoodsTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Skull Woods - Big Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Big Key Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Compass Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Map Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Bridge Room", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Pot Prison", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Pinball Room", false, 'BigKeyD3', [], ['BigKeyD3']], + ["Skull Woods - Pinball Room", true, 'KeyD3', [], ['KeyD3']], + + ["Skull Woods - Boss", true, 'BigKeyD3', [], ['BigKeyD3']], + ["Skull Woods - Boss", false, 'KeyD3', [], ['KeyD3']], + ]; + } + + public function accessPool() + { + return [ + ["Skull Woods - Big Chest", false, []], + ["Skull Woods - Big Chest", false, [], ['MoonPearl']], + ["Skull Woods - Big Chest", false, [], ['BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'TitansMitt', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD3']], + + ["Skull Woods - Big Key Chest", false, []], + ["Skull Woods - Big Key Chest", false, [], ['MoonPearl']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Compass Chest", false, []], + ["Skull Woods - Compass Chest", false, [], ['MoonPearl']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Map Chest", false, []], + ["Skull Woods - Map Chest", false, [], ['MoonPearl']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Bridge Room", false, []], + ["Skull Woods - Bridge Room", false, [], ['MoonPearl']], + ["Skull Woods - Bridge Room", false, [], ['FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'TitansMitt', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod']], + + ["Skull Woods - Pot Prison", false, []], + ["Skull Woods - Pot Prison", false, [], ['MoonPearl']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Pinball Room", false, []], + ["Skull Woods - Pinball Room", false, [], ['MoonPearl']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Boss", false, []], + ["Skull Woods - Boss", false, [], ['MoonPearl']], + ["Skull Woods - Boss", false, [], ['FireRod']], + ["Skull Woods - Boss", false, [], ['AnySword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ]; + } + + /** + * @dataProvider dungeonItemsPool + */ + public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) + { + if ($config) { + config([$config => $free]); + } + + $this->assertEquals($access, $this->world->getRegion('Skull Woods')->canFill(Item::get($item_name, $this->world))); + } + + public function dungeonItemsPool() + { + return [ + [true, 'Key'], + [false, 'KeyH2'], + [false, 'KeyH1'], + [false, 'KeyP1'], + [false, 'KeyP2'], + [false, 'KeyA1'], + [false, 'KeyD2'], + [false, 'KeyD1'], + [false, 'KeyD6'], + [true, 'KeyD3'], + [false, 'KeyD5'], + [false, 'KeyP3'], + [false, 'KeyD4'], + [false, 'KeyD7'], + [false, 'KeyA2'], + + [true, 'BigKey'], + [false, 'BigKeyH2'], + [false, 'BigKeyH1'], + [false, 'BigKeyP1'], + [false, 'BigKeyP2'], + [false, 'BigKeyA1'], + [false, 'BigKeyD2'], + [false, 'BigKeyD1'], + [false, 'BigKeyD6'], + [true, 'BigKeyD3'], + [false, 'BigKeyD5'], + [false, 'BigKeyP3'], + [false, 'BigKeyD4'], + [false, 'BigKeyD7'], + [false, 'BigKeyA2'], + + [true, 'Map', false, 'region.wildMaps'], + [true, 'Map', true, 'region.wildMaps'], + [false, 'MapH2', false, 'region.wildMaps'], + [true, 'MapH2', true, 'region.wildMaps'], + [false, 'MapH1', false, 'region.wildMaps'], + [true, 'MapH1', true, 'region.wildMaps'], + [false, 'MapP1', false, 'region.wildMaps'], + [true, 'MapP1', true, 'region.wildMaps'], + [false, 'MapP2', false, 'region.wildMaps'], + [true, 'MapP2', true, 'region.wildMaps'], + [false, 'MapA1', false, 'region.wildMaps'], + [true, 'MapA1', true, 'region.wildMaps'], + [false, 'MapD2', false, 'region.wildMaps'], + [true, 'MapD2', true, 'region.wildMaps'], + [false, 'MapD1', false, 'region.wildMaps'], + [true, 'MapD1', true, 'region.wildMaps'], + [false, 'MapD6', false, 'region.wildMaps'], + [true, 'MapD6', true, 'region.wildMaps'], + [true, 'MapD3', false, 'region.wildMaps'], + [true, 'MapD3', true, 'region.wildMaps'], + [false, 'MapD5', false, 'region.wildMaps'], + [true, 'MapD5', true, 'region.wildMaps'], + [false, 'MapP3', false, 'region.wildMaps'], + [true, 'MapP3', true, 'region.wildMaps'], + [false, 'MapD4', false, 'region.wildMaps'], + [true, 'MapD4', true, 'region.wildMaps'], + [false, 'MapD7', false, 'region.wildMaps'], + [true, 'MapD7', true, 'region.wildMaps'], + [false, 'MapA2', false, 'region.wildMaps'], + [true, 'MapA2', true, 'region.wildMaps'], + + [true, 'Compass', false, 'region.wildCompasses'], + [true, 'Compass', true, 'region.wildCompasses'], + [false, 'CompassH2', false, 'region.wildCompasses'], + [true, 'CompassH2', true, 'region.wildCompasses'], + [false, 'CompassH1', false, 'region.wildCompasses'], + [true, 'CompassH1', true, 'region.wildCompasses'], + [false, 'CompassP1', false, 'region.wildCompasses'], + [true, 'CompassP1', true, 'region.wildCompasses'], + [false, 'CompassP2', false, 'region.wildCompasses'], + [true, 'CompassP2', true, 'region.wildCompasses'], + [false, 'CompassA1', false, 'region.wildCompasses'], + [true, 'CompassA1', true, 'region.wildCompasses'], + [false, 'CompassD2', false, 'region.wildCompasses'], + [true, 'CompassD2', true, 'region.wildCompasses'], + [false, 'CompassD1', false, 'region.wildCompasses'], + [true, 'CompassD1', true, 'region.wildCompasses'], + [false, 'CompassD6', false, 'region.wildCompasses'], + [true, 'CompassD6', true, 'region.wildCompasses'], + [true, 'CompassD3', false, 'region.wildCompasses'], + [true, 'CompassD3', true, 'region.wildCompasses'], + [false, 'CompassD5', false, 'region.wildCompasses'], + [true, 'CompassD5', true, 'region.wildCompasses'], + [false, 'CompassP3', false, 'region.wildCompasses'], + [true, 'CompassP3', true, 'region.wildCompasses'], + [false, 'CompassD4', false, 'region.wildCompasses'], + [true, 'CompassD4', true, 'region.wildCompasses'], + [false, 'CompassD7', false, 'region.wildCompasses'], + [true, 'CompassD7', true, 'region.wildCompasses'], + [false, 'CompassA2', false, 'region.wildCompasses'], + [true, 'CompassA2', true, 'region.wildCompasses'], + ]; + } } diff --git a/tests/NoGlitches/SwampPalaceTest.php b/tests/NoGlitches/SwampPalaceTest.php index a4d1f2155..bc2853355 100644 --- a/tests/NoGlitches/SwampPalaceTest.php +++ b/tests/NoGlitches/SwampPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Swamp Palace - Entrance", false, 'BigKeyD2', [], ['BigKeyD2']], - ["Swamp Palace - Entrance", true, 'KeyD2', [], ['KeyD2']], - - ["Swamp Palace - Big Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Big Key Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Map Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - West Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Compass Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Flooded Room - Left", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Flooded Room - Right", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Waterfall Room", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Boss", true, 'BigKeyD2', [], ['BigKeyD2']], - ]; - } - - public function accessPool() { - return [ - ["Swamp Palace - Entrance", false, []], - ["Swamp Palace - Entrance", false, [], ['MagicMirror']], - ["Swamp Palace - Entrance", false, [], ['MoonPearl']], - ["Swamp Palace - Entrance", false, [], ['Flippers']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], - - ["Swamp Palace - Big Chest", false, []], - ["Swamp Palace - Big Chest", false, [], ['MagicMirror']], - ["Swamp Palace - Big Chest", false, [], ['MoonPearl']], - ["Swamp Palace - Big Chest", false, [], ['Flippers']], - ["Swamp Palace - Big Chest", false, [], ['Hammer']], - ["Swamp Palace - Big Chest", false, [], ['BigKeyD2']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Big Key Chest", false, []], - ["Swamp Palace - Big Key Chest", false, [], ['MagicMirror']], - ["Swamp Palace - Big Key Chest", false, [], ['MoonPearl']], - ["Swamp Palace - Big Key Chest", false, [], ['Flippers']], - ["Swamp Palace - Big Key Chest", false, [], ['Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Map Chest", false, []], - ["Swamp Palace - Map Chest", false, [], ['MagicMirror']], - ["Swamp Palace - Map Chest", false, [], ['MoonPearl']], - ["Swamp Palace - Map Chest", false, [], ['Flippers']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], - - ["Swamp Palace - West Chest", false, []], - ["Swamp Palace - West Chest", false, [], ['MagicMirror']], - ["Swamp Palace - West Chest", false, [], ['MoonPearl']], - ["Swamp Palace - West Chest", false, [], ['Flippers']], - ["Swamp Palace - West Chest", false, [], ['Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Compass Chest", false, []], - ["Swamp Palace - Compass Chest", false, [], ['MagicMirror']], - ["Swamp Palace - Compass Chest", false, [], ['MoonPearl']], - ["Swamp Palace - Compass Chest", false, [], ['Flippers']], - ["Swamp Palace - Compass Chest", false, [], ['Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Flooded Room - Left", false, []], - ["Swamp Palace - Flooded Room - Left", false, [], ['MagicMirror']], - ["Swamp Palace - Flooded Room - Left", false, [], ['MoonPearl']], - ["Swamp Palace - Flooded Room - Left", false, [], ['Flippers']], - ["Swamp Palace - Flooded Room - Left", false, [], ['Hammer']], - ["Swamp Palace - Flooded Room - Left", false, [], ['Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Flooded Room - Right", false, []], - ["Swamp Palace - Flooded Room - Right", false, [], ['MagicMirror']], - ["Swamp Palace - Flooded Room - Right", false, [], ['MoonPearl']], - ["Swamp Palace - Flooded Room - Right", false, [], ['Flippers']], - ["Swamp Palace - Flooded Room - Right", false, [], ['Hammer']], - ["Swamp Palace - Flooded Room - Right", false, [], ['Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Waterfall Room", false, []], - ["Swamp Palace - Waterfall Room", false, [], ['MagicMirror']], - ["Swamp Palace - Waterfall Room", false, [], ['MoonPearl']], - ["Swamp Palace - Waterfall Room", false, [], ['Flippers']], - ["Swamp Palace - Waterfall Room", false, [], ['Hammer']], - ["Swamp Palace - Waterfall Room", false, [], ['Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Boss", false, []], - ["Swamp Palace - Boss", false, [], ['MagicMirror']], - ["Swamp Palace - Boss", false, [], ['MoonPearl']], - ["Swamp Palace - Boss", false, [], ['Flippers']], - ["Swamp Palace - Boss", false, [], ['Hammer']], - ["Swamp Palace - Boss", false, [], ['Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ]; - } - - /** - * @dataProvider dungeonItemsPool - */ - public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) { - if ($config) { - config(["alttp.test_rules.$config" => $free]); - } - - $this->assertEquals($access, $this->world->getRegion('Swamp Palace')->canFill(Item::get($item_name))); - } - - public function dungeonItemsPool() { - return [ - [true, 'Key'], - [false, 'KeyH2'], - [false, 'KeyH1'], - [false, 'KeyP1'], - [false, 'KeyP2'], - [false, 'KeyA1'], - [true, 'KeyD2'], - [false, 'KeyD1'], - [false, 'KeyD6'], - [false, 'KeyD3'], - [false, 'KeyD5'], - [false, 'KeyP3'], - [false, 'KeyD4'], - [false, 'KeyD7'], - [false, 'KeyA2'], - - [true, 'BigKey'], - [false, 'BigKeyH2'], - [false, 'BigKeyH1'], - [false, 'BigKeyP1'], - [false, 'BigKeyP2'], - [false, 'BigKeyA1'], - [true, 'BigKeyD2'], - [false, 'BigKeyD1'], - [false, 'BigKeyD6'], - [false, 'BigKeyD3'], - [false, 'BigKeyD5'], - [false, 'BigKeyP3'], - [false, 'BigKeyD4'], - [false, 'BigKeyD7'], - [false, 'BigKeyA2'], - - [true, 'Map', false, 'region.wildMaps'], - [true, 'Map', true, 'region.wildMaps'], - [false, 'MapH2', false, 'region.wildMaps'], - [true, 'MapH2', true, 'region.wildMaps'], - [false, 'MapH1', false, 'region.wildMaps'], - [true, 'MapH1', true, 'region.wildMaps'], - [false, 'MapP1', false, 'region.wildMaps'], - [true, 'MapP1', true, 'region.wildMaps'], - [false, 'MapP2', false, 'region.wildMaps'], - [true, 'MapP2', true, 'region.wildMaps'], - [false, 'MapA1', false, 'region.wildMaps'], - [true, 'MapA1', true, 'region.wildMaps'], - [true, 'MapD2', false, 'region.wildMaps'], - [true, 'MapD2', true, 'region.wildMaps'], - [false, 'MapD1', false, 'region.wildMaps'], - [true, 'MapD1', true, 'region.wildMaps'], - [false, 'MapD6', false, 'region.wildMaps'], - [true, 'MapD6', true, 'region.wildMaps'], - [false, 'MapD3', false, 'region.wildMaps'], - [true, 'MapD3', true, 'region.wildMaps'], - [false, 'MapD5', false, 'region.wildMaps'], - [true, 'MapD5', true, 'region.wildMaps'], - [false, 'MapP3', false, 'region.wildMaps'], - [true, 'MapP3', true, 'region.wildMaps'], - [false, 'MapD4', false, 'region.wildMaps'], - [true, 'MapD4', true, 'region.wildMaps'], - [false, 'MapD7', false, 'region.wildMaps'], - [true, 'MapD7', true, 'region.wildMaps'], - [false, 'MapA2', false, 'region.wildMaps'], - [true, 'MapA2', true, 'region.wildMaps'], - - [true, 'Compass', false, 'region.wildCompasses'], - [true, 'Compass', true, 'region.wildCompasses'], - [false, 'CompassH2', false, 'region.wildCompasses'], - [true, 'CompassH2', true, 'region.wildCompasses'], - [false, 'CompassH1', false, 'region.wildCompasses'], - [true, 'CompassH1', true, 'region.wildCompasses'], - [false, 'CompassP1', false, 'region.wildCompasses'], - [true, 'CompassP1', true, 'region.wildCompasses'], - [false, 'CompassP2', false, 'region.wildCompasses'], - [true, 'CompassP2', true, 'region.wildCompasses'], - [false, 'CompassA1', false, 'region.wildCompasses'], - [true, 'CompassA1', true, 'region.wildCompasses'], - [true, 'CompassD2', false, 'region.wildCompasses'], - [true, 'CompassD2', true, 'region.wildCompasses'], - [false, 'CompassD1', false, 'region.wildCompasses'], - [true, 'CompassD1', true, 'region.wildCompasses'], - [false, 'CompassD6', false, 'region.wildCompasses'], - [true, 'CompassD6', true, 'region.wildCompasses'], - [false, 'CompassD3', false, 'region.wildCompasses'], - [true, 'CompassD3', true, 'region.wildCompasses'], - [false, 'CompassD5', false, 'region.wildCompasses'], - [true, 'CompassD5', true, 'region.wildCompasses'], - [false, 'CompassP3', false, 'region.wildCompasses'], - [true, 'CompassP3', true, 'region.wildCompasses'], - [false, 'CompassD4', false, 'region.wildCompasses'], - [true, 'CompassD4', true, 'region.wildCompasses'], - [false, 'CompassD7', false, 'region.wildCompasses'], - [true, 'CompassD7', true, 'region.wildCompasses'], - [false, 'CompassA2', false, 'region.wildCompasses'], - [true, 'CompassA2', true, 'region.wildCompasses'], - ]; - } +class SwampPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Swamp Palace - Entrance", false, 'BigKeyD2', [], ['BigKeyD2']], + ["Swamp Palace - Entrance", true, 'KeyD2', [], ['KeyD2']], + + ["Swamp Palace - Big Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Big Key Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Map Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - West Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Compass Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Flooded Room - Left", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Flooded Room - Right", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Waterfall Room", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Boss", true, 'BigKeyD2', [], ['BigKeyD2']], + ]; + } + + public function accessPool() + { + return [ + ["Swamp Palace - Entrance", false, []], + ["Swamp Palace - Entrance", false, [], ['MagicMirror']], + ["Swamp Palace - Entrance", false, [], ['MoonPearl']], + ["Swamp Palace - Entrance", false, [], ['Flippers']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], + + ["Swamp Palace - Big Chest", false, []], + ["Swamp Palace - Big Chest", false, [], ['MagicMirror']], + ["Swamp Palace - Big Chest", false, [], ['MoonPearl']], + ["Swamp Palace - Big Chest", false, [], ['Flippers']], + ["Swamp Palace - Big Chest", false, [], ['Hammer']], + ["Swamp Palace - Big Chest", false, [], ['BigKeyD2']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Big Key Chest", false, []], + ["Swamp Palace - Big Key Chest", false, [], ['MagicMirror']], + ["Swamp Palace - Big Key Chest", false, [], ['MoonPearl']], + ["Swamp Palace - Big Key Chest", false, [], ['Flippers']], + ["Swamp Palace - Big Key Chest", false, [], ['Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Map Chest", false, []], + ["Swamp Palace - Map Chest", false, [], ['MagicMirror']], + ["Swamp Palace - Map Chest", false, [], ['MoonPearl']], + ["Swamp Palace - Map Chest", false, [], ['Flippers']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], + + ["Swamp Palace - West Chest", false, []], + ["Swamp Palace - West Chest", false, [], ['MagicMirror']], + ["Swamp Palace - West Chest", false, [], ['MoonPearl']], + ["Swamp Palace - West Chest", false, [], ['Flippers']], + ["Swamp Palace - West Chest", false, [], ['Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Compass Chest", false, []], + ["Swamp Palace - Compass Chest", false, [], ['MagicMirror']], + ["Swamp Palace - Compass Chest", false, [], ['MoonPearl']], + ["Swamp Palace - Compass Chest", false, [], ['Flippers']], + ["Swamp Palace - Compass Chest", false, [], ['Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Flooded Room - Left", false, []], + ["Swamp Palace - Flooded Room - Left", false, [], ['MagicMirror']], + ["Swamp Palace - Flooded Room - Left", false, [], ['MoonPearl']], + ["Swamp Palace - Flooded Room - Left", false, [], ['Flippers']], + ["Swamp Palace - Flooded Room - Left", false, [], ['Hammer']], + ["Swamp Palace - Flooded Room - Left", false, [], ['Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Flooded Room - Right", false, []], + ["Swamp Palace - Flooded Room - Right", false, [], ['MagicMirror']], + ["Swamp Palace - Flooded Room - Right", false, [], ['MoonPearl']], + ["Swamp Palace - Flooded Room - Right", false, [], ['Flippers']], + ["Swamp Palace - Flooded Room - Right", false, [], ['Hammer']], + ["Swamp Palace - Flooded Room - Right", false, [], ['Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Waterfall Room", false, []], + ["Swamp Palace - Waterfall Room", false, [], ['MagicMirror']], + ["Swamp Palace - Waterfall Room", false, [], ['MoonPearl']], + ["Swamp Palace - Waterfall Room", false, [], ['Flippers']], + ["Swamp Palace - Waterfall Room", false, [], ['Hammer']], + ["Swamp Palace - Waterfall Room", false, [], ['Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Boss", false, []], + ["Swamp Palace - Boss", false, [], ['MagicMirror']], + ["Swamp Palace - Boss", false, [], ['MoonPearl']], + ["Swamp Palace - Boss", false, [], ['Flippers']], + ["Swamp Palace - Boss", false, [], ['Hammer']], + ["Swamp Palace - Boss", false, [], ['Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ]; + } + + /** + * @dataProvider dungeonItemsPool + */ + public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) + { + if ($config) { + config([$config => $free]); + } + + $this->assertEquals($access, $this->world->getRegion('Swamp Palace')->canFill(Item::get($item_name, $this->world))); + } + + public function dungeonItemsPool() + { + return [ + [true, 'Key'], + [false, 'KeyH2'], + [false, 'KeyH1'], + [false, 'KeyP1'], + [false, 'KeyP2'], + [false, 'KeyA1'], + [true, 'KeyD2'], + [false, 'KeyD1'], + [false, 'KeyD6'], + [false, 'KeyD3'], + [false, 'KeyD5'], + [false, 'KeyP3'], + [false, 'KeyD4'], + [false, 'KeyD7'], + [false, 'KeyA2'], + + [true, 'BigKey'], + [false, 'BigKeyH2'], + [false, 'BigKeyH1'], + [false, 'BigKeyP1'], + [false, 'BigKeyP2'], + [false, 'BigKeyA1'], + [true, 'BigKeyD2'], + [false, 'BigKeyD1'], + [false, 'BigKeyD6'], + [false, 'BigKeyD3'], + [false, 'BigKeyD5'], + [false, 'BigKeyP3'], + [false, 'BigKeyD4'], + [false, 'BigKeyD7'], + [false, 'BigKeyA2'], + + [true, 'Map', false, 'region.wildMaps'], + [true, 'Map', true, 'region.wildMaps'], + [false, 'MapH2', false, 'region.wildMaps'], + [true, 'MapH2', true, 'region.wildMaps'], + [false, 'MapH1', false, 'region.wildMaps'], + [true, 'MapH1', true, 'region.wildMaps'], + [false, 'MapP1', false, 'region.wildMaps'], + [true, 'MapP1', true, 'region.wildMaps'], + [false, 'MapP2', false, 'region.wildMaps'], + [true, 'MapP2', true, 'region.wildMaps'], + [false, 'MapA1', false, 'region.wildMaps'], + [true, 'MapA1', true, 'region.wildMaps'], + [true, 'MapD2', false, 'region.wildMaps'], + [true, 'MapD2', true, 'region.wildMaps'], + [false, 'MapD1', false, 'region.wildMaps'], + [true, 'MapD1', true, 'region.wildMaps'], + [false, 'MapD6', false, 'region.wildMaps'], + [true, 'MapD6', true, 'region.wildMaps'], + [false, 'MapD3', false, 'region.wildMaps'], + [true, 'MapD3', true, 'region.wildMaps'], + [false, 'MapD5', false, 'region.wildMaps'], + [true, 'MapD5', true, 'region.wildMaps'], + [false, 'MapP3', false, 'region.wildMaps'], + [true, 'MapP3', true, 'region.wildMaps'], + [false, 'MapD4', false, 'region.wildMaps'], + [true, 'MapD4', true, 'region.wildMaps'], + [false, 'MapD7', false, 'region.wildMaps'], + [true, 'MapD7', true, 'region.wildMaps'], + [false, 'MapA2', false, 'region.wildMaps'], + [true, 'MapA2', true, 'region.wildMaps'], + + [true, 'Compass', false, 'region.wildCompasses'], + [true, 'Compass', true, 'region.wildCompasses'], + [false, 'CompassH2', false, 'region.wildCompasses'], + [true, 'CompassH2', true, 'region.wildCompasses'], + [false, 'CompassH1', false, 'region.wildCompasses'], + [true, 'CompassH1', true, 'region.wildCompasses'], + [false, 'CompassP1', false, 'region.wildCompasses'], + [true, 'CompassP1', true, 'region.wildCompasses'], + [false, 'CompassP2', false, 'region.wildCompasses'], + [true, 'CompassP2', true, 'region.wildCompasses'], + [false, 'CompassA1', false, 'region.wildCompasses'], + [true, 'CompassA1', true, 'region.wildCompasses'], + [true, 'CompassD2', false, 'region.wildCompasses'], + [true, 'CompassD2', true, 'region.wildCompasses'], + [false, 'CompassD1', false, 'region.wildCompasses'], + [true, 'CompassD1', true, 'region.wildCompasses'], + [false, 'CompassD6', false, 'region.wildCompasses'], + [true, 'CompassD6', true, 'region.wildCompasses'], + [false, 'CompassD3', false, 'region.wildCompasses'], + [true, 'CompassD3', true, 'region.wildCompasses'], + [false, 'CompassD5', false, 'region.wildCompasses'], + [true, 'CompassD5', true, 'region.wildCompasses'], + [false, 'CompassP3', false, 'region.wildCompasses'], + [true, 'CompassP3', true, 'region.wildCompasses'], + [false, 'CompassD4', false, 'region.wildCompasses'], + [true, 'CompassD4', true, 'region.wildCompasses'], + [false, 'CompassD7', false, 'region.wildCompasses'], + [true, 'CompassD7', true, 'region.wildCompasses'], + [false, 'CompassA2', false, 'region.wildCompasses'], + [true, 'CompassA2', true, 'region.wildCompasses'], + ]; + } } diff --git a/tests/NoGlitches/ThievesTownTest.php b/tests/NoGlitches/ThievesTownTest.php index 31db0387b..96e63339e 100644 --- a/tests/NoGlitches/ThievesTownTest.php +++ b/tests/NoGlitches/ThievesTownTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - - - public function fillPool() { - return [ - ["Thieves' Town - Attic", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Attic", false, 'KeyD4', [], ['KeyD4']], - - ["Thieves' Town - Big Key Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Map Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Compass Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Ambush Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Big Chest", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Big Chest", true, 'KeyD4', [], ['KeyD4']], - - ["Thieves' Town - Blind's Cell", false, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Boss", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Boss", false, 'KeyD4', [], ['KeyD4']], - ]; - } - - public function accessPool() { - return [ - ["Thieves' Town - Attic", false, []], - ["Thieves' Town - Attic", false, [], ['MoonPearl']], - ["Thieves' Town - Attic", false, [], ['BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'TitansMitt', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'KeyD4', 'BigKeyD4']], - - ["Thieves' Town - Big Key Chest", false, []], - ["Thieves' Town - Big Key Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Map Chest", false, []], - ["Thieves' Town - Map Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Compass Chest", false, []], - ["Thieves' Town - Compass Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Ambush Chest", false, []], - ["Thieves' Town - Ambush Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Big Chest", false, []], - ["Thieves' Town - Big Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Big Chest", false, [], ['BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'TitansMitt', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - - ["Thieves' Town - Blind's Cell", false, []], - ["Thieves' Town - Blind's Cell", false, [], ['MoonPearl']], - ["Thieves' Town - Blind's Cell", false, [], ['BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'TitansMitt', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4']], - - ["Thieves' Town - Boss", false, []], - ["Thieves' Town - Boss", false, [], ['MoonPearl']], - ["Thieves' Town - Boss", false, [], ['BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'Hammer']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'Hammer']], - ]; - } +class ThievesTownTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + + + public function fillPool() + { + return [ + ["Thieves' Town - Attic", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Attic", false, 'KeyD4', [], ['KeyD4']], + + ["Thieves' Town - Big Key Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Map Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Compass Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Ambush Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Big Chest", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Big Chest", true, 'KeyD4', [], ['KeyD4']], + + ["Thieves' Town - Blind's Cell", false, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Boss", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Boss", false, 'KeyD4', [], ['KeyD4']], + ]; + } + + public function accessPool() + { + return [ + ["Thieves' Town - Attic", false, []], + ["Thieves' Town - Attic", false, [], ['MoonPearl']], + ["Thieves' Town - Attic", false, [], ['BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'TitansMitt', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'KeyD4', 'BigKeyD4']], + + ["Thieves' Town - Big Key Chest", false, []], + ["Thieves' Town - Big Key Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Map Chest", false, []], + ["Thieves' Town - Map Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Compass Chest", false, []], + ["Thieves' Town - Compass Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Ambush Chest", false, []], + ["Thieves' Town - Ambush Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Big Chest", false, []], + ["Thieves' Town - Big Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Big Chest", false, [], ['BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'TitansMitt', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + + ["Thieves' Town - Blind's Cell", false, []], + ["Thieves' Town - Blind's Cell", false, [], ['MoonPearl']], + ["Thieves' Town - Blind's Cell", false, [], ['BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'TitansMitt', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4']], + + ["Thieves' Town - Boss", false, []], + ["Thieves' Town - Boss", false, [], ['MoonPearl']], + ["Thieves' Town - Boss", false, [], ['BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'Hammer']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'Hammer']], + ]; + } } diff --git a/tests/NoGlitches/TowerOfHeraTest.php b/tests/NoGlitches/TowerOfHeraTest.php index 4fce9347f..05cca5f87 100644 --- a/tests/NoGlitches/TowerOfHeraTest.php +++ b/tests/NoGlitches/TowerOfHeraTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - // Entry - public function testCanEnterWithEverything() { - $this->assertTrue($this->world->getRegion('Tower of Hera')->canEnter($this->world->getLocations(), $this->allItems())); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - - public function fillPool() { - return [ - ["Tower of Hera - Big Key Chest", true, 'BigKeyP3', [], ['BigKeyP3']], - ["Tower of Hera - Big Key Chest", true, 'KeyP3', [], ['KeyP3']], - - ["Tower of Hera - Basement Cage", true, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Map Chest", true, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Compass Chest", false, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Big Chest", false, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Boss", false, 'BigKeyP3', [], ['BigKeyP3']], - ]; - } - - public function accessPool() { - return [ - ["Tower of Hera - Big Key Chest", false, []], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], - - ["Tower of Hera - Basement Cage", false, []], - ["Tower of Hera - Basement Cage", true, ['Flute', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['Flute', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], - - ["Tower of Hera - Map Chest", false, []], - ["Tower of Hera - Map Chest", true, ['Flute', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['Flute', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], - - ["Tower of Hera - Compass Chest", false, []], - ["Tower of Hera - Compass Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - - ["Tower of Hera - Big Chest", false, []], - ["Tower of Hera - Big Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - - ["Tower of Hera - Boss", false, []], - ["Tower of Hera - Boss", false, [], ['AnySword', 'Hammer']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ]; - } +class TowerOfHeraTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + // Entry + public function testCanEnterWithEverything() + { + $this->assertTrue($this->world->getRegion('Tower of Hera')->canEnter($this->world->getLocations(), $this->allItems())); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + + public function fillPool() + { + return [ + ["Tower of Hera - Big Key Chest", true, 'BigKeyP3', [], ['BigKeyP3']], + ["Tower of Hera - Big Key Chest", true, 'KeyP3', [], ['KeyP3']], + + ["Tower of Hera - Basement Cage", true, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Map Chest", true, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Compass Chest", false, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Big Chest", false, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Boss", false, 'BigKeyP3', [], ['BigKeyP3']], + ]; + } + + public function accessPool() + { + return [ + ["Tower of Hera - Big Key Chest", false, []], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], + + ["Tower of Hera - Basement Cage", false, []], + ["Tower of Hera - Basement Cage", true, ['Flute', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['Flute', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], + + ["Tower of Hera - Map Chest", false, []], + ["Tower of Hera - Map Chest", true, ['Flute', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['Flute', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], + + ["Tower of Hera - Compass Chest", false, []], + ["Tower of Hera - Compass Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + + ["Tower of Hera - Big Chest", false, []], + ["Tower of Hera - Big Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + + ["Tower of Hera - Boss", false, []], + ["Tower of Hera - Boss", false, [], ['AnySword', 'Hammer']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ]; + } } diff --git a/tests/NoGlitches/TurtleRockTest.php b/tests/NoGlitches/TurtleRockTest.php index 69102a323..338340b3d 100644 --- a/tests/NoGlitches/TurtleRockTest.php +++ b/tests/NoGlitches/TurtleRockTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'NoGlitches'); - - $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get('Quake')); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Turtle Rock - Chain Chomps", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Compass Chest", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Roller Room - Left", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Roller Room - Right", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Big Chest", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Big Key Chest", true, 'BigKeyD7', ['KeyD7', 'KeyD7'], ['BigKeyD7']], - - ["Turtle Rock - Crystaroller Room", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Left", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Right", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Left", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Right", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Boss", false, 'BigKeyD7', [], ['BigKeyD7']], - ["Turtle Rock - Boss", false, 'KeyD7', [], ['KeyD7']], - ]; - } - - public function accessPool() { - return [ - ["Turtle Rock - Chain Chomps", false, []], - ["Turtle Rock - Chain Chomps", false, [], ['MoonPearl']], - ["Turtle Rock - Chain Chomps", false, [], ['TitansMitt']], - ["Turtle Rock - Chain Chomps", false, [], ['Hammer']], - ["Turtle Rock - Chain Chomps", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - - ["Turtle Rock - Compass Chest", false, []], - ["Turtle Rock - Compass Chest", false, [], ['MoonPearl']], - ["Turtle Rock - Compass Chest", false, [], ['TitansMitt']], - ["Turtle Rock - Compass Chest", false, [], ['Hammer']], - ["Turtle Rock - Compass Chest", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - - ["Turtle Rock - Roller Room - Left", false, []], - ["Turtle Rock - Roller Room - Left", false, [], ['MoonPearl']], - ["Turtle Rock - Roller Room - Left", false, [], ['TitansMitt']], - ["Turtle Rock - Roller Room - Left", false, [], ['Hammer']], - ["Turtle Rock - Roller Room - Left", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Roller Room - Left", false, [], ['FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - - ["Turtle Rock - Roller Room - Right", false, []], - ["Turtle Rock - Roller Room - Right", false, [], ['MoonPearl']], - ["Turtle Rock - Roller Room - Right", false, [], ['TitansMitt']], - ["Turtle Rock - Roller Room - Right", false, [], ['Hammer']], - ["Turtle Rock - Roller Room - Right", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Roller Room - Right", false, [], ['FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - - ["Turtle Rock - Big Chest", false, []], - ["Turtle Rock - Big Chest", false, [], ['MoonPearl']], - ["Turtle Rock - Big Chest", false, [], ['TitansMitt']], - ["Turtle Rock - Big Chest", false, [], ['Hammer']], - ["Turtle Rock - Big Chest", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Big Chest", false, [], ['BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Big Key Chest", false, []], - ["Turtle Rock - Big Key Chest", false, [], ['MoonPearl']], - ["Turtle Rock - Big Key Chest", false, [], ['TitansMitt']], - ["Turtle Rock - Big Key Chest", false, [], ['Hammer']], - ["Turtle Rock - Big Key Chest", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - - ["Turtle Rock - Crystaroller Room", false, []], - ["Turtle Rock - Crystaroller Room", false, [], ['MoonPearl']], - ["Turtle Rock - Crystaroller Room", false, [], ['TitansMitt']], - ["Turtle Rock - Crystaroller Room", false, [], ['Hammer']], - ["Turtle Rock - Crystaroller Room", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Crystaroller Room", false, [], ['BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Left", false, []], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['MoonPearl']], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['TitansMitt']], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['Hammer']], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['Lamp']], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Right", false, []], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['MoonPearl']], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['TitansMitt']], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['Hammer']], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['Lamp']], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Left", false, []], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['MoonPearl']], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['TitansMitt']], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['Hammer']], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['Lamp']], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Right", false, []], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['MoonPearl']], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['TitansMitt']], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['Hammer']], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['Lamp']], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Boss", false, []], - ["Turtle Rock - Boss", false, [], ['MoonPearl']], - ["Turtle Rock - Boss", false, [], ['TitansMitt']], - ["Turtle Rock - Boss", false, [], ['Hammer']], - ["Turtle Rock - Boss", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Boss", false, [], ['IceRod']], - ["Turtle Rock - Boss", false, [], ['FireRod']], - ["Turtle Rock - Boss", false, [], ['Lamp']], - ["Turtle Rock - Boss", false, [], ['BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ]; - } +class TurtleRockTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + + $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get('Quake', $this->world)); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Turtle Rock - Chain Chomps", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Compass Chest", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Roller Room - Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Roller Room - Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Big Chest", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Big Key Chest", true, 'BigKeyD7', ['KeyD7', 'KeyD7'], ['BigKeyD7']], + + ["Turtle Rock - Crystaroller Room", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Left", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Right", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Left", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Right", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Boss", false, 'BigKeyD7', [], ['BigKeyD7']], + ["Turtle Rock - Boss", false, 'KeyD7', [], ['KeyD7']], + ]; + } + + public function accessPool() + { + return [ + ["Turtle Rock - Chain Chomps", false, []], + ["Turtle Rock - Chain Chomps", false, [], ['MoonPearl']], + ["Turtle Rock - Chain Chomps", false, [], ['TitansMitt']], + ["Turtle Rock - Chain Chomps", false, [], ['Hammer']], + ["Turtle Rock - Chain Chomps", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + + ["Turtle Rock - Compass Chest", false, []], + ["Turtle Rock - Compass Chest", false, [], ['MoonPearl']], + ["Turtle Rock - Compass Chest", false, [], ['TitansMitt']], + ["Turtle Rock - Compass Chest", false, [], ['Hammer']], + ["Turtle Rock - Compass Chest", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + + ["Turtle Rock - Roller Room - Left", false, []], + ["Turtle Rock - Roller Room - Left", false, [], ['MoonPearl']], + ["Turtle Rock - Roller Room - Left", false, [], ['TitansMitt']], + ["Turtle Rock - Roller Room - Left", false, [], ['Hammer']], + ["Turtle Rock - Roller Room - Left", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Roller Room - Left", false, [], ['FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + + ["Turtle Rock - Roller Room - Right", false, []], + ["Turtle Rock - Roller Room - Right", false, [], ['MoonPearl']], + ["Turtle Rock - Roller Room - Right", false, [], ['TitansMitt']], + ["Turtle Rock - Roller Room - Right", false, [], ['Hammer']], + ["Turtle Rock - Roller Room - Right", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Roller Room - Right", false, [], ['FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + + ["Turtle Rock - Big Chest", false, []], + ["Turtle Rock - Big Chest", false, [], ['MoonPearl']], + ["Turtle Rock - Big Chest", false, [], ['TitansMitt']], + ["Turtle Rock - Big Chest", false, [], ['Hammer']], + ["Turtle Rock - Big Chest", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Big Chest", false, [], ['BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Big Key Chest", false, []], + ["Turtle Rock - Big Key Chest", false, [], ['MoonPearl']], + ["Turtle Rock - Big Key Chest", false, [], ['TitansMitt']], + ["Turtle Rock - Big Key Chest", false, [], ['Hammer']], + ["Turtle Rock - Big Key Chest", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + + ["Turtle Rock - Crystaroller Room", false, []], + ["Turtle Rock - Crystaroller Room", false, [], ['MoonPearl']], + ["Turtle Rock - Crystaroller Room", false, [], ['TitansMitt']], + ["Turtle Rock - Crystaroller Room", false, [], ['Hammer']], + ["Turtle Rock - Crystaroller Room", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Crystaroller Room", false, [], ['BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Left", false, []], + ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['MoonPearl']], + ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['TitansMitt']], + ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['Hammer']], + ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['Lamp']], + ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Right", false, []], + ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['MoonPearl']], + ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['TitansMitt']], + ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['Hammer']], + ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['Lamp']], + ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Left", false, []], + ["Turtle Rock - Eye Bridge - Top Left", false, [], ['MoonPearl']], + ["Turtle Rock - Eye Bridge - Top Left", false, [], ['TitansMitt']], + ["Turtle Rock - Eye Bridge - Top Left", false, [], ['Hammer']], + ["Turtle Rock - Eye Bridge - Top Left", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Eye Bridge - Top Left", false, [], ['Lamp']], + ["Turtle Rock - Eye Bridge - Top Left", false, [], ['BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Right", false, []], + ["Turtle Rock - Eye Bridge - Top Right", false, [], ['MoonPearl']], + ["Turtle Rock - Eye Bridge - Top Right", false, [], ['TitansMitt']], + ["Turtle Rock - Eye Bridge - Top Right", false, [], ['Hammer']], + ["Turtle Rock - Eye Bridge - Top Right", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Eye Bridge - Top Right", false, [], ['Lamp']], + ["Turtle Rock - Eye Bridge - Top Right", false, [], ['BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Boss", false, []], + ["Turtle Rock - Boss", false, [], ['MoonPearl']], + ["Turtle Rock - Boss", false, [], ['TitansMitt']], + ["Turtle Rock - Boss", false, [], ['Hammer']], + ["Turtle Rock - Boss", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Boss", false, [], ['IceRod']], + ["Turtle Rock - Boss", false, [], ['FireRod']], + ["Turtle Rock - Boss", false, [], ['Lamp']], + ["Turtle Rock - Boss", false, [], ['BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ]; + } } diff --git a/tests/OverworldGlitches/DarkWorld/DeathMountain/EastTest.php b/tests/OverworldGlitches/DarkWorld/DeathMountain/EastTest.php index d86ac7915..268b2163f 100644 --- a/tests/OverworldGlitches/DarkWorld/DeathMountain/EastTest.php +++ b/tests/OverworldGlitches/DarkWorld/DeathMountain/EastTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class EastTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Superbunny Cave - Top", false, []], - ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp']], - ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp']], + public function accessPool() + { + return [ + ["Superbunny Cave - Top", false, []], + ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp']], + ["Superbunny Cave - Top", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp']], - ["Superbunny Cave - Bottom", false, []], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp']], - ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp']], + ["Superbunny Cave - Bottom", false, []], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp']], + ["Superbunny Cave - Bottom", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp']], - ["Hookshot Cave - Bottom Right", false, []], - ["Hookshot Cave - Bottom Right", false, [], ['Gloves', 'PegasusBoots']], - ["Hookshot Cave - Bottom Right", false, [], ['MoonPearl']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'PegasusBoots']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute', 'PegasusBoots']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute', 'PegasusBoots']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp', 'PegasusBoots']], - ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", false, []], + ["Hookshot Cave - Bottom Right", false, [], ['Gloves', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", false, [], ['MoonPearl']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Flute', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Flute', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror', 'Hammer', 'Lamp', 'PegasusBoots']], + ["Hookshot Cave - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'MagicMirror', 'Hammer', 'Lamp', 'PegasusBoots']], - ["Hookshot Cave - Bottom Left", false, []], - ["Hookshot Cave - Bottom Left", false, [], ['Gloves', 'PegasusBoots']], - ["Hookshot Cave - Bottom Left", false, [], ['MoonPearl']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'PegasusBoots', 'Hookshot']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Bottom Left", false, []], + ["Hookshot Cave - Bottom Left", false, [], ['Gloves', 'PegasusBoots']], + ["Hookshot Cave - Bottom Left", false, [], ['MoonPearl']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'PegasusBoots', 'Hookshot']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Top Left", false, []], - ["Hookshot Cave - Top Left", false, [], ['Gloves', 'PegasusBoots']], - ["Hookshot Cave - Top Left", false, [], ['MoonPearl']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'PegasusBoots', 'Hookshot']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Top Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Top Left", false, []], + ["Hookshot Cave - Top Left", false, [], ['Gloves', 'PegasusBoots']], + ["Hookshot Cave - Top Left", false, [], ['MoonPearl']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'PegasusBoots', 'Hookshot']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Top Left", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Top Right", false, []], - ["Hookshot Cave - Top Right", false, [], ['Gloves', 'PegasusBoots']], - ["Hookshot Cave - Top Right", false, [], ['MoonPearl']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'PegasusBoots', 'Hookshot']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], - ["Hookshot Cave - Top Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], - ]; - } + ["Hookshot Cave - Top Right", false, []], + ["Hookshot Cave - Top Right", false, [], ['Gloves', 'PegasusBoots']], + ["Hookshot Cave - Top Right", false, [], ['MoonPearl']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'PegasusBoots', 'Hookshot']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Hookshot', 'Lamp']], + ["Hookshot Cave - Top Right", true, ['MoonPearl', 'TitansMitt', 'Hookshot', 'Lamp']], + ]; + } } diff --git a/tests/OverworldGlitches/DarkWorld/DeathMountain/WestTest.php b/tests/OverworldGlitches/DarkWorld/DeathMountain/WestTest.php index 76b536b39..4874651a8 100644 --- a/tests/OverworldGlitches/DarkWorld/DeathMountain/WestTest.php +++ b/tests/OverworldGlitches/DarkWorld/DeathMountain/WestTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class WestTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Spike Cave", false, []], - ["Spike Cave", false, [], ['Gloves']], - ["Spike Cave", false, [], ['MoonPearl']], - ["Spike Cave", false, [], ['Hammer']], - ["Spike Cave", false, [], ['Cape', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], - ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], - ]; - } + public function accessPool() + { + return [ + ["Spike Cave", false, []], + ["Spike Cave", false, [], ['Gloves']], + ["Spike Cave", false, [], ['MoonPearl']], + ["Spike Cave", false, [], ['Hammer']], + ["Spike Cave", false, [], ['Cape', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['Bottle', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['HalfMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'Cape']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Lamp', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'ProgressiveGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'PowerGlove', 'Flute', 'CaneOfByrna']], + ["Spike Cave", true, ['QuarterMagic', 'MoonPearl', 'Hammer', 'TitansMitt', 'Flute', 'CaneOfByrna']], + ]; + } } diff --git a/tests/OverworldGlitches/DarkWorld/MireTest.php b/tests/OverworldGlitches/DarkWorld/MireTest.php index 2c9329381..55a3784fd 100644 --- a/tests/OverworldGlitches/DarkWorld/MireTest.php +++ b/tests/OverworldGlitches/DarkWorld/MireTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Mire Shed - Left", false, []], - ["Mire Shed - Left", true, ['MoonPearl', 'Flute', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Mire Shed - Left", true, ['MoonPearl', 'Flute', 'TitansMitt']], - - ["Mire Shed - Right", false, []], - ["Mire Shed - Right", true, ['MoonPearl', 'Flute', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Mire Shed - Right", true, ['MoonPearl', 'Flute', 'TitansMitt']], - ]; - } +class MireTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPool() + { + return [ + ["Mire Shed - Left", false, []], + ["Mire Shed - Left", true, ['MoonPearl', 'Flute', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Mire Shed - Left", true, ['MoonPearl', 'Flute', 'TitansMitt']], + + ["Mire Shed - Right", false, []], + ["Mire Shed - Right", true, ['MoonPearl', 'Flute', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Mire Shed - Right", true, ['MoonPearl', 'Flute', 'TitansMitt']], + ]; + } } diff --git a/tests/OverworldGlitches/DarkWorld/NorthEastTest.php b/tests/OverworldGlitches/DarkWorld/NorthEastTest.php index fe7e59ae3..e64f69b9b 100644 --- a/tests/OverworldGlitches/DarkWorld/NorthEastTest.php +++ b/tests/OverworldGlitches/DarkWorld/NorthEastTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class NorthEastTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Catfish", false, []], - ["Catfish", false, [], ['MoonPearl']], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove']], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove']], - ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'TitansMitt']], - ["Catfish", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Catfish", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Catfish", true, ['MoonPearl', 'TitansMitt', 'Flippers']], + public function accessPool() + { + return [ + ["Catfish", false, []], + ["Catfish", false, [], ['MoonPearl']], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove']], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove']], + ["Catfish", true, ['MoonPearl', 'DefeatAgahnim', 'TitansMitt']], + ["Catfish", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Catfish", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Catfish", true, ['MoonPearl', 'TitansMitt', 'Flippers']], - ["Pyramid", false, []], - ["Pyramid", true, ['DefeatAgahnim']], - ["Pyramid", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Pyramid", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Pyramid", true, ['MoonPearl', 'TitansMitt', 'Flippers']], + ["Pyramid", false, []], + ["Pyramid", true, ['DefeatAgahnim']], + ["Pyramid", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Pyramid", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Pyramid", true, ['MoonPearl', 'TitansMitt', 'Flippers']], - ["Pyramid Fairy - Sword", false, []], - ["Pyramid Fairy - Sword", false, [], ['AnySword']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'L1Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", false, []], + ["Pyramid Fairy - Sword", false, [], ['AnySword']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'UncleSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Sword", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", false, []], - ["Pyramid Fairy - Bow", false, [], ['AnyBow']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'Bow', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", false, []], + ["Pyramid Fairy - Bow", false, [], ['AnyBow']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Bow", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'BowAndArrows', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", false, []], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", false, []], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Left", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", false, []], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], - ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", false, []], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'TitansMitt', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'ProgressiveGlove', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'PowerGlove', 'Hammer']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'TitansMitt', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'ProgressiveGlove', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MagicMirror']], + ["Pyramid Fairy - Right", true, ['MoonPearl', 'Crystal5', 'Crystal6', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MagicMirror']], - ["Ganon", false, []], - ["Ganon", false, [], ['MoonPearl']], - ["Ganon", false, [], ['DefeatAgahnim2']], - ]; - } + ["Ganon", false, []], + ["Ganon", false, [], ['MoonPearl']], + ["Ganon", false, [], ['DefeatAgahnim2']], + ]; + } } diff --git a/tests/OverworldGlitches/DarkWorld/NorthWestTest.php b/tests/OverworldGlitches/DarkWorld/NorthWestTest.php index 734778d17..9eaa6b044 100644 --- a/tests/OverworldGlitches/DarkWorld/NorthWestTest.php +++ b/tests/OverworldGlitches/DarkWorld/NorthWestTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class NorthWestTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Brewery", false, []], - ["Brewery", false, [], ['MoonPearl']], - ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Brewery", true, ['MoonPearl', 'TitansMitt']], - ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Brewery", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + public function accessPool() + { + return [ + ["Brewery", false, []], + ["Brewery", false, [], ['MoonPearl']], + ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Brewery", true, ['MoonPearl', 'TitansMitt']], + ["Brewery", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Brewery", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Brewery", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["C-Shaped House", false, []], - ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["C-Shaped House", true, ['MoonPearl', 'TitansMitt']], - ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["C-Shaped House", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["C-Shaped House", false, []], + ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["C-Shaped House", true, ['MoonPearl', 'TitansMitt']], + ["C-Shaped House", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["C-Shaped House", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["C-Shaped House", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Chest Game", false, []], - ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Chest Game", true, ['MoonPearl', 'TitansMitt']], - ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Chest Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Chest Game", false, []], + ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Chest Game", true, ['MoonPearl', 'TitansMitt']], + ["Chest Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Chest Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Chest Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hammer Pegs", false, []], - ["Hammer Pegs", false, [], ['MoonPearl']], - ["Hammer Pegs", false, [], ['Hammer']], - ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'TitansMitt']], + ["Hammer Pegs", false, []], + ["Hammer Pegs", false, [], ['MoonPearl']], + ["Hammer Pegs", false, [], ['Hammer']], + ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hammer Pegs", true, ['MoonPearl', 'Hammer', 'TitansMitt']], - ["Bumper Cave", false, []], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'TitansMitt']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'Hammer']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'PowerGlove', 'Hammer']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Bumper Cave", false, []], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'TitansMitt']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'ProgressiveGlove', 'Hammer']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'PowerGlove', 'Hammer']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bumper Cave", true, ['MoonPearl', 'Cape', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Blacksmith", false, []], - ["Blacksmith", false, [], ['MoonPearl']], - ["Blacksmith", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Blacksmith", true, ['MoonPearl', 'TitansMitt']], + ["Blacksmith", false, []], + ["Blacksmith", false, [], ['MoonPearl']], + ["Blacksmith", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Blacksmith", true, ['MoonPearl', 'TitansMitt']], - ["Purple Chest", false, []], - ["Purple Chest", false, [], ['MoonPearl']], - ["Purple Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Purple Chest", true, ['MoonPearl', 'TitansMitt']], - ]; - } + ["Purple Chest", false, []], + ["Purple Chest", false, [], ['MoonPearl']], + ["Purple Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Purple Chest", true, ['MoonPearl', 'TitansMitt']], + ]; + } } diff --git a/tests/OverworldGlitches/DarkWorld/SouthTest.php b/tests/OverworldGlitches/DarkWorld/SouthTest.php index 994f0b04e..be2a78acc 100644 --- a/tests/OverworldGlitches/DarkWorld/SouthTest.php +++ b/tests/OverworldGlitches/DarkWorld/SouthTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class SouthTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Hype Cave - Top", false, []], - ["Hype Cave - Top", false, [], ['MoonPearl']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Top", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + public function accessPool() + { + return [ + ["Hype Cave - Top", false, []], + ["Hype Cave - Top", false, [], ['MoonPearl']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Top", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Top", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Top", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Middle Right", false, []], - ["Hype Cave - Middle Right", false, [], ['MoonPearl']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Middle Right", false, []], + ["Hype Cave - Middle Right", false, [], ['MoonPearl']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Middle Right", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Middle Left", false, []], - ["Hype Cave - Middle Left", false, [], ['MoonPearl']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Middle Left", false, []], + ["Hype Cave - Middle Left", false, [], ['MoonPearl']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Middle Left", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - Bottom", false, []], - ["Hype Cave - Bottom", false, [], ['MoonPearl']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - Bottom", false, []], + ["Hype Cave - Bottom", false, [], ['MoonPearl']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - Bottom", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Hype Cave - NPC", false, []], - ["Hype Cave - NPC", false, [], ['MoonPearl']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Hype Cave - NPC", true, ['MoonPearl', 'TitansMitt']], - ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Hype Cave - NPC", false, []], + ["Hype Cave - NPC", false, [], ['MoonPearl']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Hype Cave - NPC", true, ['MoonPearl', 'TitansMitt']], + ["Hype Cave - NPC", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Hype Cave - NPC", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Stumpy", false, []], - ["Stumpy", false, [], ['MoonPearl']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Stumpy", true, ['MoonPearl', 'TitansMitt']], - ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Stumpy", false, []], + ["Stumpy", false, [], ['MoonPearl']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Stumpy", true, ['MoonPearl', 'TitansMitt']], + ["Stumpy", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Stumpy", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Digging Game", false, []], - ["Digging Game", false, [], ['MoonPearl']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Digging Game", true, ['MoonPearl', 'TitansMitt']], - ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ]; - } + ["Digging Game", false, []], + ["Digging Game", false, [], ['MoonPearl']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Digging Game", true, ['MoonPearl', 'TitansMitt']], + ["Digging Game", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Digging Game", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ]; + } } diff --git a/tests/OverworldGlitches/DeathMountain/EastTest.php b/tests/OverworldGlitches/DeathMountain/EastTest.php index f21695651..e8b8b17ec 100644 --- a/tests/OverworldGlitches/DeathMountain/EastTest.php +++ b/tests/OverworldGlitches/DeathMountain/EastTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class EastTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Spiral Cave", false, []], - ["Spiral Cave", true, ['PegasusBoots']], - ["Spiral Cave", true, ['Flute', 'Hookshot']], - ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Spiral Cave", false, ['ProgressiveGlove', 'Hookshot']], - ["Spiral Cave", false, [], ['Gloves', 'Flute', 'PegasusBoots']], + public function accessPool() + { + return [ + ["Spiral Cave", false, []], + ["Spiral Cave", true, ['PegasusBoots']], + ["Spiral Cave", true, ['Flute', 'Hookshot']], + ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Spiral Cave", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Spiral Cave", false, ['ProgressiveGlove', 'Hookshot']], + ["Spiral Cave", false, [], ['Gloves', 'Flute', 'PegasusBoots']], - ["Paradox Cave Lower - Far Left", false, []], - ["Paradox Cave Lower - Far Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Left", false, []], + ["Paradox Cave Lower - Far Left", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Left", false, []], - ["Paradox Cave Lower - Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Left", false, []], + ["Paradox Cave Lower - Left", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Middle", false, []], - ["Paradox Cave Lower - Middle", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Middle", false, []], + ["Paradox Cave Lower - Middle", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Middle", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Middle", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Middle", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Right", false, []], - ["Paradox Cave Lower - Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Right", false, []], + ["Paradox Cave Lower - Right", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Right", false, []], - ["Paradox Cave Lower - Far Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Right", false, []], + ["Paradox Cave Lower - Far Right", true, ['Flute', 'Hookshot']], + ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Lower - Far Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Lower - Far Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Left", false, []], - ["Paradox Cave Upper - Left", true, ['Flute', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Left", false, []], + ["Paradox Cave Upper - Left", true, ['Flute', 'Hookshot']], + ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Left", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Left", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Left", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Right", false, []], - ["Paradox Cave Upper - Right", true, ['Flute', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], - ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], - ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], - ]; - } + ["Paradox Cave Upper - Right", false, []], + ["Paradox Cave Upper - Right", true, ['Flute', 'Hookshot']], + ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'Hookshot']], + ["Paradox Cave Upper - Right", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Right", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'Hammer']], + ["Paradox Cave Upper - Right", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'Hammer']], + ]; + } } diff --git a/tests/OverworldGlitches/DeathMountain/WestTest.php b/tests/OverworldGlitches/DeathMountain/WestTest.php index 981dc06ec..b15f0b637 100644 --- a/tests/OverworldGlitches/DeathMountain/WestTest.php +++ b/tests/OverworldGlitches/DeathMountain/WestTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class WestTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Ether Tablet", false, []], - ["Ether Tablet", false, [], ['UpgradedSword']], - ["Ether Tablet", false, [], ['BookOfMudora']], - ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], - ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], + public function accessPool() + { + return [ + ["Ether Tablet", false, []], + ["Ether Tablet", false, [], ['UpgradedSword']], + ["Ether Tablet", false, [], ['BookOfMudora']], + ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['Flute', 'MagicMirror', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['Flute', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['ProgressiveGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['PowerGlove', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L2Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L3Sword']], + ["Ether Tablet", true, ['TitansMitt', 'Lamp', 'Hammer', 'Hookshot', 'BookOfMudora', 'L4Sword']], - ["Old Man", false, []], - ["Old Man", false, [], ['Lamp']], - ["Old Man", true, ['Flute', 'Lamp']], - ["Old Man", true, ['ProgressiveGlove', 'Lamp']], - ["Old Man", true, ['PowerGlove', 'Lamp']], - ["Old Man", true, ['TitansMitt', 'Lamp']], + ["Old Man", false, []], + ["Old Man", false, [], ['Lamp']], + ["Old Man", true, ['Flute', 'Lamp']], + ["Old Man", true, ['ProgressiveGlove', 'Lamp']], + ["Old Man", true, ['PowerGlove', 'Lamp']], + ["Old Man", true, ['TitansMitt', 'Lamp']], - ["Spectacle Rock Cave", false, []], - ["Spectacle Rock Cave", true, ['Flute']], - ["Spectacle Rock Cave", true, ['ProgressiveGlove', 'Lamp']], - ["Spectacle Rock Cave", true, ['PowerGlove', 'Lamp']], - ["Spectacle Rock Cave", true, ['TitansMitt', 'Lamp']], + ["Spectacle Rock Cave", false, []], + ["Spectacle Rock Cave", true, ['Flute']], + ["Spectacle Rock Cave", true, ['ProgressiveGlove', 'Lamp']], + ["Spectacle Rock Cave", true, ['PowerGlove', 'Lamp']], + ["Spectacle Rock Cave", true, ['TitansMitt', 'Lamp']], - ["Spectacle Rock", false, []], - ["Spectacle Rock", true, ['Flute', 'MagicMirror']], - ["Spectacle Rock", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Spectacle Rock", true, ['PowerGlove', 'Lamp', 'MagicMirror']], - ["Spectacle Rock", true, ['TitansMitt', 'Lamp', 'MagicMirror']], - ]; - } + ["Spectacle Rock", false, []], + ["Spectacle Rock", true, ['Flute', 'MagicMirror']], + ["Spectacle Rock", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Spectacle Rock", true, ['PowerGlove', 'Lamp', 'MagicMirror']], + ["Spectacle Rock", true, ['TitansMitt', 'Lamp', 'MagicMirror']], + ]; + } } diff --git a/tests/OverworldGlitches/DesertPalaceTest.php b/tests/OverworldGlitches/DesertPalaceTest.php index f7eef360e..91915db1b 100644 --- a/tests/OverworldGlitches/DesertPalaceTest.php +++ b/tests/OverworldGlitches/DesertPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider entryPool - */ - public function testEntry(bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getRegion('Desert Palace') - ->canEnter($this->world->getLocations(), $this->collected)); - } - - public function entryPool() { - return [ - [false, []], - [true, ['BookOfMudora']], - [true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - [true, ['Flute', 'MagicMirror', 'TitansMitt']], - ]; - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Desert Palace - Big Key Chest", false, 'KeyP2', [], ['KeyP2']], - ["Desert Palace - Compass Chest", false, 'KeyP2', [], ['KeyP2']], - - ["Desert Palace - Big Chest", false, 'BigKeyP2', [], ['BigKeyP2']], - - ["Desert Palace - Boss", false, 'BigKeyP2', [], ['BigKeyP2']], - ["Desert Palace - Boss", false, 'KeyP2', [], ['KeyP2']], - ]; - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Desert Palace - Map Chest", false, []], - ["Desert Palace - Map Chest", true, ['BookOfMudora']], - ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Desert Palace - Big Chest", false, []], - ["Desert Palace - Big Chest", true, ['BookOfMudora', 'BigKeyP2']], - ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'BigKeyP2']], - - ["Desert Palace - Torch", false, []], - ["Desert Palace - Torch", false, [], ['PegasusBoots']], - ["Desert Palace - Torch", true, ['BookOfMudora', 'PegasusBoots']], - ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'PegasusBoots']], - ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'TitansMitt', 'PegasusBoots']], - - ["Desert Palace - Compass Chest", false, []], - ["Desert Palace - Compass Chest", false, [], ['KeyP2']], - ["Desert Palace - Compass Chest", true, ['BookOfMudora', 'KeyP2']], - ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], - ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], - - ["Desert Palace - Big Key Chest", false, []], - ["Desert Palace - Big Key Chest", false, [], ['KeyP2']], - ["Desert Palace - Big Key Chest", true, ['BookOfMudora', 'KeyP2']], - ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], - ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], - - ["Desert Palace - Boss", false, []], - ["Desert Palace - Boss", false, [], ['KeyP2']], - ["Desert Palace - Boss", false, [], ['BigKeyP2']], - ["Desert Palace - Boss", false, [], ['Lamp', 'FireRod']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'PowerGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'Lamp', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'PowerGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'BookOfMudora', 'FireRod', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'TitansMitt', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], - ["Desert Palace - Boss", true, ['L1Sword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'TitansMitt', 'BigKeyP2']], - ]; - } +class DesertPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider entryPool + */ + public function testEntry(bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getRegion('Desert Palace') + ->canEnter($this->world->getLocations(), $this->collected)); + } + + public function entryPool() + { + return [ + [false, []], + [true, ['BookOfMudora']], + [true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + [true, ['Flute', 'MagicMirror', 'TitansMitt']], + ]; + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Desert Palace - Big Key Chest", false, 'KeyP2', [], ['KeyP2']], + ["Desert Palace - Compass Chest", false, 'KeyP2', [], ['KeyP2']], + + ["Desert Palace - Big Chest", false, 'BigKeyP2', [], ['BigKeyP2']], + + ["Desert Palace - Boss", false, 'BigKeyP2', [], ['BigKeyP2']], + ["Desert Palace - Boss", false, 'KeyP2', [], ['KeyP2']], + ]; + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPool() + { + return [ + ["Desert Palace - Map Chest", false, []], + ["Desert Palace - Map Chest", true, ['BookOfMudora']], + ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Desert Palace - Map Chest", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Desert Palace - Big Chest", false, []], + ["Desert Palace - Big Chest", true, ['BookOfMudora', 'BigKeyP2']], + ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Big Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'BigKeyP2']], + + ["Desert Palace - Torch", false, []], + ["Desert Palace - Torch", false, [], ['PegasusBoots']], + ["Desert Palace - Torch", true, ['BookOfMudora', 'PegasusBoots']], + ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'PegasusBoots']], + ["Desert Palace - Torch", true, ['Flute', 'MagicMirror', 'TitansMitt', 'PegasusBoots']], + + ["Desert Palace - Compass Chest", false, []], + ["Desert Palace - Compass Chest", false, [], ['KeyP2']], + ["Desert Palace - Compass Chest", true, ['BookOfMudora', 'KeyP2']], + ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], + ["Desert Palace - Compass Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], + + ["Desert Palace - Big Key Chest", false, []], + ["Desert Palace - Big Key Chest", false, [], ['KeyP2']], + ["Desert Palace - Big Key Chest", true, ['BookOfMudora', 'KeyP2']], + ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyP2']], + ["Desert Palace - Big Key Chest", true, ['Flute', 'MagicMirror', 'TitansMitt', 'KeyP2']], + + ["Desert Palace - Boss", false, []], + ["Desert Palace - Boss", false, [], ['KeyP2']], + ["Desert Palace - Boss", false, [], ['BigKeyP2']], + ["Desert Palace - Boss", false, [], ['Lamp', 'FireRod']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'PowerGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'Lamp', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'PowerGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'BookOfMudora', 'FireRod', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'Lamp', 'TitansMitt', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyP2']], + ["Desert Palace - Boss", true, ['UncleSword', 'KeyP2', 'Flute', 'MagicMirror', 'FireRod', 'TitansMitt', 'BigKeyP2']], + ]; + } } diff --git a/tests/OverworldGlitches/EasternPalaceTest.php b/tests/OverworldGlitches/EasternPalaceTest.php index cf8a658de..5fb0ec6d6 100644 --- a/tests/OverworldGlitches/EasternPalaceTest.php +++ b/tests/OverworldGlitches/EasternPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - // Entry - public function testNothingRequiredToEnter() { - $this->assertTrue($this->world->getRegion('Eastern Palace') - ->canEnter($this->world->getLocations(), $this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Eastern Palace - Compass Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Cannonball Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Big Chest", false, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Map Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Big Key Chest", true, 'BigKeyP1', [], ['BigKeyP1']], - - ["Eastern Palace - Boss", false, 'BigKeyP1', [], ['BigKeyP1']], - ]; - } - - public function accessPool() { - return [ - ["Eastern Palace - Compass Chest", true, []], - - ["Eastern Palace - Cannonball Chest", true, []], - - ["Eastern Palace - Big Chest", false, []], - ["Eastern Palace - Big Chest", false, [], ['BigKeyP1']], - ["Eastern Palace - Big Chest", true, ['BigKeyP1']], - - ["Eastern Palace - Map Chest", true, []], - - ["Eastern Palace - Big Key Chest", false, []], - ["Eastern Palace - Big Key Chest", false, [], ['Lamp']], - ["Eastern Palace - Big Key Chest", true, ['Lamp']], - - - ["Eastern Palace - Boss", false, []], - ["Eastern Palace - Boss", false, [], ['Lamp']], - ["Eastern Palace - Boss", false, [], ['AnyBow']], - ["Eastern Palace - Boss", false, [], ['BigKeyP1']], - ["Eastern Palace - Boss", true, ['Lamp', 'Bow', 'BigKeyP1']], - ]; - } +class EasternPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + // Entry + public function testNothingRequiredToEnter() + { + $this->assertTrue($this->world->getRegion('Eastern Palace') + ->canEnter($this->world->getLocations(), $this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Eastern Palace - Compass Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Cannonball Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Big Chest", false, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Map Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Big Key Chest", true, 'BigKeyP1', [], ['BigKeyP1']], + + ["Eastern Palace - Boss", false, 'BigKeyP1', [], ['BigKeyP1']], + ]; + } + + public function accessPool() + { + return [ + ["Eastern Palace - Compass Chest", true, []], + + ["Eastern Palace - Cannonball Chest", true, []], + + ["Eastern Palace - Big Chest", false, []], + ["Eastern Palace - Big Chest", false, [], ['BigKeyP1']], + ["Eastern Palace - Big Chest", true, ['BigKeyP1']], + + ["Eastern Palace - Map Chest", true, []], + + ["Eastern Palace - Big Key Chest", false, []], + ["Eastern Palace - Big Key Chest", false, [], ['Lamp']], + ["Eastern Palace - Big Key Chest", true, ['Lamp']], + + + ["Eastern Palace - Boss", false, []], + ["Eastern Palace - Boss", false, [], ['Lamp']], + ["Eastern Palace - Boss", false, [], ['AnyBow']], + ["Eastern Palace - Boss", false, [], ['BigKeyP1']], + ["Eastern Palace - Boss", true, ['Lamp', 'BowAndArrows', 'BigKeyP1']], + ]; + } } diff --git a/tests/OverworldGlitches/GanonsTowerTest.php b/tests/OverworldGlitches/GanonsTowerTest.php index af94f4bea..d5399063b 100644 --- a/tests/OverworldGlitches/GanonsTowerTest.php +++ b/tests/OverworldGlitches/GanonsTowerTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - +class GanonsTowerTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function fillPool() { - return [ - ["Ganon's Tower - Bob's Torch", true, 'BigKeyA2', [], ['BigKeyA2']], + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - ["Ganon's Tower - DMs Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - ["Ganon's Tower - DMs Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + $this->addCollected($items); - ["Ganon's Tower - DMs Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - ["Ganon's Tower - DMs Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - ["Ganon's Tower - Randomizer Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + $this->addCollected($items); - ["Ganon's Tower - Randomizer Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } - ["Ganon's Tower - Randomizer Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + public function fillPool() + { + return [ + ["Ganon's Tower - Bob's Torch", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Firesnake Room", true, 'BigKeyA2', [], ['BigKeyA2']], + ["Ganon's Tower - DMs Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Map Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + ["Ganon's Tower - DMs Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Big Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Hope Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], + ["Ganon's Tower - DMs Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - DMs Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], - ["Ganon's Tower - Hope Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Bob's Chest", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Tile Room", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Compass Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Chest", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Big Key Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Mini Helmasaur Room - Left", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Mini Helmasaur Room - Right", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Pre-Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - - ["Ganon's Tower - Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], - ]; - } - - public function accessPool() { - return [ - ["Ganon's Tower - Bob's Torch", false, []], - ["Ganon's Tower - Bob's Torch", false, [], ['PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - DMs Room - Top Left", false, []], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - DMs Room - Top Right", false, []], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - DMs Room - Bottom Left", false, []], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - DMs Room - Bottom Right", false, []], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hammer']], - ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hookshot']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Randomizer Room - Top Left", false, []], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Randomizer Room - Top Right", false, []], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Randomizer Room - Bottom Left", false, []], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Randomizer Room - Bottom Right", false, []], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hammer']], - ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hookshot']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Firesnake Room", false, []], - ["Ganon's Tower - Firesnake Room", false, [], ['Hammer']], - ["Ganon's Tower - Firesnake Room", false, [], ['Hookshot']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Map Chest", false, []], - ["Ganon's Tower - Map Chest", false, [], ['Hammer']], - ["Ganon's Tower - Map Chest", false, [], ['Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Big Chest", false, []], - ["Ganon's Tower - Big Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - - ["Ganon's Tower - Hope Room - Left", false, []], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Hope Room - Right", false, []], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], - - ["Ganon's Tower - Bob's Chest", false, []], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - - ["Ganon's Tower - Tile Room", false, []], - ["Ganon's Tower - Tile Room", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - - ["Ganon's Tower - Compass Room - Top Left", false, []], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Top Left", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - - ["Ganon's Tower - Compass Room - Top Right", false, []], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Top Right", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - - ["Ganon's Tower - Compass Room - Bottom Left", false, []], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - - ["Ganon's Tower - Compass Room - Bottom Right", false, []], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['CaneOfSomaria']], - ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['FireRod']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], - ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], - - ["Ganon's Tower - Big Key Chest", false, []], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - - ["Ganon's Tower - Big Key Room - Left", false, []], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - - ["Ganon's Tower - Big Key Room - Right", false, []], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['L1Sword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], - - ["Ganon's Tower - Mini Helmasaur Room - Left", false, []], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['AnyBow']], - ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['BigKeyA2']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], - - ["Ganon's Tower - Mini Helmasaur Room - Right", false, []], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['AnyBow']], - ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['BigKeyA2']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], - - ["Ganon's Tower - Pre-Moldorm Chest", false, []], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['AnyBow']], - ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Pre-Moldorm Chest", true, ['Bow', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], - - ["Ganon's Tower - Moldorm Chest", false, []], - ["Ganon's Tower - Moldorm Chest", false, [], ['Hookshot']], - ["Ganon's Tower - Moldorm Chest", false, [], ['AnyBow']], - ["Ganon's Tower - Moldorm Chest", false, [], ['BigKeyA2']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], - ["Ganon's Tower - Moldorm Chest", true, ['Bow', 'L1Sword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], - ]; - } + ["Ganon's Tower - Randomizer Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Randomizer Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Firesnake Room", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Map Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Hope Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Hope Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Bob's Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Tile Room", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Top Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Top Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Bottom Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Compass Room - Bottom Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Chest", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Room - Left", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Big Key Room - Right", true, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Mini Helmasaur Room - Left", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Mini Helmasaur Room - Right", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Pre-Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + + ["Ganon's Tower - Moldorm Chest", false, 'BigKeyA2', [], ['BigKeyA2']], + ]; + } + + public function accessPool() + { + return [ + ["Ganon's Tower - Bob's Torch", false, []], + ["Ganon's Tower - Bob's Torch", false, [], ['PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Bob's Torch", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - DMs Room - Top Left", false, []], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Top Left", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Top Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - DMs Room - Top Right", false, []], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Top Right", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Top Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - DMs Room - Bottom Left", false, []], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Bottom Left", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Bottom Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - DMs Room - Bottom Right", false, []], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hammer']], + ["Ganon's Tower - DMs Room - Bottom Right", false, [], ['Hookshot']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - DMs Room - Bottom Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Randomizer Room - Top Left", false, []], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Top Left", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Randomizer Room - Top Right", false, []], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Top Right", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Randomizer Room - Bottom Left", false, []], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Bottom Left", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Randomizer Room - Bottom Right", false, []], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hammer']], + ["Ganon's Tower - Randomizer Room - Bottom Right", false, [], ['Hookshot']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Randomizer Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Firesnake Room", false, []], + ["Ganon's Tower - Firesnake Room", false, [], ['Hammer']], + ["Ganon's Tower - Firesnake Room", false, [], ['Hookshot']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Firesnake Room", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Map Chest", false, []], + ["Ganon's Tower - Map Chest", false, [], ['Hammer']], + ["Ganon's Tower - Map Chest", false, [], ['Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Map Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Big Chest", false, []], + ["Ganon's Tower - Big Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Chest", true, ['BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + + ["Ganon's Tower - Hope Room - Left", false, []], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Left", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Hope Room - Right", false, []], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Hope Room - Right", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'PegasusBoots']], + + ["Ganon's Tower - Bob's Chest", false, []], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Bob's Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + + ["Ganon's Tower - Tile Room", false, []], + ["Ganon's Tower - Tile Room", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Tile Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + + ["Ganon's Tower - Compass Room - Top Left", false, []], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Top Left", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + + ["Ganon's Tower - Compass Room - Top Right", false, []], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Top Right", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Top Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + + ["Ganon's Tower - Compass Room - Bottom Left", false, []], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Bottom Left", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + + ["Ganon's Tower - Compass Room - Bottom Right", false, []], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['CaneOfSomaria']], + ["Ganon's Tower - Compass Room - Bottom Right", false, [], ['FireRod']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'PegasusBoots']], + ["Ganon's Tower - Compass Room - Bottom Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'FireRod', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'PegasusBoots']], + + ["Ganon's Tower - Big Key Chest", false, []], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Chest", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + + ["Ganon's Tower - Big Key Room - Left", false, []], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Left", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + + ["Ganon's Tower - Big Key Room - Right", false, []], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['UncleSword', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Big Key Room - Right", true, ['KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'CaneOfSomaria', 'FireRod', 'PegasusBoots']], + + ["Ganon's Tower - Mini Helmasaur Room - Left", false, []], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['AnyBow']], + ["Ganon's Tower - Mini Helmasaur Room - Left", false, [], ['BigKeyA2']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Left", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], + + ["Ganon's Tower - Mini Helmasaur Room - Right", false, []], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['AnyBow']], + ["Ganon's Tower - Mini Helmasaur Room - Right", false, [], ['BigKeyA2']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Mini Helmasaur Room - Right", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], + + ["Ganon's Tower - Pre-Moldorm Chest", false, []], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['AnyBow']], + ["Ganon's Tower - Pre-Moldorm Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'MagicMirror', 'Hammer', 'PegasusBoots']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Pre-Moldorm Chest", true, ['BowAndArrows', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'MagicMirror', 'Hammer', 'FireRod', 'PegasusBoots']], + + ["Ganon's Tower - Moldorm Chest", false, []], + ["Ganon's Tower - Moldorm Chest", false, [], ['Hookshot']], + ["Ganon's Tower - Moldorm Chest", false, [], ['AnyBow']], + ["Ganon's Tower - Moldorm Chest", false, [], ['BigKeyA2']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'TitansMitt', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Lamp', 'Hookshot', 'PegasusBoots']], + ["Ganon's Tower - Moldorm Chest", true, ['BowAndArrows', 'UncleSword', 'BigKeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'KeyA2', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'Flute', 'Hookshot', 'Hammer', 'FireRod', 'PegasusBoots']], + ]; + } } diff --git a/tests/OverworldGlitches/HyruleCastleEscapeTest.php b/tests/OverworldGlitches/HyruleCastleEscapeTest.php index b67a03f05..ec50c8d71 100644 --- a/tests/OverworldGlitches/HyruleCastleEscapeTest.php +++ b/tests/OverworldGlitches/HyruleCastleEscapeTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class HyruleCastleEscapeTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } - public function fillPool() { - return [ + public function fillPool() + { + return [ - ["Sanctuary", false, 'KeyH2', [], ['KeyH2']], + ["Sanctuary", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Left", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Left", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Middle", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Middle", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Secret Room - Right", false, 'KeyH2', [], ['KeyH2']], + ["Sewers - Secret Room - Right", false, 'KeyH2', [], ['KeyH2']], - ["Sewers - Dark Cross", true, 'KeyH2', [], ['KeyH2']], + ["Sewers - Dark Cross", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Boomerang Chest", true, 'KeyH2', [], ['KeyH2']], + ["Hyrule Castle - Boomerang Chest", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Map Chest", true, 'KeyH2', [], ['KeyH2']], + ["Hyrule Castle - Map Chest", true, 'KeyH2', [], ['KeyH2']], - ["Hyrule Castle - Zelda's Cell", true, 'KeyH2', [], ['KeyH2']], - ]; - } + ["Hyrule Castle - Zelda's Cell", true, 'KeyH2', [], ['KeyH2']], + ]; + } - public function accessPool() { - return [ - ["Sanctuary", true, ['L1Sword', 'KeyH2']], + public function accessPool() + { + return [ + ["Sanctuary", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Left", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Left", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Middle", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Middle", true, ['UncleSword', 'KeyH2']], - ["Sewers - Secret Room - Right", true, ['L1Sword', 'KeyH2']], + ["Sewers - Secret Room - Right", true, ['UncleSword', 'KeyH2']], - ["Sewers - Dark Cross", true, ['L1Sword']], + ["Sewers - Dark Cross", true, ['UncleSword']], - ["Hyrule Castle - Boomerang Chest", true, ['L1Sword']], + ["Hyrule Castle - Boomerang Chest", true, ['UncleSword']], - ["Hyrule Castle - Map Chest", true, ['L1Sword']], + ["Hyrule Castle - Map Chest", true, ['UncleSword']], - ["Hyrule Castle - Zelda's Cell", true, ['L1Sword']], - ]; - } + ["Hyrule Castle - Zelda's Cell", true, ['UncleSword']], + ]; + } } diff --git a/tests/OverworldGlitches/HyruleCastleTowerTest.php b/tests/OverworldGlitches/HyruleCastleTowerTest.php index 512b3cfb8..8d54d3f90 100644 --- a/tests/OverworldGlitches/HyruleCastleTowerTest.php +++ b/tests/OverworldGlitches/HyruleCastleTowerTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class HyruleCastleTowerTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - // Entry - public function testCapeOrUpgradedSwordRequiredToEnter() { - $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') - ->canEnter($this->world->getLocations(), $this->allItemsExcept(['Cape', 'UpgradedSword']))); - } + // Entry + public function testCapeOrUpgradedSwordRequiredToEnter() + { + $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') + ->canEnter($this->world->getLocations(), $this->allItemsExcept(['Cape', 'UpgradedSword']))); + } - // Completion - public function testSwordRequiredToComplete() { - $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') - ->canComplete($this->world->getLocations(), $this->allItemsExcept(['AnySword']))); - } + // Completion + public function testSwordRequiredToComplete() + { + $this->assertFalse($this->world->getRegion('Hyrule Castle Tower') + ->canComplete($this->world->getLocations(), $this->allItemsExcept(['AnySword']))); + } } diff --git a/tests/OverworldGlitches/IcePalaceTest.php b/tests/OverworldGlitches/IcePalaceTest.php index f7d9a1b35..333e8f182 100644 --- a/tests/OverworldGlitches/IcePalaceTest.php +++ b/tests/OverworldGlitches/IcePalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } +class IcePalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - public function tearDown() { - parent::tearDown(); - unset($this->world); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } - public function fillPool() { - return [ - ["Ice Palace - Big Key Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + public function fillPool() + { + return [ + ["Ice Palace - Big Key Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Compass Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Compass Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Map Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Map Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Spike Room", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Spike Room", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Freezor Chest", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Freezor Chest", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Iced T Room", true, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Iced T Room", true, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Big Chest", false, 'BigKeyD5', [], ['BigKeyD5']], + ["Ice Palace - Big Chest", false, 'BigKeyD5', [], ['BigKeyD5']], - ["Ice Palace - Boss", false, 'BigKeyD5', [], ['BigKeyD5']], - ]; - } + ["Ice Palace - Boss", false, 'BigKeyD5', [], ['BigKeyD5']], + ]; + } - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - $this->addCollected($items); + $this->addCollected($items); - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - public function accessPool() { - return [ - ["Ice Palace - Big Key Chest", false, []], - ["Ice Palace - Big Key Chest", false, [], ['TitansMitt']], - ["Ice Palace - Big Key Chest", false, [], ['Hammer']], - ["Ice Palace - Big Key Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + public function accessPool() + { + return [ + ["Ice Palace - Big Key Chest", false, []], + ["Ice Palace - Big Key Chest", false, [], ['Hammer']], + ["Ice Palace - Big Key Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Big Key Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Compass Chest", false, []], - ["Ice Palace - Compass Chest", false, [], ['TitansMitt']], - ["Ice Palace - Compass Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", false, []], + ["Ice Palace - Compass Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Compass Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Map Chest", false, []], - ["Ice Palace - Map Chest", false, [], ['TitansMitt']], - ["Ice Palace - Map Chest", false, [], ['Hammer']], - ["Ice Palace - Map Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", false, []], + ["Ice Palace - Map Chest", false, [], ['Hammer']], + ["Ice Palace - Map Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'Hookshot', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Map Chest", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", false, []], - ["Ice Palace - Spike Room", false, [], ['TitansMitt']], - ["Ice Palace - Spike Room", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", false, []], + ["Ice Palace - Spike Room", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hookshot', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['Cape', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], + ["Ice Palace - Spike Room", true, ['CaneOfByrna', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'KeyD5', 'KeyD5']], - ["Ice Palace - Freezor Chest", false, []], - ["Ice Palace - Freezor Chest", false, [], ['TitansMitt']], - ["Ice Palace - Freezor Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", false, []], + ["Ice Palace - Freezor Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Freezor Chest", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", false, []], - ["Ice Palace - Iced T Room", false, [], ['TitansMitt']], - ["Ice Palace - Iced T Room", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", false, []], + ["Ice Palace - Iced T Room", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Iced T Room", true, ['MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", false, []], - ["Ice Palace - Big Chest", false, [], ['TitansMitt']], - ["Ice Palace - Big Chest", false, [], ['BigKeyD5']], - ["Ice Palace - Big Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", false, []], + ["Ice Palace - Big Chest", false, [], ['BigKeyD5']], + ["Ice Palace - Big Chest", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], + ["Ice Palace - Big Chest", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword']], - ["Ice Palace - Boss", false, []], - ["Ice Palace - Boss", false, [], ['TitansMitt']], - ["Ice Palace - Boss", false, [], ['Hammer']], - ["Ice Palace - Boss", false, [], ['BigKeyD5']], - ["Ice Palace - Boss", false, [], ['FireRod', 'Bombos', 'AnySword']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L1Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L1Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], - ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], - ]; - } + ["Ice Palace - Boss", false, []], + ["Ice Palace - Boss", false, [], ['Hammer']], + ["Ice Palace - Boss", false, [], ['BigKeyD5']], + ["Ice Palace - Boss", false, [], ['FireRod', 'Bombos', 'AnySword']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'FireRod', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'UncleSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'UncleSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'ProgressiveSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'MasterSword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L3Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'KeyD5', 'KeyD5']], + ["Ice Palace - Boss", true, ['BigKeyD5', 'MoonPearl', 'Flippers', 'TitansMitt', 'Bombos', 'L4Sword', 'Hammer', 'CaneOfSomaria', 'KeyD5']], + ]; + } } diff --git a/tests/OverworldGlitches/LightWorldTest.php b/tests/OverworldGlitches/LightWorldTest.php index 0b0e32fb8..41c0ec44d 100644 --- a/tests/OverworldGlitches/LightWorldTest.php +++ b/tests/OverworldGlitches/LightWorldTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Master Sword Pedestal", false, []], - ["Master Sword Pedestal", false, [], ['PendantOfCourage']], - ["Master Sword Pedestal", false, [], ['PendantOfWisdom']], - ["Master Sword Pedestal", false, [], ['PendantOfPower']], - ["Master Sword Pedestal", true, ['PendantOfCourage', 'PendantOfWisdom', 'PendantOfPower']], - - ["Link's Uncle", true, []], - - ["Secret Passage", true, ['L1Sword']], - - ["King's Tomb", false, []], - ["King's Tomb", false, [], ['PegasusBoots']], - ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'ProgressiveGlove']], - ["King's Tomb", true, ['PegasusBoots', 'TitansMitt']], - ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'PowerGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'MoonPearl', 'MagicMirror']], - ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MoonPearl', 'MagicMirror']], - - ["Floodgate Chest", true, []], - - ["Link's House", true, []], - - ["Kakariko Tavern", true, []], +class LightWorldTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } - ["Chicken House", true, []], + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } - ["Aginah's Cave", true, []], + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } - ["Sahasrahla's Hut - Left", true, []], + $this->addCollected($items); - ["Sahasrahla's Hut - Middle", true, []], + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } - ["Sahasrahla's Hut - Right", true, []], + public function accessPool() + { + return [ + ["Master Sword Pedestal", false, []], + ["Master Sword Pedestal", false, [], ['PendantOfCourage']], + ["Master Sword Pedestal", false, [], ['PendantOfWisdom']], + ["Master Sword Pedestal", false, [], ['PendantOfPower']], + ["Master Sword Pedestal", true, ['PendantOfCourage', 'PendantOfWisdom', 'PendantOfPower']], - ["Kakariko Well - Top", true, []], + ["Link's Uncle", true, []], - ["Kakariko Well - Left", true, []], - - ["Kakariko Well - Middle", true, []], - - ["Kakariko Well - Right", true, []], - - ["Kakariko Well - Bottom", true, []], - - ["Blind's Hideout - Top", true, []], - - ["Blind's Hideout - Left", true, []], - - ["Blind's Hideout - Right", true, []], - - ["Blind's Hideout - Far Left", true, []], - - ["Blind's Hideout - Far Right", true, []], - - ["Pegasus Rocks", false, []], - ["Pegasus Rocks", false, [], ['PegasusBoots']], - ["Pegasus Rocks", true, ['PegasusBoots']], - - ["Mini Moldorm Cave - Far Left", true, []], - - ["Mini Moldorm Cave - Left", true, []], - - ["Mini Moldorm Cave - Right", true, []], - - ["Mini Moldorm Cave - Far Right", true, []], - - ["Ice Rod Cave", true, []], - - ["Bottle Merchant", true, []], + ["Secret Passage", true, ['UncleSword']], - ["Sahasrahla", false, []], - ["Sahasrahla", false, [], ['PendantOfCourage']], - ["Sahasrahla", true, ['PendantOfCourage']], - - ["Magic Bat", false, []], - ["Magic Bat", false, [], ['Powder']], - ["Magic Bat", true, ['Powder', 'Hammer']], - ["Magic Bat", true, ['Powder', 'ProgressiveGlove', 'ProgressiveGlove', 'MoonPearl', 'MagicMirror']], - ["Magic Bat", true, ['Powder', 'TitansMitt', 'MoonPearl', 'MagicMirror']], - - ["Sick Kid", false, []], - ["Sick Kid", false, [], ['AnyBottle']], - ["Sick Kid", true, ['BottleWithBee']], - ["Sick Kid", true, ['BottleWithFairy']], - ["Sick Kid", true, ['BottleWithRedPotion']], - ["Sick Kid", true, ['BottleWithGreenPotion']], - ["Sick Kid", true, ['BottleWithBluePotion']], - ["Sick Kid", true, ['Bottle']], - ["Sick Kid", true, ['BottleWithGoldBee']], + ["King's Tomb", false, []], + ["King's Tomb", false, [], ['PegasusBoots']], + ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'ProgressiveGlove']], + ["King's Tomb", true, ['PegasusBoots', 'TitansMitt']], + ["King's Tomb", true, ['PegasusBoots', 'ProgressiveGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'PowerGlove', 'Hammer', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'MoonPearl', 'MagicMirror']], + ["King's Tomb", true, ['PegasusBoots', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'MoonPearl', 'MagicMirror']], + + ["Floodgate Chest", true, []], + + ["Link's House", true, []], + + ["Kakariko Tavern", true, []], + + ["Chicken House", true, []], + + ["Aginah's Cave", true, []], + + ["Sahasrahla's Hut - Left", true, []], + + ["Sahasrahla's Hut - Middle", true, []], + + ["Sahasrahla's Hut - Right", true, []], + + ["Kakariko Well - Top", true, []], + + ["Kakariko Well - Left", true, []], + + ["Kakariko Well - Middle", true, []], + + ["Kakariko Well - Right", true, []], + + ["Kakariko Well - Bottom", true, []], + + ["Blind's Hideout - Top", true, []], + + ["Blind's Hideout - Left", true, []], + + ["Blind's Hideout - Right", true, []], + + ["Blind's Hideout - Far Left", true, []], + + ["Blind's Hideout - Far Right", true, []], + + ["Pegasus Rocks", false, []], + ["Pegasus Rocks", false, [], ['PegasusBoots']], + ["Pegasus Rocks", true, ['PegasusBoots']], + + ["Mini Moldorm Cave - Far Left", true, []], + + ["Mini Moldorm Cave - Left", true, []], + + ["Mini Moldorm Cave - Right", true, []], + + ["Mini Moldorm Cave - Far Right", true, []], + + ["Ice Rod Cave", true, []], + + ["Bottle Merchant", true, []], + + ["Sahasrahla", false, []], + ["Sahasrahla", false, [], ['PendantOfCourage']], + ["Sahasrahla", true, ['PendantOfCourage']], + + ["Magic Bat", false, []], + ["Magic Bat", false, [], ['Powder']], + ["Magic Bat", true, ['Powder', 'Hammer']], + ["Magic Bat", true, ['Powder', 'ProgressiveGlove', 'ProgressiveGlove', 'MoonPearl', 'MagicMirror']], + ["Magic Bat", true, ['Powder', 'TitansMitt', 'MoonPearl', 'MagicMirror']], + + ["Sick Kid", false, []], + ["Sick Kid", false, [], ['AnyBottle']], + ["Sick Kid", true, ['BottleWithBee']], + ["Sick Kid", true, ['BottleWithFairy']], + ["Sick Kid", true, ['BottleWithRedPotion']], + ["Sick Kid", true, ['BottleWithGreenPotion']], + ["Sick Kid", true, ['BottleWithBluePotion']], + ["Sick Kid", true, ['Bottle']], + ["Sick Kid", true, ['BottleWithGoldBee']], - ["Hobo", true, []], + ["Hobo", true, []], - ["Bombos Tablet", false, []], - ["Bombos Tablet", false, [], ['UpgradedSword']], - ["Bombos Tablet", false, [], ['BookOfMudora']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'TitansMitt']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'PowerGlove', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Hammer']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", false, []], + ["Bombos Tablet", false, [], ['UpgradedSword']], + ["Bombos Tablet", false, [], ['BookOfMudora']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'TitansMitt']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'ProgressiveGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'PowerGlove', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Hammer']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'ProgressiveSword', 'ProgressiveSword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L2Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L3Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + ["Bombos Tablet", true, ['MoonPearl', 'MagicMirror', 'BookOfMudora', 'L4Sword', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - ["King Zora", true, []], + ["King Zora", true, []], - ["Lost Woods Hideout", true, []], - - ["Lumberjack Tree", false, []], - ["Lumberjack Tree", false, [], ['PegasusBoots']], - ["Lumberjack Tree", false, [], ['DefeatAgahnim']], - ["Lumberjack Tree", true, ['PegasusBoots', 'DefeatAgahnim']], - - ["Cave 45", false, []], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Graveyard Ledge", false, []], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Checkerboard Cave", false, []], - ["Checkerboard Cave", false, [], ['Gloves']], - ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Mini Moldorm Cave - NPC", true, []], - - ["Library", false, []], - ["Library", false, [], ['PegasusBoots']], - ["Library", true, ['PegasusBoots']], - - ["Mushroom", true, []], - - ["Potion Shop", false, []], - ["Potion Shop", false, [], ['Mushroom']], - ["Potion Shop", true, ['Mushroom']], - - ["Maze Race", true, []], - - ["Desert Ledge", false, []], - ["Desert Ledge", true, ['BookOfMudora']], - ["Desert Ledge", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Desert Ledge", true, ['Flute', 'MagicMirror', 'TitansMitt']], - - ["Lake Hylia Island", false, []], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'TitansMitt']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], - ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'DefeatAgahnim']], - - ["Sunken Treasure", true, []], - - ["Zora's Ledge", false, []], - ["Zora's Ledge", true, ['Flippers']], - ["Zora's Ledge", true, ['MoonPearl', 'PegasusBoots']], - - ["Flute Spot", false, []], - ["Flute Spot", false, [], ['Shovel']], - ["Flute Spot", true, ['Shovel']], - - ["Waterfall Fairy - Left", false, []], - ["Waterfall Fairy - Left", false, [], ['Flippers', 'MoonPearl']], - ["Waterfall Fairy - Left", true, ['Flippers']], - ["Waterfall Fairy - Left", true, ['MoonPearl']], - - ["Waterfall Fairy - Right", false, []], - ["Waterfall Fairy - Right", false, [], ['Flippers', 'MoonPearl']], - ["Waterfall Fairy - Right", true, ['Flippers']], - ["Waterfall Fairy - Right", true, ['MoonPearl']], - ]; - } + ["Lost Woods Hideout", true, []], + + ["Lumberjack Tree", false, []], + ["Lumberjack Tree", false, [], ['PegasusBoots']], + ["Lumberjack Tree", false, [], ['DefeatAgahnim']], + ["Lumberjack Tree", true, ['PegasusBoots', 'DefeatAgahnim']], + + ["Cave 45", false, []], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Cave 45", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Graveyard Ledge", false, []], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'TitansMitt']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Graveyard Ledge", true, ['MoonPearl', 'MagicMirror', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Checkerboard Cave", false, []], + ["Checkerboard Cave", false, [], ['Gloves']], + ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Checkerboard Cave", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Mini Moldorm Cave - NPC", true, []], + + ["Library", false, []], + ["Library", false, [], ['PegasusBoots']], + ["Library", true, ['PegasusBoots']], + + ["Mushroom", true, []], + + ["Potion Shop", false, []], + ["Potion Shop", false, [], ['Mushroom']], + ["Potion Shop", true, ['Mushroom']], + + ["Maze Race", true, []], + + ["Desert Ledge", false, []], + ["Desert Ledge", true, ['BookOfMudora']], + ["Desert Ledge", true, ['Flute', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Desert Ledge", true, ['Flute', 'MagicMirror', 'TitansMitt']], + + ["Lake Hylia Island", false, []], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'TitansMitt']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'ProgressiveGlove', 'Hammer']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'PowerGlove', 'Hammer']], + ["Lake Hylia Island", true, ['Flippers', 'MoonPearl', 'MagicMirror', 'DefeatAgahnim']], + + ["Sunken Treasure", true, []], + + ["Zora's Ledge", false, []], + ["Zora's Ledge", true, ['Flippers']], + ["Zora's Ledge", true, ['MoonPearl', 'PegasusBoots']], + + ["Flute Spot", false, []], + ["Flute Spot", false, [], ['Shovel']], + ["Flute Spot", true, ['Shovel']], + + ["Waterfall Fairy - Left", false, []], + ["Waterfall Fairy - Left", true, ['Flippers']], + ["Waterfall Fairy - Left", true, ['MoonPearl']], + ["Waterfall Fairy - Left", true, ['PegasusBoots']], + + ["Waterfall Fairy - Right", false, []], + ["Waterfall Fairy - Right", true, ['Flippers']], + ["Waterfall Fairy - Right", true, ['MoonPearl']], + ["Waterfall Fairy - Right", true, ['PegasusBoots']], + ]; + } } diff --git a/tests/OverworldGlitches/MiseryMireTest.php b/tests/OverworldGlitches/MiseryMireTest.php index 70d591b2c..766c1370e 100644 --- a/tests/OverworldGlitches/MiseryMireTest.php +++ b/tests/OverworldGlitches/MiseryMireTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - - $this->world->getLocation("Misery Mire Medallion")->setItem(Item::get('Ether')); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Misery Mire - Big Chest", false, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Main Lobby", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Big Key Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Compass Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Bridge Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Map Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Spike Chest", true, 'BigKeyD6', [], ['BigKeyD6']], - - ["Misery Mire - Boss", false, 'BigKeyD6', [], ['BigKeyD6']], - ]; - } - - public function accessPool() { - return [ - ["Misery Mire - Big Chest", false, []], - ["Misery Mire - Big Chest", false, [], ['MoonPearl']], - ["Misery Mire - Big Chest", false, [], ['BigKeyD6']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Main Lobby", false, []], - ["Misery Mire - Main Lobby", false, [], ['MoonPearl']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Big Key Chest", false, []], - ["Misery Mire - Big Key Chest", false, [], ['MoonPearl']], - ["Misery Mire - Big Key Chest", false, [], ['FireRod', 'Lamp']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Compass Chest", false, []], - ["Misery Mire - Compass Chest", false, [], ['MoonPearl']], - ["Misery Mire - Compass Chest", false, [], ['FireRod', 'Lamp']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Bridge Chest", false, []], - ["Misery Mire - Bridge Chest", false, [], ['MoonPearl']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Map Chest", false, []], - ["Misery Mire - Map Chest", false, [], ['MoonPearl']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ["Misery Mire - Spike Chest", false, []], - ["Misery Mire - Spike Chest", false, [], ['MoonPearl']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'CaneOfByrna']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'Cape']], - ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'Cape']], - - ["Misery Mire - Boss", false, []], - ["Misery Mire - Boss", false, [], ['MoonPearl']], - ["Misery Mire - Boss", false, [], ['Lamp']], - ["Misery Mire - Boss", false, [], ['CaneOfSomaria']], - ["Misery Mire - Boss", false, [], ['BigKeyD6']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L1Sword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], - ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], - - ]; - } +class MiseryMireTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + + $this->world->getLocation("Misery Mire Medallion")->setItem(Item::get('Ether', $this->world)); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Misery Mire - Big Chest", false, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Main Lobby", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Big Key Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Compass Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Bridge Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Map Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Spike Chest", true, 'BigKeyD6', [], ['BigKeyD6']], + + ["Misery Mire - Boss", false, 'BigKeyD6', [], ['BigKeyD6']], + ]; + } + + public function accessPool() + { + return [ + ["Misery Mire - Big Chest", false, []], + ["Misery Mire - Big Chest", false, [], ['MoonPearl']], + ["Misery Mire - Big Chest", false, [], ['BigKeyD6']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Chest", true, ['BigKeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Main Lobby", false, []], + ["Misery Mire - Main Lobby", false, [], ['MoonPearl']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Main Lobby", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Big Key Chest", false, []], + ["Misery Mire - Big Key Chest", false, [], ['MoonPearl']], + ["Misery Mire - Big Key Chest", false, [], ['FireRod', 'Lamp']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Big Key Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Compass Chest", false, []], + ["Misery Mire - Compass Chest", false, [], ['MoonPearl']], + ["Misery Mire - Compass Chest", false, [], ['FireRod', 'Lamp']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'Lamp', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Compass Chest", true, ['KeyD6', 'KeyD6', 'KeyD6', 'FireRod', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Bridge Chest", false, []], + ["Misery Mire - Bridge Chest", false, [], ['MoonPearl']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Bridge Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Map Chest", false, []], + ["Misery Mire - Map Chest", false, [], ['MoonPearl']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Map Chest", true, ['KeyD6', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ["Misery Mire - Spike Chest", false, []], + ["Misery Mire - Spike Chest", false, [], ['MoonPearl']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'CaneOfByrna']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots', 'Cape']], + ["Misery Mire - Spike Chest", true, ['MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot', 'Cape']], + + ["Misery Mire - Boss", false, []], + ["Misery Mire - Boss", false, [], ['MoonPearl']], + ["Misery Mire - Boss", false, [], ['Lamp']], + ["Misery Mire - Boss", false, [], ['CaneOfSomaria']], + ["Misery Mire - Boss", false, [], ['BigKeyD6']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'UncleSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'ProgressiveSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'MasterSword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L3Sword', 'Hookshot']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'PegasusBoots']], + ["Misery Mire - Boss", true, ['KeyD6', 'KeyD6', 'BigKeyD6', 'Lamp', 'CaneOfSomaria', 'MoonPearl', 'Flute', 'TitansMitt', 'Ether', 'L4Sword', 'Hookshot']], + + ]; + } } diff --git a/tests/OverworldGlitches/PalaceOfDarknessTest.php b/tests/OverworldGlitches/PalaceOfDarknessTest.php index 74f998e55..8fdd8480a 100644 --- a/tests/OverworldGlitches/PalaceOfDarknessTest.php +++ b/tests/OverworldGlitches/PalaceOfDarknessTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider entryPool - */ - public function testEntry(bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getRegion('Palace of Darkness') - ->canEnter($this->world->getLocations(), $this->collected)); - } - - public function entryPool() { - return [ - [false, []], - [false, ['MoonPearl']], - ]; - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Palace of Darkness - Big Key Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - The Arena - Ledge", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - The Arena - Bridge", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Big Chest", false, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Compass Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Harmless Hellway", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Stalfos Basement", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Basement - Left", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Basement - Right", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Map Chest", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Maze - Top", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Dark Maze - Bottom", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Shooter Room", true, 'BigKeyD1', [], ['BigKeyD1']], - - ["Palace of Darkness - Boss", false, 'BigKeyD1', [], ['BigKeyD1']], - ]; - } - - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - public function accessPool() { - return [ - ["Palace of Darkness - Big Key Chest", false, []], - ["Palace of Darkness - Big Key Chest", false, [], ['MoonPearl']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - The Arena - Ledge", false, []], - ["Palace of Darkness - The Arena - Ledge", false, [], ['MoonPearl']], - ["Palace of Darkness - The Arena - Ledge", false, [], ['AnyBow']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - The Arena - Ledge", true, ['Bow', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - The Arena - Bridge", false, []], - ["Palace of Darkness - The Arena - Bridge", false, [], ['MoonPearl']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'PowerGlove']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'TitansMitt']], - ["Palace of Darkness - The Arena - Bridge", true, ['Bow', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], - - ["Palace of Darkness - Big Chest", false, []], - ["Palace of Darkness - Big Chest", false, [], ['MoonPearl']], - ["Palace of Darkness - Big Chest", false, [], ['Lamp']], - ["Palace of Darkness - Big Chest", false, [], ['BigKeyD1']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Compass Chest", false, []], - ["Palace of Darkness - Compass Chest", false, [], ['MoonPearl']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Harmless Hellway", false, []], - ["Palace of Darkness - Harmless Hellway", false, [], ['MoonPearl']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Stalfos Basement", false, []], - ["Palace of Darkness - Stalfos Basement", false, [], ['MoonPearl']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'PowerGlove']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'TitansMitt']], - ["Palace of Darkness - Stalfos Basement", true, ['Bow', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Basement - Left", false, []], - ["Palace of Darkness - Dark Basement - Left", false, [], ['MoonPearl']], - ["Palace of Darkness - Dark Basement - Left", false, [], ['Lamp']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Basement - Right", false, []], - ["Palace of Darkness - Dark Basement - Right", false, [], ['MoonPearl']], - ["Palace of Darkness - Dark Basement - Right", false, [], ['Lamp']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Map Chest", false, []], - ["Palace of Darkness - Map Chest", false, [], ['MoonPearl']], - ["Palace of Darkness - Map Chest", false, [], ['AnyBow']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Map Chest", true, ['Bow', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Maze - Top", false, []], - ["Palace of Darkness - Dark Maze - Top", false, [], ['MoonPearl']], - ["Palace of Darkness - Dark Maze - Top", false, [], ['Lamp']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Dark Maze - Bottom", false, []], - ["Palace of Darkness - Dark Maze - Bottom", false, [], ['MoonPearl']], - ["Palace of Darkness - Dark Maze - Bottom", false, [], ['Lamp']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Shooter Room", false, []], - ["Palace of Darkness - Shooter Room", false, [], ['MoonPearl']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'DefeatAgahnim']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'PowerGlove']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'TitansMitt']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'TitansMitt']], - ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - - ["Palace of Darkness - Boss", false, []], - ["Palace of Darkness - Boss", false, [], ['MoonPearl']], - ["Palace of Darkness - Boss", false, [], ['Lamp']], - ["Palace of Darkness - Boss", false, [], ['Hammer']], - ["Palace of Darkness - Boss", false, [], ['AnyBow']], - ["Palace of Darkness - Boss", false, [], ['BigKeyD1']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'DefeatAgahnim']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'PowerGlove']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'TitansMitt']], - ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'Bow', 'ProgressiveGlove']], - ]; - } +class PalaceOfDarknessTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider entryPool + */ + public function testEntry(bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getRegion('Palace of Darkness') + ->canEnter($this->world->getLocations(), $this->collected)); + } + + public function entryPool() + { + return [ + [false, []], + [false, ['MoonPearl']], + ]; + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Palace of Darkness - Big Key Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - The Arena - Ledge", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - The Arena - Bridge", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Big Chest", false, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Compass Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Harmless Hellway", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Stalfos Basement", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Basement - Left", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Basement - Right", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Map Chest", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Maze - Top", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Dark Maze - Bottom", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Shooter Room", true, 'BigKeyD1', [], ['BigKeyD1']], + + ["Palace of Darkness - Boss", false, 'BigKeyD1', [], ['BigKeyD1']], + ]; + } + + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + public function accessPool() + { + return [ + ["Palace of Darkness - Big Key Chest", false, []], + ["Palace of Darkness - Big Key Chest", false, [], ['MoonPearl']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Big Key Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - The Arena - Ledge", false, []], + ["Palace of Darkness - The Arena - Ledge", false, [], ['MoonPearl']], + ["Palace of Darkness - The Arena - Ledge", false, [], ['AnyBow']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - The Arena - Ledge", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - The Arena - Bridge", false, []], + ["Palace of Darkness - The Arena - Bridge", false, [], ['MoonPearl']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'PowerGlove']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'TitansMitt']], + ["Palace of Darkness - The Arena - Bridge", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], + + ["Palace of Darkness - Big Chest", false, []], + ["Palace of Darkness - Big Chest", false, [], ['MoonPearl']], + ["Palace of Darkness - Big Chest", false, [], ['Lamp']], + ["Palace of Darkness - Big Chest", false, [], ['BigKeyD1']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Big Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Compass Chest", false, []], + ["Palace of Darkness - Compass Chest", false, [], ['MoonPearl']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Compass Chest", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Harmless Hellway", false, []], + ["Palace of Darkness - Harmless Hellway", false, [], ['MoonPearl']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Harmless Hellway", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Stalfos Basement", false, []], + ["Palace of Darkness - Stalfos Basement", false, [], ['MoonPearl']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['KeyD1', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'PowerGlove']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'TitansMitt']], + ["Palace of Darkness - Stalfos Basement", true, ['BowAndArrows', 'Hammer', 'MoonPearl', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Basement - Left", false, []], + ["Palace of Darkness - Dark Basement - Left", false, [], ['MoonPearl']], + ["Palace of Darkness - Dark Basement - Left", false, [], ['Lamp']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Left", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Basement - Right", false, []], + ["Palace of Darkness - Dark Basement - Right", false, [], ['MoonPearl']], + ["Palace of Darkness - Dark Basement - Right", false, [], ['Lamp']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Basement - Right", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'Lamp', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Map Chest", false, []], + ["Palace of Darkness - Map Chest", false, [], ['MoonPearl']], + ["Palace of Darkness - Map Chest", false, [], ['AnyBow']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Map Chest", true, ['BowAndArrows', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Maze - Top", false, []], + ["Palace of Darkness - Dark Maze - Top", false, [], ['MoonPearl']], + ["Palace of Darkness - Dark Maze - Top", false, [], ['Lamp']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Top", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Dark Maze - Bottom", false, []], + ["Palace of Darkness - Dark Maze - Bottom", false, [], ['MoonPearl']], + ["Palace of Darkness - Dark Maze - Bottom", false, [], ['Lamp']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'DefeatAgahnim']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Dark Maze - Bottom", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'MoonPearl', 'Lamp', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Shooter Room", false, []], + ["Palace of Darkness - Shooter Room", false, [], ['MoonPearl']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'DefeatAgahnim']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'PowerGlove']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'TitansMitt']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Hammer', 'ProgressiveGlove']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'TitansMitt']], + ["Palace of Darkness - Shooter Room", true, ['MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + + ["Palace of Darkness - Boss", false, []], + ["Palace of Darkness - Boss", false, [], ['MoonPearl']], + ["Palace of Darkness - Boss", false, [], ['Lamp']], + ["Palace of Darkness - Boss", false, [], ['Hammer']], + ["Palace of Darkness - Boss", false, [], ['AnyBow']], + ["Palace of Darkness - Boss", false, [], ['BigKeyD1']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'DefeatAgahnim']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'PowerGlove']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'TitansMitt']], + ["Palace of Darkness - Boss", true, ['KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'KeyD1', 'BigKeyD1', 'MoonPearl', 'Lamp', 'Hammer', 'BowAndArrows', 'ProgressiveGlove']], + ]; + } } diff --git a/tests/OverworldGlitches/SkullWoodsTest.php b/tests/OverworldGlitches/SkullWoodsTest.php index 8309211af..8aad681ad 100644 --- a/tests/OverworldGlitches/SkullWoodsTest.php +++ b/tests/OverworldGlitches/SkullWoodsTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Skull Woods - Big Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Big Key Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Compass Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Map Chest", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Bridge Room", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Pot Prison", true, 'BigKeyD3', [], ['BigKeyD3']], - - ["Skull Woods - Pinball Room", false, 'BigKeyD3', [], ['BigKeyD3']], - ["Skull Woods - Pinball Room", true, 'KeyD3', [], ['KeyD3']], - - ["Skull Woods - Boss", true, 'BigKeyD3', [], ['BigKeyD3']], - ["Skull Woods - Boss", false, 'KeyD3', [], ['KeyD3']], - ]; - } - - public function accessPool() { - return [ - ["Skull Woods - Big Chest", false, []], - ["Skull Woods - Big Chest", false, [], ['BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'TitansMitt', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD3']], - ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD3']], - - ["Skull Woods - Big Key Chest", false, []], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Compass Chest", false, []], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Map Chest", false, []], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Bridge Room", false, []], - ["Skull Woods - Bridge Room", false, [], ['FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'TitansMitt', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod']], - ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod']], - - ["Skull Woods - Pot Prison", false, []], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Pinball Room", false, []], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'TitansMitt']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Skull Woods - Boss", false, []], - ["Skull Woods - Boss", false, [], ['FireRod']], - ["Skull Woods - Boss", false, [], ['AnySword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L1Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'MasterSword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L3Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L4Sword']], - ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'ProgressiveSword']], - ]; - } +class SkullWoodsTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Skull Woods - Big Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Big Key Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Compass Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Map Chest", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Bridge Room", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Pot Prison", true, 'BigKeyD3', [], ['BigKeyD3']], + + ["Skull Woods - Pinball Room", false, 'BigKeyD3', [], ['BigKeyD3']], + ["Skull Woods - Pinball Room", true, 'KeyD3', [], ['KeyD3']], + + ["Skull Woods - Boss", true, 'BigKeyD3', [], ['BigKeyD3']], + ["Skull Woods - Boss", false, 'KeyD3', [], ['KeyD3']], + ]; + } + + public function accessPool() + { + return [ + ["Skull Woods - Big Chest", false, []], + ["Skull Woods - Big Chest", false, [], ['BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'TitansMitt', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD3']], + ["Skull Woods - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD3']], + + ["Skull Woods - Big Key Chest", false, []], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Compass Chest", false, []], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Map Chest", false, []], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Bridge Room", false, []], + ["Skull Woods - Bridge Room", false, [], ['FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'TitansMitt', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod']], + ["Skull Woods - Bridge Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod']], + + ["Skull Woods - Pot Prison", false, []], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Pot Prison", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Pinball Room", false, []], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'TitansMitt']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Skull Woods - Pinball Room", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Skull Woods - Boss", false, []], + ["Skull Woods - Boss", false, [], ['FireRod']], + ["Skull Woods - Boss", false, [], ['AnySword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'TitansMitt', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'PowerGlove', 'Hammer', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'UncleSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'MasterSword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L3Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'L4Sword']], + ["Skull Woods - Boss", true, ['KeyD3', 'KeyD3', 'KeyD3', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'FireRod', 'ProgressiveSword']], + ]; + } } diff --git a/tests/OverworldGlitches/SwampPalaceTest.php b/tests/OverworldGlitches/SwampPalaceTest.php index 82b657f50..51204b1ad 100644 --- a/tests/OverworldGlitches/SwampPalaceTest.php +++ b/tests/OverworldGlitches/SwampPalaceTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Swamp Palace - Entrance", false, 'BigKeyD2', [], ['BigKeyD2']], - ["Swamp Palace - Entrance", true, 'KeyD2', [], ['KeyD2']], - - ["Swamp Palace - Big Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Big Key Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Map Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - West Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Compass Chest", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Flooded Room - Left", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Flooded Room - Right", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Waterfall Room", true, 'BigKeyD2', [], ['BigKeyD2']], - - ["Swamp Palace - Boss", true, 'BigKeyD2', [], ['BigKeyD2']], - ]; - } - - public function accessPool() { - return [ - ["Swamp Palace - Entrance", false, []], - ["Swamp Palace - Entrance", false, [], ['MagicMirror']], - ["Swamp Palace - Entrance", false, [], ['MoonPearl']], - ["Swamp Palace - Entrance", false, [], ['Flippers']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], - - ["Swamp Palace - Big Chest", false, []], - ["Swamp Palace - Big Chest", false, [], ['MagicMirror']], - ["Swamp Palace - Big Chest", false, [], ['MoonPearl']], - ["Swamp Palace - Big Chest", false, [], ['Flippers']], - ["Swamp Palace - Big Chest", false, [], ['Hammer']], - ["Swamp Palace - Big Chest", false, [], ['BigKeyD2']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Big Key Chest", false, []], - ["Swamp Palace - Big Key Chest", false, [], ['MagicMirror']], - ["Swamp Palace - Big Key Chest", false, [], ['MoonPearl']], - ["Swamp Palace - Big Key Chest", false, [], ['Flippers']], - ["Swamp Palace - Big Key Chest", false, [], ['Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Map Chest", false, []], - ["Swamp Palace - Map Chest", false, [], ['MagicMirror']], - ["Swamp Palace - Map Chest", false, [], ['MoonPearl']], - ["Swamp Palace - Map Chest", false, [], ['Flippers']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], - - ["Swamp Palace - West Chest", false, []], - ["Swamp Palace - West Chest", false, [], ['MagicMirror']], - ["Swamp Palace - West Chest", false, [], ['MoonPearl']], - ["Swamp Palace - West Chest", false, [], ['Flippers']], - ["Swamp Palace - West Chest", false, [], ['Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Compass Chest", false, []], - ["Swamp Palace - Compass Chest", false, [], ['MagicMirror']], - ["Swamp Palace - Compass Chest", false, [], ['MoonPearl']], - ["Swamp Palace - Compass Chest", false, [], ['Flippers']], - ["Swamp Palace - Compass Chest", false, [], ['Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], - ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], - - ["Swamp Palace - Flooded Room - Left", false, []], - ["Swamp Palace - Flooded Room - Left", false, [], ['MagicMirror']], - ["Swamp Palace - Flooded Room - Left", false, [], ['MoonPearl']], - ["Swamp Palace - Flooded Room - Left", false, [], ['Flippers']], - ["Swamp Palace - Flooded Room - Left", false, [], ['Hammer']], - ["Swamp Palace - Flooded Room - Left", false, [], ['Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Flooded Room - Right", false, []], - ["Swamp Palace - Flooded Room - Right", false, [], ['MagicMirror']], - ["Swamp Palace - Flooded Room - Right", false, [], ['MoonPearl']], - ["Swamp Palace - Flooded Room - Right", false, [], ['Flippers']], - ["Swamp Palace - Flooded Room - Right", false, [], ['Hammer']], - ["Swamp Palace - Flooded Room - Right", false, [], ['Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Waterfall Room", false, []], - ["Swamp Palace - Waterfall Room", false, [], ['MagicMirror']], - ["Swamp Palace - Waterfall Room", false, [], ['MoonPearl']], - ["Swamp Palace - Waterfall Room", false, [], ['Flippers']], - ["Swamp Palace - Waterfall Room", false, [], ['Hammer']], - ["Swamp Palace - Waterfall Room", false, [], ['Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - - ["Swamp Palace - Boss", false, []], - ["Swamp Palace - Boss", false, [], ['MagicMirror']], - ["Swamp Palace - Boss", false, [], ['MoonPearl']], - ["Swamp Palace - Boss", false, [], ['Flippers']], - ["Swamp Palace - Boss", false, [], ['Hammer']], - ["Swamp Palace - Boss", false, [], ['Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], - ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ]; - } +class SwampPalaceTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Swamp Palace - Entrance", false, 'BigKeyD2', [], ['BigKeyD2']], + ["Swamp Palace - Entrance", true, 'KeyD2', [], ['KeyD2']], + + ["Swamp Palace - Big Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Big Key Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Map Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - West Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Compass Chest", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Flooded Room - Left", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Flooded Room - Right", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Waterfall Room", true, 'BigKeyD2', [], ['BigKeyD2']], + + ["Swamp Palace - Boss", true, 'BigKeyD2', [], ['BigKeyD2']], + ]; + } + + public function accessPool() + { + return [ + ["Swamp Palace - Entrance", false, []], + ["Swamp Palace - Entrance", false, [], ['MagicMirror']], + ["Swamp Palace - Entrance", false, [], ['MoonPearl']], + ["Swamp Palace - Entrance", false, [], ['Flippers']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + ["Swamp Palace - Entrance", true, ['MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], + + ["Swamp Palace - Big Chest", false, []], + ["Swamp Palace - Big Chest", false, [], ['MagicMirror']], + ["Swamp Palace - Big Chest", false, [], ['MoonPearl']], + ["Swamp Palace - Big Chest", false, [], ['Flippers']], + ["Swamp Palace - Big Chest", false, [], ['Hammer']], + ["Swamp Palace - Big Chest", false, [], ['BigKeyD2']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Big Chest", true, ['BigKeyD2', 'KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Big Key Chest", false, []], + ["Swamp Palace - Big Key Chest", false, [], ['MagicMirror']], + ["Swamp Palace - Big Key Chest", false, [], ['MoonPearl']], + ["Swamp Palace - Big Key Chest", false, [], ['Flippers']], + ["Swamp Palace - Big Key Chest", false, [], ['Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Big Key Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Map Chest", false, []], + ["Swamp Palace - Map Chest", false, [], ['MagicMirror']], + ["Swamp Palace - Map Chest", false, [], ['MoonPearl']], + ["Swamp Palace - Map Chest", false, [], ['Flippers']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + ["Swamp Palace - Map Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hookshot']], + + ["Swamp Palace - West Chest", false, []], + ["Swamp Palace - West Chest", false, [], ['MagicMirror']], + ["Swamp Palace - West Chest", false, [], ['MoonPearl']], + ["Swamp Palace - West Chest", false, [], ['Flippers']], + ["Swamp Palace - West Chest", false, [], ['Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - West Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Compass Chest", false, []], + ["Swamp Palace - Compass Chest", false, [], ['MagicMirror']], + ["Swamp Palace - Compass Chest", false, [], ['MoonPearl']], + ["Swamp Palace - Compass Chest", false, [], ['Flippers']], + ["Swamp Palace - Compass Chest", false, [], ['Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer']], + ["Swamp Palace - Compass Chest", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer']], + + ["Swamp Palace - Flooded Room - Left", false, []], + ["Swamp Palace - Flooded Room - Left", false, [], ['MagicMirror']], + ["Swamp Palace - Flooded Room - Left", false, [], ['MoonPearl']], + ["Swamp Palace - Flooded Room - Left", false, [], ['Flippers']], + ["Swamp Palace - Flooded Room - Left", false, [], ['Hammer']], + ["Swamp Palace - Flooded Room - Left", false, [], ['Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Left", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Flooded Room - Right", false, []], + ["Swamp Palace - Flooded Room - Right", false, [], ['MagicMirror']], + ["Swamp Palace - Flooded Room - Right", false, [], ['MoonPearl']], + ["Swamp Palace - Flooded Room - Right", false, [], ['Flippers']], + ["Swamp Palace - Flooded Room - Right", false, [], ['Hammer']], + ["Swamp Palace - Flooded Room - Right", false, [], ['Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Flooded Room - Right", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Waterfall Room", false, []], + ["Swamp Palace - Waterfall Room", false, [], ['MagicMirror']], + ["Swamp Palace - Waterfall Room", false, [], ['MoonPearl']], + ["Swamp Palace - Waterfall Room", false, [], ['Flippers']], + ["Swamp Palace - Waterfall Room", false, [], ['Hammer']], + ["Swamp Palace - Waterfall Room", false, [], ['Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Waterfall Room", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + + ["Swamp Palace - Boss", false, []], + ["Swamp Palace - Boss", false, [], ['MagicMirror']], + ["Swamp Palace - Boss", false, [], ['MoonPearl']], + ["Swamp Palace - Boss", false, [], ['Flippers']], + ["Swamp Palace - Boss", false, [], ['Hammer']], + ["Swamp Palace - Boss", false, [], ['Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'TitansMitt', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'ProgressiveGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'PowerGlove', 'Hammer', 'Hookshot']], + ["Swamp Palace - Boss", true, ['KeyD2', 'MagicMirror', 'MoonPearl', 'Flippers', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ]; + } } diff --git a/tests/OverworldGlitches/ThievesTownTest.php b/tests/OverworldGlitches/ThievesTownTest.php index 7677137fd..ccc7f5dab 100644 --- a/tests/OverworldGlitches/ThievesTownTest.php +++ b/tests/OverworldGlitches/ThievesTownTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - - - public function fillPool() { - return [ - ["Thieves' Town - Attic", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Attic", false, 'KeyD4', [], ['KeyD4']], - - ["Thieves' Town - Big Key Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Map Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Compass Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Ambush Chest", true, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Big Chest", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Big Chest", true, 'KeyD4', [], ['KeyD4']], - - ["Thieves' Town - Blind's Cell", false, 'BigKeyD4', [], ['BigKeyD4']], - - ["Thieves' Town - Boss", false, 'BigKeyD4', [], ['BigKeyD4']], - ["Thieves' Town - Boss", false, 'KeyD4', [], ['KeyD4']], - ]; - } - - public function accessPool() { - return [ - ["Thieves' Town - Attic", false, []], - ["Thieves' Town - Attic", false, [], ['MoonPearl']], - ["Thieves' Town - Attic", false, [], ['BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'TitansMitt', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'KeyD4', 'BigKeyD4']], - - ["Thieves' Town - Big Key Chest", false, []], - ["Thieves' Town - Big Key Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Map Chest", false, []], - ["Thieves' Town - Map Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Compass Chest", false, []], - ["Thieves' Town - Compass Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Ambush Chest", false, []], - ["Thieves' Town - Ambush Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'TitansMitt']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], - ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], - - ["Thieves' Town - Big Chest", false, []], - ["Thieves' Town - Big Chest", false, [], ['MoonPearl']], - ["Thieves' Town - Big Chest", false, [], ['BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'TitansMitt', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], - - ["Thieves' Town - Blind's Cell", false, []], - ["Thieves' Town - Blind's Cell", false, [], ['MoonPearl']], - ["Thieves' Town - Blind's Cell", false, [], ['BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'TitansMitt', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4']], - - ["Thieves' Town - Boss", false, []], - ["Thieves' Town - Boss", false, [], ['MoonPearl']], - ["Thieves' Town - Boss", false, [], ['BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'Hammer']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L1Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'MasterSword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L3Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L4Sword']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], - ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'Hammer']], - ]; - } +class ThievesTownTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + + + public function fillPool() + { + return [ + ["Thieves' Town - Attic", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Attic", false, 'KeyD4', [], ['KeyD4']], + + ["Thieves' Town - Big Key Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Map Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Compass Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Ambush Chest", true, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Big Chest", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Big Chest", true, 'KeyD4', [], ['KeyD4']], + + ["Thieves' Town - Blind's Cell", false, 'BigKeyD4', [], ['BigKeyD4']], + + ["Thieves' Town - Boss", false, 'BigKeyD4', [], ['BigKeyD4']], + ["Thieves' Town - Boss", false, 'KeyD4', [], ['KeyD4']], + ]; + } + + public function accessPool() + { + return [ + ["Thieves' Town - Attic", false, []], + ["Thieves' Town - Attic", false, [], ['MoonPearl']], + ["Thieves' Town - Attic", false, [], ['BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'TitansMitt', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Attic", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'KeyD4', 'BigKeyD4']], + + ["Thieves' Town - Big Key Chest", false, []], + ["Thieves' Town - Big Key Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Big Key Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Map Chest", false, []], + ["Thieves' Town - Map Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Map Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Compass Chest", false, []], + ["Thieves' Town - Compass Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Compass Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Ambush Chest", false, []], + ["Thieves' Town - Ambush Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'TitansMitt']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot']], + ["Thieves' Town - Ambush Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot']], + + ["Thieves' Town - Big Chest", false, []], + ["Thieves' Town - Big Chest", false, [], ['MoonPearl']], + ["Thieves' Town - Big Chest", false, [], ['BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'TitansMitt', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + ["Thieves' Town - Big Chest", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hammer', 'Hookshot', 'KeyD4', 'BigKeyD4']], + + ["Thieves' Town - Blind's Cell", false, []], + ["Thieves' Town - Blind's Cell", false, [], ['MoonPearl']], + ["Thieves' Town - Blind's Cell", false, [], ['BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'TitansMitt', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Blind's Cell", true, ['MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4']], + + ["Thieves' Town - Boss", false, []], + ["Thieves' Town - Boss", false, [], ['MoonPearl']], + ["Thieves' Town - Boss", false, [], ['BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'PowerGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Hammer', 'Hookshot', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'Hammer', 'BigKeyD4']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'TitansMitt', 'BigKeyD4', 'Hammer']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'ProgressiveGlove', 'ProgressiveGlove', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'ProgressiveGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'PowerGlove', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'ProgressiveSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'UncleSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'MasterSword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L3Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'L4Sword']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfByrna']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'CaneOfSomaria']], + ["Thieves' Town - Boss", true, ['KeyD4', 'MoonPearl', 'DefeatAgahnim', 'Flippers', 'Hookshot', 'BigKeyD4', 'Hammer']], + ]; + } } diff --git a/tests/OverworldGlitches/TowerOfHeraTest.php b/tests/OverworldGlitches/TowerOfHeraTest.php index 125fad33b..b84511137 100644 --- a/tests/OverworldGlitches/TowerOfHeraTest.php +++ b/tests/OverworldGlitches/TowerOfHeraTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - // Entry - public function testCanEnterWithEverything() { - $this->assertTrue($this->world->getRegion('Tower of Hera')->canEnter($this->world->getLocations(), $this->allItems())); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * @param array $keys - * @param string $big_key - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - - public function fillPool() { - return [ - ["Tower of Hera - Big Key Chest", true, 'BigKeyP3', [], ['BigKeyP3']], - ["Tower of Hera - Big Key Chest", true, 'KeyP3', [], ['KeyP3']], - - ["Tower of Hera - Basement Cage", true, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Map Chest", true, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Compass Chest", false, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Big Chest", false, 'BigKeyP3', [], ['BigKeyP3']], - - ["Tower of Hera - Boss", false, 'BigKeyP3', [], ['BigKeyP3']], - ]; - } - - public function accessPool() { - return [ - ["Tower of Hera - Big Key Chest", false, []], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'Hookshot', 'Hammer', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'MagicMirror', 'KeyP3']], - ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], - - ["Tower of Hera - Basement Cage", false, []], - ["Tower of Hera - Basement Cage", true, ['Flute', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Basement Cage", true, ['Flute', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], - - ["Tower of Hera - Map Chest", false, []], - ["Tower of Hera - Map Chest", true, ['Flute', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror']], - ["Tower of Hera - Map Chest", true, ['Flute', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], - ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], - - ["Tower of Hera - Compass Chest", false, []], - ["Tower of Hera - Compass Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - - ["Tower of Hera - Big Chest", false, []], - ["Tower of Hera - Big Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - - ["Tower of Hera - Boss", false, []], - ["Tower of Hera - Boss", false, [], ['AnySword', 'Hammer']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L1Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], - ["Tower of Hera - Boss", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], - ]; - } +class TowerOfHeraTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + // Entry + public function testCanEnterWithEverything() + { + $this->assertTrue($this->world->getRegion('Tower of Hera')->canEnter($this->world->getLocations(), $this->allItems())); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * @param array $keys + * @param string $big_key + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + + public function fillPool() + { + return [ + ["Tower of Hera - Big Key Chest", true, 'BigKeyP3', [], ['BigKeyP3']], + ["Tower of Hera - Big Key Chest", true, 'KeyP3', [], ['KeyP3']], + + ["Tower of Hera - Basement Cage", true, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Map Chest", true, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Compass Chest", false, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Big Chest", false, 'BigKeyP3', [], ['BigKeyP3']], + + ["Tower of Hera - Boss", false, 'BigKeyP3', [], ['BigKeyP3']], + ]; + } + + public function accessPool() + { + return [ + ["Tower of Hera - Big Key Chest", false, []], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'ProgressiveGlove', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'PowerGlove', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['Lamp', 'TitansMitt', 'Hookshot', 'Hammer', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'MagicMirror', 'KeyP3']], + ["Tower of Hera - Big Key Chest", true, ['FireRod', 'Flute', 'Hookshot', 'Hammer', 'KeyP3']], + + ["Tower of Hera - Basement Cage", false, []], + ["Tower of Hera - Basement Cage", true, ['Flute', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Basement Cage", true, ['Flute', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Basement Cage", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], + + ["Tower of Hera - Map Chest", false, []], + ["Tower of Hera - Map Chest", true, ['Flute', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror']], + ["Tower of Hera - Map Chest", true, ['Flute', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer']], + ["Tower of Hera - Map Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer']], + + ["Tower of Hera - Compass Chest", false, []], + ["Tower of Hera - Compass Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Compass Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + + ["Tower of Hera - Big Chest", false, []], + ["Tower of Hera - Big Chest", true, ['Flute', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Big Chest", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + + ["Tower of Hera - Boss", false, []], + ["Tower of Hera - Boss", false, [], ['AnySword', 'Hammer']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['Flute', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'UncleSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'MasterSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'ProgressiveSword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L3Sword']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'MagicMirror', 'BigKeyP3', 'L4Sword']], + ["Tower of Hera - Boss", true, ['Flute', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['ProgressiveGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['PowerGlove', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ["Tower of Hera - Boss", true, ['TitansMitt', 'Lamp', 'Hookshot', 'Hammer', 'BigKeyP3']], + ]; + } } diff --git a/tests/OverworldGlitches/TurtleRockTest.php b/tests/OverworldGlitches/TurtleRockTest.php index dbc5ce14e..c70213897 100644 --- a/tests/OverworldGlitches/TurtleRockTest.php +++ b/tests/OverworldGlitches/TurtleRockTest.php @@ -1,4 +1,6 @@ -world = World::factory('standard', 'test_rules', 'OverworldGlitches'); - - $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get('Quake')); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - /** - * @param string $location - * @param bool $access - * @param array $items - * @param array $except - * - * @dataProvider accessPool - */ - public function testLocation(string $location, bool $access, array $items, array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->canAccess($this->collected)); - } - - /** - * @param string $location - * @param bool $access - * @param string $item - * @param array $items - * @param array $except - * - * @dataProvider fillPool - */ - public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) { - if (count($except)) { - $this->collected = $this->allItemsExcept($except); - } - - $this->addCollected($items); - - $this->assertEquals($access, $this->world->getLocation($location) - ->fill(Item::get($item), $this->collected)); - } - - public function fillPool() { - return [ - ["Turtle Rock - Chain Chomps", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Compass Chest", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Roller Room - Left", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Roller Room - Right", true, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Big Chest", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Big Key Chest", true, 'BigKeyD7', ['KeyD7', 'KeyD7'], ['BigKeyD7']], - - ["Turtle Rock - Crystaroller Room", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Left", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Right", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Left", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Right", false, 'BigKeyD7', [], ['BigKeyD7']], - - ["Turtle Rock - Boss", false, 'BigKeyD7', [], ['BigKeyD7']], - ["Turtle Rock - Boss", false, 'KeyD7', [], ['KeyD7']], - ]; - } - - public function accessPool() { - return [ - ["Turtle Rock - Chain Chomps", false, []], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], - - ["Turtle Rock - Compass Chest", false, []], - ["Turtle Rock - Compass Chest", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], - - ["Turtle Rock - Roller Room - Left", false, []], - ["Turtle Rock - Roller Room - Left", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Roller Room - Left", false, [], ['FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - - ["Turtle Rock - Roller Room - Right", false, []], - ["Turtle Rock - Roller Room - Right", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Roller Room - Right", false, [], ['FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], - - ["Turtle Rock - Big Chest", false, []], - ["Turtle Rock - Big Chest", false, [], ['BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Big Key Chest", false, []], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], - - ["Turtle Rock - Crystaroller Room", false, []], - ["Turtle Rock - Crystaroller Room", false, [], ['BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Left", false, []], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['Lamp']], - ["Turtle Rock - Eye Bridge - Bottom Left", false, [], ['BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Bottom Right", false, []], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['Lamp']], - ["Turtle Rock - Eye Bridge - Bottom Right", false, [], ['BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Left", false, []], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['Lamp']], - ["Turtle Rock - Eye Bridge - Top Left", false, [], ['BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Eye Bridge - Top Right", false, []], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['Lamp']], - ["Turtle Rock - Eye Bridge - Top Right", false, [], ['BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - - ["Turtle Rock - Boss", false, []], - ["Turtle Rock - Boss", false, [], ['CaneOfSomaria']], - ["Turtle Rock - Boss", false, [], ['IceRod']], - ["Turtle Rock - Boss", false, [], ['FireRod']], - ["Turtle Rock - Boss", false, [], ['Lamp']], - ["Turtle Rock - Boss", false, [], ['BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'L1Sword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], - ]; - } +class TurtleRockTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'OverworldGlitches']); + + $this->world->getLocation("Turtle Rock Medallion")->setItem(Item::get('Quake', $this->world)); + $this->addCollected(['RescueZelda']); + $this->collected->setChecksForWorld($this->world->id); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + /** + * @param string $location + * @param bool $access + * @param array $items + * @param array $except + * + * @dataProvider accessPool + */ + public function testLocation(string $location, bool $access, array $items, array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->canAccess($this->collected)); + } + + /** + * @param string $location + * @param bool $access + * @param string $item + * @param array $items + * @param array $except + * + * @dataProvider fillPool + */ + public function testFillLocation(string $location, bool $access, string $item, array $items = [], array $except = []) + { + if (count($except)) { + $this->collected = $this->allItemsExcept($except); + } + + $this->addCollected($items); + + $this->assertEquals($access, $this->world->getLocation($location) + ->fill(Item::get($item, $this->world), $this->collected)); + } + + public function fillPool() + { + return [ + ["Turtle Rock - Chain Chomps", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Compass Chest", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Roller Room - Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Roller Room - Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Big Chest", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Big Key Chest", true, 'BigKeyD7', ['KeyD7', 'KeyD7'], ['BigKeyD7']], + + ["Turtle Rock - Crystaroller Room", false, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Left", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Right", true, 'BigKeyD7', [], ['BigKeyD7']], + + ["Turtle Rock - Boss", false, 'BigKeyD7', [], ['BigKeyD7']], + ["Turtle Rock - Boss", false, 'KeyD7', [], ['KeyD7']], + ]; + } + + public function accessPool() + { + return [ + ["Turtle Rock - Chain Chomps", false, []], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + ["Turtle Rock - Chain Chomps", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7']], + + ["Turtle Rock - Compass Chest", false, []], + ["Turtle Rock - Compass Chest", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + ["Turtle Rock - Compass Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria']], + + ["Turtle Rock - Roller Room - Left", false, []], + ["Turtle Rock - Roller Room - Left", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Roller Room - Left", false, [], ['FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Left", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + + ["Turtle Rock - Roller Room - Right", false, []], + ["Turtle Rock - Roller Room - Right", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Roller Room - Right", false, [], ['FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + ["Turtle Rock - Roller Room - Right", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'FireRod']], + + ["Turtle Rock - Big Chest", false, []], + ["Turtle Rock - Big Chest", false, [], ['BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Big Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Big Key Chest", false, []], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + ["Turtle Rock - Big Key Chest", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7']], + + ["Turtle Rock - Crystaroller Room", false, []], + ["Turtle Rock - Crystaroller Room", false, [], ['BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Flute', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Crystaroller Room", true, ['Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Left", false, []], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Bottom Right", false, []], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Bottom Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Left", false, []], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Left", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Eye Bridge - Top Right", false, []], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'Cape', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'CaneOfByrna', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'MirrorShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Eye Bridge - Top Right", true, ['Lamp', 'ProgressiveShield', 'ProgressiveShield', 'ProgressiveShield', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + + ["Turtle Rock - Boss", false, []], + ["Turtle Rock - Boss", false, [], ['CaneOfSomaria']], + ["Turtle Rock - Boss", false, [], ['IceRod']], + ["Turtle Rock - Boss", false, [], ['FireRod']], + ["Turtle Rock - Boss", false, [], ['Lamp']], + ["Turtle Rock - Boss", false, [], ['BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'MagicMirror', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'UncleSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ["Turtle Rock - Boss", true, ['IceRod', 'FireRod', 'Lamp', 'Hookshot', 'MoonPearl', 'TitansMitt', 'Hammer', 'Quake', 'ProgressiveSword', 'CaneOfSomaria', 'KeyD7', 'KeyD7', 'KeyD7', 'KeyD7', 'BigKeyD7']], + ]; + } } diff --git a/tests/RandomizerTest.php b/tests/RandomizerTest.php index 72f51e844..f3484692d 100644 --- a/tests/RandomizerTest.php +++ b/tests/RandomizerTest.php @@ -1,115 +1,125 @@ randomizer = new Randomizer('test_rules'); - } +class RandomizerTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'accessibility' => 'full']); + $this->randomizer = new Randomizer([$this->world]); + } - public function tearDown() { - parent::tearDown(); - unset($this->randomizer); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->randomizer); + unset($this->world); + } - /** - * @group crystals - */ - public function testCrystalsNotRandomizedByConfigCrossWorld() { - Config::set('alttp.test_rules.prize.crossWorld', true); - Config::set('alttp.test_rules.prize.shuffleCrystals', false); + /** + * @group crystals + */ + public function testCrystalsNotRandomizedByConfigCrossWorld() + { + Config::set('prize.crossWorld', true); + Config::set('prize.shuffleCrystals', false); - $this->randomizer->makeSeed(1337); - $this->assertEquals([ - Item::get('Crystal1'), - Item::get('Crystal2'), - Item::get('Crystal3'), - Item::get('Crystal4'), - Item::get('Crystal5'), - Item::get('Crystal6'), - Item::get('Crystal7'), - ], [ - $this->randomizer->getWorld()->getLocation("Palace of Darkness - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Swamp Palace - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Skull Woods - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Thieves' Town - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Ice Palace - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Misery Mire - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Turtle Rock - Prize")->getItem(), - ]); - } + $this->randomizer->randomize(); + $this->assertEquals([ + Item::get('Crystal1', $this->world), + Item::get('Crystal2', $this->world), + Item::get('Crystal3', $this->world), + Item::get('Crystal4', $this->world), + Item::get('Crystal5', $this->world), + Item::get('Crystal6', $this->world), + Item::get('Crystal7', $this->world), + ], [ + $this->world->getLocation("Palace of Darkness - Prize")->getItem(), + $this->world->getLocation("Swamp Palace - Prize")->getItem(), + $this->world->getLocation("Skull Woods - Prize")->getItem(), + $this->world->getLocation("Thieves' Town - Prize")->getItem(), + $this->world->getLocation("Ice Palace - Prize")->getItem(), + $this->world->getLocation("Misery Mire - Prize")->getItem(), + $this->world->getLocation("Turtle Rock - Prize")->getItem(), + ]); + } - /** - * @group crystals - */ - public function testCrystalsNotRandomizedByConfigNoCrossWorld() { - Config::set('alttp.test_rules.prize.crossWorld', false); - Config::set('alttp.test_rules.prize.shuffleCrystals', false); + /** + * @group crystals + */ + public function testCrystalsNotRandomizedByConfigNoCrossWorld() + { + Config::set('prize.crossWorld', false); + Config::set('prize.shuffleCrystals', false); - $this->randomizer->makeSeed(1337); + $this->randomizer->randomize(); - $this->assertEquals([ - Item::get('Crystal1'), - Item::get('Crystal2'), - Item::get('Crystal3'), - Item::get('Crystal4'), - Item::get('Crystal5'), - Item::get('Crystal6'), - Item::get('Crystal7'), - ], [ - $this->randomizer->getWorld()->getLocation("Palace of Darkness - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Swamp Palace - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Skull Woods - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Thieves' Town - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Ice Palace - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Misery Mire - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Turtle Rock - Prize")->getItem(), - ]); - } + $this->assertEquals([ + Item::get('Crystal1', $this->world), + Item::get('Crystal2', $this->world), + Item::get('Crystal3', $this->world), + Item::get('Crystal4', $this->world), + Item::get('Crystal5', $this->world), + Item::get('Crystal6', $this->world), + Item::get('Crystal7', $this->world), + ], [ + $this->world->getLocation("Palace of Darkness - Prize")->getItem(), + $this->world->getLocation("Swamp Palace - Prize")->getItem(), + $this->world->getLocation("Skull Woods - Prize")->getItem(), + $this->world->getLocation("Thieves' Town - Prize")->getItem(), + $this->world->getLocation("Ice Palace - Prize")->getItem(), + $this->world->getLocation("Misery Mire - Prize")->getItem(), + $this->world->getLocation("Turtle Rock - Prize")->getItem(), + ]); + } - /** - * @group pendants - */ - public function testPendantsNotRandomizedByConfigNoCrossWorld() { - Config::set('alttp.test_rules.prize.crossWorld', false); - Config::set('alttp.test_rules.prize.shufflePendants', false); + /** + * @group pendants + */ + public function testPendantsNotRandomizedByConfigNoCrossWorld() + { + Config::set('prize.crossWorld', false); + Config::set('prize.shufflePendants', false); - $this->randomizer->makeSeed(1337); + $this->randomizer->randomize(); - $this->assertEquals([ - Item::get('PendantOfCourage'), - Item::get('PendantOfPower'), - Item::get('PendantOfWisdom'), - ], [ - $this->randomizer->getWorld()->getLocation("Eastern Palace - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Desert Palace - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Tower of Hera - Prize")->getItem(), - ]); - } + $this->assertEquals([ + Item::get('PendantOfCourage', $this->world), + Item::get('PendantOfPower', $this->world), + Item::get('PendantOfWisdom', $this->world), + ], [ + $this->world->getLocation("Eastern Palace - Prize")->getItem(), + $this->world->getLocation("Desert Palace - Prize")->getItem(), + $this->world->getLocation("Tower of Hera - Prize")->getItem(), + ]); + } - /** - * @group pendants - */ - public function testPendantsNotRandomizedByConfigCrossWorld() { - Config::set('alttp.test_rules.prize.crossWorld', true); - Config::set('alttp.test_rules.prize.shufflePendants', false); + /** + * @group pendants + */ + public function testPendantsNotRandomizedByConfigCrossWorld() + { + Config::set('prize.crossWorld', true); + Config::set('prize.shufflePendants', false); - $this->randomizer->makeSeed(1337); + $this->randomizer->randomize(); - $this->assertEquals([ - Item::get('PendantOfCourage'), - Item::get('PendantOfPower'), - Item::get('PendantOfWisdom'), - ], [ - $this->randomizer->getWorld()->getLocation("Eastern Palace - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Desert Palace - Prize")->getItem(), - $this->randomizer->getWorld()->getLocation("Tower of Hera - Prize")->getItem(), - ]); - } + $this->assertEquals([ + Item::get('PendantOfCourage', $this->world), + Item::get('PendantOfPower', $this->world), + Item::get('PendantOfWisdom', $this->world), + ], [ + $this->world->getLocation("Eastern Palace - Prize")->getItem(), + $this->world->getLocation("Desert Palace - Prize")->getItem(), + $this->world->getLocation("Tower of Hera - Prize")->getItem(), + ]); + } } diff --git a/tests/RegionTest.php b/tests/RegionTest.php index ed04163e7..8b5bd2b5b 100644 --- a/tests/RegionTest.php +++ b/tests/RegionTest.php @@ -4,124 +4,129 @@ use ALttP\Region; use ALttP\World; -class RegionTest extends TestCase { - public function setUp() { - parent::setUp(); +class RegionTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); - $this->region = new Region(World::factory('standard', 'test_rules', 'NoGlitches')); - } + $this->region = new Region(World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches'])); + } - public function tearDown() { - parent::tearDown(); - unset($this->region); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->region); + } - /** - * @dataProvider dungeonItemsPool - */ - public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) { - if ($config) { - config(["alttp.test_rules.$config" => $free]); - } + /** + * @dataProvider dungeonItemsPool + */ + public function testRegionLockedItems(bool $access, string $item_name, bool $free = null, string $config = null) + { + if ($config) { + config([$config => $free]); + } - $this->assertEquals($access, $this->region->canFill(Item::get($item_name))); - } + $this->assertEquals($access, $this->region->canFill(Item::get($item_name, $this->region->getWorld()))); + } - public function dungeonItemsPool() { - return [ - [false, 'Key'], - [false, 'KeyH2'], - [false, 'KeyH1'], - [false, 'KeyP1'], - [false, 'KeyP2'], - [false, 'KeyA1'], - [false, 'KeyD2'], - [false, 'KeyD1'], - [false, 'KeyD6'], - [false, 'KeyD3'], - [false, 'KeyD5'], - [false, 'KeyP3'], - [false, 'KeyD4'], - [false, 'KeyD7'], - [false, 'KeyA2'], + public function dungeonItemsPool() + { + return [ + [false, 'Key'], + [false, 'KeyH2'], + [false, 'KeyH1'], + [false, 'KeyP1'], + [false, 'KeyP2'], + [false, 'KeyA1'], + [false, 'KeyD2'], + [false, 'KeyD1'], + [false, 'KeyD6'], + [false, 'KeyD3'], + [false, 'KeyD5'], + [false, 'KeyP3'], + [false, 'KeyD4'], + [false, 'KeyD7'], + [false, 'KeyA2'], - [false, 'BigKey'], - [false, 'BigKeyH2'], - [false, 'BigKeyH1'], - [false, 'BigKeyP1'], - [false, 'BigKeyP2'], - [false, 'BigKeyA1'], - [false, 'BigKeyD2'], - [false, 'BigKeyD1'], - [false, 'BigKeyD6'], - [false, 'BigKeyD3'], - [false, 'BigKeyD5'], - [false, 'BigKeyP3'], - [false, 'BigKeyD4'], - [false, 'BigKeyD7'], - [false, 'BigKeyA2'], + [false, 'BigKey'], + [false, 'BigKeyH2'], + [false, 'BigKeyH1'], + [false, 'BigKeyP1'], + [false, 'BigKeyP2'], + [false, 'BigKeyA1'], + [false, 'BigKeyD2'], + [false, 'BigKeyD1'], + [false, 'BigKeyD6'], + [false, 'BigKeyD3'], + [false, 'BigKeyD5'], + [false, 'BigKeyP3'], + [false, 'BigKeyD4'], + [false, 'BigKeyD7'], + [false, 'BigKeyA2'], - [false, 'Map', false, 'region.wildMaps'], - [true, 'Map', true, 'region.wildMaps'], - [false, 'MapH2', false, 'region.wildMaps'], - [true, 'MapH2', true, 'region.wildMaps'], - [false, 'MapH1', false, 'region.wildMaps'], - [true, 'MapH1', true, 'region.wildMaps'], - [false, 'MapP1', false, 'region.wildMaps'], - [true, 'MapP1', true, 'region.wildMaps'], - [false, 'MapP2', false, 'region.wildMaps'], - [true, 'MapP2', true, 'region.wildMaps'], - [false, 'MapA1', false, 'region.wildMaps'], - [true, 'MapA1', true, 'region.wildMaps'], - [false, 'MapD2', false, 'region.wildMaps'], - [true, 'MapD2', true, 'region.wildMaps'], - [false, 'MapD1', false, 'region.wildMaps'], - [true, 'MapD1', true, 'region.wildMaps'], - [false, 'MapD6', false, 'region.wildMaps'], - [true, 'MapD6', true, 'region.wildMaps'], - [false, 'MapD3', false, 'region.wildMaps'], - [true, 'MapD3', true, 'region.wildMaps'], - [false, 'MapD5', false, 'region.wildMaps'], - [true, 'MapD5', true, 'region.wildMaps'], - [false, 'MapP3', false, 'region.wildMaps'], - [true, 'MapP3', true, 'region.wildMaps'], - [false, 'MapD4', false, 'region.wildMaps'], - [true, 'MapD4', true, 'region.wildMaps'], - [false, 'MapD7', false, 'region.wildMaps'], - [true, 'MapD7', true, 'region.wildMaps'], - [false, 'MapA2', false, 'region.wildMaps'], - [true, 'MapA2', true, 'region.wildMaps'], + [false, 'Map', false, 'region.wildMaps'], + [true, 'Map', true, 'region.wildMaps'], + [false, 'MapH2', false, 'region.wildMaps'], + [true, 'MapH2', true, 'region.wildMaps'], + [false, 'MapH1', false, 'region.wildMaps'], + [true, 'MapH1', true, 'region.wildMaps'], + [false, 'MapP1', false, 'region.wildMaps'], + [true, 'MapP1', true, 'region.wildMaps'], + [false, 'MapP2', false, 'region.wildMaps'], + [true, 'MapP2', true, 'region.wildMaps'], + [false, 'MapA1', false, 'region.wildMaps'], + [true, 'MapA1', true, 'region.wildMaps'], + [false, 'MapD2', false, 'region.wildMaps'], + [true, 'MapD2', true, 'region.wildMaps'], + [false, 'MapD1', false, 'region.wildMaps'], + [true, 'MapD1', true, 'region.wildMaps'], + [false, 'MapD6', false, 'region.wildMaps'], + [true, 'MapD6', true, 'region.wildMaps'], + [false, 'MapD3', false, 'region.wildMaps'], + [true, 'MapD3', true, 'region.wildMaps'], + [false, 'MapD5', false, 'region.wildMaps'], + [true, 'MapD5', true, 'region.wildMaps'], + [false, 'MapP3', false, 'region.wildMaps'], + [true, 'MapP3', true, 'region.wildMaps'], + [false, 'MapD4', false, 'region.wildMaps'], + [true, 'MapD4', true, 'region.wildMaps'], + [false, 'MapD7', false, 'region.wildMaps'], + [true, 'MapD7', true, 'region.wildMaps'], + [false, 'MapA2', false, 'region.wildMaps'], + [true, 'MapA2', true, 'region.wildMaps'], - [false, 'Compass', false, 'region.wildCompasses'], - [true, 'Compass', true, 'region.wildCompasses'], - [false, 'CompassH2', false, 'region.wildCompasses'], - [true, 'CompassH2', true, 'region.wildCompasses'], - [false, 'CompassH1', false, 'region.wildCompasses'], - [true, 'CompassH1', true, 'region.wildCompasses'], - [false, 'CompassP1', false, 'region.wildCompasses'], - [true, 'CompassP1', true, 'region.wildCompasses'], - [false, 'CompassP2', false, 'region.wildCompasses'], - [true, 'CompassP2', true, 'region.wildCompasses'], - [false, 'CompassA1', false, 'region.wildCompasses'], - [true, 'CompassA1', true, 'region.wildCompasses'], - [false, 'CompassD2', false, 'region.wildCompasses'], - [true, 'CompassD2', true, 'region.wildCompasses'], - [false, 'CompassD1', false, 'region.wildCompasses'], - [true, 'CompassD1', true, 'region.wildCompasses'], - [false, 'CompassD6', false, 'region.wildCompasses'], - [true, 'CompassD6', true, 'region.wildCompasses'], - [false, 'CompassD3', false, 'region.wildCompasses'], - [true, 'CompassD3', true, 'region.wildCompasses'], - [false, 'CompassD5', false, 'region.wildCompasses'], - [true, 'CompassD5', true, 'region.wildCompasses'], - [false, 'CompassP3', false, 'region.wildCompasses'], - [true, 'CompassP3', true, 'region.wildCompasses'], - [false, 'CompassD4', false, 'region.wildCompasses'], - [true, 'CompassD4', true, 'region.wildCompasses'], - [false, 'CompassD7', false, 'region.wildCompasses'], - [true, 'CompassD7', true, 'region.wildCompasses'], - [false, 'CompassA2', false, 'region.wildCompasses'], - [true, 'CompassA2', true, 'region.wildCompasses'], - ]; - } + [false, 'Compass', false, 'region.wildCompasses'], + [true, 'Compass', true, 'region.wildCompasses'], + [false, 'CompassH2', false, 'region.wildCompasses'], + [true, 'CompassH2', true, 'region.wildCompasses'], + [false, 'CompassH1', false, 'region.wildCompasses'], + [true, 'CompassH1', true, 'region.wildCompasses'], + [false, 'CompassP1', false, 'region.wildCompasses'], + [true, 'CompassP1', true, 'region.wildCompasses'], + [false, 'CompassP2', false, 'region.wildCompasses'], + [true, 'CompassP2', true, 'region.wildCompasses'], + [false, 'CompassA1', false, 'region.wildCompasses'], + [true, 'CompassA1', true, 'region.wildCompasses'], + [false, 'CompassD2', false, 'region.wildCompasses'], + [true, 'CompassD2', true, 'region.wildCompasses'], + [false, 'CompassD1', false, 'region.wildCompasses'], + [true, 'CompassD1', true, 'region.wildCompasses'], + [false, 'CompassD6', false, 'region.wildCompasses'], + [true, 'CompassD6', true, 'region.wildCompasses'], + [false, 'CompassD3', false, 'region.wildCompasses'], + [true, 'CompassD3', true, 'region.wildCompasses'], + [false, 'CompassD5', false, 'region.wildCompasses'], + [true, 'CompassD5', true, 'region.wildCompasses'], + [false, 'CompassP3', false, 'region.wildCompasses'], + [true, 'CompassP3', true, 'region.wildCompasses'], + [false, 'CompassD4', false, 'region.wildCompasses'], + [true, 'CompassD4', true, 'region.wildCompasses'], + [false, 'CompassD7', false, 'region.wildCompasses'], + [true, 'CompassD7', true, 'region.wildCompasses'], + [false, 'CompassA2', false, 'region.wildCompasses'], + [true, 'CompassA2', true, 'region.wildCompasses'], + ]; + } } diff --git a/tests/RomTest.php b/tests/RomTest.php index fb9357244..502be912a 100644 --- a/tests/RomTest.php +++ b/tests/RomTest.php @@ -2,385 +2,1249 @@ use ALttP\Item; use ALttP\Rom; +use ALttP\World; use ALttP\Support\ItemCollection; +use Illuminate\Foundation\Testing\RefreshDatabase; -class RomTest extends TestCase { - public function setUp() { - parent::setUp(); - $this->rom = new Rom; - } +class RomTest extends TestCase +{ + use RefreshDatabase; - public function tearDown() { - parent::tearDown(); - unset($this->rom); - } + public function setUp(): void + { + parent::setUp(); + $this->rom = new Rom; + } - public function testCheckMD5WithNoBaseFile() { - $this->assertFalse($this->rom->checkMD5()); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->rom); + } + + public function testSaveBuild() + { + $build = Rom::saveBuild([]); + + $this->assertNotNull($build); + } + + public function testConstructorThrowsWhenSourceNotReadable() + { + $this->expectException(\Exception::class); + + $rom = new Rom('thisfileisnotreable'); + } + + public function testConstructorReadsFile() + { + $rom = new Rom(base_path('tests/samples/testrom.sfc')); + + $this->assertEquals([1, 2, 3], $rom->read(1, 3)); + } + + public function testResize() + { + $rom = new Rom(base_path('tests/samples/testrom.sfc')); + + $rom->resize(1036); + + $rom->save('test_rom.sfc'); + + $this->assertEquals(1036, filesize('test_rom.sfc')); + + unlink('test_rom.sfc'); + } + + public function testCheckMD5WithNoBaseFile() + { + $this->assertFalse($this->rom->checkMD5()); + } + + public function testUpdateChecksum() + { + $this->rom->resize(); + + $this->rom->write(0, pack('C*', 0, 1, 2, 3, 4, 5, 6, 7)); + + $this->rom->updateChecksum(); + + $this->assertEquals([229, 253, 26, 2], $this->rom->read(0x7FDC, 4)); + } + + public function testSetSubstitutionsWithEmpty() + { + $this->rom->setSubstitutions(); + + $this->assertEquals([0xFF, 0xFF, 0xFF, 0xFF], $this->rom->read(0x184000, 4)); + } + + public function testSetSubstitutionsWithLamp() + { + $this->rom->setSubstitutions([ + 0x12, 0x01, 0x35, 0xFF + ]); + + $this->assertEquals([0x12, 0x01, 0x35, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF], $this->rom->read(0x184000, 8)); + } + + /** + * @dataProvider startingEquipmentDataProvider + * + * @return void + */ + public function testSetStartingEquipment(array $result, array $items) + { + $world = World::factory(); + $object_items = array_map(function ($item_name) use ($world) { + return Item::get($item_name, $world); + }, $items); + + $item_collection = new ItemCollection($object_items); + + $this->rom->setStartingEquipment($item_collection); + + foreach ($result as $offset => $bytes) { + $this->assertEquals($bytes, $this->rom->read($offset)); + } + } + + public function startingEquipmentDataProvider(): array + { + return [ + [ + [0x183019 => 0x01, 0x271BF => 0x01], + ['L1Sword'], + ], + [ + [ + 0x183019 => 0x01, 0x271BF => 0x01, + 0x18301A => 0x01, 0x271C0 => 0x01, + ], + ['L1SwordAndShield'], + ], + [ + [0x183019 => 0x02, 0x271BF => 0x02], + ['L2Sword'], + ], + [ + [0x183019 => 0x02, 0x271BF => 0x02], + ['MasterSword'], + ], + [ + [0x183019 => 0x03, 0x271BF => 0x03], + ['L3Sword'], + ], + [ + [0x183019 => 0x04, 0x271BF => 0x04], + ['L4Sword'], + ], + [ + [0x18301A => 0x01, 0x271C0 => 0x01], + ['BlueShield'], + ], + [ + [0x18301A => 0x02, 0x271C0 => 0x02], + ['RedShield'], + ], + [ + [0x18301A => 0x03, 0x271C0 => 0x03], + ['MirrorShield'], + ], + [ + [0x183005 => 0x01, 0x271AB => 0x01], + ['FireRod'], + ], + [ + [0x183006 => 0x01, 0x271AC => 0x01], + ['IceRod'], + ], + [ + [0x18300B => 0x01, 0x271B1 => 0x01], + ['Hammer'], + ], + [ + [0x183002 => 0x01, 0x271A8 => 0x01], + ['Hookshot'], + ], + [ + [0x183000 => 0x01, 0x271A6 => 0x01, 0x18304E => 0x80], + ['Bow'], + ], + [ + [0x183000 => 0x02, 0x271A6 => 0x02, 0x18304E => 0x80], + ['BowAndArrows'], + ], + [ + [0x18304E => 0x40], + ['SilverArrowUpgrade'], + ], + [ + [0x183000 => 0x04, 0x271A6 => 0x04, 0x18304E => 0xC0], + ['BowAndSilverArrows'], + ], + [ + [0x183000 => 0x01, 0x271A6 => 0x01, 0x18304E => 0xC0], + ['Bow', 'SilverArrowUpgrade'], + ], + [ + [0x183001 => 0x01, 0x271A7 => 0x01, 0x18304C => 0x80], + ['Boomerang'], + ], + [ + [0x183001 => 0x02, 0x271A7 => 0x02, 0x18304C => 0x40], + ['RedBoomerang'], + ], + [ + [0x183001 => 0x02, 0x271A7 => 0x02, 0x18304C => 0xC0], + ['Boomerang', 'RedBoomerang'], + ], + [ + [0x183004 => 0x01, 0x271AA => 0x01, 0x18304C => 0x28], + ['Mushroom'], + ], + [ + [0x183004 => 0x02, 0x271AA => 0x02, 0x18304C => 0x10], + ['Powder'], + ], + [ + [0x183004 => 0x02, 0x271AA => 0x02, 0x18304C => 0x38], + ['Mushroom', 'Powder'], + ], + [ + [0x183007 => 0x01, 0x271AD => 0x01], + ['Bombos'], + ], + [ + [0x183008 => 0x01, 0x271AE => 0x01], + ['Ether'], + ], + [ + [0x183009 => 0x01, 0x271AF => 0x01], + ['Quake'], + ], + [ + [0x18300A => 0x01, 0x271B0 => 0x01], + ['Lamp'], + ], + [ + [0x18300C => 0x01, 0x271B2 => 0x01, 0x18304C => 0x04], + ['Shovel'], + ], + [ + [0x18300C => 0x02, 0x271B2 => 0x02, 0x18304C => 0x02], + ['OcarinaInactive'], + ], + [ + [0x18300C => 0x03, 0x271B2 => 0x03, 0x18304C => 0x01], + ['OcarinaActive'], + ], + [ + [0x18300C => 0x02, 0x271B2 => 0x02, 0x18304C => 0x06], + ['Shovel', 'OcarinaInactive'], + ], + [ + [0x183010 => 0x01, 0x271B6 => 0x01], + ['CaneOfSomaria'], + ], + [ + [ + 0x18300F => 0x01, 0x271B5 => 0x01, + 0x18301C => 0x02, 0x271C2 => 0x02, + ], + ['Bottle'], + ], + [ + [ + 0x18300F => 0x01, 0x271B5 => 0x01, + 0x18301C => 0x03, 0x271C2 => 0x03, + ], + ['BottleWithRedPotion'], + ], + [ + [ + 0x18300F => 0x01, 0x271B5 => 0x01, + 0x18301C => 0x04, 0x271C2 => 0x04, + ], + ['BottleWithGreenPotion'], + ], + [ + [ + 0x18300F => 0x01, 0x271B5 => 0x01, + 0x18301C => 0x05, 0x271C2 => 0x05, + ], + ['BottleWithBluePotion'], + ], + [ + [ + 0x18300F => 0x01, 0x271B5 => 0x01, + 0x18301C => 0x07, 0x271C2 => 0x07, + ], + ['BottleWithBee'], + ], + [ + [ + 0x18300F => 0x01, 0x271B5 => 0x01, + 0x18301C => 0x06, 0x271C2 => 0x06, + ], + ['BottleWithFairy'], + ], + [ + [ + 0x18300F => 0x01, 0x271B5 => 0x01, + 0x18301C => 0x08, 0x271C2 => 0x08, + ], + ['BottleWithGoldBee'], + ], + [ + [ + 0x18300F => 0x02, 0x271B5 => 0x02, + 0x18301C => 0x02, 0x271C2 => 0x02, + 0x18301D => 0x03, 0x271C3 => 0x03, + ], + ['Bottle', 'BottleWithRedPotion'], + ], + [ + [ + 0x18300F => 0x04, 0x271B5 => 0x04, + 0x18301C => 0x02, 0x271C2 => 0x02, + 0x18301D => 0x03, 0x271C3 => 0x03, + 0x18301E => 0x04, 0x271C4 => 0x04, + 0x18301F => 0x04, 0x271C5 => 0x04, + ], + ['Bottle', 'BottleWithRedPotion', 'BottleWithGreenPotion', 'BottleWithGreenPotion', 'BottleWithBee'], + ], + [ + [0x183011 => 0x01, 0x271B7 => 0x01], + ['CaneOfByrna'], + ], + [ + [0x183012 => 0x01, 0x271B8 => 0x01], + ['Cape'], + ], + [ + [0x183013 => 0x02, 0x271B9 => 0x02], + ['MagicMirror'], + ], + [ + [0x183014 => 0x01, 0x271BA => 0x01], + ['PowerGlove'], + ], + [ + [0x183014 => 0x02, 0x271BA => 0x02], + ['TitansMitt'], + ], + [ + [0x18300E => 0x01, 0x271B4 => 0x01], + ['BookOfMudora'], + ], + [ + [0x183016 => 0x01, 0x271BC => 0x01, 0x183039 => 0x6A], + ['Flippers'], + ], + [ + [0x183017 => 0x01, 0x271BD => 0x01], + ['MoonPearl'], + ], + [ + [0x18300D => 0x01, 0x271B3 => 0x01], + ['BugCatchingNet'], + ], + [ + [0x18301B => 0x01, 0x271C1 => 0x01], + ['BlueMail'], + ], + [ + [0x18301B => 0x02, 0x271C1 => 0x02], + ['RedMail'], + ], + [ + [0x183003 => 0x01, 0x271A9 => 0x01], + ['Bomb'], + ], + [ + [0x183003 => 0x03, 0x271A9 => 0x03], + ['ThreeBombs'], + ], + [ + [0x183003 => 0x0A, 0x271A9 => 0x0A], + ['TenBombs'], + ], + [ + [0x183003 => 0x63, 0x271A9 => 0x63], + ['TenBombs', 'TenBombs', 'TenBombs', 'TenBombs', 'TenBombs', 'TenBombs', 'TenBombs', 'TenBombs', 'TenBombs', 'TenBombs'], + ], + [ + [0x18303A => 0x02, 0x271E0 => 0x02], + ['Crystal1'], + ], + [ + [0x18303A => 0x10, 0x271E0 => 0x10], + ['Crystal2'], + ], + [ + [0x18303A => 0x40, 0x271E0 => 0x40], + ['Crystal3'], + ], + [ + [0x18303A => 0x20, 0x271E0 => 0x20], + ['Crystal4'], + ], + [ + [0x18303A => 0x04, 0x271E0 => 0x04], + ['Crystal5'], + ], + [ + [0x18303A => 0x01, 0x271E0 => 0x01], + ['Crystal6'], + ], + [ + [0x18303A => 0x08, 0x271E0 => 0x08], + ['Crystal7'], + ], + [ + [0x18303A => 0x12, 0x271E0 => 0x12], + ['Crystal1', 'Crystal2'], + ], + ]; + } + + public function testSetHeartBeepSpeedOff() + { + $this->rom->setHeartBeepSpeed('off'); + + $this->assertEquals(0x00, $this->rom->read(0x180033)); + } + + public function testSetHeartBeepSpeedNormal() + { + $this->rom->setHeartBeepSpeed('normal'); + + $this->assertEquals(0x20, $this->rom->read(0x180033)); + } + + public function testSetHeartBeepSpeedHalf() + { + $this->rom->setHeartBeepSpeed('half'); + + $this->assertEquals(0x40, $this->rom->read(0x180033)); + } + + public function testSetHeartBeepSpeedQuarter() + { + $this->rom->setHeartBeepSpeed('quarter'); + + $this->assertEquals(0x80, $this->rom->read(0x180033)); + } + + public function testSetHeartBeepSpeedDouble() + { + $this->rom->setHeartBeepSpeed('double'); + + $this->assertEquals(0x10, $this->rom->read(0x180033)); + } + + public function testSetHeartBeepSpeedUnknownSetsNormal() + { + $this->rom->setHeartBeepSpeed('testing'); + + $this->assertEquals(0x20, $this->rom->read(0x180033)); + } + + public function testSetRupoor() + { + $this->rom->setRupoorValue(40); + + $this->assertEquals([0x28, 0x00], $this->rom->read(0x180036, 2)); + } + + public function testSetRupoorLarge() + { + $this->rom->setRupoorValue(999); + + $this->assertEquals([0xE7, 0x03], $this->rom->read(0x180036, 2)); + } + + public function testSetByrnaCaveSpikeDamageDefault() + { + $this->rom->setByrnaCaveSpikeDamage(); + + $this->assertEquals(0x08, $this->rom->read(0x180168)); + } + + public function testSetByrnaCaveSpikeDamage() + { + $this->rom->setByrnaCaveSpikeDamage(0x02); + + $this->assertEquals(0x02, $this->rom->read(0x180168)); + } + + public function testSetClockModeDefault() + { + $this->rom->setClockMode(); - public function testSetHeartBeepSpeedOff() { - $this->rom->setHeartBeepSpeed('off'); + $this->assertEquals([0x00, 0x00, 0x00], $this->rom->read(0x180190, 3)); + } - $this->assertEquals(0x00, $this->rom->read(0x180033)); - } + public function testSetClockModeCountdownStopNoReset() + { + $this->rom->setClockMode('countdown-stop'); - public function testSetHeartBeepSpeedNormal() { - $this->rom->setHeartBeepSpeed('normal'); + $this->assertEquals([0x01, 0x00, 0x00], $this->rom->read(0x180190, 3)); + } - $this->assertEquals(0x20, $this->rom->read(0x180033)); - } + public function testSetClockModeCountdownContinueNoReset() + { + $this->rom->setClockMode('countdown-continue'); - public function testSetHeartBeepSpeedHalf() { - $this->rom->setHeartBeepSpeed('half'); + $this->assertEquals([0x01, 0x01, 0x00], $this->rom->read(0x180190, 3)); + } - $this->assertEquals(0x40, $this->rom->read(0x180033)); - } + public function testSetClockModeStopwatchNoReset() + { + $this->rom->setClockMode('stopwatch'); - public function testSetHeartBeepSpeedQuarter() { - $this->rom->setHeartBeepSpeed('quarter'); + $this->assertEquals([0x02, 0x01, 0x00], $this->rom->read(0x180190, 3)); + } - $this->assertEquals(0x80, $this->rom->read(0x180033)); - } + public function testSetClockModeCountdownStopReset() + { + $this->rom->setClockMode('countdown-stop', true); - public function testSetHeartBeepSpeedUnknownSetsNormal() { - $this->rom->setHeartBeepSpeed('testing'); + $this->assertEquals([0x01, 0x00, 0x01], $this->rom->read(0x180190, 3)); + } - $this->assertEquals(0x20, $this->rom->read(0x180033)); - } + public function testSetClockModeCountdownContinueReset() + { + $this->rom->setClockMode('countdown-continue', true); - public function testSetRupoor() { - $this->rom->setRupoorValue(40); + $this->assertEquals([0x01, 0x01, 0x01], $this->rom->read(0x180190, 3)); + } - $this->assertEquals([0x28, 0x00], $this->rom->read(0x180036, 2)); - } + public function testSetClockModeStopwatchReset() + { + $this->rom->setClockMode('stopwatch', true); - public function testSetRupoorLarge() { - $this->rom->setRupoorValue(999); + $this->assertEquals([0x02, 0x01, 0x01], $this->rom->read(0x180190, 3)); + } - $this->assertEquals([0xE7, 0x03], $this->rom->read(0x180036, 2)); - } + public function testSetClockModeCountdownOhko() + { + $this->rom->setClockMode('countdown-ohko'); - public function testSetByrnaCaveSpikeDamageDefault() { - $this->rom->setByrnaCaveSpikeDamage(); + $this->assertEquals([0x01, 0x02, 0x01], $this->rom->read(0x180190, 3)); + } - $this->assertEquals(0x08, $this->rom->read(0x180168)); - } + public function testSetClockModeCountdownEnd() + { + $this->rom->setClockMode('countdown-end'); - public function testSetByrnaCaveSpikeDamage() { - $this->rom->setByrnaCaveSpikeDamage(0x02); + $this->assertEquals([0x01, 0x03, 0x00], $this->rom->read(0x180190, 3)); + } - $this->assertEquals(0x02, $this->rom->read(0x180168)); - } + public function testSetStartingTime() + { + // 5 hours + $this->rom->setStartingTime(5 * 60 * 60); - public function testSetClockModeDefault() { - $this->rom->setClockMode(); + $this->assertEquals([0xC0, 0x7A, 0x10, 0x00], $this->rom->read(0x18020C, 4)); + } - $this->assertEquals([0x00, 0x00, 0x00], $this->rom->read(0x180190, 3)); - } + public function testSetRedClock() + { + $this->rom->setRedClock(5 * 60); - public function testSetClockModeCountdownStopNoReset() { - $this->rom->setClockMode('countdown-stop'); + $this->assertEquals([0x50, 0x46, 0x00, 0x00], $this->rom->read(0x180200, 4)); + } - $this->assertEquals([0x01, 0x00, 0x00], $this->rom->read(0x180190, 3)); - } + public function testSetBlueClock() + { + $this->rom->setBlueClock(5 * 60); - public function testSetClockModeCountdownContinueNoReset() { - $this->rom->setClockMode('countdown-continue'); + $this->assertEquals([0x50, 0x46, 0x00, 0x00], $this->rom->read(0x180204, 4)); + } - $this->assertEquals([0x01, 0x01, 0x00], $this->rom->read(0x180190, 3)); - } + public function testSetGreenClock() + { + $this->rom->setGreenClock(5 * 60); - public function testSetClockModeStopwatchNoReset() { - $this->rom->setClockMode('stopwatch'); + $this->assertEquals([0x50, 0x46, 0x00, 0x00], $this->rom->read(0x180208, 4)); + } - $this->assertEquals([0x02, 0x01, 0x00], $this->rom->read(0x180190, 3)); - } + public function testSetMaxArrows() + { + $this->rom->setMaxArrows(40); - public function testSetClockModeCountdownStopReset() { - $this->rom->setClockMode('countdown-stop', true); + $this->assertEquals(40, $this->rom->read(0x180035)); + } - $this->assertEquals([0x01, 0x00, 0x01], $this->rom->read(0x180190, 3)); - } + public function testSetDiggingGameRng() + { + $this->rom->setDiggingGameRng(40); - public function testSetClockModeCountdownContinueReset() { - $this->rom->setClockMode('countdown-continue', true); + $this->assertEquals(40, $this->rom->read(0x180020)); + $this->assertEquals(40, $this->rom->read(0xEFD95)); + } - $this->assertEquals([0x01, 0x01, 0x01], $this->rom->read(0x180190, 3)); - } + public function testSetMaxBombs() + { + $this->rom->setMaxBombs(40); - public function testSetClockModeStopwatchReset() { - $this->rom->setClockMode('stopwatch', true); + $this->assertEquals(40, $this->rom->read(0x180034)); + } - $this->assertEquals([0x02, 0x01, 0x01], $this->rom->read(0x180190, 3)); - } + public function testSetCapacityUpgradeFills() + { + $this->rom->setCapacityUpgradeFills([1, 2, 0, 0, 20]); - public function testSetStartingTime() { - // 5 hours - $this->rom->setStartingTime(5 * 60 * 60); + $this->assertEquals([1, 2, 0, 0], $this->rom->read(0x180080, 4)); + } - $this->assertEquals([0xC0, 0x7A, 0x10, 0x00], $this->rom->read(0x18020C, 4)); - } + public function setBottleFills() + { + $this->rom->setCapacityUpgradeFills([1, 2, 0, 0, 20]); - public function testSetRedClock() { - $this->rom->setRedClock(5 * 60); + $this->assertEquals([1, 2], $this->rom->read(0x180084, 2)); + } - $this->assertEquals([0x50, 0x46, 0x00, 0x00], $this->rom->read(0x180200, 4)); - } + public function testSetGoalRequiredCount() + { + $this->rom->setGoalRequiredCount(4); - public function testSetBlueClock() { - $this->rom->setBlueClock(5 * 60); + $this->assertEquals(4, $this->rom->read(0x180167)); + } - $this->assertEquals([0x50, 0x46, 0x00, 0x00], $this->rom->read(0x180204, 4)); - } + public function testSetGoalIconDefault() + { + $this->rom->setGoalIcon('nothing'); - public function testSetGreenClock() { - $this->rom->setGreenClock(5 * 60); + $this->assertEquals([0x0D, 0x28], $this->rom->read(0x180165, 2)); + } - $this->assertEquals([0x50, 0x46, 0x00, 0x00], $this->rom->read(0x180208, 4)); - } + public function testSetGoalIconTriforce() + { + $this->rom->setGoalIcon('triforce'); - public function testSetMaxArrows() { - $this->rom->setMaxArrows(40); + $this->assertEquals([0x0E, 0x28], $this->rom->read(0x180165, 2)); + } - $this->assertEquals(40, $this->rom->read(0x180035)); - } + public function testSetGoalIconStar() + { + $this->rom->setGoalIcon('star'); - public function testSetMaxBombs() { - $this->rom->setMaxBombs(40); + $this->assertEquals([0x0D, 0x28], $this->rom->read(0x180165, 2)); + } - $this->assertEquals(40, $this->rom->read(0x180034)); - } + public function testSetLimitProgressiveSword() + { + $this->rom->setLimitProgressiveSword(2, 23); - public function testSetCapacityUpgradeFills() { - $this->rom->setCapacityUpgradeFills([1, 2, 0, 0, 20]); + $this->assertEquals([2, 23], $this->rom->read(0x180090, 2)); + } - $this->assertEquals([1, 2, 0, 0], $this->rom->read(0x180080, 4)); - } + public function testSetLimitProgressiveShield() + { + $this->rom->setLimitProgressiveShield(2, 23); - public function setBottleFills() { - $this->rom->setCapacityUpgradeFills([1, 2, 0, 0, 20]); + $this->assertEquals([2, 23], $this->rom->read(0x180092, 2)); + } - $this->assertEquals([1, 2], $this->rom->read(0x180084, 2)); - } + public function testSetLimitProgressiveArmor() + { + $this->rom->setLimitProgressiveArmor(2, 23); - public function testSetSingleRNGTable() { - $items = new ItemCollection([ - Item::get('ProgressiveSword'), - Item::get('ProgressiveSword'), - Item::get('ProgressiveSword'), - Item::get('ProgressiveGlove'), - ]); + $this->assertEquals([2, 23], $this->rom->read(0x180094, 2)); + } + + public function testSetLimitBottle() + { + $this->rom->setLimitBottle(2, 23); + + $this->assertEquals([2, 23], $this->rom->read(0x180096, 2)); + } + + public function testSetLimitBow() + { + $this->rom->setLimitProgressiveBow(2, 23); + + $this->assertEquals([2, 23], $this->rom->read(0x180098, 2)); + } + + + public function testSetGanonInvincibleCrystals() + { + $this->rom->setGanonInvincible('crystals'); + + $this->assertEquals(0x03, $this->rom->read(0x18003E)); + } + + public function testSetGanonInvincibleDungeons() + { + $this->rom->setGanonInvincible('dungeons'); + + $this->assertEquals(0x02, $this->rom->read(0x18003E)); + } + + public function testSetGanonInvincibleYes() + { + $this->rom->setGanonInvincible('yes'); + + $this->assertEquals(0x01, $this->rom->read(0x18003E)); + } + + public function testSetGanonInvincibleCustom() + { + $this->rom->setGanonInvincible('custom'); + + $this->assertEquals(0x04, $this->rom->read(0x18003E)); + } + + public function testSetGanonInvincibleNo() + { + $this->rom->setGanonInvincible('no'); + + $this->assertEquals(0x00, $this->rom->read(0x18003E)); + } + + public function testSetHeartColorsBlue() + { + $this->rom->setHeartColors('blue'); + + $this->assertEquals(0x2C, $this->rom->read(0x6FA1E)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA20)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA22)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA24)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA26)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA28)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA2A)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA2C)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA2E)); + $this->assertEquals(0x2C, $this->rom->read(0x6FA30)); + $this->assertEquals(0x0D, $this->rom->read(0x65561)); + } + + public function testSetHeartColorsGreen() + { + $this->rom->setHeartColors('green'); + + $this->assertEquals(0x3C, $this->rom->read(0x6FA1E)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA20)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA22)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA24)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA26)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA28)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA2A)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA2C)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA2E)); + $this->assertEquals(0x3C, $this->rom->read(0x6FA30)); + $this->assertEquals(0x19, $this->rom->read(0x65561)); + } + + public function testSetHeartColorsYellow() + { + $this->rom->setHeartColors('yellow'); + + $this->assertEquals(0x28, $this->rom->read(0x6FA1E)); + $this->assertEquals(0x28, $this->rom->read(0x6FA20)); + $this->assertEquals(0x28, $this->rom->read(0x6FA22)); + $this->assertEquals(0x28, $this->rom->read(0x6FA24)); + $this->assertEquals(0x28, $this->rom->read(0x6FA26)); + $this->assertEquals(0x28, $this->rom->read(0x6FA28)); + $this->assertEquals(0x28, $this->rom->read(0x6FA2A)); + $this->assertEquals(0x28, $this->rom->read(0x6FA2C)); + $this->assertEquals(0x28, $this->rom->read(0x6FA2E)); + $this->assertEquals(0x28, $this->rom->read(0x6FA30)); + $this->assertEquals(0x09, $this->rom->read(0x65561)); + } + + public function testSetHeartColorsRed() + { + $this->rom->setHeartColors('red'); + + $this->assertEquals(0x24, $this->rom->read(0x6FA1E)); + $this->assertEquals(0x24, $this->rom->read(0x6FA20)); + $this->assertEquals(0x24, $this->rom->read(0x6FA22)); + $this->assertEquals(0x24, $this->rom->read(0x6FA24)); + $this->assertEquals(0x24, $this->rom->read(0x6FA26)); + $this->assertEquals(0x24, $this->rom->read(0x6FA28)); + $this->assertEquals(0x24, $this->rom->read(0x6FA2A)); + $this->assertEquals(0x24, $this->rom->read(0x6FA2C)); + $this->assertEquals(0x24, $this->rom->read(0x6FA2E)); + $this->assertEquals(0x24, $this->rom->read(0x6FA30)); + $this->assertEquals(0x05, $this->rom->read(0x65561)); + } + + public function testSetText() + { + $this->rom->setText('set_cursor', '1'); + + $this->rom->writeText(); + + $this->assertEquals(0xA1, $this->rom->read(0xE0001)); + } + + public function testWriteText() + { + $this->rom->writeText(); + + $this->assertEquals([0xFB, 0xFC, 0x00, 0xF9, 0xFF], $this->rom->read(0xE0000, 5)); + } + + public function testSetCredit() + { + $this->rom->setCredit('castle', 'a'); + + $this->rom->writeCredits(); + + $this->assertEquals(0x1A, $this->rom->read(0x181504)); + } + + public function testWriteCredits() + { + $this->rom->writeCredits(); + + $this->assertEquals([0x2D, 0x21, 0x1E, 0x9F, 0x2B], $this->rom->read(0x181504, 5)); + } + + public function testSetMenuSpeedInstant() + { + $this->rom->setMenuSpeed('instant'); + + $this->assertEquals(0xE8, $this->rom->read(0x180048)); + $this->assertEquals(0x20, $this->rom->read(0x6DD9A)); + $this->assertEquals(0x20, $this->rom->read(0x6DF2A)); + $this->assertEquals(0x20, $this->rom->read(0x6E0E9)); + } + + public function testSetMenuSpeedFast() + { + $this->rom->setMenuSpeed('fast'); + + $this->assertEquals(0x10, $this->rom->read(0x180048)); + $this->assertEquals(0x11, $this->rom->read(0x6DD9A)); + $this->assertEquals(0x12, $this->rom->read(0x6DF2A)); + $this->assertEquals(0x12, $this->rom->read(0x6E0E9)); + } + + public function testSetMenuSpeedNormal() + { + $this->rom->setMenuSpeed('normal'); + + $this->assertEquals(0x08, $this->rom->read(0x180048)); + $this->assertEquals(0x11, $this->rom->read(0x6DD9A)); + $this->assertEquals(0x12, $this->rom->read(0x6DF2A)); + $this->assertEquals(0x12, $this->rom->read(0x6E0E9)); + } + + public function testSetMenuSpeedSlow() + { + $this->rom->setMenuSpeed('slow'); + + $this->assertEquals(0x04, $this->rom->read(0x180048)); + $this->assertEquals(0x11, $this->rom->read(0x6DD9A)); + $this->assertEquals(0x12, $this->rom->read(0x6DF2A)); + $this->assertEquals(0x12, $this->rom->read(0x6E0E9)); + } + + public function testSetQuickSwapOn() + { + $this->rom->setQuickSwap(true); + + $this->assertEquals(0x01, $this->rom->read(0x18004B)); + } - $this->rom->setSingleRNGTable($items); + public function testSetQuickSwapOff() + { + $this->rom->setQuickSwap(false); - $this->assertEquals([[0x5E, 0x5E, 0x5E, 0x61], 0x04], - [$this->rom->read(0x182000, 4), $this->rom->read(0x18207F)]); - } + $this->assertEquals(0x00, $this->rom->read(0x18004B)); + } - public function testSetMultiRNGTable() { - $items = new ItemCollection([ - Item::get('ProgressiveSword'), - Item::get('ProgressiveSword'), - Item::get('ProgressiveGlove'), - ]); + public function testSetSmithyFreeTravelOn() + { + $this->rom->setSmithyFreeTravel(true); - $this->rom->setMultiRNGTable($items); + $this->assertEquals(0x01, $this->rom->read(0x18004C)); + } - $this->assertEquals([[0x5E, 0x5E, 0x61], 0x03], - [$this->rom->read(0x182080, 3), $this->rom->read(0x1820FF)]); - } + public function testSetSmithyFreeTravelOff() + { + $this->rom->setSmithyFreeTravel(false); - public function testSetRandomizerSeedTypeMajorGlitches() { - $this->rom->setRandomizerSeedType('MajorGlitches'); + $this->assertEquals(0x00, $this->rom->read(0x18004C)); + } - $this->assertEquals(0x01, $this->rom->read(0x180210)); - } + public function testSetProgrammable1Bees() + { + $this->rom->setProgrammable1('bees'); - public function testSetRandomizerSeedTypeNormal() { - $this->rom->setRandomizerSeedType('NoGlitches'); + $code = [ + 0xA9, 0x79, 0x22, 0x5D, 0xF6, 0x1D, 0x30, 0x14, + 0xA5, 0x22, 0x99, 0x10, 0x0D, 0xA5, 0x23, 0x99, + 0x30, 0x0D, 0xA5, 0x20, 0x99, 0x00, 0x0D, 0xA5, + 0x21, 0x99, 0x20, 0x0D, 0x6B, + ]; + $pointer = [0x00, 0x80, 0x3B]; - $this->assertEquals(0x00, $this->rom->read(0x180210)); - } + $this->assertEquals($code, $this->rom->read(0x1D8000, 29)); + $this->assertEquals($pointer, $this->rom->read(0x180061, 3)); + } - public function testSetRandomizerSeedTypeDefaultsToNoGlitches() { - $this->rom->setRandomizerSeedType('badType'); + public function testSetRandomizerSeedTypeOverworldGlitches() + { + $this->rom->setRandomizerSeedType('OverworldGlitches'); - $this->assertEquals(0x00, $this->rom->read(0x180210)); - } + $this->assertEquals(0x02, $this->rom->read(0x180210)); + } - public function testSetRandomizerSeedTypeOff() { - $this->rom->setRandomizerSeedType('off'); + public function testSetRandomizerSeedTypeMajorGlitches() + { + $this->rom->setRandomizerSeedType('MajorGlitches'); - $this->assertEquals(0xFF, $this->rom->read(0x180210)); - } + $this->assertEquals(0x01, $this->rom->read(0x180210)); + } - public function testSetPlandomizerAuthor() { - $this->rom->setPlandomizerAuthor('123456789012345678901'); + public function testSetRandomizerSeedTypeNormal() + { + $this->rom->setRandomizerSeedType('NoGlitches'); - $this->assertEquals([49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,48,49], $this->rom->read(0x180220, 31)); - } + $this->assertEquals(0x00, $this->rom->read(0x180210)); + } - public function testSetHardMode2ChangesCapeMagicUsage() { - $this->rom->setHardMode(2); + public function testSetRandomizerSeedTypeDefaultsToNoGlitches() + { + $this->rom->setRandomizerSeedType('badType'); - $this->assertEquals([0x01, 0x01, 0x01], $this->rom->read(0x3ADA7, 3)); - } + $this->assertEquals(0x00, $this->rom->read(0x180210)); + } - public function testSetHardMode1ChangesCapeMagicUsage() { - $this->rom->setHardMode(1); + public function testSetRandomizerSeedTypeOff() + { + $this->rom->setRandomizerSeedType('off'); - $this->assertEquals([0x02, 0x02, 0x02], $this->rom->read(0x3ADA7, 3)); - } + $this->assertEquals(0xFF, $this->rom->read(0x180210)); + } - public function testSetHardMode0ChangesCapeMagicUsage() { - $this->rom->setHardMode(0); + public function testSetGameTypeEnemizer() + { + $this->rom->setGameType('enemizer'); - $this->assertEquals([0x04, 0x08, 0x10], $this->rom->read(0x3ADA7, 3)); - } + $this->assertEquals(0b00000101, $this->rom->read(0x180211)); + } - public function testSetHardMode3ChangesBubbleTransform() { - $this->rom->setHardMode(3); + public function testSetGameTypeEntrance() + { + $this->rom->setGameType('entrance'); - $this->assertEquals(0x79, $this->rom->read(0x36DD0)); - } + $this->assertEquals(0b00000110, $this->rom->read(0x180211)); + } - public function testSetHardMode2ChangesBubbleTransform() { - $this->rom->setHardMode(2); + public function testSetGameTypeRoom() + { + $this->rom->setGameType('room'); - $this->assertEquals(0xD8, $this->rom->read(0x36DD0)); - } + $this->assertEquals(0b00001000, $this->rom->read(0x180211)); + } - public function testSetHardMode1ChangesBubbleTransform() { - $this->rom->setHardMode(1); + public function testSetGameTypeItem() + { + $this->rom->setGameType('item'); - $this->assertEquals(0xD8, $this->rom->read(0x36DD0)); - } + $this->assertEquals(0b00000100, $this->rom->read(0x180211)); + } - public function testSetHardMode0ChangesBubbleTransform() { - $this->rom->setHardMode(0); + public function testSetPlandomizerAuthor() + { + $this->rom->setPlandomizerAuthor('123456789012345678901'); - $this->assertEquals(0xE3, $this->rom->read(0x36DD0)); - } + $this->assertEquals([49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49], $this->rom->read(0x180220, 31)); + } - public function testSetSmithyQuickItemGiveOn() { - $this->rom->setSmithyQuickItemGive(true); + public function testSetTournamentTypeStandard() + { + $this->rom->setTournamentType('standard'); - $this->assertEquals(0x01, $this->rom->read(0x180029)); - } + $this->assertEquals([0x01, 0x00], $this->rom->read(0x180213, 2)); + } - public function testSetSmithyQuickItemGiveOff() { - $this->rom->setSmithyQuickItemGive(false); + public function testSetTournamentTypeNone() + { + $this->rom->setTournamentType('none'); - $this->assertEquals(0x00, $this->rom->read(0x180029)); - } + $this->assertEquals([0x00, 0x01], $this->rom->read(0x180213, 2)); + } - public function testSetPyramidFairyChestsOn() { - $this->rom->setPyramidFairyChests(true); + public function testSetStartScreenHash() + { + $this->rom->setStartScreenHash([0x00, 0x02, 0x04, 0x06, 0x07]); - $this->assertEquals([0xB1, 0xC6, 0xF9, 0xC9, 0xC6, 0xF9], $this->rom->read(0x1FC16, 6)); - } + $this->assertEquals([0x00, 0x02, 0x04, 0x06, 0x07], $this->rom->read(0x180215, 5)); + } - public function testSetPyramidFairyChestsOff() { - $this->rom->setPyramidFairyChests(false); + public function testRemoveUnclesShield() + { + $this->rom->removeUnclesShield(); - $this->assertEquals([0xA8, 0xB8, 0x3D, 0xD0, 0xB8, 0x3D], $this->rom->read(0x1FC16, 6)); - } + $this->assertEquals([0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E], $this->rom->read(0x6D253, 6)); + } - public function testSetOpenModeOn() { - $this->rom->setOpenMode(true); + public function testRemoveUnclesSword() + { + $this->rom->removeUnclesSword(); - $this->assertEquals(0x01, $this->rom->read(0x180032)); - } + $this->assertEquals([0x00, 0x00, 0xf6, 0xff, 0x00, 0x0E], $this->rom->read(0x6D263, 6)); + } - public function testSetOpenModeOff() { - $this->rom->setOpenMode(false); + public function testSetStunnedSpritePrize() + { + $this->rom->setStunnedSpritePrize(0x4E); - $this->assertEquals(0x00, $this->rom->read(0x180032)); - } + $this->assertEquals(0x4E, $this->rom->read(0x37993)); + } - public function testSetSewersLampConeOn() { - $this->rom->setSewersLampCone(true); + public function testSetPowderedSpriteFairyPrize() + { + $this->rom->setPowderedSpriteFairyPrize(0x4E); - $this->assertEquals(0x01, $this->rom->read(0x180038)); - } + $this->assertEquals(0x4E, $this->rom->read(0x36DD0)); + } - public function testSetSewersLampConeOff() { - $this->rom->setSewersLampCone(false); + public function testSetPullTreePrizes() + { + $this->rom->setPullTreePrizes(0x00, 0x01, 0x02); - $this->assertEquals(0x00, $this->rom->read(0x180038)); - } + $this->assertEquals([0x00, 0x01, 0x02], $this->rom->read(0xEFBD4, 3)); + } - public function testSetLightWorldLampConeOn() { - $this->rom->setLightWorldLampCone(true); + public function testSetRupeeCrabPrizes() + { + $this->rom->setRupeeCrabPrizes(0x01, 0x02); - $this->assertEquals(0x01, $this->rom->read(0x180039)); - } + $this->assertEquals(0x01, $this->rom->read(0x329C8)); + $this->assertEquals(0x02, $this->rom->read(0x329C4)); + } - public function testSetLightWorldLampConeOff() { - $this->rom->setLightWorldLampCone(false); + public function testSetFishSavePrize() + { + $this->rom->setFishSavePrize(0x4E); - $this->assertEquals(0x00, $this->rom->read(0x180039)); - } + $this->assertEquals(0x4E, $this->rom->read(0xE82CC)); + } - public function testSetDarkWorldLampConeOn() { - $this->rom->setDarkWorldLampCone(true); + public function testSetOverworldBonkPrizesEmpty() + { + $this->rom->setOverworldBonkPrizes(); - $this->assertEquals(0x01, $this->rom->read(0x18003A)); - } + $this->assertEquals(0x03, $this->rom->read(0x4CF6C)); + } - public function testSetDarkWorldLampConeOff() { - $this->rom->setDarkWorldLampCone(false); + public function testSetOverworldBonkPrizes() + { + $this->rom->setOverworldBonkPrizes(array_fill(0, 64, 0x05)); - $this->assertEquals(0x00, $this->rom->read(0x18003A)); - } + $this->assertEquals(0x05, $this->rom->read(0x4CF6C)); + } - public function testSetMirrorlessSaveAndQuitToLightWorldOn() { - $this->rom->setMirrorlessSaveAndQuitToLightWorld(true); + public function testSetOverworldDigPrizes() + { + $this->rom->setOverworldDigPrizes(array_fill(0, 64, 0x05)); - $this->assertEquals(0x01, $this->rom->read(0x1800A0)); - } + $this->assertEquals(0x05, $this->rom->read(0x180100)); + } - public function testSetMirrorlessSaveAndQuitToLightWorldOff() { - $this->rom->setMirrorlessSaveAndQuitToLightWorld(false); + public function testSetHardModeUnknownValueThrowsException() + { + $this->expectException(\Exception::class); - $this->assertEquals(0x00, $this->rom->read(0x1800A0)); - } + $this->rom->setHardMode(1000000); + } - public function testSetSwampWaterLevelOn() { - $this->rom->setSwampWaterLevel(true); + public function testSetHardMode2ChangesCapeMagicUsage() + { + $this->rom->setHardMode(2); - $this->assertEquals(0x01, $this->rom->read(0x1800A1)); - } + $this->assertEquals([0x02, 0x04, 0x08], $this->rom->read(0x3ADA7, 3)); + } - public function testSetSwampWaterLevelOff() { - $this->rom->setSwampWaterLevel(false); + public function testSetHardMode1ChangesCapeMagicUsage() + { + $this->rom->setHardMode(1); - $this->assertEquals(0x00, $this->rom->read(0x1800A1)); - } + $this->assertEquals([0x02, 0x04, 0x08], $this->rom->read(0x3ADA7, 3)); + } - public function testSetPreAgahnimDarkWorldDeathInDungeonOn() { - $this->rom->setPreAgahnimDarkWorldDeathInDungeon(true); + public function testSetHardMode0ChangesCapeMagicUsage() + { + $this->rom->setHardMode(0); - $this->assertEquals(0x01, $this->rom->read(0x1800A2)); - } + $this->assertEquals([0x04, 0x08, 0x10], $this->rom->read(0x3ADA7, 3)); + } - public function testSetPreAgahnimDarkWorldDeathInDungeonOff() { - $this->rom->setPreAgahnimDarkWorldDeathInDungeon(false); + public function testSetHardMode3ChangesBubbleTransform() + { + $this->rom->setHardMode(3); - $this->assertEquals(0x00, $this->rom->read(0x1800A2)); - } + $this->assertEquals(0x79, $this->rom->read(0x36DD0)); + } - public function testSetSeedString() { - $this->rom->setSeedString('123456789012345678901'); + public function testSetHardMode2ChangesBubbleTransform() + { + $this->rom->setHardMode(2); - $this->assertEquals([49,50,51,52,53,54,55,56,57,48,49,50,51,52,53,54,55,56,57,48,49], $this->rom->read(0x7FC0, 21)); - } + $this->assertEquals(0xD8, $this->rom->read(0x36DD0)); + } - public function testSetSeedStringNotLongerThan21Chars() { - $this->rom->setSeedString('aaaaaaaaaaaaaaaaaaaaaaaaa'); + public function testSetHardMode1ChangesBubbleTransform() + { + $this->rom->setHardMode(1); - $this->assertEquals([97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97], $this->rom->read(0x7FC0, 25)); - } + $this->assertEquals(0xD8, $this->rom->read(0x36DD0)); + } + public function testSetHardMode0ChangesBubbleTransform() + { + $this->rom->setHardMode(0); + + $this->assertEquals(0xE3, $this->rom->read(0x36DD0)); + } + + public function testSetSmithyQuickItemGiveOn() + { + $this->rom->setSmithyQuickItemGive(true); + + $this->assertEquals(0x01, $this->rom->read(0x180029)); + } + + public function testSetSmithyQuickItemGiveOff() + { + $this->rom->setSmithyQuickItemGive(false); + + $this->assertEquals(0x00, $this->rom->read(0x180029)); + } + + public function testSetPyramidFairyChestsOn() + { + $this->rom->setPyramidFairyChests(true); + + $this->assertEquals([0xB1, 0xC6, 0xF9, 0xC9, 0xC6, 0xF9], $this->rom->read(0x1FC16, 6)); + } + + public function testSetPyramidFairyChestsOff() + { + $this->rom->setPyramidFairyChests(false); + + $this->assertEquals([0xA8, 0xB8, 0x3D, 0xD0, 0xB8, 0x3D], $this->rom->read(0x1FC16, 6)); + } + + public function testSetOpenModeOn() + { + $this->rom->setOpenMode(true); + + $this->assertEquals(0x01, $this->rom->read(0x180032)); + } + + public function testSetOpenModeOff() + { + $this->rom->setOpenMode(false); + + $this->assertEquals(0x00, $this->rom->read(0x180032)); + } + + public function testSetSewersLampConeOn() + { + $this->rom->setSewersLampCone(true); + + $this->assertEquals(0x01, $this->rom->read(0x180038)); + } + + public function testSetSewersLampConeOff() + { + $this->rom->setSewersLampCone(false); + + $this->assertEquals(0x00, $this->rom->read(0x180038)); + } + + public function testSetLightWorldLampConeOn() + { + $this->rom->setLightWorldLampCone(true); + + $this->assertEquals(0x01, $this->rom->read(0x180039)); + } + + public function testSetLightWorldLampConeOff() + { + $this->rom->setLightWorldLampCone(false); + + $this->assertEquals(0x00, $this->rom->read(0x180039)); + } + + public function testSetDarkWorldLampConeOn() + { + $this->rom->setDarkWorldLampCone(true); + + $this->assertEquals(0x01, $this->rom->read(0x18003A)); + } + + public function testSetDarkWorldLampConeOff() + { + $this->rom->setDarkWorldLampCone(false); + + $this->assertEquals(0x00, $this->rom->read(0x18003A)); + } + + public function testSetMirrorlessSaveAndQuitToLightWorldOn() + { + $this->rom->setMirrorlessSaveAndQuitToLightWorld(true); + + $this->assertEquals(0x01, $this->rom->read(0x1800A0)); + } + + public function testSetMirrorlessSaveAndQuitToLightWorldOff() + { + $this->rom->setMirrorlessSaveAndQuitToLightWorld(false); + + $this->assertEquals(0x00, $this->rom->read(0x1800A0)); + } + + public function testSetSwampWaterLevelOn() + { + $this->rom->setSwampWaterLevel(true); + + $this->assertEquals(0x01, $this->rom->read(0x1800A1)); + } + + public function testSetSwampWaterLevelOff() + { + $this->rom->setSwampWaterLevel(false); + + $this->assertEquals(0x00, $this->rom->read(0x1800A1)); + } + + public function testSetPreAgahnimDarkWorldDeathInDungeonOn() + { + $this->rom->setPreAgahnimDarkWorldDeathInDungeon(true); + + $this->assertEquals(0x01, $this->rom->read(0x1800A2)); + } + + public function testSetPreAgahnimDarkWorldDeathInDungeonOff() + { + $this->rom->setPreAgahnimDarkWorldDeathInDungeon(false); + + $this->assertEquals(0x00, $this->rom->read(0x1800A2)); + } + + public function testSetSeedString() + { + $this->rom->setSeedString('123456789012345678901'); + + $this->assertEquals([49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 48, 49], $this->rom->read(0x7FC0, 21)); + } + + public function testSetSeedStringNotLongerThan21Chars() + { + $this->rom->setSeedString('aaaaaaaaaaaaaaaaaaaaaaaaa'); + + $this->assertEquals([97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97], $this->rom->read(0x7FC0, 25)); + } } diff --git a/tests/Support/CollectionTest.php b/tests/Support/CollectionTest.php new file mode 100644 index 000000000..4b4943890 --- /dev/null +++ b/tests/Support/CollectionTest.php @@ -0,0 +1,50 @@ +collection = new Collection; + } + + /** + * clean up after each test. + * + * @return void + */ + public function tearDown(): void + { + parent::tearDown(); + unset($this->collection); + } + + /** + * @return void + */ + public function testRandomCollectionDoesNotUnderflow() + { + $this->collection[] = 'item1'; + + $this->assertEquals(['item1'], $this->collection->randomCollection(10)->values()); + } + + /** + * @return void + */ + public function testRandomCollection() + { + $this->collection[] = 'item1'; + $this->collection[] = 'item2'; + $this->collection[] = 'item3'; + + $this->assertNotEquals(['item1', 'item2', 'item3'], $this->collection->randomCollection(2)->values()); + } +} diff --git a/tests/Support/ItemCollectionTest.php b/tests/Support/ItemCollectionTest.php index ea85cf206..5e25afe30 100644 --- a/tests/Support/ItemCollectionTest.php +++ b/tests/Support/ItemCollectionTest.php @@ -2,165 +2,185 @@ use ALttP\Support\ItemCollection; use ALttP\Item; - -class ItemCollectionTest extends TestCase { - public function setUp() { - parent::setUp(); - $this->collection = new ItemCollection; - } - - public function tearDown() { - parent::tearDown(); - unset($this->collection); - } - - public function testCountWithItem() { - $this->collection->addItem(Item::get('L1Sword')); - - $this->assertEquals(1, $this->collection->count()); - } - - public function testGlobalCountWithItem() { - $this->collection->addItem(Item::get('L1Sword')); - - $this->assertEquals(1, count($this->collection)); - } - - public function testCountWithDifferentItems() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('OneRupee')); - - $this->assertEquals(2, $this->collection->count()); - } - - public function testGlobalCountWithDifferentItems() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('OneRupee')); - - $this->assertEquals(2, count($this->collection)); - } - - public function testCountWithSameItem() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L1Sword')); - - $this->assertEquals(2, $this->collection->count()); - } - - public function testEachWithSameItem() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L1Sword')); - - $times_run = 0; - - $this->collection->each(function($item) use (&$times_run) { - $times_run++; - }); - - $this->assertEquals(2, $times_run); - } - - public function testMap() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L2Sword')); - - $mapped = $this->collection->map(function($item) { - return $item->getName(); - }); - - $this->assertEquals(['L1Sword', 'L2Sword'], $mapped); - } - - public function testMapWithSameItem() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L2Sword')); - - $mapped = $this->collection->map(function($item) { - return $item->getName(); - }); - - $this->assertEquals(['L1Sword', 'L1Sword', 'L2Sword'], $mapped); - } - - public function testFilter() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L2Sword')); - $this->collection->addItem(Item::get('Map')); - - $filtered = $this->collection->filter(function($item) { - return is_a($item, Item\Sword::class); - }); - - $this->assertEquals([ - Item::get('L1Sword'), - Item::get('L2Sword'), - ], $filtered->values()); - } - - public function testFilterSameItem() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('Map')); - - $filtered = $this->collection->filter(function($item) { - return is_a($item, Item\Sword::class); - }); - - $this->assertEquals([ - Item::get('L1Sword'), - Item::get('L1Sword'), - ], $filtered->values()); - } - - public function testValues() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L2Sword')); - $this->collection->addItem(Item::get('L3Sword')); - - $this->assertEquals([ - Item::get('L1Sword'), - Item::get('L2Sword'), - Item::get('L3Sword'), - ], $this->collection->values()); - } - - public function testValuesSameItem() { - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L1Sword')); - $this->collection->addItem(Item::get('L2Sword')); - - $this->assertEquals([ - Item::get('L1Sword'), - Item::get('L1Sword'), - Item::get('L2Sword'), - ], $this->collection->values()); - } - - /** - * @dataProvider bottlesPool - */ - public function testBottleCounting($items) { - $this->addCollected($items); - - $this->assertTrue($this->collected->hasBottle(count($items))); - $this->assertFalse($this->collected->hasBottle(count($items) + 1)); - } - - public function bottlesPool() { - return [ - [['Bottle']], - [['BottleWithBee']], - [['BottleWithFairy']], - [['BottleWithRedPotion']], - [['BottleWithGreenPotion']], - [['BottleWithBluePotion']], - [['BottleWithGoldBee']], - [['Bottle', 'Bottle']], - [['Bottle', 'Bottle', 'Bottle']], - [['Bottle', 'Bottle', 'Bottle', 'Bottle']], - [['Bottle', 'Bottle', 'Bottle', 'BottleWithBee']], - [['Bottle', 'Bottle', 'BottleWithBee', 'BottleWithBee']], - ]; - } +use ALttP\World; + +class ItemCollectionTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->world = World::factory(); + $this->collection = new ItemCollection; + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->collection); + unset($this->world); + } + + public function testCountWithItem() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + + $this->assertEquals(1, $this->collection->count()); + } + + public function testGlobalCountWithItem() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + + $this->assertEquals(1, count($this->collection)); + } + + public function testCountWithDifferentItems() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('OneRupee', $this->world)); + + $this->assertEquals(2, $this->collection->count()); + } + + public function testGlobalCountWithDifferentItems() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('OneRupee', $this->world)); + + $this->assertEquals(2, count($this->collection)); + } + + public function testCountWithSameItem() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L1Sword', $this->world)); + + $this->assertEquals(2, $this->collection->count()); + } + + public function testEachWithSameItem() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L1Sword', $this->world)); + + $times_run = 0; + + $this->collection->each(function ($item) use (&$times_run) { + $times_run++; + }); + + $this->assertEquals(2, $times_run); + } + + public function testMap() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L2Sword', $this->world)); + + $mapped = $this->collection->map(function ($item) { + return explode(':', $item->getName())[0]; + }); + + $this->assertEquals(['L1Sword', 'L2Sword'], $mapped); + } + + public function testMapWithSameItem() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L2Sword', $this->world)); + + $mapped = $this->collection->map(function ($item) { + return explode(':', $item->getName())[0]; + }); + + $this->assertEquals(['L1Sword', 'L1Sword', 'L2Sword'], $mapped); + } + + public function testFilter() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L2Sword', $this->world)); + $this->collection->addItem(Item::get('Map', $this->world)); + + $filtered = $this->collection->filter(function ($item) { + return $item instanceof Item\Sword; + }); + + $this->assertEquals([ + Item::get('L1Sword', $this->world), + Item::get('L2Sword', $this->world), + ], $filtered->values()); + } + + public function testFilterSameItem() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('Map', $this->world)); + + $filtered = $this->collection->filter(function ($item) { + return $item instanceof Item\Sword; + }); + + $this->assertEquals([ + Item::get('L1Sword', $this->world), + Item::get('L1Sword', $this->world), + ], $filtered->values()); + } + + public function testValues() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L2Sword', $this->world)); + $this->collection->addItem(Item::get('L3Sword', $this->world)); + + $this->assertEquals([ + Item::get('L1Sword', $this->world), + Item::get('L2Sword', $this->world), + Item::get('L3Sword', $this->world), + ], $this->collection->values()); + } + + public function testValuesSameItem() + { + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L1Sword', $this->world)); + $this->collection->addItem(Item::get('L2Sword', $this->world)); + + $this->assertEquals([ + Item::get('L1Sword', $this->world), + Item::get('L1Sword', $this->world), + Item::get('L2Sword', $this->world), + ], $this->collection->values()); + } + + /** + * @dataProvider bottlesPool + */ + public function testBottleCounting($items) + { + $this->addCollected($items); + + $this->assertTrue($this->collected->hasBottle(count($items))); + $this->assertFalse($this->collected->hasBottle(count($items) + 1)); + } + + public function bottlesPool() + { + return [ + [['Bottle']], + [['BottleWithBee']], + [['BottleWithFairy']], + [['BottleWithRedPotion']], + [['BottleWithGreenPotion']], + [['BottleWithBluePotion']], + [['BottleWithGoldBee']], + [['Bottle', 'Bottle']], + [['Bottle', 'Bottle', 'Bottle']], + [['Bottle', 'Bottle', 'Bottle', 'Bottle']], + [['Bottle', 'Bottle', 'Bottle', 'BottleWithBee']], + [['Bottle', 'Bottle', 'BottleWithBee', 'BottleWithBee']], + ]; + } } diff --git a/tests/Support/Lz2Test.php b/tests/Support/Lz2Test.php index 508a01f37..121ee7fa1 100644 --- a/tests/Support/Lz2Test.php +++ b/tests/Support/Lz2Test.php @@ -2,86 +2,104 @@ use ALttP\Support\Lz2; -class Lz2Test extends TestCase { - public function setUp() { - parent::setUp(); - $this->lz2 = new Lz2; - } - - public function tearDown() { - parent::tearDown(); - unset($this->lz2); - } - - public function testCompressDirectCopy() { - $this->assertEquals([0 << 5 | 4, 1, 3, 5, 7, 9, 255], $this->lz2->compress([1, 3, 5, 7, 9])); - } - - public function testCompressDirectCopyMultiple() { - $to_compress = range(1, 2059, 2); - $this->assertEquals(array_merge([227, 254], array_slice($to_compress, 0, 1023), [6], array_slice($to_compress, 1023), [255]), $this->lz2->compress($to_compress)); - } - - public function testCompressByteFill() { - $this->assertEquals([1 << 5 | 10, 1, 255], $this->lz2->compress([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])); - } - - public function testCompressWordFill() { - $this->assertEquals([2 << 5 | 9, 1, 2, 255], $this->lz2->compress([1, 2, 1, 2, 1, 2, 1, 2, 1, 2])); - } - - public function testCompressIncreaseFill() { - $this->assertEquals([3 << 5 | 9, 1, 255], $this->lz2->compress([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])); - } - - public function testCompressRepeat() { - $this->assertEquals([0 << 5 | 4, 1, 3, 5, 7, 9, 4 << 5 | 4, 0, 0, 255], $this->lz2->compress([1, 3, 5, 7, 9, 1, 3, 5, 7, 9])); - } - - public function testCompressLongCommand() { - $this->assertEquals([229, 1, 1, 255], $this->lz2->compress(array_fill(0, 258, 1))); - } - - public function testCompressEmpty() { - $this->expectException(Exception::class); - - $this->lz2->compress([]); - } - - public function testDecompressDirectCopy() { - $this->assertEquals([1, 3, 5, 7, 9], $this->lz2->decompress([4, 1, 3, 5, 7, 9, 255])); - } - - public function testDecompressByteFill() { - $this->assertEquals([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], $this->lz2->decompress([1 << 5 | 10, 1, 255])); - } - - public function testDecompressWordFill() { - $this->assertEquals([1, 2, 1, 2, 1, 2, 1, 2, 1, 2], $this->lz2->decompress([2 << 5 | 9, 1, 2, 255])); - } - - public function testDecompressIncreaseFill() { - $this->assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], $this->lz2->decompress([3 << 5 | 9, 1, 255])); - } - - public function testDecompressRepeat() { - $this->assertEquals([1, 3, 5, 7, 9, 1, 3, 5, 7, 9], $this->lz2->decompress([0 << 5 | 4, 1, 3, 5, 7, 9, 4 << 5 | 4, 0, 0, 255])); - } - - public function testDecompressLongCommand() { - $this->assertEquals(array_fill(0, 258, 1), $this->lz2->decompress([229, 1, 1, 255])); - } - - public function testDecompressEmpty() { - $this->expectException(Exception::class); - - $this->lz2->decompress([]); - } - - public function testDecompressBadCommand() { - $this->expectException(Exception::class); - - $this->lz2->decompress([5 << 5 | 1, 1, 1, 225]); - } - +class Lz2Test extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->lz2 = new Lz2; + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->lz2); + } + + public function testCompressDirectCopy() + { + $this->assertEquals([0 << 5 | 4, 1, 3, 5, 7, 9, 255], $this->lz2->compress([1, 3, 5, 7, 9])); + } + + public function testCompressDirectCopyMultiple() + { + $to_compress = range(1, 2059, 2); + $this->assertEquals(array_merge([227, 254], array_slice($to_compress, 0, 1023), [6], array_slice($to_compress, 1023), [255]), $this->lz2->compress($to_compress)); + } + + public function testCompressByteFill() + { + $this->assertEquals([1 << 5 | 10, 1, 255], $this->lz2->compress([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])); + } + + public function testCompressWordFill() + { + $this->assertEquals([2 << 5 | 9, 1, 2, 255], $this->lz2->compress([1, 2, 1, 2, 1, 2, 1, 2, 1, 2])); + } + + public function testCompressIncreaseFill() + { + $this->assertEquals([3 << 5 | 9, 1, 255], $this->lz2->compress([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])); + } + + public function testCompressRepeat() + { + $this->assertEquals([0 << 5 | 4, 1, 3, 5, 7, 9, 4 << 5 | 4, 0, 0, 255], $this->lz2->compress([1, 3, 5, 7, 9, 1, 3, 5, 7, 9])); + } + + public function testCompressLongCommand() + { + $this->assertEquals([229, 1, 1, 255], $this->lz2->compress(array_fill(0, 258, 1))); + } + + public function testCompressEmpty() + { + $this->expectException(Exception::class); + + $this->lz2->compress([]); + } + + public function testDecompressDirectCopy() + { + $this->assertEquals([1, 3, 5, 7, 9], $this->lz2->decompress([4, 1, 3, 5, 7, 9, 255])); + } + + public function testDecompressByteFill() + { + $this->assertEquals([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], $this->lz2->decompress([1 << 5 | 10, 1, 255])); + } + + public function testDecompressWordFill() + { + $this->assertEquals([1, 2, 1, 2, 1, 2, 1, 2, 1, 2], $this->lz2->decompress([2 << 5 | 9, 1, 2, 255])); + } + + public function testDecompressIncreaseFill() + { + $this->assertEquals([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], $this->lz2->decompress([3 << 5 | 9, 1, 255])); + } + + public function testDecompressRepeat() + { + $this->assertEquals([1, 3, 5, 7, 9, 1, 3, 5, 7, 9], $this->lz2->decompress([0 << 5 | 4, 1, 3, 5, 7, 9, 4 << 5 | 4, 0, 0, 255])); + } + + public function testDecompressLongCommand() + { + $this->assertEquals(array_fill(0, 258, 1), $this->lz2->decompress([229, 1, 1, 255])); + } + + public function testDecompressEmpty() + { + $this->expectException(Exception::class); + + $this->lz2->decompress([]); + } + + public function testDecompressBadCommand() + { + $this->expectException(Exception::class); + + $this->lz2->decompress([5 << 5 | 1, 1, 1, 225]); + } } diff --git a/tests/Support/XXTEATest.php b/tests/Support/XXTEATest.php index d1b2bff4a..3c9c2f81d 100644 --- a/tests/Support/XXTEATest.php +++ b/tests/Support/XXTEATest.php @@ -2,31 +2,36 @@ use ALttP\Support\XXTEA; -class XXTEATest extends TestCase { - public function setUp() { - parent::setUp(); - $this->xxtea = new XXTEA([2,3,6]); - } +class XXTEATest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + $this->xxtea = new XXTEA([2, 3, 6]); + } - public function tearDown() { - parent::tearDown(); - unset($this->xxtea); - } + public function tearDown(): void + { + parent::tearDown(); + unset($this->xxtea); + } - /** - * @dataProvider dataPool - */ - public function testEncryptor($data, $key) { - $xxtea = new XXTEA($key); - $encrypted = $xxtea->encrypt($data); + /** + * @dataProvider dataPool + */ + public function testEncryptor($data, $key) + { + $xxtea = new XXTEA($key); + $encrypted = $xxtea->encrypt($data); - $this->assertEquals($data, $xxtea->decrypt($encrypted)); - } + $this->assertEquals($data, $xxtea->decrypt($encrypted)); + } - public function dataPool() { - return [ - [[24, 35, 12, 43, 22, 120, 40, 128], [12, 0, 13, 240]], - [[24, 35, 12, 43, 22, 120, 40, 128], []], - ]; - } + public function dataPool() + { + return [ + [[24, 35, 12, 43, 22, 120, 40, 128], [12, 0, 13, 240]], + [[24, 35, 12, 43, 22, 120, 40, 128], []], + ]; + } } diff --git a/tests/TestCase.php b/tests/TestCase.php index 313a97168..5830e35ce 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -1,112 +1,115 @@ make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); + $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); - //$app->singleton('translator', function ($app) { - // return new class { - // public function getFromJson($name) { - // return $name; - // } - // }; - //}); + return $app; + } - return $app; - } + public function setUp(): void + { + parent::setUp(); + $this->collected = new ItemCollection; + } - public function setUp() { - parent::setUp(); - // Assume Zelda is rescued for all tests - // @TODO: rewrite all tests to actually account for this - $this->collected = new ItemCollection([Item::get('RescueZelda')]); - } + public function tearDown(): void + { + unset($this->collected); + Item::clearCache(); + Boss::clearCache(); + parent::tearDown(); + $refl = new \ReflectionObject($this); + foreach ($refl->getProperties() as $prop) { + if (!$prop->isStatic() && 0 !== strpos($prop->getDeclaringClass()->getName(), 'PHPUnit_')) { + $prop->setAccessible(true); + $prop->setValue($this, null); + } + } + } - public function tearDown() { - parent::tearDown(); - $refl = new \ReflectionObject($this); - foreach ($refl->getProperties() as $prop) { - if (!$prop->isStatic() && 0 !== strpos($prop->getDeclaringClass()->getName(), 'PHPUnit_')) { - $prop->setAccessible(true); - $prop->setValue($this, null); - } - } - } + protected function addCollected(array $items) + { + foreach ($items as $item) { + $this->collected->addItem(Item::get($item, $this->world)); + } + } - protected function addCollected(array $items) { - foreach ($items as $item) { - $this->collected->addItem(Item::get($item)); - } - } + /** + * Lets pretend all items doesn't include keys just in case it affects things + */ + protected function allItems() + { + return $this->allItemsExcept(['BigKey', 'Key', 'ShopKey']); + } - /** - * Lets pretend all items doesn't include keys just in case it affects things - */ - protected function allItems() { - return $this->allItemsExcept(['BigKey', 'Key']); - } - - protected function allItemsExcept(array $remove_items) { - $items = Item::all()->copy()->manyKeys(); - foreach (array_merge($remove_items, ['BigKey', 'Key']) as $item) { - switch ($item) { - case 'AnySword': - $items->offsetUnset('L1Sword'); - $items->offsetUnset('L1SwordAndShield'); - $items->offsetUnset('ProgressiveSword'); - $items->offsetUnset('UncleSword'); - case 'UpgradedSword': - $items->offsetUnset('UncleSword'); - $items->offsetUnset('L2Sword'); - $items->offsetUnset('MasterSword'); - $items->offsetUnset('L3Sword'); - $items->offsetUnset('L4Sword'); - break; - case 'AnyBottle': - $items->offsetUnset('BottleWithBee'); - $items->offsetUnset('BottleWithFairy'); - $items->offsetUnset('BottleWithRedPotion'); - $items->offsetUnset('BottleWithGreenPotion'); - $items->offsetUnset('BottleWithBluePotion'); - $items->offsetUnset('Bottle'); - $items->offsetUnset('BottleWithGoldBee'); - break; - case 'AnyBow': - $items->offsetUnset('Bow'); - $items->offsetUnset('BowAndArrows'); - $items->offsetUnset('BowAndSilverArrows'); - break; - case 'Flute': - $items->offsetUnset('OcarinaActive'); - $items->offsetUnset('OcarinaInactive'); - break; - case 'Gloves': - $items->offsetUnset('ProgressiveGlove'); - $items->offsetUnset('PowerGlove'); - $items->offsetUnset('TitansMitt'); - break; - default: - $items->offsetUnset($item); - break; - } - } - return $items; - } + protected function allItemsExcept(array $remove_items) + { + $items = Item::all($this->world)->copy()->manyKeys(); + foreach (array_merge($remove_items, ['BigKey', 'Key', 'ShopKey']) as $item) { + switch ($item) { + case 'AnySword': + $items->offsetUnset('L1Sword:' . $this->world->id); + $items->offsetUnset('L1SwordAndShield:' . $this->world->id); + $items->offsetUnset('ProgressiveSword:' . $this->world->id); + $items->offsetUnset('UncleSword:' . $this->world->id); + // no break + case 'UpgradedSword': + $items->offsetUnset('UncleSword:' . $this->world->id); + $items->offsetUnset('L2Sword:' . $this->world->id); + $items->offsetUnset('MasterSword:' . $this->world->id); + $items->offsetUnset('L3Sword:' . $this->world->id); + $items->offsetUnset('L4Sword:' . $this->world->id); + break; + case 'AnyBottle': + $items->offsetUnset('BottleWithBee:' . $this->world->id); + $items->offsetUnset('BottleWithFairy:' . $this->world->id); + $items->offsetUnset('BottleWithRedPotion:' . $this->world->id); + $items->offsetUnset('BottleWithGreenPotion:' . $this->world->id); + $items->offsetUnset('BottleWithBluePotion:' . $this->world->id); + $items->offsetUnset('Bottle:' . $this->world->id); + $items->offsetUnset('BottleWithGoldBee:' . $this->world->id); + break; + case 'AnyBow': + $items->offsetUnset('Bow:' . $this->world->id); + $items->offsetUnset('BowAndArrows:' . $this->world->id); + $items->offsetUnset('BowAndSilverArrows:' . $this->world->id); + $items->offsetUnset('ProgressiveBow:' . $this->world->id); + break; + case 'Flute': + $items->offsetUnset('OcarinaActive:' . $this->world->id); + $items->offsetUnset('OcarinaInactive:' . $this->world->id); + break; + case 'Gloves': + $items->offsetUnset('ProgressiveGlove:' . $this->world->id); + $items->offsetUnset('PowerGlove:' . $this->world->id); + $items->offsetUnset('TitansMitt:' . $this->world->id); + break; + default: + $items->offsetUnset($item . ':' . $this->world->id); + break; + } + } + return $items; + } } diff --git a/tests/Unit/Http/Requests/CreateRandomizedGameTest.php b/tests/Unit/Http/Requests/CreateRandomizedGameTest.php new file mode 100644 index 000000000..b5fdc1c95 --- /dev/null +++ b/tests/Unit/Http/Requests/CreateRandomizedGameTest.php @@ -0,0 +1,55 @@ +formRequest(CreateRandomizedGame::class, $post_data) + ->assertAuthorized() + ->assertValidationFailed(); + } + + /** + * @return array + */ + public function badPostData(): array + { + return [ + [['glitches' => 'bad']], + [['item_placement' => 'bad']], + [['dungeon_items' => 'bad']], + [['accessibility' => 'bad']], + [['goal' => 'bad']], + [['crystals' => ['tower' => 'bad']]], + [['crystals' => ['ganon' => 'bad']]], + [['mode' => 'bad']], + [['entrances' => 'bad']], + [['enemizer' => ['boss_shuffle' => 'bad']]], + [['enemizer' => ['enemy_shuffle' => 'bad']]], + [['hints' => 'bad']], + [['weapons' => 'bad']], + [['item' => ['pool' => 'bad']]], + [['item' => ['functionality' => 'bad']]], + [['enemizer' => ['enemy_damage' => 'bad']]], + [['enemizer' => ['enemy_health' => 'bad']]], + ]; + } +} diff --git a/tests/WorldTest.php b/tests/WorldTest.php index a6b8c2adb..c5d4ae73e 100644 --- a/tests/WorldTest.php +++ b/tests/WorldTest.php @@ -3,30 +3,25 @@ use ALttP\Item; use ALttP\World; -class WorldTest extends TestCase { - public function setUp() { - parent::setUp(); - - $this->world = World::factory('standard', 'test_rules', 'NoGlitches'); - } - - public function tearDown() { - parent::tearDown(); - unset($this->world); - } - - public function testGetRegionDoesntExist() { - $this->assertNull($this->world->getRegion("This Region Doesn't Exist")); - } - - public function testSetVanillaFillsAllLocations() { - $this->world->setVanilla(); - - $this->assertEquals(0, $this->world->getEmptyLocations()->count()); - } - - public function testGetPlaythroughNormalGame() { - $this->world->setVanilla(); - $this->assertArraySubset(['longest_item_chain' => 34, 'regions_visited' => 50], $this->world->getPlaythrough()); - } +class WorldTest extends TestCase +{ + public function setUp(): void + { + parent::setUp(); + + $this->world = World::factory('standard', ['difficulty' => 'test_rules', 'logic' => 'NoGlitches']); + } + + public function tearDown(): void + { + parent::tearDown(); + unset($this->world); + } + + public function testGetRegionDoesntExist() + { + $this->expectException(\ErrorException::class); + + $this->world->getRegion("This Region Doesn't Exist"); + } } diff --git a/tests/js/app.test.js b/tests/js/app.test.js new file mode 100644 index 000000000..7f4672a1a --- /dev/null +++ b/tests/js/app.test.js @@ -0,0 +1,27 @@ +import * as Sentry from "@sentry/browser"; + +const { it, expect, document } = global; +document.head.innerHTML = ''; +document.body.innerHTML = '
'; + +console.error = jest.fn(() => {}); + +jest.mock("@sentry/browser", () => { + return { + init: jest.fn(() => false), + Integrations: { + Vue: jest.fn(() => false) + } + }; +}); +process.env.MIX_SENTRY_DSN_PUBLIC = "testing"; + +require("../../resources/js/app"); + +it("loads Vue", () => { + expect(window).toHaveProperty("Vue"); +}); + +it("mounts Sentry", () => { + expect(Sentry.init).toHaveBeenCalled(); +}); diff --git a/tests/js/bootstrap.test.js b/tests/js/bootstrap.test.js new file mode 100644 index 000000000..c97848a34 --- /dev/null +++ b/tests/js/bootstrap.test.js @@ -0,0 +1,16 @@ +const { it, expect, document } = global; +document.head.innerHTML = ''; + +require("../../resources/js/bootstrap"); + +it("loads Popper", () => { + expect(window).toHaveProperty("Popper"); +}); + +it("loads jQuery", () => { + expect(window).toHaveProperty("$"); +}); + +it("loads Axios", () => { + expect(window).toHaveProperty("axios"); +}); diff --git a/tests/js/components/VTRomLoader.test.js b/tests/js/components/VTRomLoader.test.js new file mode 100644 index 000000000..b59643b7f --- /dev/null +++ b/tests/js/components/VTRomLoader.test.js @@ -0,0 +1,45 @@ +import { shallowMount } from "@vue/test-utils"; +import VTRomLoader from "../../../resources/js/components/VTRomLoader"; +import axios from "axios"; +import MockAdapter from "axios-mock-adapter"; +const { it, expect } = global; + +it("is a Vue instance", () => { + var mock = new MockAdapter(axios); + mock.onGet(`/base_rom/settings`).reply(200, { + msg: "hello" + }); + + const wrapper = shallowMount(VTRomLoader, { + mocks: { + $t: key => key + } + }); + + expect(wrapper.isVueInstance()).toBeTruthy(); +}); + +it("sets settings_loaded to true when a current rom hash is passed in", () => { + const wrapper = shallowMount(VTRomLoader, { + propsData: { + currentRomHash: "testing" + }, + mocks: { + $t: key => key + } + }); + + expect(wrapper.vm.settings_loaded).toBeTruthy(); +}); + +it("sets loading to false when no blob is called", () => { + const wrapper = shallowMount(VTRomLoader, { + mocks: { + $t: key => key + } + }); + + wrapper.vm.noBlob(); + + expect(wrapper.vm.loading).toBeFalsy(); +}); diff --git a/tests/samples/testrom.sfc b/tests/samples/testrom.sfc new file mode 100644 index 000000000..e0d84f457 Binary files /dev/null and b/tests/samples/testrom.sfc differ diff --git a/webpack.mix.js b/webpack.mix.js index 54dd1fb8f..977035f6f 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -1,4 +1,4 @@ -const { mix } = require('laravel-mix'); +const mix = require('laravel-mix'); /* const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; @@ -22,11 +22,21 @@ mix.webpackConfig({ mix.options({ hmrOptions: { port: '3031' - } + }, }); -mix.js('resources/assets/js/app.js', 'public/js').sourceMaps(); -mix.sass('resources/assets/sass/app.scss', 'public/css'); +mix.webpackConfig({ + devServer: { + headers: { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS", + "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization, X-CSRF-TOKEN", + }, + }, +}); + +mix.js('resources/js/app.js', 'public/js').sourceMaps(); +mix.sass('resources/sass/app.scss', 'public/css'); mix.copy('node_modules/open-iconic/svg', 'public/i/svg'); if (mix.inProduction()) { mix.version(['public/css/app.css', 'public/js/app.js', 'public/js/base2current.json']);